@goodandready/dsh-russian-lang 0.1.30 → 0.1.32
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 +22 -11
- package/lib/client.js +354 -247
- package/lib/pure.js +337 -0
- package/package.json +5 -4
package/lib/client.js
CHANGED
|
@@ -17,8 +17,347 @@ window.__ModuleLoader__.load({
|
|
|
17
17
|
var React = null
|
|
18
18
|
try { React = require('react') } catch (e) { /* карточка настроек необязательна */ }
|
|
19
19
|
|
|
20
|
+
// dsh-russian-lang — чистая половина: всё, что не трогает DOM, cordis и сеть.
|
|
21
|
+
//
|
|
22
|
+
// ФАЙЛ ПРАВИТСЯ РУКАМИ. build.py читает его целиком, снимает `export ` и
|
|
23
|
+
// вставляет тело в бандл (lib/client.js) на месте маркера. Тесты импортируют
|
|
24
|
+
// этот же файл напрямую.
|
|
25
|
+
//
|
|
26
|
+
// Смысл разделения — в том, что тесты и бандл едят один исходник. Раньше
|
|
27
|
+
// 1069 строк JavaScript лежали внутри питоновского литерала в build.py,
|
|
28
|
+
// импортировать оттуда было нечего, и тесты копировали функции к себе. Копии
|
|
29
|
+
// расходились с оригиналом молча: правка регулярки в build.py тест не ронял
|
|
30
|
+
// (#133). Всё, что сюда переехало, проверяется на том коде, который уезжает
|
|
31
|
+
// пользователю.
|
|
32
|
+
//
|
|
33
|
+
// Правило для новых функций: если функция не обращается к document, ctx,
|
|
34
|
+
// runtime или сети — её место здесь, а не в шаблоне.
|
|
35
|
+
|
|
36
|
+
// ---------------------------------------------------------------- форматы
|
|
37
|
+
|
|
38
|
+
const numberFormat = new Intl.NumberFormat('ru-RU')
|
|
39
|
+
const relativeTimeFormat = new Intl.RelativeTimeFormat('ru-RU', { numeric: 'auto' })
|
|
40
|
+
const currencyFormats = new Map()
|
|
41
|
+
|
|
42
|
+
const getCurrencyFormat = (cur) => {
|
|
43
|
+
const c = (cur || 'RUB').toUpperCase()
|
|
44
|
+
if (!currencyFormats.has(c)) {
|
|
45
|
+
try {
|
|
46
|
+
currencyFormats.set(c, new Intl.NumberFormat('ru-RU', { style: 'currency', currency: c }))
|
|
47
|
+
} catch (e) {
|
|
48
|
+
currencyFormats.set(c, numberFormat)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return currencyFormats.get(c)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const formatNumber = (val) => {
|
|
55
|
+
const n = typeof val === 'number' ? val : Number(val)
|
|
56
|
+
return isNaN(n) ? String(val) : numberFormat.format(n)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const formatCurrency = (val, cur) => {
|
|
60
|
+
const n = typeof val === 'number' ? val : Number(val)
|
|
61
|
+
if (isNaN(n)) return String(val)
|
|
62
|
+
return getCurrencyFormat(cur).format(n)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const formatRelativeTime = (val, unit) => {
|
|
66
|
+
if (typeof val === 'number' && typeof unit === 'string') {
|
|
67
|
+
return relativeTimeFormat.format(val, unit)
|
|
68
|
+
}
|
|
69
|
+
const ts = val instanceof Date ? val.getTime() : (typeof val === 'number' ? (val < 1e12 ? val * 1000 : val) : Number(val))
|
|
70
|
+
if (isNaN(ts)) return String(val)
|
|
71
|
+
const diffSec = Math.round((ts - Date.now()) / 1000)
|
|
72
|
+
const absSec = Math.abs(diffSec)
|
|
73
|
+
if (absSec < 45) return 'только что'
|
|
74
|
+
if (absSec < 3600) return relativeTimeFormat.format(Math.round(diffSec / 60), 'minute')
|
|
75
|
+
if (absSec < 86400) return relativeTimeFormat.format(Math.round(diffSec / 3600), 'hour')
|
|
76
|
+
if (absSec < 2592000) return relativeTimeFormat.format(Math.round(diffSec / 86400), 'day')
|
|
77
|
+
if (absSec < 31536000) return relativeTimeFormat.format(Math.round(diffSec / 2592000), 'month')
|
|
78
|
+
return relativeTimeFormat.format(Math.round(diffSec / 31536000), 'year')
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// -------------------------------------------------------------- склонения
|
|
82
|
+
|
|
83
|
+
const INFLECT_CUSTOM = {
|
|
84
|
+
'пользователь': { gen: 'пользователя', dat: 'пользователю', acc: 'пользователя', ins: 'пользователем', pre: 'пользователе' },
|
|
85
|
+
'агент': { gen: 'агента', dat: 'агенту', acc: 'агента', ins: 'агентом', pre: 'агенте' },
|
|
86
|
+
'субагент': { gen: 'субагента', dat: 'субагенту', acc: 'субагента', ins: 'субагентом', pre: 'субагенте' },
|
|
87
|
+
'модель': { gen: 'модели', dat: 'модели', acc: 'модель', ins: 'моделью', pre: 'модели' },
|
|
88
|
+
'промпт': { gen: 'промпта', dat: 'промпту', acc: 'промпт', ins: 'промптом', pre: 'промпте' },
|
|
89
|
+
'инструмент': { gen: 'инструмента', dat: 'инструменту', acc: 'инструмент', ins: 'инструментом', pre: 'инструменте' },
|
|
90
|
+
'сессия': { gen: 'сессии', dat: 'сессии', acc: 'сессию', ins: 'сессией', pre: 'сессии' },
|
|
91
|
+
'ветка': { gen: 'ветки', dat: 'ветке', acc: 'ветку', ins: 'веткой', pre: 'ветке' },
|
|
92
|
+
'файл': { gen: 'файла', dat: 'файлу', acc: 'файл', ins: 'файлом', pre: 'файле' },
|
|
93
|
+
'папка': { gen: 'папки', dat: 'папке', acc: 'папку', ins: 'папкой', pre: 'папке' }
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const keepCase = (src, out) => (src[0] === src[0].toUpperCase() ? out[0].toUpperCase() + out.slice(1) : out)
|
|
97
|
+
|
|
98
|
+
const inflectWord = (word, cName) => {
|
|
99
|
+
if (!word || typeof word !== 'string') return word
|
|
100
|
+
const lower = word.toLowerCase()
|
|
101
|
+
if (INFLECT_CUSTOM[lower] && INFLECT_CUSTOM[lower][cName]) {
|
|
102
|
+
return keepCase(word, INFLECT_CUSTOM[lower][cName])
|
|
103
|
+
}
|
|
104
|
+
if (/[a-zA-Z0-9_-]/.test(word) || /^[А-ЯЁ]{2,}$/.test(word)) return word
|
|
105
|
+
if (/[оеиую]$/i.test(word) && !/(ко|ло|но|то|во|ро|до|по|со|мо|го)$/i.test(word)) return word
|
|
106
|
+
|
|
107
|
+
const w = lower
|
|
108
|
+
const endings = [
|
|
109
|
+
['ия', 2, (s) => ({ gen: s + 'ии', dat: s + 'ии', acc: s + 'ию', ins: s + 'ией', pre: s + 'ии' })],
|
|
110
|
+
['а', 1, (s) => {
|
|
111
|
+
const genEnd = /[гкхжшчщ]/.test(s.slice(-1)) ? 'и' : 'ы'
|
|
112
|
+
return { gen: s + genEnd, dat: s + 'е', acc: s + 'у', ins: s + 'ой', pre: s + 'е' }
|
|
113
|
+
}],
|
|
114
|
+
['я', 1, (s) => ({ gen: s + 'и', dat: s + 'е', acc: s + 'ю', ins: s + 'ей', pre: s + 'е' })],
|
|
115
|
+
['ь', 1, (s) => ({ gen: s + 'и', dat: s + 'и', acc: s + 'ь', ins: s + 'ью', pre: s + 'и' })],
|
|
116
|
+
['й', 1, (s) => ({ gen: s + 'я', dat: s + 'ю', acc: s + 'я', ins: s + 'ем', pre: s + 'е' })]
|
|
117
|
+
]
|
|
118
|
+
for (const [suffix, cut, build] of endings) {
|
|
119
|
+
if (w.endsWith(suffix)) return keepCase(word, build(w.slice(0, -cut))[cName] || w)
|
|
120
|
+
}
|
|
121
|
+
if (/[бвгджзклмнпрстфхцчшщ]$/.test(w)) {
|
|
122
|
+
const map = { gen: w + 'а', dat: w + 'у', acc: w, ins: w + 'ом', pre: w + 'е' }
|
|
123
|
+
return keepCase(word, map[cName] || w)
|
|
124
|
+
}
|
|
125
|
+
return word
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const INFLECT_CASES = new Set(['gen', 'dat', 'acc', 'ins', 'pre'])
|
|
129
|
+
|
|
130
|
+
const inflect = (phrase, cName) => {
|
|
131
|
+
if (!phrase || typeof phrase !== 'string') return phrase
|
|
132
|
+
if (!INFLECT_CASES.has(cName)) return phrase
|
|
133
|
+
return phrase.split(' ').map((w) => inflectWord(w, cName)).join(' ')
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// ------------------------------------------------- подстановка и плюрализация
|
|
137
|
+
|
|
138
|
+
const fill = (template, params) => String(template).replace(/\{(\w+)(?::(\w+))?\}/g, (match, name, spec) => {
|
|
139
|
+
if (!(name in params)) return match
|
|
140
|
+
const val = params[name]
|
|
141
|
+
if (spec === 'number') return formatNumber(val)
|
|
142
|
+
if (spec === 'reltime') return formatRelativeTime(val)
|
|
143
|
+
if (spec === 'currency') return formatCurrency(val, params.currency || 'RUB')
|
|
144
|
+
if (INFLECT_CASES.has(spec)) return inflect(String(val), spec)
|
|
145
|
+
return String(val)
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
const pluralRules = new Intl.PluralRules('ru-RU')
|
|
149
|
+
|
|
150
|
+
/** Русская форма числительного: one | few | many | other. */
|
|
151
|
+
const pluralForm = (n) => pluralRules.select(n)
|
|
152
|
+
|
|
153
|
+
// ------------------------------------------------------ поисковая морфология
|
|
154
|
+
|
|
155
|
+
const stemRussian = (word) => {
|
|
156
|
+
if (!word || typeof word !== 'string') return ''
|
|
157
|
+
let w = word.toLowerCase().trim()
|
|
158
|
+
if (w.length < 4) return w
|
|
159
|
+
w = w.replace(/(?:вшись|вши|ившись|ивши|ывшись|ывши|ив|ыв)$/, '')
|
|
160
|
+
w = w.replace(/(?:ся|сь)$/, '')
|
|
161
|
+
w = w.replace(/(?:ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|ему|ому|их|ых|ую|юю|ая|яя|ою|ею)$/, '')
|
|
162
|
+
w = w.replace(/(?:ила|ыла|ена|ейте|уйте|ите|или|ыли|ей|уй|ил|ыл|им|ым|ен|ило|ыло|ено|ят|ует|уют|ит|ыт|ены|ить|ыть|ишь|ую|ю)$/, '')
|
|
163
|
+
w = w.replace(/(?:ами|ями|иями|ией|иям|ием|ах|ях|иях|ев|ов|ие|ье|ей|ой|ий|ям|ем|ам|ом|а|е|и|о|у|ы|ь|ю|я)$/, '')
|
|
164
|
+
return w.length >= 2 ? w : word.toLowerCase()
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
const EN_RU_KEYS = {
|
|
168
|
+
'q': 'й', 'w': 'ц', 'e': 'у', 'r': 'к', 't': 'е', 'y': 'н', 'u': 'г', 'i': 'ш', 'o': 'щ', 'p': 'з', '[': 'х', ']': 'ъ',
|
|
169
|
+
'a': 'ф', 's': 'ы', 'd': 'в', 'f': 'а', 'g': 'п', 'h': 'р', 'j': 'о', 'k': 'л', 'l': 'д', ';': 'ж', "'": 'э',
|
|
170
|
+
'z': 'я', 'x': 'ч', 'c': 'с', 'v': 'м', 'b': 'и', 'n': 'т', 'm': 'ь', ',': 'б', '.': 'ю'
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const translitEnToRu = (str) => str.toLowerCase().split('').map((c) => EN_RU_KEYS[c] || c).join('')
|
|
174
|
+
|
|
175
|
+
const fuzzyMatchRu = (query, target) => {
|
|
176
|
+
if (!query || !target) return 0
|
|
177
|
+
const q = query.toLowerCase().trim()
|
|
178
|
+
const t = target.toLowerCase().trim()
|
|
179
|
+
if (t === q) return 100
|
|
180
|
+
if (t.includes(q)) return 90
|
|
181
|
+
if (t.includes(translitEnToRu(q))) return 85
|
|
182
|
+
const qStems = q.split(/\s+/).map(stemRussian).filter(Boolean)
|
|
183
|
+
const tStems = t.split(/\s+/).map(stemRussian).filter(Boolean)
|
|
184
|
+
let matched = 0
|
|
185
|
+
for (const qs of qStems) {
|
|
186
|
+
if (tStems.some((ts) => ts.startsWith(qs) || qs.startsWith(ts))) matched++
|
|
187
|
+
}
|
|
188
|
+
if (matched === qStems.length && qStems.length > 0) return 80
|
|
189
|
+
if (matched > 0) return 50
|
|
190
|
+
return 0
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// ------------------------------------------------------------- ошибки
|
|
194
|
+
|
|
195
|
+
const ERROR_MAP = {
|
|
196
|
+
ENOENT: { title: 'Файл не найден', message: 'Указанный файл или директория не существуют', hint: 'Проверьте правильность указанного пути к файлу.' },
|
|
197
|
+
EACCES: { title: 'Отказано в доступе', message: 'Недостаточно прав для чтения или записи', hint: 'Проверьте права доступа к файлу или директории (chmod/chown).' },
|
|
198
|
+
EPERM: { title: 'Операция запрещена', message: 'Недостаточно системных привилегий', hint: 'Запустите процесс с соответствующими правами.' },
|
|
199
|
+
ECONNREFUSED: { title: 'Соединение отклонено', message: 'Целевой сервер или сервис не отвечает', hint: 'Убедитесь, что локальный или удаленный сервис запущен и слушает порт.' },
|
|
200
|
+
ETIMEDOUT: { title: 'Таймаут соединения', message: 'Превышено время ожидания ответа', hint: 'Проверьте стабильность сети или увеличьте лимит ожидания.' },
|
|
201
|
+
ENOTFOUND: { title: 'Хост не найден', message: 'Не удалось разрешить сетевой адрес', hint: 'Проверьте правильность URL или настройки DNS.' },
|
|
202
|
+
EADDRINUSE: { title: 'Порт уже занят', message: 'Сетевой порт используется другим процессом', hint: 'Остановите конфликтующий процесс или выберите другой порт.' },
|
|
203
|
+
401: { title: 'Требуется авторизация', message: 'API-ключ или токен отсутствуют или недействительны', hint: 'Проверьте настройки учетных данных и актуальность токена.' },
|
|
204
|
+
403: { title: 'Доступ запрещен', message: 'Недостаточно прав для выполнения операции', hint: 'Проверьте область действия токена или права роли.' },
|
|
205
|
+
404: { title: 'Ресурс не найден', message: 'Запрошенный адрес или объект не существует', hint: 'Проверьте правильность пути или идентификатора ресурса.' },
|
|
206
|
+
429: { title: 'Превышен лимит запросов', message: 'Слишком много запросов (Rate Limit)', hint: 'Подождите несколько минут перед повторным запросом.' },
|
|
207
|
+
500: { title: 'Внутренняя ошибка сервера', message: 'На стороне сервера произошел сбой', hint: 'Попробуйте повторить запрос позже или проверьте серверные логи.' },
|
|
208
|
+
502: { title: 'Ошибочный шлюз (Bad Gateway)', message: 'Промежуточный прокси не получил корректный ответ', hint: 'Проверьте работу нижележащей службы или upstream-сервера.' },
|
|
209
|
+
503: { title: 'Служба временно недоступна', message: 'Сервер перегружен или находится на обслуживании', hint: 'Попробуйте повторить операцию через некоторое время.' }
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
const fromMap = (key, rawMsg) => ({
|
|
213
|
+
code: String(key), title: ERROR_MAP[key].title, message: ERROR_MAP[key].message, hint: ERROR_MAP[key].hint, raw: rawMsg
|
|
214
|
+
})
|
|
215
|
+
|
|
216
|
+
const humanizeError = (err) => {
|
|
217
|
+
if (!err) return null
|
|
218
|
+
const rawMsg = typeof err === 'string' ? err : (err.message || String(err))
|
|
219
|
+
const code = err.code || (rawMsg.match(/\b(E[A-Z]{2,20})\b/) || [])[1]
|
|
220
|
+
const status = err.status || err.statusCode || (rawMsg.match(/\b([45]\d{2})\b/) || [])[1]
|
|
221
|
+
const lookupKey = code || status
|
|
222
|
+
if (lookupKey && ERROR_MAP[lookupKey]) return fromMap(lookupKey, rawMsg)
|
|
223
|
+
if (/rate limit|too many requests/i.test(rawMsg)) return fromMap(429, rawMsg)
|
|
224
|
+
if (/unauthorized|invalid token|invalid api key/i.test(rawMsg)) return fromMap(401, rawMsg)
|
|
225
|
+
return { code: 'UNKNOWN', title: 'Ошибка операции', message: rawMsg, hint: 'Проверьте параметры операции и логи.', raw: rawMsg }
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// -------------------------------------------------------- отчёт об ошибке
|
|
229
|
+
|
|
230
|
+
/** Версию передаёт вызывающий: в бандл её подставляет build.py из package.json,
|
|
231
|
+
* чтобы строка не устаревала руками (в 0.1.31 здесь стояло «0.1.29»). */
|
|
232
|
+
const makeIssueUrl = (opts = {}, version = '') => {
|
|
233
|
+
const repo = 'GooDAnDReaDY/dsh-russian-lang'
|
|
234
|
+
const title = opts.title || (opts.plugin
|
|
235
|
+
? `[Перевод] Запрос локализации для плагина ${opts.plugin}`
|
|
236
|
+
: '[Ошибка перевода] Неточный перевод фразы')
|
|
237
|
+
const bodyLines = [
|
|
238
|
+
'### Описание проблемы',
|
|
239
|
+
opts.description || (opts.plugin
|
|
240
|
+
? `Просьба добавить русскую локализацию для плагина \`${opts.plugin}\`.`
|
|
241
|
+
: 'Обнаружена неточность в переводе интерфейса.'),
|
|
242
|
+
'',
|
|
243
|
+
'### Технический контекст',
|
|
244
|
+
opts.ns ? `- **Namespace**: \`${opts.ns}\`` : null,
|
|
245
|
+
opts.key ? `- **Ключ**: \`${opts.key}\`` : null,
|
|
246
|
+
opts.en ? `- **Оригинал (EN)**: ${opts.en}` : null,
|
|
247
|
+
opts.ru ? `- **Текущий перевод (RU)**: ${opts.ru}` : null,
|
|
248
|
+
opts.plugin ? `- **Плагин**: \`${opts.plugin}\`` : null,
|
|
249
|
+
version ? `- **Версия dsh-russian-lang**: \`${version}\`` : null,
|
|
250
|
+
typeof navigator !== 'undefined' ? `- **User Agent**: \`${navigator.userAgent}\`` : null,
|
|
251
|
+
'',
|
|
252
|
+
'### Предлагаемый вариант перевода',
|
|
253
|
+
opts.proposal || '_Опишите ваш вариант перевода..._'
|
|
254
|
+
].filter(Boolean)
|
|
255
|
+
const params = new URLSearchParams()
|
|
256
|
+
params.set('title', title)
|
|
257
|
+
params.set('body', bodyLines.join('\n'))
|
|
258
|
+
return `https://github.com/${repo}/issues/new?` + params.toString()
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/** Словари приходят параметром — в бандле это RU, в тесте фикстура. */
|
|
262
|
+
const makePluginLocalizationStatus = (dicts) => (ns) => {
|
|
263
|
+
const none = { status: 'none', count: 0, label: 'RU отсутствует' }
|
|
264
|
+
if (!ns) return none
|
|
265
|
+
const count = Object.keys((dicts && dicts[ns]) || {}).length
|
|
266
|
+
return count > 0 ? { status: 'full', count, label: `RU: ${count} строк` } : none
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// ---------------------------------------------------------- типографика
|
|
270
|
+
|
|
271
|
+
const typoQuotes = (text) => text
|
|
272
|
+
.replace(/"([^"\n]{1,200})"/g, '«$1»')
|
|
273
|
+
.replace(/[“„]([^“”\n]{1,200})[”"]/g, '«$1»')
|
|
274
|
+
.replace(/[『「]([^』」\n]{1,200})[』」]/g, '«$1»')
|
|
275
|
+
|
|
276
|
+
const typoDash = (text) => text
|
|
277
|
+
.replace(/(^|[\s(\[«])--(?=\s|$)/g, '$1—')
|
|
278
|
+
.replace(/(^|[\s(\[«])-(?=\s)/g, '$1—')
|
|
279
|
+
|
|
280
|
+
const typoPunct = (text) => text.replace(/\s+([,.:;!?])(?=\s|$)/g, '$1')
|
|
281
|
+
|
|
282
|
+
const TYPO_SHORT = new Set(['в', 'с', 'к', 'о', 'у', 'а', 'и', 'но', 'не', 'ни', 'на', 'по', 'до', 'из', 'за', 'от', 'об'])
|
|
283
|
+
|
|
284
|
+
const typoNbsp = (text) => text.replace(/(^|[\s(\[«])([а-яё]{1,2})(\s+)/g, (match, lead, word) => (
|
|
285
|
+
TYPO_SHORT.has(word) ? lead + word + ' ' : match
|
|
286
|
+
))
|
|
287
|
+
|
|
288
|
+
// \b здесь не годится: он определён через \w = [A-Za-z0-9_], кириллица в \w не
|
|
289
|
+
// входит, поэтому границы слова перед «в» в «все» просто нет и ни одна якорная
|
|
290
|
+
// пара не срабатывала — вся ё-замена была мёртвым кодом (#132). Границу задаём
|
|
291
|
+
// явным lookaround по кириллице.
|
|
292
|
+
const YO_EDGE_L = '(?<![а-яёА-ЯЁ])'
|
|
293
|
+
const YO_EDGE_R = '(?![а-яёА-ЯЁ])'
|
|
294
|
+
|
|
295
|
+
/** Восстанавливает регистр совпадения: «ЕЩЕ» -> «ЕЩЁ», «Еще» -> «Ещё». */
|
|
296
|
+
const yoCase = (src, repl) => {
|
|
297
|
+
if (src === src.toUpperCase() && src !== src.toLowerCase()) return repl.toUpperCase()
|
|
298
|
+
if (src[0] === src[0].toUpperCase()) return repl[0].toUpperCase() + repl.slice(1)
|
|
299
|
+
return repl
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/** pairs — [[«еще», «ещё»], ...] из build.py (ручные + корпусные, за вычетом
|
|
303
|
+
* омографов). Регистр разбирает yoCase, поэтому пара нужна одна на слово. */
|
|
304
|
+
const makeTypoYo = (pairs) => {
|
|
305
|
+
const compiled = pairs.map((p) => [new RegExp(YO_EDGE_L + p[0] + YO_EDGE_R, 'gi'), p[1]])
|
|
306
|
+
return (text) => {
|
|
307
|
+
for (const [re, repl] of compiled) text = text.replace(re, (match) => yoCase(match, repl))
|
|
308
|
+
return text
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// ------------------------------------------------------- фикс раскладки
|
|
313
|
+
|
|
314
|
+
// Раскладочная карта шире поисковой: у конвертера есть «/» (слеш команды) и
|
|
315
|
+
// «`» (ё), поисковой транслитерации они не нужны.
|
|
316
|
+
const LAYOUT_LAT_TO_CYR = { ...EN_RU_KEYS, '/': '.', '`': 'ё' }
|
|
317
|
+
|
|
318
|
+
const LAYOUT_CYR_TO_LAT = (() => {
|
|
319
|
+
const out = {}
|
|
320
|
+
for (const k in LAYOUT_LAT_TO_CYR) out[LAYOUT_LAT_TO_CYR[k]] = k
|
|
321
|
+
return out
|
|
322
|
+
})()
|
|
323
|
+
|
|
324
|
+
const translit = (word, map) => {
|
|
325
|
+
let out = ''
|
|
326
|
+
for (const ch of word.toLowerCase()) out += map[ch] !== undefined ? map[ch] : ch
|
|
327
|
+
return out
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/** freq — частотный корпус, localDict — выученные за сессию слова (#67).
|
|
331
|
+
* Оба приходят снаружи: в бандле это встроенный список и Set в памяти,
|
|
332
|
+
* в тесте — фикстуры. */
|
|
333
|
+
const makeLayout = (freq, localDict = new Set()) => {
|
|
334
|
+
const ruWordFraction = (text) => {
|
|
335
|
+
const words = text.toLowerCase().split(/[^а-яё]+/).filter(Boolean)
|
|
336
|
+
if (!words.length) return 0
|
|
337
|
+
return words.filter((w) => freq.has(w) || localDict.has(w)).length / words.length
|
|
338
|
+
}
|
|
339
|
+
const candidate = (value, direction) => {
|
|
340
|
+
if (direction === 'lat2cyr') {
|
|
341
|
+
const converted = translit(value, LAYOUT_LAT_TO_CYR)
|
|
342
|
+
if (!/[а-яё]{2}/.test(converted)) return null
|
|
343
|
+
if (ruWordFraction(converted) < 0.7) return null
|
|
344
|
+
return { converted }
|
|
345
|
+
}
|
|
346
|
+
// cyr2lat — только для команды в инпуте (/...)
|
|
347
|
+
const converted = translit(value, LAYOUT_CYR_TO_LAT)
|
|
348
|
+
return converted.startsWith('/') ? { converted } : null
|
|
349
|
+
}
|
|
350
|
+
const learnWords = (text) => {
|
|
351
|
+
for (const w of text.toLowerCase().split(/[^а-яё]+/).filter(Boolean)) {
|
|
352
|
+
if (w.length >= 3) localDict.add(w)
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
return { ruWordFraction, candidate, learnWords, localDict }
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
|
|
20
359
|
/** namespace -> { ключ: перевод } */
|
|
21
|
-
const RU = {"agentTeams":{"action.openActivityPanel":"Открыть панель активности","activity.badgeAria":"Активность и история команд агентов, {count} записей команд","activity.collapse":"Свернуть панель активности","activity.dockRight":"Закрепить справа","activity.empty":"Нет активности команды","activity.float":"Переключиться на плавающую панель","activity.panelAria":"Панель активности команд агентов","activity.panelButton":"Панель активности","activity.title":"Активность команд агентов","archive.discardedLabel":"План отменен · Архивная история","archive.label":"Завершено · Архивная история","assignment.discarded":"План не выполнен","assignment.empty":"Нет задач","assignment.label":"Капитан назначен","assignment.staged":"Запланированная задача","captain.name":"Капитан","captain.role":"Разделить · Делегировать · Синтезировать","captain.state.awaitingFeedback":"Ожидание отзыва","captain.state.collected":"Все полученные отчеты","captain.state.discarded":"Отменено","captain.state.settled":"Оплачено","captain.state.staged":"Ожидает одобрения","captain.state.takeover":"Работаю над {tasks}","captain.state.waiting":"Ожидание отчетов","captain.state.working":"{count} активных","captain.summary":"Назначено {tasks} задач {members} участникам","captain.summary.awaitingFeedback":"Черновой вариант сохранен; ожидаем ваших указаний по доработке в чате","captain.summary.discarded":"План отменён: {members} участников не созданы и {tasks} задачи не выполнены","captain.summary.staged":"Запланировано {tasks} задач и {members} участников; ожидают утверждения","captain.summary.withTakeover":"Назначено {tasks} участникам · Капитан владеет {captainTasks}","card.memberCount":"{count} участников","delegation.aria":"Карта делегирования капитана","dependency.aria":"Цепочка зависимостей задач","dependency.hint.chain":"Наведите для подсветки зависимостей · Нажмите, чтобы закрепить","dependency.hint.parallel":"Нет зависимостей · Нажмите для подробностей","dependency.hint.pinned":"{taskId} закреплена · Esc для сброса","dependency.parallel":"Параллельные задачи","dependency.title":"Зависимости задач","format.listSeparator":",","member.model":"{model}","member.state.delivered":"Доставлено","member.state.failed":"Имеются сбои","member.state.left":"Левая команда","member.state.notCreated":"Не создано","member.state.pending":"Ожидание","member.state.removed":"Удалено","member.state.staged":"Не создан","member.state.stopped":"Остановлено","member.state.unassigned":"Ожидание назначения","member.state.waiting":"Ожидание","member.state.working":"Работает","member.status.delivered":"Задачи выполнены","member.status.discarded":"План отклонён; участник не был создан","member.status.executing":"Работа над {taskId}","member.status.executingModel":"Работа над {taskId} · {model}","member.status.idle":"Готовы продолжить","member.status.settled":"Вся назначенная работа выполнена","member.status.staged":"Будет создан после одобрения","member.status.stopped":"Команда остановлена; требуется явное возобновление","member.status.unknown":"Статус неизвестен","member.status.waitingAssignment":"Ожидание назначения работы от капитана","member.status.waitingOn":"Ожидание {taskId} · {assignee}","member.status.waitingPrerequisite":"Ожидание выполнения предварительных условий","member.status.working":"Работа над назначенными задачами","members.collapse":"Свернуть","members.empty":"Пока нет участников; ожидаем, пока капитан соберёт команду","members.expand":"Развернуть","members.toggle":"Участники {count}","plan.addTask":"Добавить задачу","plan.adding":"Добавление…","plan.approve":"Одобрить и запустить","plan.approveConfirm":"Подтвердить запуск","plan.approveConfirmTitle":"Подтвердить запуск команды","plan.approveHint":"Одобрение создаёт {members} участников и планирует {tasks} задачи.","plan.approveTitle":"План готов?","plan.approveWarning":"Маршруты участников и зависимости нельзя редактировать здесь после запуска.","plan.approving":"Создание участников…","plan.badge":"Ожидание подтверждения","plan.cancel":"Отмена","plan.continue":"Вернуться в чат и исправить","plan.dependencies.count":"{count} зависимостей","plan.dependencies.none":"Нет зависимостей","plan.description":"Участники не были созданы, и задачи не были назначены. Отредактируйте черновик здесь или вернитесь в чат и сообщите Капитану, что нужно изменить.","plan.discard":"Отменить этот план","plan.discardConfirm":"Отменить план","plan.discardConfirmTitle":"Отменить этот план?","plan.discardWarning":"План будет завершён и заархивирован. Участники не были созданы, и задачи выполняться не будут.","plan.discarding":"Отмена…","plan.failed":"Операция не удалась: {message}","plan.feedbackHint":"Капитан спросит в чате. После вашего ответа он пересмотрит этот черновик и снова будет ждать одобрения.","plan.feedbackTitle":"Ожидание ваших указаний по исправлению","plan.flow.aria":"Процесс запуска команды","plan.flow.review":"Просмотреть план","plan.flow.run":"Начать работу","plan.flow.spawn":"Создать участников","plan.member.model":"Модель","plan.member.prompt":"Роль подсказки","plan.member.provider":"Провайдер","plan.member.reasoning":"Усилие на рассуждение","plan.member.reasoningHint":"Оставьте пустым для значения по умолчанию; принимает low, medium, high, xhigh и другие.","plan.member.role":"Роль","plan.member.roleFallback":"Роль не установлена","plan.members.count":"{count} участников","plan.members.empty":"Пока нет запланированных участников","plan.members.title":"Участники и маршруты моделей","plan.model.back":"Назад","plan.model.choose":"Выберите модель","plan.model.currentUnavailable":"{provider}/{model} (нет в текущем каталоге)","plan.model.defaultReasoning":"Усилия по умолчанию при рассуждении","plan.model.empty":"Нет доступных моделей","plan.model.loading":"Загрузка моделей…","plan.model.modelDefault":"Модель по умолчанию ({effort})","plan.model.partialFailure":"{count} каталогов поставщиков не удалось загрузить","plan.model.providerDefault":"Провайдер по умолчанию","plan.model.retry":"Повторить","plan.model.route":"Маршрут: {provider}/{model}","plan.model.triggerAria":"Выберите модель участника, текущая {model}, уровень усилий для рассуждений {effort}","plan.newTask":"Новая тема задачи","plan.newTaskLabel":"Добавить запланированную задачу","plan.pendingEdits":"Сохраните текущие изменения перед запуском команды.","plan.readySummary":"{members} участников · {tasks} задач · {links} зависимостей","plan.remove":"Удалить","plan.removeConfirm":"Подтвердите удаление","plan.removeWarning":"Удаление {task} приведет к пересчету зависимостей ниже по цепочке.","plan.removed":"Задача удалена","plan.returnToChat":"Вернуться в чат","plan.save":"Сохранить","plan.saved":"План сохранён","plan.saving":"Сохранение…","plan.task.assignee":"Исполнитель","plan.task.dependencies":"ID задач зависимостей (через запятую)","plan.task.dependenciesHint":"Например, task-1, task-2; циклы отклонены","plan.task.description":"Описание задачи","plan.task.subject":"Тема задачи","plan.task.unassigned":"Общий пул задач","plan.taskAdded":"Задача добавлена","plan.tasks.count":"{count} задач · {links} зависимостей","plan.tasks.empty":"Нет запланированных задач","plan.tasks.title":"Задачи и зависимости","plan.title":"Проверка плана перед запуском","plan.unsaved":"Не сохранено","progress.aria":"Общий прогресс команды","progress.blocked":"■ Ожидание {count}","progress.delivered":"■ Доставлено {count}","progress.running":"■ В процессе {count}","progress.title":"Общий прогресс","task.assignee.unclaimed":"Невостребованные","task.detail.completed":"Завершено и доставлено","task.detail.noDownstream":"Нет последующих задач","task.detail.noPrerequisite":"Нет требований; готовы начать","task.detail.notRun":"План отменён; задача не была выполнена","task.detail.ready":"Предварительные условия выполнены; можно начинать","task.detail.unlocks":"Разблокирует {tasks} после завершения","task.detail.waitingOn":"Ожидание {tasks}","task.model":"Модель: {model}","task.runningAria":"Выполняется","task.status.cancelled":"Отменено","task.status.claimed":"Заявлено","task.status.completed":"Завершено","task.status.failed":"Не удалось","task.status.inProgress":"Выполняется","task.status.notRun":"Не запущено","task.status.pending":"Невостребованные","task.summary.allDelivered":"Все {count} задачи доставлены","task.summary.blocked":"{tasks} ожидают выполнения предварительных условий","task.summary.blockedAndRunning":"{tasks}{more} ожидают выполнения предварительных условий; другая работа уже начата","task.summary.discarded":"{count} запланированных задач отменено; ни одна не выполнена","task.summary.ended":"Итог: {completed} доставлено · {cancelled} отменено · {failed} не удалось","task.summary.failedSettled":"{count} ошибок; автоматический цикл остановлен","task.summary.more":"и ещё {count}","task.summary.ready":"{tasks} готовы к началу","task.summary.running":"{tasks} в процессе выполнения","task.summary.staged":"{count} запланированных задач ожидают утверждения","task.summary.waitingBreakdown":"Ожидание, пока капитан распределит работу","task.summary.waitingSchedule":"Ожидание следующего цикла планирования","team.discarded":"Отклонено","team.ended":"Завершено","team.stats.completed":"{completed}/{total} завершено","team.stats.members":"{count} участников","team.stats.messages":"{count} сообщений","team.stop":"Остановить команду","team.stopCancel":"Продолжать работу","team.stopConfirm":"Остановить команду","team.stopDescription":"Это отменяет {tasks} незавершённых задач и останавливает {members} работающих участников. Завершённые результаты сохраняются.","team.stopFailed":"Не удалось остановить команду: {message}","team.stopRequestFailed":"Сервер не смог остановить эту команду. Попробуйте снова.","team.stopTitle":"Остановить “{team}”?","team.stopped":"Остановлено","team.stopping":"Остановка…"},"betterSidebar":{"addPluginsBrowseMore":"Ещё плагины на GitHub (тема: dsh-better-sidebar)","addPluginsEmpty":"Подборки пока нет — опубликуйте свой плагин под темой на GitHub","addPluginsNoMatch":"Нет подходящих плагинов","addPluginsRecommended":"Рекомендуемые плагины","addPluginsSearch":"Поиск по названию или описанию плагина…","addPluginsTabCard":"Добавить плагины вкладок","addPluginsTabCardDesc":"Зарегистрировать новую страницу панели","addPluginsTabDesc":"Страницы панели (вкладки) расширяются плагинами. Плагины регистрируются через сервис ctx.betterSidebar; кнопка «Установить» копирует команду — вставьте её в терминал на машине с профилем DSH и выполните.","addPluginsViewerCard":"Добавить плагины предпросмотра","addPluginsViewerCardDesc":"Зарегистрировать просмотр нового типа файлов","addPluginsViewerDesc":"Просмотрщики файлов расширяются плагинами. Плагины регистрируются через сервис ctx.betterSidebar; кнопка «Установить» копирует команду — вставьте её в терминал на машине с профилем DSH и выполните.","addToConversation":"Добавить в диалог","binary":"Двоичный файл, предпросмотр недоступен","binaryNoPreview":"Этот тип файлов нельзя показать","branch":"Ветка","brokenSymlink":"Битая ссылка","browser":"Браузер","browserBack":"Назад","browserBlockedLoopback":"Заблокировано: локальные и внутренние адреса здесь открывать нельзя","browserBlockedScheme":"Заблокировано: разрешены только адреса http и https","browserEmbedAnyway":"Всё равно загрузить","browserEmbedBlocked":"{host} запрещает встраивание","browserEmbedBlockedDesc":"Сайт запрещает показывать себя внутри других страниц (X-Frame-Options / frame-ancestors), поэтому в панели он не откроется. Откройте его в обычном браузере.","browserForward":"Вперёд","browserGo":"Перейти","browserInvalid":"Неверный адрес","browserNoSandboxWarning":"Песочница выключена: страница работает с полными правами интерфейса (включить обратно можно в настройках)","browserOpenExternal":"Открыть в браузере","browserPlaceholder":"Введите адрес, например example.com","browserStart":"Введите адрес, чтобы начать (режим песочницы)","cancel":"Отмена","changes":"Изменения","checkoutError":"Переключить ветку не удалось","cherryPickCommit":"Перенести коммит","cherryPickDesc":"Применить изменения «{subject}» к текущей ветке.","cherryPickTitle":"Перенос коммита","close":"Закрыть","closeLeftTabs":"Закрыть вкладки слева","closeOtherTabs":"Закрыть остальные вкладки","closePinnedTerminal":"Закрыть терминал","closeRightTabs":"Закрыть вкладки справа","collapse":"Свернуть панель","collapseBottomPanel":"Свернуть нижнюю панель","commit":"Закоммитить","commitError":"Коммит не удался","commitPlaceholder":"Сообщение коммита (Ctrl+Enter)","copied":"Скопировано","copy":"Копировать","copyAbsolute":"Копировать абсолютный путь","copyFullHash":"Копировать полный хеш","copyInstall":"Копировать команду установки","copyRelative":"Копировать относительный путь","copyShortHash":"Копировать короткий хеш","copySubject":"Копировать заголовок","diffAdded":"Добавлено","diffBinary":"Двоичный","diffCollapse":"Свернуть","diffDeleted":"Удалено","diffEmpty":"Текстовых изменений нет","diffExpand":"Показать ещё строк: {count}","diffLoadError":"Не удалось загрузить различия","diffRenamed":"Переименовано","discard":"Отменить изменения","discardDesc":"Изменения «{path}» в рабочем дереве будут отброшены без возможности вернуть.","discardTitle":"Отмена изменений","disconnected":"Терминал отключился, переподключаемся…","dockToSidebar":"Вернуть в боковую панель","download":"Скачать","downloadToView":"Скачать, чтобы посмотреть","edit":"Изменить","editor":"Редактор","editorEmptyHint":"Выберите файл в дереве или введите путь выше, чтобы открыть предпросмотр","editorExplorer":"Как открывать файлы","editorExplorerDesc":"Управляет поведением при открытии файлов","editorExplorerMerged":"В одном окне","editorExplorerMergedDesc":"Файлы сменяются в том же окне; новые окна открываются с деревом","editorExplorerSplit":"Раздельно","editorExplorerSplitDesc":"Окно без пути — это отдельный проводник (только дерево); каждый файл открывается своим окном (дерево пристыковано и по умолчанию закрыто)","editorPathPlaceholder":"Путь к файлу (от папки сессии или абсолютный), Enter — открыть","editorSearchNoResults":"Подходящих файлов нет","editorSearchPlaceholder":"Поиск файлов по имени…","editorSearchTruncated":"Слишком много совпадений — показана часть","editorTreeToggle":"Дерево файлов","error":"Не удалось загрузить","exited":"Процесс терминала завершился","expand":"Развернуть панель","expandBottomPanel":"Развернуть нижнюю панель","explorer":"Проводник","files":"Файлы","floatDropHint":"Отпустите, чтобы открыть в свободном окне","git":"Контроль версий","gitDetail":"Посмотреть изменения","hiddenFiles":"Скрытые файлы","history":"История","historyLoadError":"Не удалось догрузить историю","htmlNoSandboxWarning":"Песочница выключена: этот HTML работает с полными правами интерфейса (включить обратно можно в настройках)","jobDurationHours":"{hours} ч {minutes} мин","jobDurationMinutes":"{minutes} мин {seconds} с","jobDurationSeconds":"{seconds} с","jobHideOutput":"Скрыть вывод","jobKill":"Прервать","jobKillConfirm":"Нажмите ещё раз для подтверждения","jobKillError":"Прервать не удалось","jobNoOutput":"Вывода пока нет","jobNotReadYet":"Ждём, пока модель прочитает эту задачу; вывод появится здесь после вызова job_output","jobOutputError":"Не удалось прочитать вывод","jobOutputTruncated":"Вывод обрезан","jobStatusCompleted":"Завершена","jobStatusFailed":"Ошибка","jobStatusKilled":"Прервана","jobStatusRunning":"Выполняется","jobStatusStopping":"Останавливается","jobViewOutput":"Посмотреть вывод","jobs":"Фоновые задачи","jobsCount":"фоновых задач: {count}","jobsCountRunning":"фоновых задач: {count} · выполняется: {running}","loadMore":"Показать ещё","loading":"Загрузка…","mermaidError":"Ошибка рендеринга Mermaid","mermaidZoomHint":"Прокрутка для масштабирования · перетаскивание для перемещения · Esc для закрытия","mermaidZoomIn":"Увеличить","mermaidZoomOut":"Уменьшить масштаб","mermaidZoomReset":"Сбросить","moveToFreeWindow":"Переместить в свободное окно","newFile":"Новый файл","newTab":"Новая вкладка","newTerminal":"Новый терминал","noChanges":"Изменений нет","noSession":"Выберите диалог, чтобы пользоваться панелью","notRepo":"Эта папка не является репозиторием git","openEditor":"Открыть редактор","openExplorer":"Проводник","openFileNewTab":"Открыть в новой вкладке","openFileSide":"Открыть сбоку","openGit":"Панель git","openPlugin":"Открыть","openSubagent":"Задачи","openWithCursor":"Курсор","openWithExplorer":"Файловый менеджер","openWithMenu":"Открыть с помощью","openWithSettingsAdd":"Добавить","openWithSettingsCustomDesc":"Имя + шаблон URL (заполнитель {path}) + флаг семейства VSCode; в удалённом режиме только редакторы семейства VSCode могут открыть удалённый путь","openWithSettingsCustomTitle":"Пользовательские редакторы","openWithSettingsFamily":"Семейство VSCode","openWithSettingsFamilyDesc":"Этот редактор понимает URL-адреса VSCode (поддерживает открытие через SSH-удалённое подключение)","openWithSettingsInvalidHint":"Редакторы без имени или шаблоны без {path} / scheme:// не отображаются в меню","openWithSettingsName":"Имя","openWithSettingsRemove":"Удалить","openWithSettingsSshDesc":"Пусто = локальная рабочая область; с user@host или SSH-алиасом открыватели семейства VSCode переключаются на протокол vscode-remote/ssh-remote, а Файловый менеджер / Zed / пользовательские редакторы вне семейства VSCode скрываются из меню","openWithSettingsSshPlaceholder":"пользователь@хост или алиас SSH","openWithSettingsSshTitle":"SSH удаленный хост","openWithSettingsTemplate":"напр. cursor://file/{path}","openWithSshSuffix":"(SSH)","openWithVscode":"VS Code","openWithZed":"Зед","parent":"Родительская папка","pinAgentTerminal":"Закрепить терминал агента","pinOpenWith":"Закрепить в меню","pinTerminal":"Закрепить терминал","pinToGlobal":"Закрепить для всех","pinToWorkspace":"Закрепить в рабочей области","pinnedRailLabel":"Закреплённые терминалы","pinnedTerminalKindAgent":"Терминал агента","pinnedTerminalKindUi":"Терминал интерфейса","pinnedTerminalScopeGlobal":"Закреплено глобально","pinnedTerminalScopeWorkspace":"Закреплено в рабочей области","pinnedTerminalTooltip":"{kind} · {scope} · {cwd}","pluginDocsPanelDesc":"Глобальные документы в боковой панели DSH: читайте свои заметки в формате Markdown из любого рабочего пространства — список файлов, структура, открытие в Chrome / VS Code и кнопки копирования; директория документов настраивается (по умолчанию ~/.dsh/docs)","pluginEgoBrowserDesc":"Браузер агента для DeepSeek Harness: 32 инструмента ego_* управляют реальным Chromium, с нативной боковой панелью \"ego browser\", которая предоставляет живой просмотр каждой страницы, посещаемой агентом — вы можете кликать, перетаскивать и печатать, чтобы взять управление на себя. Регистрирует вкладку автоматически, если присутствует better-sidebar, в противном случае переходит на плавающий пузырь.","pluginFlowglassDesc":"Граф потока живого сеанса с тремя полосами для пользователя, ассистента и вызовов инструментов, а также параллельными группами, ветвями под-агентов, детализацией и текущим статусом; регистрирует вкладку Flowglass в нативном режиме при установке better-sidebar и сохраняет отдельный выдвижной ящик в качестве резерва.","pluginGitForgeDesc":"Вкладка Git Forge: библиотека аккаунтов GitHub/Gitea (и других форков) + права на проекты + политика жесткого пуша; токены остаются в локальных секретах (никогда в контексте модели); инструмент GitForge только для чтения и помощник для HTTPS-учетных данных агента","pluginGitRemotesDesc":"Вкладка Git Remotes: ветка, upstream, отставание и опережение, fetch (с необязательным prune), pull только ff-only и push после подтверждения во вкладке. Не заменяет встроенную вкладку git со стадированием и коммитами, не предлагает force-push и не даёт модели инструмент автопуша","pluginNotLoaded":"Плагин не загружен, вкладка недоступна:","pluginOfficeDesc":"Предпросмотр офисных файлов (.docx / .xlsx / .pptx) в редакторе better-sidebar; тяжёлые библиотеки рендеринга держатся вне основного бандла","pluginSentinelDesc":"Пробуждение агента по условию: датчики файлов, процессов, портов, http, команд и вебхуков будят спящие сессии, когда условие сработало; добавляет вкладку Sentinel с общей таблицей наблюдений","pluginSidebarQaDesc":"Выделил и спросил: выделите текст в диалоге, задайте вопрос в правой панели — откроется отдельная сессия-уточнение в той же рабочей папке; быстрая модель без рассуждений сжимает основной контекст и подставляет его вместе с цитатой, не прерывая основной диалог. Уточнения вкладываются, продолжаются и уходят в архив","pluginSshTunnelDesc":"Вкладка SSH-туннеля: инвентарь нескольких хостов + гранты для каждого проекта + локальные секреты; инструмент SSHManager (стратегии выполнения/ SFTP/сеансов); центральный интерактивный терминал и двухпанельный SFTP","pluginTurnReviewDesc":"Человеческий шлюз на только что завершённом ходе: Одобрить / Запросить изменения по пути с необязательным комментарием; пути сгруппированы по основной сессии / суб-агенту / без атрибуции; встроенное сравнение снимка и текущего состояния перед принятием решения. Без форка, без /rewind.","pluginVideoPreviewDesc":"Просмотр видео (.mp4/.webm/.mov/.mkv/.avi и других) прямо в редакторе better-sidebar через отдельный маршрут /video с поддержкой HTTP Range (206) — перемотка работает, ограничение mediaLimit в 20 МБ не действует","preview":"Предпросмотр","produced":"Создано","producedOpen":"Открыть в панели","referenceFile":"@файл","refresh":"Обновить","refreshUnsavedConfirm":"Файл изменился на диске. Обновление приведёт к потере несохранённых изменений. Продолжить?","retry":"Повторить","revertCommit":"Откатить коммит","revertDesc":"Создать в текущей ветке новый коммит, отменяющий «{subject}».","revertTitle":"Откат коммита","sandboxRestore":"Вернуть песочницу","sandboxStatusOn":"Песочница включена · страницы не видят данные интерфейса и локальные файлы; входы и сторонние куки могут не работать","sandboxUnlock":"Временно отключить (небезопасно)","save":"Сохранить","saveFailed":"Сохранить не удалось","saved":"Сохранено","settingsBottomTerminalDesc":"При первом разворачивании нижней панели в сессии открывать в ней новый терминал (ограничение на число терминалов сохраняется; по умолчанию включено)","settingsBottomTerminalTitle":"Открывать терминал при первом разворачивании нижней панели","settingsBrowserHttpDesc":"Если включено, клик по внешней http-ссылке в диалоге или интерфейсе открывает панель (страницы плагинов с urlTarget имеют приоритет); Ctrl/Cmd+клик всегда в обход","settingsBrowserHttpTitle":"Открывать http-страницы в панели","settingsBrowserHttpsDesc":"Если включено, клик по внешней https-ссылке открывает панель. По умолчанию выключено: большинство https-сайтов запрещают встраивание, поэтому системный браузер удобнее","settingsBrowserHttpsTitle":"Открывать https-страницы в панели","settingsBrowserLinksDesc":"Если включено, клик по внешней ссылке открывает панель, а не новое окно; http и https управляются отдельными переключателями ниже; Ctrl/Cmd+клик всегда в обход","settingsBrowserLinksTitle":"Открывать внешние ссылки из диалога в панели","settingsBrowserLoopbackDesc":"Разделённый запятыми список разрешённых адресов локальной петли (например, localhost:5174 или 127.0.0.1:8080), которые может посещать боковой браузер; пустое значение блокирует все локальные адреса по умолчанию. Песочница всё ещё применяется — страницы не могут читать данные GUI.","settingsBrowserLoopbackPlaceholder":"например, localhost:5174, 127.0.0.1:8080","settingsBrowserLoopbackTitle":"Разрешенные локальные адреса","settingsBrowserSandboxDesc":"С выключенной песочницей любой открытый сайт работает в том же origin, что и интерфейс: он может читать данные сессии и действовать от вашего имени. Включайте только для полностью доверенных сайтов","settingsBrowserSandboxTitle":"Отключить песочницу браузера (небезопасно)","settingsConflict":"Настройку изменили в другом окне — повторите","settingsCustomCssDesc":"Стили добавлены в конце страницы (поздние в каскаде выигрывают при равенстве; используйте !important для переопределения встроенных переменных, записанных через JS)","settingsCustomCssPlaceholder":"/* например, зарезервировать 36px для оболочки с нарисованной вручную строкой заголовка */\nhtml[data-dsh-title-bar-height=\"36\"] {\n --dsh-title-bar-strip: 36px !important;\n}","settingsCustomCssTitle":"Пользовательский CSS","settingsDone":"Готово","settingsFontFamilyDesc":"Своя гарнитура терминала (CSS-стек вида \"JetBrains Mono\", monospace; пусто — моноширинный шрифт темы)","settingsFontFamilyPlaceholder":"\"JetBrains Mono\", monospace","settingsFontFamilyTitle":"Шрифт терминала","settingsFontSizeDesc":"Размер шрифта терминала в пикселях (9–32, по умолчанию 13)","settingsFontSizeSuffix":"px","settingsFontSizeTitle":"Размер шрифта терминала","settingsGeneralTitle":"Общие","settingsHtmlDefaultUnsafeDesc":"Если включено, каждый новый предпросмотр HTML открывается без песочницы (тот же origin, что и интерфейс — доступны файлы сессии и внутренние API); вернуть песочницу можно одним нажатием в строке состояния","settingsHtmlDefaultUnsafeTitle":"Открывать предпросмотр HTML без песочницы (небезопасно)","settingsHtmlSandboxDesc":"С выключенной песочницей просматриваемый HTML работает в том же origin, что и интерфейс: он может читать файлы сессии, локальное хранилище и вызывать внутренние API. Включайте только для полностью доверенных файлов","settingsHtmlSandboxTitle":"Отключить песочницу предпросмотра HTML (небезопасно)","settingsIntro":"Что показывает боковая панель и как она себя ведёт","settingsJobsDesc":"Разворачивать панель и открывать страницу задач при появлении новой фоновой задачи в текущем диалоге (срабатывает на каждую); выключите, чтобы открывать вручную","settingsJobsTitle":"Открывать страницу задач при новой фоновой задаче","settingsNav":"Боковая панель","settingsOpenDesc":"Разворачивать панель для совсем новых диалогов; у существующих сохраняется своя раскладка","settingsOpenPathDesc":"Открывать файловые ссылки из диалога (строки инструментов, созданные файлы, упоминания) в редакторе панели, а не в системном приложении","settingsOpenPathTitle":"Открывать файлы из диалога в панели","settingsOpenTitle":"Разворачивать для новых диалогов","settingsOpenToolsDesc":"Когда включено, модель может активно открывать файлы, папки и HTTP(S)-страницы в боковой панели через инструмент sidebar_open (по умолчанию отключено).","settingsOpenToolsTitle":"Внедрите инструмент sidebar-open для модели","settingsPopup":"Настройки функции","settingsPopupDesc":"Параметры для «{feature}»","settingsSaveFailed":"Не удалось сохранить","settingsSchemeAutoDesc":"Консервативный: учитывается только стандартный API Window Controls Overlay (реальная высота наложения заголовка); обычные веб-среды не изменяются","settingsSchemeAutoTitle":"Автоопределение","settingsSchemeCustomDesc":"Полный контроль: вставьте пользовательский CSS (может переопределять встроенные стили) и задайте расстояние смещения строки заголовка","settingsSchemeCustomTitle":"Настроить","settingsSchemeDetectedSuffix":"обнаружено","settingsSchemeWebDesc":"Явно указать официальный веб-интерфейс: без адаптации вообще (даже стандартной геометрии WCO)","settingsSchemeWebTitle":"Официальный сайт DSH","settingsShellArgsDesc":"Явные аргументы командной оболочки, разделённые пробелами; если не пусто, полностью заменяют значения по умолчанию (тот же принцип, что и у shellArgs в yaml)","settingsShellArgsPlaceholder":"напр. -l (пусто = по умолчанию)","settingsShellArgsTitle":"Аргументы командной оболочки","settingsShellDesc":"Оболочка, запускаемая для терминалов UI и моделей (абсолютный путь или имя исполняемого файла). Пустое значение сохраняет устаревший порядок: shell из конфига yaml → $SHELL / логин-шелл / Windows powershell.exe. Применяется к терминалам, открытым после этого.","settingsShellPlaceholder":"например, /bin/zsh (пусто = автоматически)","settingsShellTitle":"Путь к оболочке","settingsSubagentDesc":"Разворачивать панель и открывать страницу задач, когда в диалоге появляется субагент; выключите, чтобы открывать вручную","settingsSubagentTitle":"Открывать страницу задач при появлении субагента","settingsTabsTitle":"Содержимое панели","settingsTitleBarDesc":"Оставлять место под системный заголовок окна Windows справа сверху, чтобы кнопки и содержимое панели располагались ниже, а не под ним","settingsTitleBarStripDesc":"Высота полосы заголовка: на сколько пикселей опускаются кнопки и содержимое панели (0–120, по умолчанию 40)","settingsTitleBarStripTitle":"Смещение","settingsTitleBarTitle":"Режим совместимости с заголовком окна","settingsToolsDesc":"Если включено, модель может создавать терминалы в панели и работать в них через восемь инструментов terminal_* (по умолчанию выключено)","settingsToolsTitle":"Дать модели инструменты терминала","settingsViewerCatchAll":"На всё остальное: любой файл","settingsViewersTitle":"Просмотрщики файлов","settingsWidthDesc":"Какую долю ширины окна занимает панель в новых диалогах (20–60)","settingsWidthSuffix":"%","settingsWidthTitle":"Ширина по умолчанию","showInFolder":"Показать в папке","sideChat":"Боковой чат (бета)","sideChatCancel":"Остановить","sideChatCancelTitle":"Прервать текущий ход (запланированные задачи сохраняются)","sideChatClose":"Закрыть тему","sideChatCloseTitle":"Освободить агента потока (история сохраняется)","sideChatComposerPlaceholder":"Задать уточняющий вопрос…","sideChatCreating":"Создание побочного диалога…","sideChatEmpty":"Без посторонних разговоров","sideChatEmptyDesc":"Каждый побочный диалог открывается в отдельной вкладке на панели — он наследует контекст текущей сессии и никогда не попадает в основной разговор","sideChatError":"Ошибка бокового чата: {message}","sideChatFirstPlaceholder":"Задайте первый вопрос — контекст сохранён…","sideChatInjection":"Контекст внедрен","sideChatNew":"Новая тема","sideChatNoTurn":"Сохранение доступно после первого завершённого хода","sideChatPendingDrop":"Последний неотвеченный вопрос не будет включен в сохраненную сессию","sideChatRetry":"Повторить","sideChatSave":"Сохранить как новую сессию","sideChatSaveTitle":"Повысьте этот тред до уровня отдельной сессии в основном списке сессий","sideChatSaved":"Сохранено как новая сессия","sideChatSend":"Отправить","sideChatThink":"Думаю","sideChatThinking":"Глубокое погружение…","sideChatThreads":"Переключить ветку / новая","sideChatUntitled":"Новая тема","splitDown":"Разделить вниз","splitLeft":"Разделить влево","splitRight":"Разделить вправо","splitUp":"Разделить вверх","stage":"В индекс","stageAll":"Всё в индекс","staged":"В индексе","statusTruncated":"Слишком много изменений; показаны первые 2,000 записей","subagent":"Задачи","subagentCount":"субагентов: {count}","subagentCountRunning":"субагентов: {count} · работает: {running}","subagentDiagCorrupt":"Повреждён","subagentDiagUnavailable":"Недоступен","subagentDiagUnsupported":"Не поддерживается","subagentEmpty":"Субагентов нет","subagentEmptyDesc":"Здесь появятся субагенты, запущенные основным агентом","subagentInactive":"Простаивает","subagentMainAgent":"Основной агент","subagentModeContinuable":"С продолжением","subagentModeOneShot":"Разовый","subagentRunning":"Работает","subagentThinking":"Думает…","terminal":"Терминал","terminalConnectFailed":"Терминал не смог подключиться несколько раз подряд","terminalDepsFailed":"Не удалось загрузить зависимость терминала node-pty","terminalDepsHint":"Выполните команду ниже в терминале на машине с DSH, чтобы починить, и повторите (версия node-pty должна совпадать с версией ядра DSH):","terminalDepsProfile":" (определён профиль: {profile})","terminalError":"Не удалось подключиться к терминалу","terminalLimit":"Достигнут предел терминалов (3)","terminalRetry":"Повторить","timeHoursAgo":"{n} ч назад","timeJustNow":"только что","timeMinutesAgo":"{n} мин назад","timeYesterday":"вчера","toc":"Содержание","truncation":"Файл слишком большой — показаны первые 512 КБ","unpinOpenWith":"Открепить","unpinTerminal":"Открепить","unsaved":"Не сохранено","unstage":"Из индекса","unstageAll":"Всё из индекса","unstaged":"Вне индекса","uploadCancelled":"Загрузка отменена","uploadDone":"Загружено {count} файл(ов)","uploadDropChat":"Перетащите в чат, чтобы добавить изображения","uploadDropHint":"Перетащите файлы/папки сюда для загрузки","uploadFailed":"Не удалось загрузить: {error}","uploadFailedUnknown":"Неизвестная ошибка","uploadFiles":"Загрузить файлы","uploadFolder":"Загрузить папку","uploadHere":"Загрузите сюда","uploadProgress":"Загружено {done}/{total}: {name}","uploadTo":"Загрузить в {dir}","uploadTooLarge":"Файл слишком большой (превышен лимит загрузки)","uploadingTo":"Загрузка в {dir}…","viewCommitDiff":"Посмотреть изменения коммита","viewerBinary":"Скачивание файла","viewerCode":"Код","viewerHtml":"HTML","viewerImage":"Изображение","viewerMarkdown":"Markdown","viewerPdf":"PDF","worktree":"Рабочее дерево"},"command":{"listbox.aria":"Совпадения /{command}","notice.imagesUnsupported":"/{command} не принимает вложения-изображения — сначала удалите их","overlay.aria":"Параметры /{command}","search.aria":"Фильтр параметров","search.placeholder":"Поиск…","status.applying":"Применение…","status.empty":"Нет параметров","status.loading":"Загрузка параметров…"},"common":{"back":"Назад","cancel":"Отмена","close":"Закрыть","collapse":"Свернуть","copied":"Скопировано","copy":"Копировать","delete":"Удалить","edit":"Изменить","expand":"Развернуть","load.failed":"Не удалось загрузить","loading":"Загрузка…","more":"Ещё","next":"Дальше","none":"Нет","ok":"ОК","previous":"Назад","retry":"Повторить","save":"Сохранить","search":"Поиск","skip":"Пропустить","submit":"Отправить","submitting":"Отправка…","truncated":"Обрезано","unknown":"Неизвестно"},"context-doctor":{"cd.attention":"Стоит посмотреть","cd.byFile":"По файлу","cd.byServer":"По серверу","cd.bySource":"По источнику","cd.catalog":"{n} скиллов","cd.catalog.few":"{n} скилла","cd.catalog.many":"{n} скиллов","cd.catalog.one":"{n} скилл","cd.collapse":"Скрыть детализацию","cd.duplicateBlocks":"{n} дублированных блоков · {tokens} токенов","cd.duplicateSkills":"{n} навыков имеют одинаковое описание","cd.empty":"Данных пока нет","cd.emptyCategory":"ничего не внедрено","cd.emptyState":"Данные аудита пока отсутствуют.","cd.error":"Проверка не удалась","cd.expand":"Показать детализацию","cd.files":"файлов","cd.guideline":"из 50k","cd.healthy":"В норме","cd.healthyHint":"Контекст расходуется экономно и укладывается в рекомендованный бюджет.","cd.heavy":"Превышение бюджета","cd.heavyHint":"Резидентный контекст перегружает бюджет. Сначала сократите самые крупные записи.","cd.hint":"Открыть аудит контекста","cd.instructions":"Цепочка инструкций","cd.instructions.sub":"{n} файлов","cd.justNow":"только что","cd.loading":"Проверка…","cd.mcp":"Инструменты MCP","cd.mcp.sub":"{n} инструментов · {servers} серверов","cd.mcpTools":"{n} инструментов","cd.mcpTools.few":"{n} инструмента","cd.mcpTools.many":"{n} инструментов","cd.mcpTools.one":"{n} инструмент","cd.minutesAgo":"{n} минут назад","cd.more":"+{n} ещё","cd.native":"Встроенные инструменты","cd.noDetail":"Нет доступной разбивки","cd.ofBudget":"из бюджета в {budget}","cd.refresh":"Обновить","cd.residentTokens":"Проверка бюджета контекста","cd.residentUnit":"токены резидентные","cd.review":"Стоит посмотреть","cd.reviewHint":"Некоторые части контекста стоит пересмотреть, пока они не стали дорогими.","cd.secondsAgo":"{n} назад","cd.shadowed":"{n} навыков скрыты записью с таким же названием","cd.skills":"Каталог скиллов","cd.skills.sub":"{n} навыков","cd.subtitle":"Аудит контекста","cd.suggestions":"Рекомендации","cd.suggestions.few":"{n} рекомендации","cd.suggestions.many":"{n} рекомендаций","cd.suggestions.one":"{n} рекомендация","cd.title":"Аудит контекста","cd.tokens":"токены","cd.tools":"Схемы инструментов","cd.tools.sub":"{n} встроенных инструментов","cd.toolsCount":"инструментов","cd.topSchemas":"Самые большие схемы","cd.total":"Общее количество","cd.updated":"Обновлено {when}"},"conversation":{"access.confirm.acknowledge":"Я понимаю риски и хочу продолжить","access.confirm.cancel":"Отмена","access.confirm.description":"Полный доступ убирает часть подтверждений и позволяет агенту действовать напрямую, включая чувствительные операции, изменение файлов и внешние команды. Включайте, только если доверяете текущей задаче.","access.confirm.enable":"Включить полный доступ","access.confirm.title":"Включить полный доступ?","approval.allowOnce":"Разрешить один раз","approval.detail.aria":"Подробности запроса","approval.escalation":"Инструмент {toolName} просит повышенных прав","approval.reject":"Отклонить","approval.waiting":"Ожидание подтверждения","ask.answered":"{answered}/{total} отвечено","ask.cancelled":"отменено","ask.interrupted":"прервано","ask.rowTitle":"Вопрос","ask.waiting":"ожидание","bash.failed":"Ошибка","bash.running":"Выполняется","bash.stopped":"Остановлено","chat.loadError":"Не удалось загрузить историю: {message} ({code})","chat.loadOlder":"Загрузить раньше","chat.loadingHistory":"Загрузка истории…","chat.toBottom":"Вниз","clock.md":"{d}.{m}","clock.ymd":"{d}.{m}.{y}","command.done":"Готово","command.failed":"Команда не выполнена","command.imagesUnsupported":"/{command} не принимает вложения-изображения — сначала удалите их","command.running":"Выполняется…","command.title":"Команда","context.aria":"{percent} контекста занято","context.messages":"Сообщения","context.system":"Системный промпт","context.tools":"Инструменты","context.used":"контекста занято","details.close":"Закрыть подробности","details.empty":"Выберите строку инструмента в переписке, чтобы увидеть подробности","details.input":"Вход","details.notInWindow":"Этот вызов вне текущего окна","details.output":"Выход","details.running":"Выполняется…","details.title":"Подробности","duration.minutes":"{minutes} мин {seconds} с","duration.seconds":"{seconds} с","fileOpen.folderTitle":"Не удалось открыть папку","fileOpen.folderUnknown":"Не удалось открыть эту папку","fileOpen.title":"Не удалось открыть файл","fileOpen.unknown":"Не удалось открыть этот файл","hero.chooseWorkspace":"Выбрать рабочую папку","hero.headline":"Навстречу неизвестному","hero.preview":"Предпросмотр","hint.goal":"опишите цель длительной задачи","hint.goal.active":"цель активна — изменить / пауза / продолжить / снять","image.closePreview":"Закрыть просмотр оригинала","image.dimensionTooLarge":"Стороны изображения не больше {size}px — уменьшите его и попробуйте снова","image.dropBlocked":"Сейчас картинки добавить нельзя","image.dropDesc":"До {count} изображений, каждое до {size}","image.dropTitle":"Перетащите изображения сюда","image.fileTooLarge":"Каждое изображение должно быть меньше {size}","image.label":"Изображение","image.loadFailed":"Изображение не загрузилось, нажмите для повтора","image.loading":"Загрузка изображения…","image.modelUnsupported":"Текущая модель не принимает изображения; выберите подходящую","image.openOriginal":"Открыть оригинал","image.openOriginalLabel":"{label}, нажмите, чтобы открыть оригинал","image.original":"Оригинал","image.pending":"Изображения к отправке","image.preview":"Просмотр оригинала","image.remove":"Убрать изображение {name}","image.scrollLeft":"Прокрутить изображения влево","image.scrollRight":"Прокрутить изображения вправо","image.sendFailed":"Не удалось отправить изображения ({reason}); добавьте заново и повторите","image.serviceUnavailable":"Служба загрузки изображений недоступна","image.subagentUnsupported":"Сессии субагентов пока не поддерживают изображения","image.tooMany":"В одно сообщение помещается до {count} изображений","image.tooManyPixels":"Слишком большое разрешение; сожмите изображение и повторите","image.totalTooLarge":"Изображения весят больше {size}; уберите часть и повторите","image.unsupportedType":"Поддерживаются только PNG, JPG, WebP и GIF","input.accessMode":"Режим доступа, сейчас: {name}","input.commands":"Команды","input.send":"Отправить сообщение","input.stop":"Остановить генерацию","json.truncated":"… обрезано, всего символов: {total}","message.branch":"Ответвить новый диалог","message.branchUnavailable":"Доступно только на последнем сообщении завершённого хода","message.compaction":"Контекст сжат","message.compaction.completed":"Сжато элементов истории: {items} (~{tokens} токенов)","message.compaction.expand":"Показать итог сжатия","message.compaction.running":"Сжатие контекста…","message.compaction.unavailable":"Итог сжатия недоступен","message.context.catalog.more":"… ещё {count}","message.context.catalog.replaced":"Каталог заменён","message.context.instructions.added":"добавлено","message.context.instructions.loaded":"загружено","message.context.instructions.removed":"удалено","message.context.instructions.updated":"обновлено","message.context.recall.counts":"{retained} оставлено · {omitted} пропущено","message.context.recall.truncated":"обрезано","message.context.relay.from":"Из сессии {session}","message.context.snapshot.supersedes":"Заменяет прежние снимки","message.contextInjection":"Инъекция контекста","message.contextRecall":"Напоминание из сессии","message.extraBlock":"Дополнительный блок","message.maxTokens":"Достигнут лимит выходных токенов","message.maxTokens.hint":"Ответ обрезан; написанное ранее сохранено в переписке. Отправьте «продолжай», чтобы модель дописала.","message.ranFor":"Заняло {duration}","message.referenceSeparator":", ","message.referenceSummary":"Упомянутая сессия · {labels}","message.retry.active":"Повтор запроса к модели","message.retry.cancelled":"Повтор запроса отменён","message.retry.delay":"Задержка перед повтором: ","message.retry.failure":"Причина сбоя: ","message.retry.scheduled":"Ожидание повтора запроса","message.retry.started":"Запрос к модели повторён","message.retry.status":"{label} ({retry}/{maximum}) · {seconds} с","message.stopped":"Остановлено","message.tokensPerSecond":"{tps} ток/с","message.ttft":"Первый токен {seconds} с","message.turnError":"Ход не удался","message.unknownBlock":"Неизвестный блок содержимого","message.unknownSurface":"Неизвестное событие: {type}","placeholder.default":"Напишите агенту","placeholder.hero":"Опишите, что хотите сделать","placeholder.parentOffline":"Родительская сессия офлайн: отправка недоступна, но остановить выполнение можно","placeholder.steerQueue":"Cmd/Ctrl+Enter направит все сообщения из очереди","placeholder.unavailable":"Сессия недоступна","placeholder.workspace":"Выберите рабочую папку, чтобы начать","queue.cancelEdit":"Отменить правку","queue.count":"Сообщений в очереди: {n}","queue.edit":"Изменить сообщение в очереди","queue.edit.unsupported":"Содержит не только текст; правка пока не поддерживается","queue.editFailed":"Не удалось изменить: сообщение, возможно, уже отправляется.","queue.remove":"Убрать из очереди","queue.removeFailed":"Не удалось убрать: сообщение, возможно, уже отправляется.","queue.save":"Сохранить сообщение","queue.steer":"Направить сообщение","queue.steer.unavailable":"Направлять можно только пока агент работает","queue.steerFailed":"Не удалось направить. Попробуйте ещё раз.","row.failed":"Ошибка","row.running":"Выполняется","row.stopped":"Остановлено","session.hierarchy":"Иерархия сессий","settings.enter.description":"Только когда агент занят; Cmd/Ctrl+Enter даёт другое поведение","settings.enter.queue":"В очередь","settings.enter.steer":"Направить","settings.enter.title":"Enter, когда агент занят","stats.cacheHit":"Попаданий в кэш {percent}%","stats.counts":"ходов: {turns} · шагов: {steps}","stats.llm":"Модель {duration}","stats.tokens":"Вход {input} ток · выход {output} ток","stats.tokensPerSecond":"{throughput} ток/с","stats.toolCall":"Инструменты {duration}","stats.ttftAverage":"Первый токен в среднем {duration}","terminal.collapseAria":"Свернуть вывод","terminal.done":"Готово","terminal.exitCode":"код возврата {code}","terminal.expandAria":"Показать оставшиеся строки вывода: {n}","terminal.expandRest":"… ещё строк: {n}","terminal.failed":"Ошибка","terminal.noOutput":"Вывода нет","terminal.running":"Выполняется","terminal.signal":"сигнал {signal}","todo.completed":"{done}/{total} выполнено","todo.progress.active":"{active} в работе","todo.progress.done":"{done} выполнено","todo.progress.pending":"{pending} в очереди","todo.rowTitle":"Обновить список задач","todo.title":"Задачи","view.chat":"Чат"},"cordis":{"a11y.defining":"Определение плагина","a11y.failed":"Определить не удалось","a11y.stopped":"Определение прервано","action.approve":"Разрешить","action.approveOnce":"Разрешить только эту версию","action.approvePlugin":"Разрешить будущие версии этого плагина","action.decline":"Отклонить","action.remove":"Удалить","action.retry":"Повторить","action.rollback":"Откатить","action.run":"Запустить","action.stop":"Остановить","body.clientCode":"Клиент","body.copied":"Скопировано","body.copy":"Копировать","body.hostCode":"Хост","body.output":"Результат","body.source":"Исходник плагина","panel.approvals.aria":"Подтверждения Cordis","panel.current":"Текущая: {packageId}","panel.empty":"Плагинов пока нет","panel.group.current":"Эта сессия","panel.group.others":"Другие сессии","panel.hint":"Управление запуском — в панели Cordis над настройками","panel.loading":"Чтение…","panel.next":"Следующая: {packageId}","panel.plugins.aria":"Плагины Cordis","panel.readFailed":"Не удалось прочитать список плагинов: {message}","panel.runningCount":"работает: {count}","panel.title":"Плагины Cordis","panel.trigger":"Плагин Cordis","panel.version":"Версия","purpose.missing":"(назначение не указано)","render.failedAbdicated":"Отрисовка в {slot} не удалась, вернули стандартный интерфейс:","render.failedHeld":"Отрисовка в {slot} не удалась:","row.defineTitle":"Зарегистрировать плагин Cordis","row.removeTitle":"Удалить плагин Cordis","row.runTitle":"Запустить плагин Cordis","row.stopTitle":"Остановить плагин Cordis","row.updateTitle":"Обновить плагин Cordis","run.removed":"Этого пакета больше нет","run.superseded":"Ниже есть более свежая карточка запуска","status.awaitingApproval":"Ждёт подтверждения","status.clientPending":"Клиент готов к активации","status.failed":"Запуск не удался","status.idle":"Готов","status.removed":"Удалён","status.running":"Работает","status.superseded":"Есть более свежий запуск"},"deliverables":{"produced.label":"Создано","produced.more":"+ {count} файлов","produced.moreOne":"+ 1 файл","produced.open":"Открыть {name}","produced.showInFolder":"Показать в папке"},"directory-browser":{"browser.cancel":"Отмена","browser.create":"Создать","browser.createIn":"Новая папка в «{name}»","browser.editPath":"Изменить путь","browser.folderName":"Имя папки","browser.home":"Домашняя папка","browser.loading":"Загрузка…","browser.newFolder":"Новая папка","browser.open":"Открыть","browser.showHidden":"Показывать скрытые файлы","browser.title":"Выбор рабочей папки","browser.truncated":"Слишком много папок; показано только начало.","browser.untitledFolder":"Без имени"},"dsh-context":{"agents.billed":"{n} выставлено к оплате","agents.chip.count":"{n} агентов","agents.chip.running":"{n} запущено","agents.chip.tokens":"{n} токенов в контексте","agents.continuable":"продолжаемый","agents.legend.free":"свободное окно","agents.more":"Ещё {n} не показано","agents.oneshot":"одноразовый","agents.open":"нажмите, чтобы открыть →","agents.requests":"{n} запросов","agents.running":"выполняется","agents.self":"текущий","agents.solo":"Пока нет суб-агентов — когда агент делегирует работу через инструмент суб-агентов, сеть будет отображаться здесь","agents.sub":"Живой контекст этого агента и его подчиненных агентов · нажмите на узел, чтобы открыть его сессию","agents.title":"Сеть агентов","attach.close":"Закрыть","attach.image":"Изображение","attach.images":"Изображения","attach.loadFailed":"Не удалось загрузить · нажмите, чтобы повторить","attach.loading":"…","attach.open":"Открыть изображение полностью","attach.other":"Другой контент","attach.preview":"Превью изображения","attach.raw":"Сырой","attach.sent":"Отправлено","attach.token":"Токен","attach.tokensTip":"Расчетная стоимость токенов через официальное преобразование размера изображения DeepSeek (ограничение в 384 токена на изображение)","block.answer":"Ответ","block.content":"Контент","block.line":"1 строка","block.lines":"{n} строк","block.result":"Результат","block.summary":"Сводка","block.thinking":"Обоснование","brief.input":"В","brief.inputTip":"Что было введено после предыдущего ответа и перед этим запросом — обычно результаты предыдущего вызова инструмента; начало нового оборота не содержит ничего нового","brief.locate":"Показать в контекстном браузере","brief.more":"+{n}","brief.noInputs":"(ничего нового)","brief.reply":"Ответ","brief.replyTip":"Что модель вернула на этом шаге (текстовый ответ или вызовы инструментов) — результаты вызовов отображаются в строке In следующего бара","brief.turn":"Пользователь","brief.turnTip":"Сообщение пользователя, которое открыло этот ход — каждый шаг хода ссылается на него","browser.approx":"Некоторые удаленные сообщения этого шага превышают срок хранения — приведенное ниже восстановление является приблизительным","browser.deltaHint":"по сравнению с предыдущим ходом","browser.items":"{n} элементов","browser.live":"В прямом эфире (Следующий запрос)","browser.liveNow":"В прямом эфире · Следующий запрос","browser.loadFailed":"Не удалось загрузить — нажмите, чтобы повторить","browser.loading":"Загрузка полного содержимого из более старой истории сеанса…","browser.missingLive":"… {n} предыдущих сообщений также являются частью контекста (за пределами предоставленного окна)","browser.noContent":"Полное содержимое находится за пределами загруженного окна сообщений (загрузите более старую историю в Чате для просмотра)","browser.noEpoch":"Содержание заголовка (Системное сообщение / Схемы инструментов) этого шага находится за пределами удержания","browser.noHeader":"Обслуживается устаревшей версией плагина: только оценка токенов, без содержимого","browser.notInLog":"Этот элемент больше не находится в журнале сессии (возможно, он был удалён или очищен)","browser.preview":"Предварительный просмотр","browser.rowNoMatch":"Нет строк, соответствующих текущему фильтру","browser.search.assistant":"Фильтровать по ответам или звонкам…","browser.search.inject":"Фильтровать введённый контекст…","browser.search.tool":"Фильтровать по инструменту или аргументам…","browser.search.user":"Фильтровать по тексту сообщения…","browser.title":"Контекстный браузер","call.exit":"выход {n}","call.fail":"Не удалось","call.ok":"ОК","cat.assistant":"Сообщения ассистента","cat.inject":"Введённый контекст","cat.system":"Системное сообщение","cat.tool":"Результаты инструмента","cat.tools":"Схемы инструментов","cat.user":"Сообщения пользователя","cmd.close":"Закрыть","cmd.desc":"Просмотр текущего контекста макияжа, просмотр состава по шагам","detail.actual":"Фактический запрос {n}","detail.cache":"Кэш {n}%","detail.estTotal":"Примерно ≈ {n}","detail.lastStep":"Последний шаг","detail.output":"Вывод {n}","detail.step":"Поверните {t} · Шаг {s}","detail.turn":"Поверните {t} · {n} шагов","error":"Не удалось прочитать данные контекста:","error.retry":"Повторить","ev.compaction":"Контекст сжат (резюме заменено {n} сообщений)","ev.mode.plan.off":"Режим плана выключен","ev.mode.plan.on":"Режим планирования включён","ev.model":"Модель изменена: {a} → {b}","ev.prune":"Вывод инструмента обрезан","ev.skill":"Навык внедрён ({name})","events.at":"Поверните {t} · Шаг {s}","events.empty":"Событий контекста пока нет (компактизация, инъекции, переключения моделей отображаются здесь)","events.range":"Поверните {t} · Шаг {a}→{b}","events.rangeTo":"Поверните {a} · Шаг {as} → Поверните {b} · Шаг {bs}","events.title":"Контекстные события","files.chipTip":"{files} файлов · {ops} операций","files.deltaTip":"Совокупное изменение строк, оцененное по аргументам вызовов редактирования/записи: + добавлено / − удалено","files.empty":"Нет чтений, записей или поиска файлов в этом диапазоне","files.errs":"{n} не удалось","files.files":"{n} файлов","files.form.dir":"Каталог","files.form.image":"Изображение","files.form.text":"Файл","files.glyph.archive":"Архив","files.glyph.assets":"Активы","files.glyph.build":"Результат сборки","files.glyph.config":"Конфигурация","files.glyph.data":"Данные / манифест","files.glyph.database":"База данных","files.glyph.deps":"Зависимости","files.glyph.docker":"Docker","files.glyph.docs":"Документы","files.glyph.document":"Документ","files.glyph.font":"Шрифт","files.glyph.hidden":"Каталог метаданных","files.glyph.ignore":"Игнорировать правила","files.glyph.lang.c":"C","files.glyph.lang.cpp":"C++","files.glyph.lang.csharp":"C#","files.glyph.lang.dart":"Dart","files.glyph.lang.go":"Перейти","files.glyph.lang.html":"HTML","files.glyph.lang.java":"Java","files.glyph.lang.js":"JavaScript","files.glyph.lang.kotlin":"Kotlin","files.glyph.lang.lua":"Lua","files.glyph.lang.php":"PHP","files.glyph.lang.ruby":"Рубин","files.glyph.lang.rust":"Ржавчина","files.glyph.lang.scala":"Скала","files.glyph.lang.svelte":"Свелт","files.glyph.lang.swift":"Быстро","files.glyph.lang.ts":"TypeScript","files.glyph.lang.vue":"Вью","files.glyph.license":"Лицензия","files.glyph.lock":"Файл блокировки","files.glyph.log":"Войти","files.glyph.markdown":"Документ с разметкой","files.glyph.media":"Медиа","files.glyph.notebook":"Блокнот","files.glyph.python":"Питон","files.glyph.root":"Корневая папка рабочей области","files.glyph.scripts":"Скрипты","files.glyph.sheet":"Таблица","files.glyph.shell":"Оболочка","files.glyph.style":"Стили","files.glyph.tests":"Тесты","files.hits":"{n} попаданий","files.kind.all":"Все","files.kind.image":"Изображения","files.kind.read":"Читать","files.kind.search":"Искали","files.kind.write":"Написано","files.locate":"Показать эту операцию в Обозревателе контекста","files.noMatch":"Нет файлов, соответствующих текущим фильтрам","files.open":"Открыть на вашем устройстве","files.readEst":"Строк прочитано, оценка на основе аргумента limit","files.readTip":"Прочитайте строки {a}–{b}","files.scopeLatest":"До последнего · следует за выбором трендового графика","files.search":"Фильтровать по пути…","files.sort.count":"Самый активный","files.sort.latest":"Последние","files.sort.path":"По пути","files.sortTip":"Сортировать файлы по количеству операций (выбранного вида при активной метке вида), последней активности или пути","files.title":"Активность файла","footer":"Оценка: та же эвристика с фиксированной плотностью, что и встроенный tokenMeter в dsh (~4 символа ≈ 1 токен); «фактическое» — это использование, сообщаемое провайдером.","form.catalog":"Обновление каталога","form.context":"Контекстная инъекция","form.instructions":"Инструкции","form.notice":"Уведомление","form.recall":"Напомнить","form.relay":"Агентский ретранслятор","form.snapshot":"Снимок состояния","gran.delta":"Дельта","gran.modeHint":"Итого: суммарное значение; Дельта: изменение по сравнению с предыдущим запросом","gran.step":"Шаг","gran.total":"Всего","gran.turn":"Повернуть","kind.compaction":"Компактный","kind.inject":"Внедрить","kind.mode":"Режим","kind.model":"Переключить","kind.prune":"Обрезать","loading":"Чтение журнала сессии…","node.calls":"Звонки","node.empty":"(пустой ответ)","node.failed":"Выполнение инструмента завершилось с ошибкой","node.nonText":"(сообщение без текста)","node.skillTag":"Навык · {name}","node.snapshot":"Снимок:","node.toolResult":"Результат инструмента","nodes.empty":"Нет видимых сообщений прямо сейчас","nodes.hint":"в настоящее время видимые модели, сначала новые","nodes.more":"… {n} предыдущих сообщений пропущено","nodes.title":"Сообщения","overview.compactReserve":"Резерв автоуплотнения: автоуплотнение срабатывает при {pct}% окна — эта область обычно сохраняется как запас, фактически не используется.","overview.estimate":"токены (примерно)","overview.free":"Бесплатное окно","overview.ofUsed":"из использованного контекста","overview.title":"Текущий контекст","overview.used":"использовано контекста","plugin.github":"GitHub","plugin.hint":"Лучший плагин контекста для DSH ⭐","plugin.name":"Плагин","plugin.title":"Информация о плагине","rich.md":"Markdown","rich.raw":"Сырьё","rich.toMd":"Просмотреть как Markdown","rich.toRaw":"Просмотреть исходный текст","settings.collapse":"Свернуть","settings.desc":"Настройки отображения для панели Context","settings.expand":"Развернуть","settings.fileSort":"Сортировка файлов по умолчанию","settings.gran":"Гранулярность трендов по умолчанию","settings.mode":"Отображение трендов по умолчанию","settings.readOnly":"Настройки доступны только для чтения в этой среде","settings.title":"Контекст","stats.cacheHit":"Кэш-попадания","stats.compactions":"Компактизации","stats.cost":"Расч. стоимость","stats.costHit":"попадание","stats.costMiss":"пропустить","stats.costOut":"Вывод","stats.costPriceHead":"Тарифы за 1 миллион токенов (пиковый | внепиковый по половине цены):","stats.costTip":"Примерная совокупная стоимость всей сессии по прайс-листу DeepSeek: входные данные разделены по попаданию/промаху кэша, выходные данные включают рассуждения; каждый запрос оценивается по пиковой ставке (01:00–04:00, 06:00–10:00 UTC) или по половинной ставке вне пикового времени в зависимости от времени запроса. Применяется к deepseek-v4-flash / deepseek-v4-pro на любом провайдере; цены зафиксированы, только для справки.","stats.hint":"За период сохранённой истории (аналогично графику истории)","stats.images":"Изображения","stats.injects":"Инъекции","stats.prunes":"Чернослив","stats.steps":"Шаги","stats.title":"Статистика контекста","stats.toolCalls":"Вызовы инструментов","stats.turns":"Переключается","tab":"Контекст","tip.actual":"(фактическое {n})","tip.delta":"Дельта {n}","tip.step":"Повернуть {t} · Шаг {s}","tip.total":"Всего ≈ {n}","tip.turn":"Поверните {t} · {n} шагов","tool.desc":"Описание","tool.jsonHide":"Свернуть","tool.jsonToggle":"Просмотреть сырой JSON","tool.noMatch":"Нет инструментов, соответствующих текущему фильтру","tool.params":"Параметры","tool.paramsEmpty":"(без параметров)","tool.plugin":"Регистрирующий плагин этого инструмента (для справки)","tool.search":"Фильтровать по названию, описанию или параметрам…","tool.sort.name":"По имени","tool.sort.size":"По размеру","tool.sortTip":"Сортировать инструменты по размеру токена (по умолчанию) или по названию","tool.unknown":"Неизвестный плагин","tool.unknownTitle":"Инструмент был зарегистрирован до загрузки контекстного плагина, или его плагин был выгружен, поэтому его провайдер не может быть определен","tools.more":"из {n}","tools.top":"Лучшие схемы инструментов:","trend.empty":"Отправьте сообщение, и состав контекста каждого запроса модели появится здесь","trend.hint":"Наведите курсор для просмотра деталей, ✂ обозначает уплотнение/удаление, Шаг/Ход переключает детализацию","trend.title":"История контекста"},"dsh-image-gen":{"f.apiKeyEnv":"Справка по API-ключу","f.apiKeyEnvHint":"Ссылка на учетные данные / переменная окружения, содержащая ключ API FAL. Префикс авторизации \"Key \" добавляется автоматически.","f.baseURL":"Базовый URL очереди","f.baseURLHint":"Базовый URL очереди FAL (queue.fal.run).","f.customBaseURL":"Пользовательский API: базовый URL","f.customBaseURLHint":"Корень API без завершающего слеша. Запрос отправляется на {base}/images/generations.","f.customKeyEnv":"Пользовательский API: ссылка на ключ","f.customKeyEnvHint":"Ссылка на учётные данные / переменная окружения с API-ключом. Пустое значение означает отсутствие заголовка авторизации для шлюзов, которым он не требуется.","f.customModel":"Пользовательский API: модель","f.customModelHint":"Идентификатор модели, отправленный в этот API, например, gpt-image-1.","f.customSize":"Пользовательский API: фиксированный размер","f.customSizeHint":"Оставьте пустым, и именованный размер будет переведён автоматически (square_hd → 1024x1024). Указывайте размер только для API, требующих конкретных размеров.","f.defaultFormat":"Формат по умолчанию","f.defaultFormatHint":"Используется, если вызов инструмента не содержит output_format.","f.defaultSize":"Размер изображения по умолчанию","f.defaultSizeHint":"Используется, когда вызов инструмента пропускает параметр image_size.","f.deliverAs":"Как изображение попадает в чат","f.deliverAsHint":"ссылка — результат представляет собой текст со ссылкой, и карта отображает изображение из неё; работает с любой моделью чата. изображение — результат содержит само изображение, которое текстовые модели чата не могут прочитать, поэтому для этого требуется dsh-vision-bridge или модель с поддержкой зрения.","f.inherit":"Наследовать (по умолчанию)","f.model":"Модель (FAL)","f.modelHint":"Идентификатор модели FAL, вызывается как {baseURL}/{model}. Используется, когда провайдер — fal.","f.outputDir":"Выходной каталог","f.outputDirHint":"Относительно рабочего каталога сессии; абсолютный путь используется как есть.","f.pollIntervalMs":"Интервал опроса (мс)","f.pollIntervalMsHint":"Интервал опроса статуса во время выполнения задачи.","f.provider":"Поставщик","f.providerHint":"fal — очередь FAL, настроенная ниже. custom — любой API, совместимый с OpenAI, настраивается далее.","f.timeoutMs":"Таймаут (мс)","f.timeoutMsHint":"Общее время ожидания генерации: отправка + опрос + загрузка.","p.apiKeyEnv":"Пример: FAL_API_KEY","p.baseURL":"Пример: https://queue.fal.run","p.customBaseURL":"Пример: https://api.openai.com/v1","p.customKeyEnv":"Пример: OPENAI_API_KEY","p.customModel":"Пример: gpt-image-1","p.customSize":"Пример: 1024x1024","p.model":"Пример: fal-ai/flux-2/klein/9b","p.outputDir":"Пример: сгенерированные/изображения","p.pollIntervalMs":"Пример: 2000","p.timeoutMs":"Пример: 180000","settings.collapse":"Свернуть","settings.credentialHint":"API-ключи находятся в разделе Учетные данные в указанном наборе ссылок (Настройки → Учетные данные).","settings.description":"Инструмент generate_image. Провайдер: очередь FAL или любой API изображений, совместимый с OpenAI.","settings.discard":"Отменить","settings.expand":"Развернуть","settings.invalidNumber":"Введите корректное число","settings.navLabel":"Генерация изображений","settings.overridden":"Переопределить","settings.readOnly":"Это развертывание доступно только для чтения: настройки нельзя изменить через графический интерфейс.","settings.reset":"Сбросить","settings.save":"Сохранить","settings.saveFailed":"Не удалось сохранить","settings.saving":"Сохранение…","settings.title":"Генерация изображений","settings.unavailable":"Обвязка еще не опубликовала настройки этого плагина. Если она только что перезапустилась, раздел появится сам через несколько секунд.","settings.unsaved":"Несохранённые изменения"},"dsh-kanban":{"archive.empty":"В архиве пусто.","archive.hint":"Карточки, отстоявшие свой срок в «Выполнено». Ничего не удалено: возвращённая карточка встаёт в ту же колонку, откуда ушла.","archive.restore":"Вернуть на доску","archive.since":"в архиве {ago}","batch.hint":"Одна сессия на все. Задачи приходят по очереди: агент берёт следующую, закончив текущую. В «В работе» уезжает только первая — остальные ждут своей очереди там, где лежат.","batch.start":"Запустить","batch.title":"Запустить {n} задач в одном чате","board.allRepos":"Все репозитории","board.archive":"Архив","board.back":"В чат","board.backHint":"Закрыть доску и вернуться в разговор","board.clearFilters":"Снять отборы","board.collapse":"Свернуть колонку","board.empty":"Задач пока нет.","board.expand":"Развернуть колонку","board.limit":"предел {n}","board.loading":"Доска загружается…","board.newTask":"Задача","board.noMatch":"Ничего не найдено.","board.noRepo":"без проекта","board.pickArchive":"В архив","board.pickMove":"Перенести…","board.pickNone":"Снять выбор","board.pickStart":"Запустить выбранные","board.pickUnqueue":"Снять с очереди","board.pickedCount":"выбрано {n}","board.refresh":"Обновить","board.repo":"репозиторий","board.search":"Поиск","board.shown":"показано {shown} из {total}","board.someFailed":"Сделано у {done} из {total}, остальные отказали.","board.sync":"Сверить с Gitea","board.syncing":"Сверяю…","board.waitCount":"Ждут ответа: {n}","board.waitCountHint":"Задачи, где агент задал вопрос или просит разрешения.","board.waiting":"нужен человек","boardName.main":"Проектная доска","boardName.simple":"Простая доска","card.move":"перенести","card.pack":"пачка {at} из {total}","card.packHint":"Запущены вместе, одной сессией; агент берёт их в этом порядке.","card.pick":"Отметить для группового запуска","card.queue":"в очередь...","card.stop":"остановить","card.toChat":"перейти в чат","card.unqueue":"снять с очереди","chip.moveTo":"Перенести в","chip.note":"Оставить заметку","chip.noteHint":"Заметка дописывается в тело задачи. Тело уходит агенту первым сообщением, поэтому заметка до запуска попадёт в работу, а после запуска — нет.","chip.noteSave":"Дописать","chip.openCard":"Перейти к карточке","column.backlog":"Бэклог","column.cleanup":"Уборка","column.deploy":"Выкатка","column.done":"Выполнено","column.in-progress":"В работе","column.review":"Ревью","dialog.archived":"архив","dialog.bodyHint":"Уйдёт агенту первым сообщением при запуске задачи.","dialog.cancel":"Отмена","dialog.create":"Создать","dialog.fromGitea":"Из Gitea","dialog.imported":"уже на доске","dialog.kind":"Какая это задача","dialog.kindPlain":"Не проект","dialog.kindPlainHint":"Заметка, не относящаяся ни к какому репозиторию. Живёт на простой доске и в Gitea не попадает.","dialog.kindProject":"Проект","dialog.kindProjectHint":"В Gitea заводится issue, карточка привязывается к нему и живёт на проектной доске.","dialog.labelsHint":"через запятую","dialog.loadingRepos":"Репозитории загружаются…","dialog.noIssues":"Открытых issue не найдено.","dialog.noRepos":"Репозиториев нет","dialog.own":"Своя задача","dialog.pickRepo":"Выберите репозиторий","dialog.repo":"Репозиторий","dialog.repoNamePlaceholder":"имя нового репозитория, латиницей","dialog.repoNew":"— новый репозиторий —","dialog.repoNewHint":"Будет создан в организации: приватный и пустой, без README и заготовок. Создание репозитория отсюда не отменить.","dialog.taskBody":"Описание","dialog.taskColumn":"Колонка","dialog.taskLabels":"Метки","dialog.taskTitle":"Заголовок","dialog.title":"Новая задача","discard":"Отменить","error.bad-repo-name":"В имени репозитория допустимы только латинские буквы, цифры, точка, дефис и подчёркивание.","error.crossSite":"Запрос отклонён как межсайтовый.","error.giteaAbsent":"Плагин Gitea не установлен, импорт недоступен.","error.giteaUnconfigured":"Сначала настройте Gitea в карточке плагина Gitea.","error.issue-not-created":"Issue не заведён. Если репозиторий был новым, он остался — ничего не удалено.","error.issueNotFound":"Issue не найден.","error.modelNotSelected":"Модель не выбрана — задайте её в настройках или укажите здесь.","error.no-live-sessions":"Нет ни одной идущей сессии, в очередь ставить некуда.","error.permission-refused":"Уровень доступа не принят, задача не запущена.","error.permission-unavailable":"В этой сборке уровней доступа нет — задача не запущена, чтобы не пойти с бо́льшими правами, чем просили.","error.repo-not-created":"Репозиторий не создан; больше ничего не сделано.","error.repo-required":"Выберите репозиторий или назовите новый.","error.session-not-live":"Эта сессия больше не идёт.","error.sessionNotOpened":"Сессия поднята ({id}), но эта сборка не умеет в неё переключиться. Найдите её в списке сессий.","error.startFailed":"Не удалось поднять сессию.","error.task-not-queued":"Задача не стоит в очереди.","error.taskHasNoIssue":"За этой задачей нет issue в Gitea.","error.taskNotFound":"Задача не найдена.","error.titleRequired":"Нужен заголовок.","error.unknown":"Запрос не выполнен.","facet.author":"Автор","facet.priority":"Приоритет","facet.release":"Выпуск","facet.repo":"Репозиторий","facet.risk":"Риск","facet.scope":"Область","facet.signal":"Сигнал","facet.status":"Статус","facet.type":"Тип","field.archiveAfterDays":"Убирать в архив из «Выполнено» через, дней","field.boardToolEnabled":"Разрешить агенту двигать карточки","field.columnNames":"Свои названия колонок","field.defaultProjectRoot":"Корень проектов","field.giteaOwner":"Организация Gitea","field.giteaTokenRef":"Имя учётной записи","field.giteaUrl":"Адрес инстанса","field.pushToGitea":"Закрывать issue в Gitea","field.replyInstruction":"Постоянная приписка","field.staleAfterMin":"Считать задачу молчащей после, минут","field.startPrompt":"Шаблон первого сообщения","field.syncIntervalSec":"Сверяться с Gitea раз в, секунд","field.watchRepos":"Сузить подхват до репозиториев","field.webhookSecretRef":"Имя учётной записи для вебхука","field.wipInProgress":"Предел «В работе»","field.wipReview":"Предел «Ревью»","group.general":"Общее","group.gitea":"Gitea","group.limits":"Пределы колонок","group.sync":"Автоперемещение","hint.archiveAfterDays":"Считается с попадания карточки в «Выполнено». Ноль — оставлять всё на доске.","hint.boardToolEnabled":"Выключено, пока скилл воркфлоу запрещает этому CLI трогать канбан.","hint.columnNames":"Пары «идентификатор=Название» через запятую, например «backlog=Идеи, review=Проверка». Пусто — обычные названия.","hint.defaultProjectRoot":"Где лежат рабочие копии проектов. Пусто — рабочая папка харнесса.","hint.giteaOwner":"Чьи репозитории смотрит доска. Пусто — определится сама, пока у токена ровно одна организация.","hint.giteaTokenRef":"ИМЯ учётной записи DSH, в которой лежит токен. Сам токен сюда не вводить.","hint.giteaUrl":"Например https://gitea.example.com. Пусто — импорт недоступен.","hint.label":"Пусто — метка для этой колонки не ставится.","hint.limit":"Ноль — без предела. Превышение подсвечивается, но не запрещается.","hint.pushToGitea":"Карточка, дошедшая до «Выполнено», закрывает свой issue. Меток доска не ставит: стадия и так видна по ветке и pull request.","hint.replyInstruction":"Дописывается к каждому первому сообщению — например язык ответа. Пусто — ничего не добавляется.","hint.staleAfterMin":"Помечаются только задачи с сессией. Ноль отключает отметку.","hint.startPrompt":"Шаблон первого сообщения агенту. Пусто — встроенный шаблон.","hint.syncIntervalSec":"Ноль отключает сверку. Меньше пятнадцати секунд поднимается до пятнадцати.","hint.watchRepos":"Через запятую, «владелец/репо» или просто «репо». Пусто — все репозитории организации, где есть открытые задачи.","hint.webhookSecretRef":"ИМЯ учётной записи DSH с секретом вебхука Gitea. Пусто — остаётся только опрос.","move.backlog":"Работа по задаче останавливается: идущий ход агента будет прерван. Если сессии нет, карточка просто переедет.","move.cleanup":"Агент удалит ветку в Gitea, worktree и локальную ветку и запишет это в issue.","move.confirm":"Перенести","move.deploy":"Агент вольёт pull request и выкатит. Сам перенос в эту колонку И ЕСТЬ ваше «ок» на deploy — второй раз агент спрашивать не станет.","move.done":"Задача считается завершённой. Это решение человека: сам агент карточку сюда не переносит.","move.in-progress":"Агент получит команду начать или продолжить реализацию.","move.review":"Агент доведёт работу до ревью: снимет с pull request пометку черновика и запросит проверку.","move.title":"Перенести в «{column}»?","order.manual":"Как разложено","order.new":"Сначала новые","order.old":"Сначала старые","panel.agentPreset":"Профиль агента","panel.archive":"В архив","panel.author":"завёл {who}","panel.bodyLoading":"читаю описание…","panel.close":"Закрыть","panel.continue":"Продолжить","panel.continueHint":"У задачи один чат: открывается прежняя сессия, а не новая.","panel.created":"заведена {ago} назад","panel.delete":"Удалить","panel.deleteConfirm":"Удалить «{title}»? Отменить будет нельзя.","panel.issue":"Issue","panel.log":"Переходы","panel.message":"Сообщение агенту","panel.messageHint":"Правьте перед отправкой. Пустое — уйдёт встроенный текст.","panel.model":"Модель","panel.noLog":"Переходов пока нет.","panel.noModels":"У этого провайдера нет моделей","panel.noProviders":"Провайдеров нет","panel.openChat":"Открыть чат","panel.permission":"Уровень доступа","panel.pickModel":"Выберите модель","panel.pickProvider":"Выберите провайдера","panel.pickProviderFirst":"Сначала выберите провайдера","panel.presetDefault":"Как в харнессе по умолчанию","panel.provider":"Провайдер","panel.refresh":"Обновить из Gitea","panel.start":"Начать","panel.startHint":"Откроется отдельная сессия агента по этой задаче. Ветку и worktree заводит агент после preflight, а не отсюда.","panel.starting":"Запускается…","panel.updated":"последнее изменение {ago} назад","plan.counter":"{done} из {total}","plan.title":"План агента","queue.add":"В очередь","queue.hint":"Задача встанет в очередь сессии: агент возьмёт её, закончив текущую работу. До этого карточка остаётся там, где лежит.","queue.option":"{title} - задач: {n}","queue.session":"Сессия","queue.title":"Поставить в очередь идущей сессии","save":"Сохранить","section.label":"Канбан","settings.loading":"Настройки загружаются…","settings.readOnly":"Настройки в этой сессии доступны только для чтения.","settings.saveFailed":"Не сохранены поля: {fields}","settings.saved":"Сохранено.","settings.unavailable":"Хост не знает пространство настроек dsh-kanban. Перезапустите веб-интерфейс после установки плагина.","state.queued":"в очереди · {n}","state.running":"в работе","state.stopped":"остановился","stop.idle":"Агент не работал, останавливать было нечего.","stop.no-session":"У задачи нет сессии.","subtitle":"Доска задач: issue из Gitea и отдельная сессия под задачу","sync.failed":"сверка не проходит","sync.lastSeen":"последняя удачная сверка {ago} назад","sync.never":"сверки с Gitea ещё не было","sync.neverSeen":"удачной сверки с запуска харнесса не было","sync.okAgo":"сверено {ago} назад","sync.running":"сверяемся с Gitea…","time.day":"{n} дн","time.hour":"{n} ч","time.min":"{n} мин","time.now":"только что","title":"Канбан"},"dsh-market":{"actWhy":"Почему не активен?","agentBusyInstall":"Агент в настоящее время работает — дождитесь завершения (или отмените его) перед установкой. Установка изменяет файлы плагина, поэтому работающий агент может завершиться с ошибкой в процессе.","agentBusyUpdate":"Агент в настоящее время работает — дождитесь завершения (или отмените его) перед обновлением. Обновления заменяют файлы плагина на месте, поэтому работающий агент может завершиться с ошибкой или смешать версии в процессе выполнения.","aiFix":"Починить с агентом","aiFixConservative":"Действуй осторожно: чини только явные ошибки из списка выше (падения при запуске, дубли записей, подтверждённые расхождения зависимостей). Предупреждения и записи к сведению (например, неподтверждённые диапазоны peer-зависимостей) трогай, только если они связаны с явной ошибкой. Не делай лишних обновлений и перестановок; объясняй каждое изменение и жди подтверждения.","aiFixCopied":"Промпт скопирован — вставьте его в новый диалог и отправьте, когда будете готовы","aiFixDetect":"Шаг 1 — сначала определитесь. Прежде чем что-либо трогать, убедитесь, что процесс, в котором вы работаете, ЭТОТ экземпляр DeepSeek Harness, к которому относится данный профиль (то есть текущая диагностируемая композиция — это та, в которой вы сейчас находитесь). Проверьте, указывает ли текущий каталог / $DSH_HOME / командная строка на этот профиль или работает ли процесс внутри deepseek-harness. Если не можете определить, считайте, что ответ «да» (безопасный выбор).","aiFixFail":"Буфер обмена недоступен — скопируйте диагностику ниже вручную","aiFixHint":"Передать диагностику новой сессии агента (скопировано в буфер; отправлять или нет — решаете вы)","aiFixIfSelf":"Если ДА — вы являетесь этим инструментом: никогда не изменяйте текущую конфигурацию, инструмент или основные пакеты на месте (не редактируйте cordis.patch.yml, не меняйте порядок/включайте/отключайте пакеты, не устанавливайте/удаляйте/обновляйте плагины, не переустанавливайте зависимости, не обновляйте/перезапускайте dsh). Три шага: 1) только анализ в режиме чтения, ничего не изменяйте; 2) создайте apply.sh/.bat (изменения для этого исправления) и rollback.sh/.bat (полностью отменяет его); оба идемпотентны — apply создает снимки только если их еще нет и никогда не перезаписывает существующий снимок (если он существует, значит apply уже выполнялся, так что откатитесь или подтвердите перед повторным запуском), а rollback восстанавливает из этого снимка, так что частично выполненный apply все еще можно откатить, а повторный rollback безопасен; 3) дайте мне запустить apply во внешнем терминале и вставьте stdout/stderr обратно вам. Укажите причину и ждите моего подтверждения на каждом шаге — никогда не запускайте это самостоятельно.","aiFixIntro":"Помоги починить проблемы с плагинами DeepSeek Harness (профиль: {0}). Диагностика показала:","aiFixScope":"Можно менять порядок в dsh.profile.bundles, включать и выключать плагины, править cordis.patch.yml. Учти: официальные бандлы трогать нельзя; прежде чем что-то менять, изложи план.","all":"Все","alreadyInstalled":"✓ Установлен","approveBuilds":"Разрешить сборочные скрипты и повторить","autoBackup":"Резервная копия раз в сутки (при открытии маркета)","backTop":"Наверх","backupDone":"Копия загружена","backupDownload":"Выгрузить копию","backupHint":"Включает список плагинов и настройки профиля, но не node_modules. Восстановление ставит плагины заново по списку.","backupImport":"Импортировать и посмотреть","backupLocal":"Локальный файл","backupWorking":"Выполняется…","brokenBundleBanner":"Эти плагины теперь имеют клиентский пакет, который не будет обрабатываться; страница может отображаться пустой после обновления — рекомендуется выполнить откат:","buildsSkipped":"Этому плагину нужны сборочные скрипты; по умолчанию они заблокированы ради безопасности. Разрешите их и переустановите:","busyWait":"Уже выполняется другая операция — дождитесь её окончания (установка, обновление и удаление идут по одной)","cancel":"Отмена","cancelOp":"Отменить","cancelled":"Отменено","cancelling":"Отмена…","catConflict":"Конфликты","catDeps":"Зависимости","catInfo":"Информация","catOrder":"Порядок","catRisk":"Риск","catWarn":"Предупреждение","catsLess":"Свернуть","catsMore":"Ещё","checkBundles":"Порядок загрузки плагинов","checkBundlesEmpty":"Слои плагинов не объявлены","checkCommunity":"сообщество","checkDir":"каталог","checkDuplicates":"Повторяющиеся записи плагинов","checkDuplicatesEmpty":"Повторов нет","checkEntries":"записей (идентификаторы загрузчика)","checkErrors":"Ошибки","checkErrorsEmpty":"Ошибок нет","checkHoisted":"поднят","checkIssues":"Найдены проблемы","checkLoadFail":"Не удалось загрузить диагностику: ","checkLoading":"Анализ профиля…","checkMultiEmpty":"Пакетов ядра в нескольких версиях нет","checkMultiVersion":"Пакеты ядра в нескольких версиях","checkOfficial":"официальный","checkOrderTip":"порядок загрузки бандла сообщества конфликтует с объявленными правилами before/after","checkOrphans":"Неверные записи конфига","checkOrphansEmpty":"Неверных записей нет","checkOverridden":"переопределяет","checkOverrides":"Переопределения","checkOverridesEmpty":"Переопределений нет","checkPatch":"файл патча","checkPeerEmpty":"Расхождений версий зависимостей нет","checkPeerInfo":"{0} записей к сведению (не подтверждено)","checkPeerInfoTier":"Информация о зависимостях","checkPeerInfoTierEmpty":"Нет записей информационных зависимостей","checkPeerMismatches":"Расхождения версий зависимостей","checkPeerOverview":"расхождений: {0} · к сведению: {1}","checkPeerRisk":"Риски зависимостей","checkPeerRiskEmpty":"Нет несоответствий уровней риска зависимостей","checkPeerSatisfied":"Удовлетворены зависимости","checkPeerSatisfiedEmpty":"Нет удовлетворяющих записей зависимостей","checkPeerWarning":"Предупреждения о зависимостях","checkPeerWarningEmpty":"Нет несоответствий зависимостей на уровне предупреждений","checkProfile":"профиль","checkRange":"объявленный диапазон","checkRefresh":"Проверить заново","checkResolved":"разрешённая версия","checkSatisfied":"удовлетворено","checkSource":"источник","checkUnknown":"неизвестно","checkUnsatisfied":"не удовлетворено","checkWarnings":"Предупреждения","checkWarningsEmpty":"Предупреждений нет","cmdDetails":"Команда установки","comments":"Комментарии","commentsError":"Не удалось загрузить комментарии. Проверьте подключение и попробуйте снова.","commentsLoading":"Загрузка комментариев…","commentsNote":"Комментарии поступают из GitHub Discussions. Открытие этого подключается к giscus.app и GitHub; для публикации требуется аккаунт GitHub.","commentsOnGitHub":"Прочитайте обсуждение на GitHub","commentsRetry":"Попробуйте снова","commentsTitle":"Комментарии","compatRiskBanner":"Обнаружен риск несовместимости — откройте Диагностику перед перезапуском или откатите эту операцию.","confirm":"Подтвердить","confirmInstall":"Подтвердить установку","confirmRemove":"Подтверждаете?","confirmTitle":"Установка","confirmWarn":"Плагины — сторонний код сообщества. Устанавливая, вы доверяете этому источнику; сборочные скрипты по умолчанию заблокированы.","conflictBody":"Конфликт с установленным плагином — остаться может только один:","conflictDeclined":"Вы сохранили установленные плагины; этот не был установлен","conflictDetails":"Детали","conflictKeep":"Оставить то, что у меня есть","conflictKeepNote":"Оставить этот","conflictOutcomeInstall":"установить","conflictOutcomeKeep":"оставить","conflictOutcomeRemove":"удалить","conflictOutcomeSkip":"пропустить","conflictReplaceFailed":"Замена не завершена. Перечисленные ниже плагины были удалены и не восстановлены — проверьте их:","conflictReplacing":"Замена…","conflictReverted":"Отменено автоматически; ничего не было изменено","conflictSwap":"Переключиться на этот","conflictSwapNote":"Настройки удалённых плагинов сохраняются, чтобы вы могли установить их позже","conflictTitle":"Невозможно установить: конфликт с установленным плагином","conflictWhy":"cordis отклоняет дерево плагинов, содержащее дублирующиеся идентификаторы записей; сохранение этого плагина предотвратит запуск DeepSeek Harness.","credsWarning":"Внимание: в копию попадают настройки профиля и файлы, где могут лежать секреты (config.toml, .env и подобные). Локальная выгрузка ничего не вырезает, поэтому выгружайте на WebDAV, которому доверяете.","deprecatedBadge":"Устарел","deprecatedWarn":"Каталог помечает этот плагин как устаревший; новым пользователям ставить его не советуют.","descCollapse":"Показать меньше","descExpand":"Показать больше","diagExplain":"Что это","diagExplainText":"Эта страница ищет плагины, конфликтующие друг с другом, несовпадения версий зависимостей и неверный порядок загрузки. Термины:","diagOkAll":"Всё в порядке: конфликтов, проблем с зависимостями и порядком не найдено","diagTermBundle":"бандл — один пакет плагина, применяется по порядку","diagTermEntry":"запись — то, что плагин добавляет в работающую композицию","diagTermOrder":"порядок загрузки — очерёдность активации; более поздний может перекрыть более ранний","diagTermOrphan":"неверная запись — конфиг ссылается на то, чего нет","diagTermPeer":"peer-зависимость — пакет, который плагин ждёт от хоста","diagTermShadow":"перекрытие — старая копия из плагина закрывает более новую хостовую","disable":"Выключить","disabledState":"Выключен","dismiss":"Скрыть","dismissNotice":"Скрыть это уведомление","duplicateNames":"Плагины с одинаковыми именами (к сведению, это не конфликт)","empty":"Подходящих плагинов нет","enable":"Включить","envFix":"Настроить автоматически","envFixFail":"Автоматическая настройка не удалась — выгрузите журнал и пришлите нам файл","envFixing":"Настройка…","envMissing":"Перед установкой плагинов нужен один небольшой компонент","exportLog":"Выгрузить журнал","exportLogFail":"Не удалось выгрузить журнал","exportedLog":"Журнал выгружен: dsh-market-log.txt — приложите его к обращению","exportingLog":"Выгрузка…","filter":"Фильтр","filterDir":"Порядок","filterSort":"Поле сортировки","filterTime":"Вышло за","firstPage":"В начало","gist":"GitHub Gist","gistCreated":"Выгружено:","gistErrAuth":"GitHub не авторизовал: токен неверный или истёк, либо gh CLI не залогинен","gistErrInvalid":"Содержимое Gist повреждено или формат копии не поддерживается","gistErrNetwork":"GitHub недоступен — проверьте сеть или прокси","gistErrNoId":"Для обновления нужен идентификатор Gist — заполните поле или переключитесь на «Создать»","gistErrNotFound":"Gist не найден — проверьте идентификатор или ссылку","gistErrRateLimit":"Достигнут лимит GitHub, либо у токена нет права gist","gistErrTimeout":"GitHub не ответил вовремя — проверьте сеть и повторите","gistExport":"Выгрузить в Gist…","gistExportDone":"Выгружено в Gist","gistExportGo":"Выгрузить","gistExportHint":"Отмечено всё — полная копия вместе с настройками; если снять любую галочку, выгрузятся только выбранные плагины, а настройки — по отдельному флажку.","gistExportSelect":"Выберите плагины для выгрузки","gistId":"Идентификатор или ссылка на Gist (при выгрузке оставьте пустым, чтобы создать новый приватный)","gistImport":"Загрузить из Gist","gistIncludeConfig":"Включить файлы настроек (в них могут быть секреты)","gistModeCreate":"Создать новый приватный Gist","gistModeUpdate":"Обновить Gist из поля","gistNoPlugins":"В этом профиле нечего выгружать","gistNote":"В отличие от локальной выгрузки (архив на этой машине), Gist нужен для переноса между машинами: выгрузите в приватный Gist и загрузите на другом компьютере под тем же аккаунтом. Токен живёт только в памяти этой вкладки и никогда не пишется в браузерное хранилище; если залогинен gh CLI или задан DSH_GITHUB_TOKEN, вводить его не нужно. Gist приватный, до 1 МБ на файл.","gistSelectAll":"Выбрать все","gistSelectNone":"Снять выбор","gistSpecLocal":"локально","gistSrcEnv":"переменная DSH_GITHUB_TOKEN","gistSrcGh":"gh CLI","gistSrcToken":"введён вручную","gistToken":"Токен GitHub (только в памяти вкладки — после обновления страницы введите заново; оставьте пустым, чтобы использовать серверный DSH_GITHUB_TOKEN или залогиненный gh CLI)","gistVerify":"Проверить связь","gistVerifySource":"Проверено — источник токена: {0}","goDiagnose":"Открыть диагностику","gotIt":"Понятно","groupAdd":"Добавить плагин","groupAddEmpty":"Все установленные плагины уже в этой группе","groupAddTheme":"Добавить тему","groupAssign":"Назначить","groupConfirmDelete":"Удалить группу?","groupCreate":"Создать","groupDelete":"Удалить группу","groupEmpty":"Пока пусто","groupMixed":"Включена частично","groupNamePh":"Название группы","groupNew":"Новая группа","groupRemove":"Убрать","groupRename":"Переименовать","hostDependencyMore":"ещё находок пропущено: {0}","hostDependencyWarning":"Плагин перечисляет в зависимостях известные общие пакеты хоста DSH. Это может перекрыть хостовую версию; проверка смотрит только манифест и не подтверждает, что в рантайме появился дубль:","hotBanner":"плагины готовы — обновите страницу, чтобы ими пользоваться","install":"Установить","installFail":"Установить не удалось","installReplacement":"Установить замену","installedBadge":"✓ Установлен","installedEmpty":"Плагинов сообщества пока нет — загляните во вкладку «Обзор»","installing":"Установка…","lastPage":"В конец","lightboxClose":"Закрыть предпросмотр","lightboxNext":"Следующий","lightboxPrev":"Предыдущий","linkedDev":"подключён как разработка","loadFail":"Не удалось загрузить каталог плагинов, попробуйте позже","loadRetry":"Повторить","loading":"Загрузка каталога…","localOnly":"Адрес WebDAV и учётные данные остаются только в этом браузере.","marketNoToggle":"Сам маркет выключить нельзя","marketUpdate":"Доступно обновление маркета — обновить","nav":"Маркет плагинов","nextPage":"Дальше","noGroups":"Групп пока нет — создайте","notInstalled":"Не установлен","noteAdd":"Заметка","noteEdit":"Редактировать заметку","noteMine":"Моя заметка","notePlaceholder":"Опишите это своими словами. Это заменит описание автора.","noteSave":"Сохранить","noteSeeMine":"Вернуться к моей заметке","noteSeeTheirs":"Показать описание автора","noteTheirs":"Оригинал","notesCommits":"Коммиты","notesCommitsRecent":"Последние коммиты (могут не совпадать с установленной версией — только для справки)","notesLink":"Что изменилось","notesLoadFail":"Обновления сейчас недоступны — попробуйте позже.","notesNone":"Этот плагин не публикует заметки об обновлениях.","notesNpm":"Время публикации версии","notesRelease":"Заметки о выпуске","opBlockedCard":"Невозможно установить · подробности","opClear":"Очистить выполненные","opClose":"Свернуть","opDequeue":"Удалить из очереди","opDone":"Готово","opDoneRefresh":"Установлено · обновите страницу для применения","opEmpty":"Нет операций в процессе выполнения","opEmptyHint":"Здесь отображается прогресс установки, обновления и удаления","opInstalling":"Установка","opKind_install":"Установить","opKind_uninstall":"Удалить","opKind_update":"Обновить","opLeaveHint":"Вы можете покинуть эту страницу; вы получите уведомление, когда процесс завершится","opNeedsChoice":"Не удалось установить · откат выполнен автоматически, ничего не изменилось","opNeedsYou":"нужен вам","opQueued":"В очереди","opQueuedAhead":"впереди:","opRetry":"Повторить","opRunning":"Работает","opTitle":"Задачи","orderAlreadyOptimal":"Текущий порядок уже удовлетворяет всем правилам и зависимостям — переставлять нечего","orderApplied":"✓ Применено — перезапустите, чтобы вступило в силу","orderApply":"Применить порядок","orderAutoSort":"Отсортировать автоматически","orderConflicts":"конфликты before/after в текущем порядке","orderDiffHint":"Этот порядок изменит композицию: переопределений {0}, потерянных записей {1}, дублей {2}","orderDown":"↓","orderDrag":"Перетащите, чтобы изменить порядок","orderDragHint":"Тяните ⠿, чтобы переставить; «Применить порядок» сохранит","orderReset":"Сбросить черновик","orderSection":"Порядок загрузки","orderSuggestApply":"Применить предложенный порядок","orderSuggestHint":"Предложенный порядок (отсортирован по правилам before/after):","orderTrialFail":"Статическая проверка композиции не прошла: {0}","orderUp":"↑","orphanBundle":"⚠️ Следующий запуск завершится ошибкой: профиль объявляет эти пакеты, но они не установлены. Переустановите их или удалите из dsh.profile.bundles в файле package.json профиля:","orphanIdRequired":"нет идентификатора","orphanInsertNotArray":"неверный формат","orphanInsertTargetMissing":"цель не найдена","orphanInsertTargetNotGroup":"цель не является группой","orphanNameMismatch":"имя не совпадает","orphanPatchTargetMissing":"цель не найдена","orphanReasonOther":"другое","packagesDone":"обработано пакетов: {0}","pageInfo":"Страница {0} из {1}","partialNote":"Отменено — часть изменений уже применена","patchDisabled":"Выключен патчем","patchForced":"Включён патчем","peerInfoUnverified":"непроверенный","peerRiskAboveMax":"выше явного максимума","peerRiskBelowMin":"ниже заявленного минимума","peerWarnAboveMax":"выше объявленной верхней границы","peerWarnOptional":"необязательный участник","perPage":"На странице","phaseBuilding":"Сборочные скрипты","phaseDownloading":"Загрузка","phaseLinking":"Связывание","phaseResolving":"Разрешение зависимостей","presetApplied":"Применено — перезапустите, чтобы применить","presetApply":"Применить","presetBundleCount":"{0} наборов","presetDelete":"Удалить","presetDeleted":"Пресет удалён","presetDisable":"отключить плагины {0}","presetEmpty":"Нет сохранённых пресетов","presetEnable":"включить плагины {0}","presetFail":"Не удалось выполнить предустановленную операцию:","presetHint":"Сохраните текущий порядок пакетов и список отключенных как пресет и переключайтесь в любое время; применение запускает проверку перед началом пробного периода и сначала создает снимок.","presetListFail":"Не удалось загрузить пресеты:","presetName":"Название пресета","presetNameEmpty":"Введите имя предустановки","presetNoop":"нет изменений","presetPreview":"Предпросмотр","presetPreviewFail":"Не удалось выполнить предварительный просмотр:","presetPreviewTitle":"Применение этого пресета приведёт к:","presetReorder":"переупорядочить {0} наборы","presetSave":"Сохранить текущее состояние","presetSaved":"Пресет сохранён","presetSaving":"Сохранение…","presetSection":"Пресеты плагинов","prevPage":"Назад","progressHint":"Первая установка скачивает и разрешает зависимости — крупные плагины занимают 1–3 минуты","published":"выпущен","readme":"README","reconciledNote":"Удалено, но pnpm сообщил об ошибке при завершении (обычно это заблокированный файл). Профиль уже согласован — повторная попытка не требуется.","refresh":"Обновить","refreshBanner":"изменения применены — обновите страницу, чтобы их увидеть","replacementHint":"Каталог предлагает","repoLink":"Посмотреть репозиторий на GitHub","restartBanner":"изменения внесены — перезапустите DeepSeek Harness","restartFail":"Перезапустить не удалось","restartHint":"Как перезапустить: остановите текущий процесс dsh и запустите его снова (например, dsh web)","restartHintSupervised":"Этот процесс является собственным сервисным процессом {0}, поэтому перезапуски относятся к нему — перезапуск отсюда завершит процесс передачи вместе с cgroup, и сервис не восстановится. Используйте systemctl restart <ваш юнит>. Если ваш юнит может пережить самостоятельный перезапуск (KillMode=process), включите параметр \"Разрешить перезапуск\" в настройках этого плагина.","restartNow":"Перезапустить","restartTimeout":"Не дождались запуска DeepSeek Harness","restarting":"Перезапуск…","restore":"Восстановить","restoreBootError":"Не удается загрузиться после восстановления:","restoreConfirm":"Восстановление перезапишет настройки этого профиля и переустановит плагины. Продолжить?","restoreContinue":"Продолжить обновление","restoreDone":"Восстановление завершено — перезапустите DeepSeek Harness","restoreFail":"Не удалось восстановить","restoreHint":"Это удалит локальную версию, переустановит версию из каталога и сохранит проверку обновлений. Это действие нельзя отменить — подтвердите ещё раз.","restoreMissing":"Плагинов из копии не установлено: {0}","restoreNoCatalog":"Этот плагин отсутствует в курируемом каталоге, поэтому его нельзя восстановить. Удалите локальную копию или продолжайте разрабатывать её локально.","restorePartial":"Восстановление продолжилось, но эти плагины установить не удалось:","restorePreviewDone":"Копия загружена. Проверьте вкладку «Установленные» и запускайте восстановление.","restoreStart":"Начать восстановление","restoreUnportable":"указывает на абсолютный путь с другой машины, который здесь не существует — перенаправьте его локально или переустановите плагин","rollbackNow":"Откатить","rollingBack":"Откат изменений…","searchPh":"Поиск плагинов: уведомления, терминал, память…","setCardDesc":"Версия маркета, обновление и удаление.","setChannel":"Канал обновлений","setChannelBeta":"Бета","setChannelBetaHint":"Ранний доступ к непроверенным версиям. Влияет только на рынок плагинов.","setChannelDev":"Разработка","setChannelDevHint":"Непроверенные сборки из ветки разработки. Не рекомендуются для общего использования.","setChannelStable":"Стабильный","setChannelStableHint":"Только выпущенные версии.","setChannelSwitch":"Переключиться на","setChannelSwitchHint":"Эта версия ниже установленной.","setRegion":"Скачать регион","setRegionAuto":"Выбрано на основе проверки сети. Можете изменить в любое время.","setRegionChina":"Китай, материковая часть","setRegionChinaHint":"Быстрее в материковом Китае. Изменяет маршрут загрузки, не источник.","setRegionGlobal":"Глобальный","setRegionGlobalHint":"Загрузки напрямую из npm и GitHub.","setSelfCancel":"Отмена","setSelfConfirm":"Удалить маркет плагинов? Поставить его заново можно будет только из командной строки.","setSelfFailed":"Операция не удалась","setSelfPurge":"Заодно стереть данные маркета","setSelfPurgeOff":"Данные маркета сохранятся. Учтите: плагины, которые он выключил, останутся выключенными, а интерфейса, чтобы вернуть их, после удаления не будет.","setSelfPurgeOn":"Будут удалены: список выключенных плагинов, свои группы и строки выключения, которые маркет записал в патч профиля, — выключенные им плагины снова заработают. Паролей и токенов это не касается: маркет их на диск не пишет.","setSelfRemove":"Удалить маркет плагинов","setSelfRemoveConfirm":"Удалить","setSelfRemoveHint":"Удаляет маркет из этого профиля. Остальные плагины не трогаются.","setSelfRemoved":"Удалён","setSelfRemovedHint":"Перезапустите DeepSeek Harness, чтобы завершить.","setSelfRestartAfter":"Перезапустить DeepSeek Harness сразу после удаления","setSelfRestartingHint":"Перезапуск DeepSeek Harness…","setSelfUpToDate":"Обновлений нет","setSelfUpToDateHint":"Актуально, обновление не требуется","setSelfUpdate":"Обновить","setSelfUpdateHint":"Обновление скачает новую версию; она заработает после перезапуска.","setSelfUpdateReady":"Доступна новая версия:","setSelfUpdatedHint":"Скачано. Перезапустите DeepSeek Harness, чтобы обновление вступило в силу: страница обновляется сразу, серверная половина — нет.","setSelfWorking":"Удаление…","shadowNameBanner":"Эта операция оставила одно имя плагина, определенное в двух слоях; после перезапуска загрузится только один:","snapCreate":"Создать снимок","snapCreateFail":"Не удалось создать снимок:","snapCreated":"Снимок создан","snapCreating":"Создание…","snapDelete":"Удалить","snapDeleteConfirm":"Подтвердить удаление","snapDeleteConfirmText":"Этот снимок нельзя будет восстановить после удаления.","snapDeleteFail":"Не удалось удалить снимок:","snapDeleted":"Снимок удалён","snapDeleting":"Удаление…","snapEmpty":"Снимков пока нет","snapFiles":"файлы","snapHint":"Снимки создаются автоматически перед применением изменений; вы также можете создать их вручную и откатиться в любой момент.","snapListFail":"Не удалось загрузить снимки:","snapRestore":"Восстановить","snapRestoreConfirm":"Подтвердите восстановление","snapRestoreConfirmText":"Восстановление перезаписывает текущий package.json профиля и конфигурацию из снимка; это действие нельзя отменить (создайте новый снимок, если не уверены).","snapRestoreFail":"Не удалось восстановить:","snapRestored":"Восстановлено — перезапустите для применения","snapRestoring":"Восстановление…","snapSection":"Снимки & Откат","sortAdded":"Дата выпуска","sortAsc":"По возрастанию","sortDesc":"По убыванию","sortDownloads":"npm загрузки (30д)","sortNewest":"Сначала новые","sortOldest":"Сначала старые","sortStars":"Звёзды","stateBroken":"Установлен, но не прошёл проверку","stateDisabled":"Выключен","stateInert":"Установлен, но не является плагином слоя профиля","stateLive":"Работает (загружен на лету)","stateRestart":"Установлен — перезапустите, чтобы применить","submitPlugin":"Хотите, чтобы ваш плагин был добавлен в список?","subtitle":"Плагины сообщества для DeepSeek Harness","switchOnLabel":"Включено","tabAdvanced":"Дополнительно","tabBackup":"Копия и восстановление","tabDiagnostics":"Диагностика","tabDiscover":"Обзор","tabGroups":"Группы","tabInstalled":"Установленные","tabList":"Список","tabThemes":"Темы","terminalWarn":"Похоже, это плагин для терминала: в веб-профиле он может ничего не делать или даже сломать запуск DeepSeek Harness. Прочитайте его README и ставьте в тот профиль, для которого он написан.","themeActive":"Активна","themeApply":"Применить","themeDeactivate":"Отключить","themeEmpty":"Других тем в каталоге пока нет — следите за обновлениями","themeExitFullscreen":"Выйти из полноэкранного режима","themeFullscreen":"Просмотр в полноэкранном режиме","themePreview":"Предпросмотр","themePreviewCount":"{0} предпросмотры","themePreviewLoading":"Поиск предварительного просмотра…","themePreviewMissing":"Предпросмотр недоступен","themeResultCount":"{0} темы","timeAll":"Всё время","timeDay":"Сутки","timeMonth":"30 дней","timeQuarter":"90 дней","timeWeek":"7 дней","timeYear":"Год","toastReady":"установлен и работает","toastTheme":"теперь активна. Переключить можно в «Настройки → Маркет плагинов → Темы»","toastToggledOff":"теперь выключено — перестало работать сразу","toastToggledOn":"включён","toggleFail":"Переключить не удалось","ungrouped":"Без группы","uninstall":"Удалить","uninstallConfirmDesc":"Плагин будет удалён из текущего профиля.","uninstalling":"Удаление…","upToDate":"Обновлений нет","update":"Обновить","updateAll":"Обновить все","updateFail":"Обновить не удалось","updateNow":"Обновить сейчас","updated":"✓ Обновлён — перезапустите, чтобы применить","updatedLive":"✓ Обновлён — работает","updating":"Обновление…","versionHint":"Версия маркета плагинов — указывайте её при обращении","viewReplacement":"Посмотреть замену","viewSource":"Исходник","webdav":"WebDAV","webdavNote":"Адрес WebDAV и имя пользователя остаются только в этом браузере; пароль хранится на сервере и вводится заново каждую сессию.","webdavPassword":"Пароль (необязательно)","webdavPreset":"Готовая настройка провайдера","webdavRestore":"Восстановить с WebDAV","webdavUpload":"Выгрузить копию","webdavUrl":"Адрес файла копии","webdavUser":"Имя пользователя (необязательно)"},"dsh-skill-hub":{"badge.source.bundled":"встроенный","badge.source.custom":"свой каталог","badge.source.project-agents":"проект .agents","badge.source.project-dsh":"проект .dsh","badge.source.runtime":"runtime","badge.source.user-agents":"пользователь .agents","badge.source.user-dsh":"пользователь .dsh","delete.confirm":"В корзину","delete.confirmText":"Переместить «{name}» в корзину? Его можно восстановить в любой момент.","delete.confirmTitle":"В корзину?","detail.addedAt":"Добавлен","detail.back":"К списку","detail.groups":"Группы","detail.loading":"Загрузка текста навыка…","detail.path":"Путь","detail.provider":"Провайдер","detail.updatedAt":"Обновлён","detail.uses":"Вызовы","detail.whenToUse":"Когда применять","entry.label":"Навыки","entry.tooltip":"Центр навыков: просмотр, группировка и синхронизация локальных навыков","err.dismiss":"Понятно","filter.allSources":"Все источники","filter.private":"Личные","form.busy":"Создание…","form.cancel":"Отмена","form.capabilityHint":"Как выбрать способность: повторяемый метод → навык; внешняя система → MCP; долгосрочные знания → база знаний.","form.desc":"Описание (одно предложение для маршрутизации)","form.descPlaceholder":"Одна строка — что делает (с триггерными словами); по этому описанию агенты активируют навык","form.error":"Ошибка создания: ","form.name":"Имя навыка (kebab-case, например code-review)","form.root":"Целевой каталог","form.submit":"Создать","form.success":"Создано: ","group.bundled":"Встроенные","group.custom":"Пользовательские каталоги","group.other":"Другие источники","group.project-agents":"Проектные .agents/skills","group.project-dsh":"Проектные .dsh/skills","group.runtime":"Runtime","group.user-agents":"Пользовательские ~/.agents/skills","group.user-dsh":"Пользовательские ~/.dsh/skills","groups.closeAll":"Закрыть все","groups.conflictText":"Эти навыки включены и в других группах; их закрытие затронет и те группы:","groups.conflictTitle":"Закрыть эту группу?","groups.delete":"Удалить сценарий","groups.edit":"Изменить","groups.empty":"Сценариев ещё нет. Создайте один и начните раскладывать навыки.","groups.keepOn":"Оставить включёнными","groups.membersHint":"Отметьте навыки, чтобы добавить их в сценарий (включая отключённые).","groups.merge":"Объединить","groups.namePlaceholder":"Название сценария","groups.new":"Новый сценарий","groups.noCollections":"Групп по источникам пока нет. Импортируйте навыки из маркета — они сгруппируются по источникам.","groups.noWritable":"В группе нет перезаписываемых навыков (состояние навыков «только чтение» нельзя менять из центра)","groups.personal":"Личные","groups.project":"Проектные","groups.rename":"Сохранить название","groups.saveMembers":"Сохранить состав","groups.subdivide":"Разделить","legend.hint":"У навыка не более одной точки; нет точки = не вызывается.","legend.model":"Вызывается моделью — агенты могут вызывать автоматически","legend.user":"Вызывается пользователем — только явный вызов","market.add":"Добавить","market.addPlaceholder":"owner/repo или https://github.com/…","market.addSource":"Добавить источник","market.branchConfirm":"Подтвердить","market.branchHint":"У репозитория нет релизов. Выберите ветку для отслеживания (по умолчанию main):","market.branchTitle":"Выберите ветку","market.catalog.anthropics":"Официальная коллекция навыков Anthropic (Claude Skills)","market.catalog.mattpocock":"Коллекция навыков Matt Pocock","market.catalog.openDesign":"Коллекция навыков дизайна (design-templates)","market.catalog.superpowers":"Коллекция навыков сообщества Superpowers","market.catalogHint":"Отобранные репозитории навыков — добавьте, чтобы сканировать и устанавливать, с постоянной проверкой обновлений.","market.check":"Проверить","market.checkAll":"Проверить все","market.checkUpdate":"Проверить обновления","market.checking":"Проверка…","market.deleteSource":"Удалить источник","market.deletedUpstream":"Удалено в источнике: {count}","market.installed":"Установлено: {count}","market.newRelease":"Новая версия v{version}","market.noSources":"Источников пока нет. Добавьте из каталога ниже или введите репозиторий GitHub.","market.removeHint":"Удаление источника не затрагивает установленные навыки.","market.scan":"Сканировать","market.scanning":"Сканирование…","market.sync":"Синхронизировать","market.syncCancel":"Пропустить","market.syncNone":"Из этого репозитория пока не импортировано ни одного навыка.","market.syncText":"Источник выровнен с {ref}. Обновить эти локальные навыки?","market.syncTitle":"Обновить локальные навыки","market.syncing":"Синхронизация…","market.title":"Маркет","market.upToDate":"Актуально","market.updatable":"Обновляемо: {count}","market.update":"Обновить","market.updateAll":"Обновить всё","market.updateAllConfirmText":"Обновляемые навыки этих источников будут перезаписаны их новейшими версиями из источника:","market.updateAllConfirmTitle":"Обновить все навыки?","market.updateAllDone":"Обновлено источников: {count}","market.updateAllItem":"{repo} (навыков: {count})","market.updateCount":"Обновить {count}","market.updated":"Есть обновления","panel.count":"Всего навыков: {count}","panel.diagnostics":"Диагностика обнаружения","panel.disabled":"Отключено","panel.disabledCount":"Отключено: {count}","panel.empty":"Нет подходящих навыков.","panel.emptyAll":"Навыков пока нет. Создайте первый.","panel.enabled":"Включено","panel.incomplete":"(каталог может быть неполным)","panel.loading":"Загрузка…","panel.new":"Новый навык","panel.search":"Поиск навыков…","panel.title":"Центр навыков","panel.workspaceClear":"Очистить рабочую область","panel.workspaceHint":"Укажите путь проекта, чтобы показать навыки его .dsh/skills и .agents/skills (только чтение); очистите и нажмите Enter, чтобы вернуться к пользовательскому виду.","panel.workspacePlaceholder":"Путь рабочей области (Enter — применить)","repo.cancel":"Отмена","repo.cancelled":"Отменено · {imported}/{total} сохранено, временные файлы удалены","repo.clearAll":"Очистить","repo.empty":"Импортируемых навыков не найдено.","repo.existing":"Существующие","repo.failed":"Не удалось: {count}","repo.files":"Файлов: {count} · {size}","repo.import":"Импортировать выбранные ({count})","repo.imported":"Импортировано: {count}","repo.importing":"Импорт…","repo.importingCurrent":"Импорт: {name} ({done}/{total})","repo.ready":"Найдено импортируемых навыков: {count}","repo.root.designTemplates":"Шаблоны design-templates","repo.root.generic":"{root}","repo.root.skills":"Навыки (skills)","repo.selectAll":"Выбрать все","repo.skippedExisting":"Пропущено существующих: {count}","row.delete":"В корзину","row.disable":"Отключить","row.enable":"Включить","row.open":"Подробнее о навыке {name} (Enter)","row.readonly":"только чтение","settings.announceToAgent":"Объявлять агенту","settings.announceToAgentHint":"Добавляет раздел в системный промпт, чтобы агенты знали, как сотрудничать, когда пользователь упоминает управление навыками.","settings.collapse":"Скрыть настройки","settings.description":"Управление локальным каталогом навыков dsh: просмотр, группировка, синхронизация источников и создание.","settings.discard":"Отменить","settings.dotModelColor":"Цвет точки «вызывается моделью»","settings.dotModelColorHint":"Цвет синей точки «модель может вызвать» в панели навыков и чате/меню (#rrggbb).","settings.dotUserColor":"Цвет точки «вызывается пользователем»","settings.dotUserColorHint":"Цвет зелёной точки «только пользователь» в панели навыков и чате/меню (#rrggbb).","settings.enabled":"Включить плагин","settings.enabledHint":"Отключает маршруты, элементы и объявление центра навыков.","settings.expand":"Показать настройки","settings.inherit":"Наследовать","settings.notExposed":"Это развёртывание не предоставляет пространство настроек.","settings.off":"Выкл","settings.on":"Вкл","settings.overridden":"Переопределено","settings.readOnly":"Настройки этого развёртывания доступны только для чтения.","settings.reset":"Сбросить к значению по умолчанию","settings.save":"Сохранить","settings.saveFailed":"Развёртывание не приняло эти значения; они оставлены для исправления.","settings.saving":"Сохранение…","settings.showGroupSummary":"Показывать сводку по группам","settings.showGroupSummaryHint":"После заголовков групп показывать число вызовов и время последнего вызова.","settings.showUseCount":"Показывать число вызовов","settings.showUseCountHint":"Показывать янтарный счётчик вызовов рядом с именем навыка.","settings.showUseTime":"Показывать время последнего вызова","settings.showUseTimeHint":"Показывать относительное время в строке имени (например «3 дн назад»).","settings.statsScanMinutes":"Интервал автостатистики (минут)","settings.statsScanMinutesHint":"Как часто фоновое сканирование журналов сессий выполняется (минимум 1); тяжёлые сканирования автоматически растягивают интервал.","settings.statsWindowDays":"Окно статистики (дней)","settings.statsWindowDaysHint":"Учитывать использование только за последние N дней (по умолчанию 14); 0 = вся история. Изменения применяются сразу.","settings.title":"Центр навыков","settings.unsaved":"Есть несохранённые","sort.added":"По дате добавления","sort.name":"По названию","sort.uses":"По числу вызовов","source.check":"Проверить обновления","source.checkHint":"Нажмите, чтобы проверить источник на обновления","source.checking":"Проверка…","source.clearTrash":"Очистить корзину","source.clearTrashConfirm":"Удалить безвозвратно","source.clearTrashConfirmText":"Навыки в корзине будут удалены безвозвратно и не могут быть восстановлены.","source.clearTrashConfirmTitle":"Очистить корзину?","source.commit":"Синхронизированная ревизия","source.deleteConfirmText":"Эти навыки удалены из источника; их локальные каталоги уйдут в корзину (восстановимо):","source.deleteConfirmTitle":"Согласиться с удалением в источнике?","source.deleteGroup":"Удалить группу","source.deleteGroupHint":"Удалить все навыки ({count}) этой группы","source.deleteGroupText":"Все навыки ({count}) группы «{name}» будут перемещены в корзину (восстановимо); навыки «только чтение» будут пропущены:","source.deleteGroupTitle":"Удалить группу?","source.deleted":"Удалено в источнике: {count}","source.error":"Проверка не удалась","source.followDelete":"Согласиться с удалением","source.private":"Личный навык (не привязан к источнику; проверки обновлений нет)","source.restore":"Восстановить","source.sync":"Синхронизировать","source.syncConfirmText":"Локальные изменения этих навыков будут перезаписаны новейшими версиями из источника:","source.syncConfirmTitle":"Синхронизировать навыки?","source.syncing":"Синхронизация…","source.throttled":"Недавно проверено","source.trash":"Корзина","source.unverified":"источник ещё не проверен","source.upToDate":"Актуально","source.updated":"Обновлений: {count}","time.daysAgo":"{value} дн назад","time.hoursAgo":"{value} ч назад","time.justNow":"только что","time.minutesAgo":"{value} мин назад","time.weeksAgo":"{value} нед назад","update.available":"Доступно обновление: v{version} (текущая v{current})","update.check":"Проверить обновления","update.checking":"Проверка…","update.error":"Не удалось проверить обновления: {error}","update.newVersion":"Новая версия v{version}","update.unavailable":"Нет доступных релизов","update.upToDate":"Актуальная версия: v{version}","update.viewRelease":"Открыть релиз","view.flat":"Списком","view.grouped":"По группам","view.market":"Маркет","view.scenes":"Сценарии","view.sources":"Источники"},"dsh-subscriptions":{"accountLabel":"Аккаунт","addAccount":"+ Добавить аккаунт","cardIntro":"Подписки, ротация и ограничения аккаунтов.","connect":"Подключить","connected":"Подключено","coolingDown":"Охлаждение","disconnect":"Отключить","hide":"Скрыть","intro":"Войдите с помощью потребительской подписки. Токены остаются в хранилище учетных данных хоста. Браузер никогда не читает их обратно. После подключения, если провайдер перенаправляет на localhost или страницу поставщика, вставьте перенаправленный URL или код сюда.","loading":"Загрузка…","notConnected":"Не подключено","pastePlaceholder":"Вставьте перенаправленный URL или код","plan":"План","reconnect":"Переподключиться","removeSlot":"Удалить слот","save":"Сохранить","saved":"Сохранено","show":"Показать","storedAs":"Хранится как","submitCode":"Отправить код","title":"Подписки","usageFull":"Использование 100%","useOrigin":"Используйте этот источник Web UI как redirect_uri для OAuth","useOriginHint":"Не включайте, если вы не зарегистрировали собственный OAuth-клиент для этого источника. CLI-клиенты поставщиков обычно требуют опубликованный URI перенаправления и шаг вставки.","verifyAccount":"Подтвердить аккаунт","verifyLink":"Откройте ссылку для подтверждения","verifyPrefix":"Google требует одноразовой проверки аккаунта.","verifySuffix":"затем переподключитесь."},"dsh-tts":{"addProvider":"Добавить провайдера","announce":"Объявлять одобрения","announceHint":"Произнесите вслух и воспроизведите мелодию, когда агент остановится для подтверждения или задаст вопрос.","approvalHint":"Сказано, когда запрашивается одобрение; добавляется название инструмента.","approvalText":"Формулировка одобрения","azureHint":"Необходимо для поставщика Azure, например, eastus.","azureRegion":"Регион Azure","bargeIn":"Замолкать, когда вы говорите","bargeInHint":"Перестаньте читать, как только микрофон откроется.","binHint":"Ищется в PATH, если не указан абсолютный путь.","cardHint":"Цепочка провайдеров, голоса и параметры воспроизведения.","chainHint":"Сверху вниз указан порядок резервирования. Ключи облака сохраняются в хранилище учетных данных хоста, никогда в настройки плагина.","chainHintCard":"Выберите провайдера, вставьте его API-ключ и сохраните (или оставьте поле ключа пустым). Ключ сразу записывается в хранилище учетных данных хоста. Браузер никогда не читает его обратно.","chainTitle":"Цепочка поставщиков","chime":"Звонок","chimeHint":"динь, бип или ничего.","clear":"Очистить","configured":"Настроено","down":"Вниз","edgeBin":"бинарный файл edge-tts","edgeHint":"Python CLI из пакета edge-tts.","espeakBin":"Бинарный файл eSpeak","espeakHint":"Обычно espeak-ng.","fromEnv":"Задано в окружении","general":"Общие","language":"Язык","languageHint":"Подсказка для голосов, которым требуется локаль (eSpeak, Azure SSML).","loading":"Загрузка…","localProvider":"Локальный / CLI провайдер — без API-ключа","notSet":"Не задано","piperBin":"Бинарный файл Piper","piperModel":"Путь к модели Piper","piperModelHint":"Абсолютный путь к модели ONNX. Оставьте пустым, чтобы пропустить Piper.","questionHint":"Используется, когда агент задаёт вопрос. Если оставить пустым, функция будет отключена.","questionText":"Формулировка вопроса","rate":"Скорость воспроизведения","rateHint":"От 0.5 до 2. Синтез не изменяется; браузер воспроизводит быстрее или медленнее.","remove":"Удалить","save":"Сохранить","saved":"Сохранено","speakAsItGoes":"Говорите по мере проигрывания","speakAsItGoesHint":"Читайте каждый ответ сразу, как только он появляется, предложение за предложением, вместо ожидания всей очереди.","speakReplies":"Озвучивать ответы агента","speakRepliesHint":"Когда включено, каждый завершённый ответ синтезируется на хосте и воспроизводится в этом браузере. Аудио не отправляется обратно в модель.","title":"Речь","up":"Вверх"},"dsh-voice":{"addCustom":"Добавить своего провайдера","addProvider":"Добавить поставщика","browserFailed":"Браузер не распознал:","browserHint":"браузер выполняет распознавание, ключ не требуется","cancel":"Отмена","chainHint":"Сверху вниз — порядок, в котором они проверяются","clearKey":"Очистить ключ","composerUnavailable":"Композитор недоступен","customHint":"Любой OpenAI-совместимый API. Название становится доступным в цепочках выше.","customKeyName":"название ключа","customModel":"модель","customModelHint":"модель для запроса (пустое значение означает встроенную)","customName":"имя, используемое в цепочке","customTitle":"Ваши собственные провайдеры","deepinfraHint":"openai/whisper-large-v3-turbo · ключ DEEPINFRA_API_KEY","dictationBtn":"Голосовой ввод","dictationHint":"Речь обрезается на паузах, а текст добавляется к вводу.","dictationPill":"Диктовка — текст добавляется к вводу","down":"Вниз","fireworksHint":"whisper-v3-turbo · ключ FIREWORKS_API_KEY","general":"Общие","hide":"Скрыть","holdHint":"Удерживайте — отпустите, чтобы отправить","hotkey":"Клавиша голосового сообщения","hotkeyHint1":"Держите для записи, отпустите, чтобы отправить агенту, Esc отменяет.","hotkeyHint2":"Подойдёт любая клавиша: буква, F-клавиша или модификатор.","keepPending":"Не отправлять","keySpace":"Пространство","keyUnset":"не задано","language":"Язык","listening":"Слушаю в браузере…","loadingSettings":"Загрузка настроек…","localHint":"устанавливается при запуске сервера","messageBtn":"Голосовое сообщение — нажмите или удерживайте","messageHint":"Одна целая запись, отправленная агенту после расшифровки.","messagePill":"Запись голосового сообщения","messageTitle":"Голосовое сообщение","micUnavailable":"Микрофон недоступен: требуется HTTPS или localhost","mistralHint":"voxtral-mini-latest · ключ MISTRAL_API_KEY","noRecorder":"Этот браузер не поддерживает MediaRecorder","notReady1":"Харнесс ещё не объявил настройки этого плагина. Если он только что перезапустился,","notReady2":"раздел появится сам через несколько секунд.","nothingHeard":"Ничего не было распознано","openaiHint":"whisper-1 · ключ OPENAI_API_KEY","openrouterHint":"google/gemini-2.5-flash · ключ OPENROUTER_API_KEY","openrouterWarning":"У OpenRouter нет /audio/transcriptions — используйте там шаблон openai-chat-audio","pauseHint":"Меньшее значение означает более частые фрагменты и быстрый текст, но выше риск разрыва слова","pauseMs":"Пауза, завершающая фразу, мс","pressKey":"Нажмите клавишу…","recognitionError":"распознавание не удалось","recordSlot":"Запись голоса","remove":"Удалить","save":"Сохранить","saveFailed":"Некоторые поля не были сохранены —","saved":"Сохранено ✓","secondsShort":"с","sendingIn":"Отправка агенту через","siliconflowHint":"FunAudioLLM/SenseVoiceSmall · ключ SILICONFLOW_API_KEY","stop":"Стоп","title":"Голос","transcribing":"Транскрибируем…","undoHint":"Как долго ещё можно отменить автоматическую отправку","undoMs":"Окно отмены, мс","up":"Вверх","whisperAutostart":"Автозапуск локального whisper","whisperBin":"Локальный шепот: бинарный","whisperBinHint":"используется при включённом автозапуске","whisperEndpoint":"Локальный whisper: адрес","whisperEndpointHint":"POST /inference сервера whisper.cpp","whisperModel":"Локальная модель Whisper"},"feedback":{"action.dislike":"Плохой ответ","action.dislikeActive":"Убрать оценку","action.like":"Хороший ответ","action.likeActive":"Убрать оценку","error.conflict":"Эту оценку изменили в другом месте; показано актуальное состояние","error.generic":"Не удалось сохранить оценку","error.load":"Не удалось загрузить оценку","note.aria":"Комментарий к оценке","note.cancel":"Отмена","note.dialog":"Отзыв","note.open":"Добавить комментарий","note.placeholder":"Что получилось хорошо, а что нет? (необязательно)","note.save":"Сохранить"},"goal":{"action.cancel":"Отменить правку","action.clear":"Снять цель","action.edit":"Изменить цель","action.pause":"Приостановить цель","action.resume":"Продолжить цель","action.save":"Сохранить цель","commandInput.aria":"Ввод команды","objective.aria":"Формулировка цели","phase.active":"Цель в работе","phase.blocked":"Цель заблокирована","phase.paused":"Цель на паузе"},"im-hub":{"f.agentCwd":"Рабочая папка","f.agentCwdHint":"Папка для сессий агента; пусто — папка процесса dsh.","f.agentMaxMessageLength":"Длина сообщения","f.agentMaxMessageLengthHint":"Максимум символов в исходящем сообщении; длинные ответы разбиваются.","f.agentModel":"Модель","f.agentModelHint":"Переопределить модель; пусто — как задано в установке.","f.agentProvider":"Провайдер","f.agentProviderHint":"Переопределить провайдера модели; пусто — как задано в установке.","f.allowedUserIdsHint":"Идентификаторы через запятую; пусто — доступ всем (для боевой работы не советуем).","f.configured":"Задано","f.enabled":"Включено","f.enabledHint":"Общий выключатель всего IM-шлюза.","f.feishuAllowedUserIds":"Разрешённые open id","f.feishuAppId":"App id","f.feishuAppIdHint":"App id приложения Feishu (cli_…).","f.feishuAppSecret":"App secret","f.feishuEnabled":"Включено","f.feishuEnabledHint":"Включить адаптер Feishu по постоянному WebSocket-соединению (публичный адрес не нужен).","f.httpHost":"Адрес привязки","f.httpHostHint":"Адрес, на котором слушают HTTP-серверы в режиме вебхуков.","f.httpPort":"Порт привязки","f.httpPortHint":"Порт, на котором слушают HTTP-серверы в режиме вебхуков.","f.inherit":"Наследовать","f.larkAllowedUserIds":"Разрешённые open id","f.larkAppId":"App id","f.larkAppSecret":"App secret","f.larkEnabled":"Включено","f.larkEnabledHint":"Включить международный адаптер Lark (open.larksuite.com).","f.mockEnabled":"Включено","f.mockEnabledHint":"Адаптер только для тестов: локальный HTTP-эндпоинт без учётных данных платформы.","f.mockPort":"Порт","f.mockPortHint":"Фиксированный HTTP-порт тестового эндпоинта (0 — любой свободный).","f.notConfigured":"Не задано","f.off":"Выкл","f.on":"Вкл","f.secretHint":"Хранится на сервере и больше не показывается. Оставьте пустым, чтобы сохранить текущее значение.","f.telegramAllowedUserIds":"Разрешённые id пользователей","f.telegramEnabled":"Включено","f.telegramEnabledHint":"Включить адаптер Telegram Bot API с опросом обновлений.","f.telegramToken":"Токен бота","f.telegramTokenHint":"Токен от @BotFather (123456:ABC-DEF…).","f.wecomAgentId":"Agent id","f.wecomAgentIdHint":"Agent id приложения WeCom.","f.wecomAllowedUserIds":"Разрешённые id пользователей","f.wecomCorpId":"Corp id","f.wecomCorpIdHint":"Идентификатор организации из консоли WeCom.","f.wecomCorpSecret":"App secret","f.wecomEnabled":"Включено","f.wecomEnabledHint":"Включить адаптер WeCom с обратным вызовом (нужен публичный адрес).","f.wecomEncodingAesKey":"EncodingAESKey","f.wecomToken":"Токен обратного вызова","g.agent":"Агент","g.feishu":"Feishu (Китай)","g.general":"Общие","g.http":"HTTP (режим вебхуков)","g.lark":"Lark (международный)","g.mock":"Тестовый адаптер","g.telegram":"Telegram","g.wecom":"WeCom (WeChat Work)","p.agentCwd":"Например: /home/user/projects/my-agent (пусто — папка DSH)","p.agentMaxMessageLength":"Например: 4000","p.agentModel":"Например: deepseek-v4-flash (пусто — по умолчанию)","p.agentProvider":"Например: volcengine (пусто — по умолчанию)","p.feishuAllowedUserIds":"Например: ou_xxxxxxxxxxxxx","p.feishuAppId":"Например: cli_xxxxxxxxxxxxx","p.feishuAppSecret":"App Secret приложения Feishu","p.httpHost":"Например: 0.0.0.0","p.httpPort":"Например: 8080","p.larkAllowedUserIds":"Например: ou_xxxxxxxxxxxxx","p.larkAppId":"Например: cli_xxxxxxxxxxxxx","p.larkAppSecret":"App Secret приложения Lark","p.mockPort":"Например: 9099 (0 — автоматически)","p.telegramAllowedUserIds":"Например: 123456789, 987654321","p.telegramToken":"Например: 123456789:AA...","p.wecomAgentId":"Например: 1000002","p.wecomAllowedUserIds":"Например: ivanov, petrov","p.wecomCorpId":"Например: wwxxxxxxxxxxxxxx","p.wecomCorpSecret":"Secret приложения WeCom","p.wecomEncodingAesKey":"EncodingAESKey из 43 символов","p.wecomToken":"Токен адреса обратного вызова","settings.collapse":"Свернуть","settings.description":"Подключает агентов dsh к Feishu (Lark), WeCom и Telegram. Каждый чат получает свою сессию агента.","settings.discard":"Отменить","settings.expand":"Развернуть","settings.invalidNumber":"Введите корректное число","settings.overridden":"Переопределено","settings.readOnly":"Установка доступна только для чтения: настройки из интерфейса не меняются.","settings.reset":"Сбросить","settings.save":"Сохранить","settings.saveFailed":"Сохранить не удалось","settings.saving":"Сохранение…","settings.title":"IM-шлюз (dsh-im-hub)","settings.unsaved":"Есть несохранённые изменения"},"job":{"count.idle.few":"{count} фоновые задачи","count.idle.many":"{count} фоновых задач","count.idle.one":"{count} фоновая задача","count.idle.other":"{count} фоновых задач","count.live.few":"{count} фоновые задачи выполняется","count.live.many":"{count} фоновых задач выполняется","count.live.one":"{count} фоновая задача выполняется","count.live.other":"{count} фоновых задач выполняется","duration.hours":"{hours} ч {minutes} мин","duration.minutes":"{minutes} мин {seconds} с","duration.seconds":"{seconds} с","duration.title.done":"Заняло {duration}","duration.title.live":"Выполняется {duration}","list.aria":"Фоновые задачи","status.completed":"завершена","status.failed":"ошибка","status.killed":"отменена","status.running":"выполняется","status.stopping":"останавливается"},"model":{"action.reload":"Обновить","blocked.composer":"Эта модель недоступна — выберите другую, чтобы продолжить","command.description":"Выбрать модель для этого диалога","effort.providerDefault":"По умолчанию","empty.efforts":"У этой модели нет уровней рассуждения.","empty.models":"Доступных моделей нет.","error.action":"Операция с моделью не удалась: {message}","menu.aria":"Модель и уровень рассуждения","menu.effort":"Уровень рассуждений","menu.model":"Модель","option.loadError":"Каталог не загрузился: {message}","status.loading":"Обновление списка моделей…","trigger.aria":"Выбор модели, сейчас {model}","trigger.ariaEffort":"Выбор модели, сейчас {model}, уровень рассуждения {effort}","trigger.fallback":"Выбрать модель","trigger.selectAria":"Выбрать модель","warning.groupLoad":"{name} не загрузился: {message}"},"permission.access":{"confirm.acknowledge":"Я понимаю риски и хочу продолжить","confirm.cancel":"Отмена","confirm.description":"Полный доступ убирает часть подтверждений и позволяет агенту действовать напрямую, включая чувствительные операции, изменение файлов и внешние команды. Включайте, только если доверяете текущей задаче.","confirm.enable":"Включить полный доступ","confirm.title":"Включить полный доступ?"},"pin":{"action.pin":"Закрепить","action.unpin":"Открепить"},"plan":{"chip.off.aria":"Режим плана выключен, нажмите, чтобы включить","chip.off.title":"Режим плана выключен — нажмите, чтобы включить (/plan)","chip.on.aria":"Режим плана включён, нажмите, чтобы выключить","chip.on.title":"Режим плана включён — нажмите, чтобы выключить (/plan off)"},"plugin-store":{"dialog.close":"Закрыть магазин плагинов","header.open":"Открыть магазин плагинов","header.title":"Магазин плагинов DSH","settings.tab":"Магазин плагинов","store.analyzeFailed":"Передать разбор агенту не удалось","store.analyzeHint":"Отправить эту ошибку в новую сессию агента для разбора.","store.analyzeSent":"Отправлено агенту","store.analyzeWithAgent":"Попросить агента разобраться","store.analyzing":"Создаём сессию агента…","store.cancel":"Отмена","store.category":"Категория","store.categoryAll":"Все категории","store.confirmInstall":"Установить плагин","store.confirmRemove":"Удалить плагин","store.confirmUpdate":"Обновить плагин","store.copied":"Ссылка для установки скопирована","store.copyInstall":"Скопировать ссылку для установки","store.disclaimer":"Наличие в каталоге не подтверждает работоспособность, совместимость, безопасность или качество.","store.done":"Готово","store.empty":"Под эти фильтры ничего не подходит","store.install":"Установить","store.installFailed":"Установить не удалось","store.installSuccess":"Установлено. Перезапустите DSH Web, чтобы плагин заработал.","store.installed":"Установлен","store.installedLoadFailed":"Список установленных плагинов недоступен","store.installedOnly":"Только установленные","store.installing":"Установка…","store.loadFailed":"Не удалось загрузить каталог","store.loadMore":"Показать ещё","store.loading":"Загрузка каталога плагинов…","store.openDetails":"Открыть карточку в магазине","store.refresh":"Обновить каталог","store.refreshFailed":"Каталог не обновился; показаны последние успешные данные","store.remove":"Удалить плагин","store.removeDetail":"Меняется только зависимость текущего профиля. Чтобы удаление вступило в силу, перезапустите DSH Web.","store.removeFailed":"Удалить не удалось","store.removeLead":"Плагин будет удалён из текущего профиля DSH Web.","store.removeSuccess":"Удалено. Перезапустите DSH Web, чтобы изменение вступило в силу.","store.removeTitle":"Удаление плагина","store.removing":"Удаление…","store.results":"{visible} из {total} проектов","store.retry":"Повторить","store.riskAcknowledge":"Я понимаю риск и хочу установить этот сторонний плагин","store.riskDetail":"Присутствие в каталоге не является проверкой безопасности, совместимости или качества. Установленный код выполняется с правами процесса DSH, а чтобы он заработал, DSH Web нужно перезапустить.","store.riskLead":"В текущий профиль DSH Web будет установлен код из стороннего репозитория.","store.riskTitle":"Подтверждение риска стороннего плагина","store.search":"Поиск по названию, автору, описанию или теме","store.sort":"Сортировка","store.sortName":"Название","store.sortRecommended":"Рекомендуемые","store.sortStars":"Звёзды","store.sortUpdated":"Недавно обновлённые","store.stars":"звёзд: {count}","store.topicListed":"Указана тема","store.update":"Обновить","store.updateAvailable":"Есть обновление","store.updateRiskDetail":"Обновление заменит версию плагина в этом профиле. Чтобы оно вступило в силу, перезапустите DSH Web.","store.updateRiskLead":"В текущий профиль DSH Web будет установлена более новая ревизия стороннего репозитория.","store.updateRiskTitle":"Подтверждение обновления стороннего плагина","store.updateSuccess":"Обновлено. Перезапустите DSH Web, чтобы плагин заработал.","store.updated":"Каталог обновлён {date}","store.updating":"Обновление…","store.validation.check-failed":"Проверка структуры не пройдена","store.validation.check-pending":"Проверка структуры в очереди","store.validation.check-running":"Идёт проверка структуры","store.validation.expired":"Нужна повторная проверка","store.validation.inconclusive":"Требует рассмотрения","store.validation.not-applicable":"Вне проверки плагинов","store.validation.recorded":"Есть запись о проверке","store.validation.sandbox-failed":"Проверка в песочнице не пройдена","store.validation.sandbox-pending":"Проверка в песочнице в очереди","store.validation.sandbox-running":"Идёт проверка в песочнице","store.validation.security-review":"Проверка безопасности","store.validation.unrecognized":"Требует опознания","store.validation.verified":"Проверен","store.verified":"Проверен","store.verifiedOnly":"Только проверенные"},"question":{"action.next":"Дальше","action.skip":"Пропустить вопрос","custom.placeholder":"Впишите свой ответ","error.incomplete":"Сначала ответьте на этот вопрос.","error.unanswered":"Выберите вариант или впишите свой ответ.","nav.cancel":"Закрыть все вопросы","nav.maximize":"Развернуть карточку вопроса","nav.minimize":"Свернуть карточку вопроса","nav.next":"Следующий вопрос","nav.prev":"Предыдущий вопрос","option.recommended":"Рекомендуем","plan.approve":"Утвердить","plan.decline":"Отклонить","plan.discuss":"Обсудить","plan.header":"Проверка плана"},"reference":{"candidate.file":"Файл","candidate.folder":"Папка","candidate.noCwd":"(нет cwd)","candidate.session":"Сессия","section.files":"Файлы и папки","section.sessions":"Диалоги сессий"},"session-log-download":{"dialog.close":"Закрыть","dialog.commandFailed":"Не удалось запустить экспорт сессии.","dialog.errorTitle":"Экспорт сессии не удался","dialog.preparingDescription":"Готовится ZIP с этой сессией, её подсессиями и вложениями.","dialog.preparingTitle":"Экспорт сессии","dialog.successDescription":"Браузер загружает ZIP с сессией.","dialog.successTitle":"Загрузка сессии началась"},"settings":{"close":"Закрыть","general.nav":"Общие","openDocument":"Открыть файл настроек","openDocument.error":"Не удалось открыть файл настроек","title":"Настройки","trigger":"Настройки"},"settings.agentPreset":{"brokenBadge":"Не загрузился","brokenNoCopy":"Пресет, который не загрузился, скопировать нельзя","builtIn":"Встроенный","builtInGroup":"Встроенные","cancel":"Отмена","close":"Закрыть","composition":"Композиция (agent.cordis.yml)","copyIntro":"Пресет копируется целиком на этой машине. Идентификатор станет именем каталога и позже не меняется; всё остальное правится в файлах самого пресета.","copyOf":"Скопирован с","copyTitle":"Скопировать пресет","create":"Создать","creating":"Создание…","creatorDraft":"Набросать свой пресет в режиме «Конструктор»","customGroup":"Свои","delete":"Удалить","deleteConfirm":"Удалить","deleteDescription":"Каталог пресета будет удалён. Уже запущенные на нём сессии продолжат работать, но выбрать его для новых нельзя.","deleteTitle":"Удалить этот пресет?","deleting":"Удаление…","description":"Действует на сессии, запущенные с этого момента. Работающие сессии остаются на своём пресете.","displayName":"Название","displayNamePlaceholder":"Показывается в списке; по умолчанию — идентификатор","duplicate":"Скопировать","duplicateUnavailable":"В этой установке нет каталога пресетов с правом записи","error":"Не удалось загрузить пресеты агента.","headerHint":"Пресет агента, на котором идёт сессия; зафиксирован при запуске","idInvalid":"Строчные буквы, цифры и дефисы, начиная с буквы или цифры.","idRequired":"Задайте пресету идентификатор.","idTaken":"Пресет с таким идентификатором уже есть.","inUse":"Используется","loading":"Загрузка пресетов…","nav":"Пресеты агента","noDescription":"Без описания.","openLocation":"Открыть папку","presetCodeDescription":"Всё, что умеет обычный режим, но инструменты отдаются через Code Mode SDK: модель собирает многошаговые операции в одну программу на TypeScript.","presetCodeName":"Режим кода","presetCordisDescription":"Для создания своих пресетов: всё из обычного режима плюс инспекция рантайма, опыты с плагинами и подсказки по авторству пресетов.","presetCordisName":"Конструктор","presetId":"Идентификатор","presetIdPlaceholder":"my-agent","presetMinimalDescription":"Агент из двух инструментов: постоянный bash и str_replace_editor.","presetMinimalName":"Минимальный режим","presetStandardDescription":"Полноценный кодинг-агент: правка файлов, консоль, поиск по файлам и в вебе, скиллы, планирование, цели, субагенты и воркфлоу.","presetStandardName":"Обычный режим","retry":"Повторить","revealedPathLabel":"Файлы пресета:","seatHint":"Пресет агента для сессии, которую вы собираетесь запустить","sectionIntro":"Пресет — это состав плагинов, на котором работает агент сессии: его инструменты, промпт и возможности. Скопируйте готовый и допилите под себя или попросите агента набросать свой в режиме «Конструктор».","setDefault":"Сделать основным","showLocation":"Показать расположение","title":"Пресет агента","userTrust":"Свой","view":"Посмотреть"},"settings.commandcode":{"accountAdd":"Добавить аккаунт","accountDefault":"Основной аккаунт","accountKey":"API-ключ","accountKeyHint":"API-ключ этого аккаунта. Если оставить поле пустым, сохранённый ключ останется без изменений.","accountLabel":"Название аккаунта","accountRemove":"Удалить","accountsHint":"Когда активный аккаунт достигает лимита использования (429) или его ключ недействителен (401), запросы переключаются на следующий аккаунт; когда все аккаунты исчерпаны, ошибка указывает ближайшее время сброса окна.","accountsTitle":"Смена аккаунта","activeAccount":"Активный аккаунт","activeAccountAuto":"Авто (первый доступный аккаунт)","activeAccountHint":"Закрепите предпочтительный аккаунт; применяется к следующему запросу после сохранения. Если выбранный аккаунт исчерпан, запросы будут перенаправлены на другой доступный аккаунт.","advancedInvalid":"Число в расширенных настройках не готово к сохранению; раскройте, чтобы исправить.","advancedOverriddenMany":"{count} настроено","advancedOverriddenOne":"1 настроенный","advancedSettings":"Дополнительно","advancedSettingsHint":"Редко используемые параметры: базовый URL API, рабочая директория, тайм-ауты и фильтрация моделей.","apiBase":"Базовый URL API","apiBaseHint":"По умолчанию используется https://api.commandcode.ai; обычно оставляйте как есть.","apiKey":"API-ключ","apiKeyHint":"Создайте его в консоли commandcode.ai. Если оставить это поле пустым, сохранённый ключ останется без изменений.","apiKeyLocked":"Ключ предоставлен только для чтения","apiKeySet":"Настроено","apiKeyUnset":"Не настроено","cancel":"Отмена","cardConfiguredHint":"API-ключ готов. Чтобы заменить его, добавить ротацию аккаунтов, проверить использование или изменить базовый API, откройте страницу \"Command Code\" в Настройках.","cardLoadingHint":"Загрузка конфигурации командного кода…","cardRegistrationHint":"Эта карта предоставлена плагином Command Code; для отображения всех элементов управления требуется более новая версия DeepSeek Harness.","cardRouteActive":"Активный","cardTitle":"Подключение командного кода","discard":"Отменить","filterModelsByPlan":"Скрыть модели вне тарифного плана","filterModelsByPlanHint":"Если включено, в выборе моделей отображаются только те, что входят в вашу подписку; при наличии баланса кредитов по запросу показывается полный каталог.","hide":"Скрыть","intro":"Настройте подключение к Command Code Provider. API-ключ сохраняется только в локальной службе учетных данных и никогда не отображается; остальные поля записываются в пользовательские настройки и вступают в силу при следующем запросе.","invalidNumber":"Недопустимый номер","loginButton":"Войдите в Command Code","loginCancel":"Отменить вход","loginCancelled":"Вход отменён.","loginDenied":"Доступ запрещён. Попробуйте снова или вставьте ключ вручную.","loginFailedGeneric":"Не удалось войти; попробуйте снова или вставьте ключ вручную.","loginHintIdle":"Не хотите создавать ключ вручную? Войдите в систему, и ваш браузер откроет страницу авторизации commandcode.ai; одобренный ключ сохранится в локальном сервисе учетных данных и будет применяться к следующему запросу.","loginInvalidKey":"Доставленный ключ не прошел проверку (401). Попробуйте снова или вставьте его вручную.","loginNetwork":"Не удалось подключиться к сервису Command Code для проверки ключа; проверьте подключение к сети и повторите попытку.","loginOpenLink":"Откройте страницу авторизации ↗","loginStarting":"Запуск локального серверного обработчика callback…","loginStoreFailed":"Не удалось сохранить ключ в локальной службе учетных данных; вставьте его вручную.","loginSuccess":"Вошли как","loginTimeout":"Истекло время ожидания ответа авторизации; попробуйте снова.","loginTitle":"Войти, чтобы получить ключ","loginUnavailable":"Вход в систему недоступен в этой среде; вставьте {API key} вместо этого.","loginWaiting":"Ожидание авторизации в вашем браузере…","nav":"Код команды","numberTooLarge":"Превышено допустимое максимальное значение (2147483647 мс)","numberTooSmall":"Должно быть не менее 1 (мс)","overridden":"Переопределено","readOnly":"Настройки доступны только для чтения.","requestTimeoutMs":"Таймаут запроса (мс)","requestTimeoutMsHint":"Время ожидания первого байта ответа; по умолчанию 60000.","reset":"Сбросить","save":"Сохранить","saveFailed":"Не удалось сохранить, попробуйте снова.","saved":"Сохранено ✓","saving":"Сохранение","show":"Показать","streamIdleTimeoutMs":"Таймаут простоя потока (мс)","streamIdleTimeoutMsHint":"Как долго зависший поток считается мёртвым; по умолчанию 300000 (намеренно щедро — модели с долгим обдумыванием могут молчать минутами).","title":"Код команды","unsaved":"Не сохранено","updateAvailable":"доступно обновление","updateHint":"Доступна новая версия; нажмите для просмотра заметок о выпуске. Уведомление исчезнет после обновления плагина.","usageActive":"Активно","usageCooldown":"Охлаждение","usageCost":"Потратить","usageError":"Не удалось получить данные об использовании","usageExceeded":"Превышено","usageFailed":"не удалось","usageFiveHour":"5-часовое окно","usageFree":"Бесплатно","usageInvalidKey":"Неверный ключ","usageKeyClear":"Очистить сохранённый ключ","usageKeyClearStaged":"Будет очищено при сохранении","usageKeyInvalid":"Неверный или просроченный API-ключ","usageKeyInvalidHint":"Сервер отклоняет все запросы (401). Проверьте ключ, настроенный для этого аккаунта, или создайте новый в консоли commandcode.ai.","usageLoading":"Получение данных об использовании аккаунта…","usageMonthly":"Ежемесячно","usageNetworkError":"Не удалось подключиться к сервису Command Code","usageNetworkHint":"На сервер не поступило ни одного запроса. Проверьте подключение к сети или настройку базового API.","usageNoKey":"Настройте API-ключ, чтобы увидеть здесь данные об использовании и состоянии кредитов этого аккаунта.","usagePartial":"Некоторые данные конечной точки недоступны","usagePeriodEnd":"Период заканчивается","usagePurchased":"Куплено","usageRefresh":"Обновить","usageRefreshing":"Обновление…","usageRequests":"Запросы","usageReset":"Сбросить","usageServiceUnavailable":"Сервис Command Code временно недоступен","usageServiceUnavailableHint":"Сервер вернул ошибки (5xx); попробуйте обновить позже.","usageSuccessRate":"Уровень успеха","usageTitle":"Использование аккаунта","usageTokens":"Токены","usageTokensIn":"в","usageTokensOut":"выход","usageUnconfigured":"Для этого аккаунта ещё не настроен API-ключ.","usageUndoKeyClear":"Отменить очистку","usageUpdated":"Обновлено","usageWeekly":"Еженедельное окно","workingDir":"Рабочая директория","workingDirHint":"Необязательно. Оставьте пустым, чтобы использовать текущий рабочий каталог процесса (указан в поле); укажите путь только для фиксации конкретного расположения."},"settings.locale":{"language.title":"Язык"},"settings.models":{"add":"Добавить провайдера","addModel":"Добавить модель","advancedHint":"Остальные поля живут в settings.yaml — правьте этот раздел напрямую.","apply":"Применить","applying":"Применение…","baseUrl":"Базовый URL","baseUrlDefault":"По умолчанию у провайдера","cancel":"Отмена","close":"Закрыть","conflict":"Пока карточка была открыта, настройки изменил кто-то ещё. Закройте и откройте заново, чтобы править актуальные значения.","contextWindow":"Окно контекста","contextWindowPlaceholder":"Как у провайдера по умолчанию","create":"Создать провайдера","creating":"Создание…","credentialConfigured":"API-ключ задан","credentialMissing":"API-ключ не задан","customAdd":"Добавить своего провайдера","customApi":"Протокол API","customApiUnset":"Не выбран","customDisplayName":"Отображаемое имя","customNeedsBaseUrl":"Своему провайдеру нужен базовый URL.","customNeedsModels":"Своему провайдеру нужна хотя бы одна модель.","customRoute":"Идентификатор провайдера","customRouteHint":"Идентификатор в нижнем регистре, начинается с буквы. По нему провайдер адресуется в запросах, и так же называется его ключ.","customRouteInvalid":"Начните со строчной буквы, дальше строчные буквы, цифры и дефисы.","customRouteTaken":"Такой идентификатор уже занят другим провайдером.","customTag":"Свой","customTitle":"Свой провайдер","customized":"Настройки изменены","deleteConfirm":"Удалить {provider}","deleteDescription":"Удаление {provider} убирает его настройки. Ключ, которым он пользовался, хранится отдельно и останется.","deleteDescriptionWithCredential":"Удаление {provider} убирает его настройки и сохранённый API-ключ.","deleteTitle":"Удалить {provider}?","deleting":"Удаление {provider}…","edit":"Изменить","editProvider":"Изменить {provider}","fetchAdopt":"Добавить выбранные","fetchDescription":"Вот модели, доступные у этого провайдера. Отметьте те, что нужно добавить.","fetchDeselectAll":"Снять выбор","fetchEmpty":"Провайдер не вернул ни одной модели. Добавьте их вручную.","fetchModels":"Запросить список моделей","fetchNeedsBaseUrl":"Сначала укажите базовый URL, потом запрашивайте.","fetchSelectAll":"Выбрать все","fetchTitle":"Выберите модели","fetching":"Запрос к провайдеру…","intro":"Введите свои API-ключи, чтобы пользоваться моделями этих провайдеров.","keyBlank":"Введите API-ключ или оставьте поле пустым, чтобы сохранить прежний.","keyBlankNew":"Введите API-ключ или оставьте поле пустым, если провайдер авторизуется иначе.","keyEnvLocked":"Задан переменной окружения (только чтение)","keyIllegalCharacters":"Ключ в недопустимом формате. Проверьте его.","keyInput":"API-ключ","keyPlaceholder":"Введите API-ключ","keyPlaceholderNative":"Введите API-ключ или оставьте пустым для авторизации из окружения","keyRequired":"Чтобы продолжить, введите API-ключ.","keyStored":"Задан — введите новое значение, чтобы заменить","loadFailed":"Не удалось загрузить список провайдеров","maxTokens":"Максимум выходных токенов","maxTokensPlaceholder":"Как у провайдера по умолчанию","model":"Модель","modelAdvanced":"Ёмкости","modelCapacityInvalid":"Ёмкость задаётся числом, можно с суффиксом K или M.","modelContextInvalid":"Окно контекста — положительное число, например 131072, 256K или 1M.","modelContextWindow":"Окно контекста","modelDuplicate":"Каждый идентификатор модели встречается один раз.","modelId":"Идентификатор модели","modelIdDuplicate":"Идентификатор модели должен быть уникальным.","modelIdRequired":"Нужен идентификатор модели.","modelMaxTokens":"Максимум выходных токенов","modelMaxTokensInvalid":"Максимум выходных токенов — положительное число, например 8192, 64K или 1M.","modelName":"Отображаемое имя","modelNameInvalid":"Отображаемое имя не может быть пустым.","modelNamePlaceholder":"Пусто — возьмётся идентификатор модели","models":"Модели","modelsCustomized":"Каталог моделей изменён","modelsEmpty":"В выборе моделей не будет ничего. Неуказанные идентификаторы всё равно можно отправлять напрямую.","modelsInherited":"По умолчанию, как в адаптере","nav":"Модели","onboardingDescription":"Настройте официального провайдера DeepSeek, чтобы начать.","onboardingLater":"Настроить позже","onboardingSave":"Сохранить и продолжить","onboardingSaving":"Сохранение…","onboardingTitle":"Добавьте API-ключ, чтобы начать","provider":"Провайдер","readOnly":"В этой установке файл настроек доступен только для чтения.","remove":"Удалить","removeModel":"Удалить модель","removeProvider":"Удалить {provider}","resetModels":"Вернуть значения по умолчанию","retry":"Повторить","savedProvider":"{provider} сохранён.","title":"Модели","welcomeError":"Не удалось сохранить подтверждение. Попробуйте ещё раз."},"settings.ollama-cloud":{"addModel":"Добавить модель вручную","apiKey":"API-ключ","apiKeyConfigured":"Настроено — введите новое значение для замены","apiKeyPending":"Введён новый ключ — теперь он используется для обнаружения; Сохранить для хранения","apiKeyPlaceholder":"Введите API-ключ","apiKeyUnset":"API-ключ не настроен","applySelected":"Применить выбранное","baseURL":"URL API","cancel":"Отмена","close":"Закрыть","collapse":"Свернуть настройки","connection":"Подключение","customized":"Пользовательский каталог","defaultEffort":"Стандартное мышление","description":"Родной API-ключ Ollama Cloud, конечная точка и каталог моделей.","discard":"Отменить","dragModel":"Перетащите для изменения порядка","expand":"Развернуть настройки","fetchEmpty":"Конечная точка не вернула ни одной модели.","fetchModels":"Получить доступные модели","fetchingModels":"Получение моделей…","inherited":"Использование составленного каталога","invalidApiKey":"API-ключ не может состоять только из пробелов.","invalidBaseURL":"Введите URL API HTTP или HTTPS.","invalidModel":"Каждая модель должна иметь уникальный ID и допустимые положительные значения мощностей.","loading":"Загрузка настроек плагина…","modelContext":"Контекстное окно","modelDetails":"Подробности","modelId":"ID модели","modelName":"Отображаемое имя","modelOutput":"Максимальная мощность","models":"Каталог моделей","pickerDescription":"Выберите модели, которые нужно оставить в этом каталоге.","pickerLoading":"Получение метаданных модели…","pickerTitle":"Выбрать каталог моделей","readOnly":"Настройки этого профиля доступны только для чтения.","remoteAccess":"Удалённые браузеры не могут изменять настройки плагинов: API конфигурации Harness работает только через локальный интерфейс. Откройте страницу на самом хосте или пробросьте её (ssh -L 3080:127.0.0.1:3080 user@host, затем откройте http://127.0.0.1:3080). Сохранённые там настройки продолжают работать в удалённых сеансах.","remove":"Удалить","requestFailed":"Не удалось выполнить запрос.","save":"Сохранить","saved":"Сохранено","saving":"Сохранение…","summaryModels":"{count} моделей","summaryOff":"Не настроено","summaryOn":"Настроено","thinking":"Рассуждение","title":"Ollama Облако","tools":"Инструменты","unavailable":"Этот профиль не предоставляет доступ к настройкам Ollama Cloud.","unsaved":"Несохранённые изменения","usage":"Использование облака","usageLoading":"Чтение использования…","usageModels":"Модели, использованные на этой неделе","usageNeedsRestart":"Использование отображается после перезагрузки этого плагина на работающем хосте (перезапустите dsh).","usageRefresh":"Обновить","usageRefreshFailed":"Не удалось обновить","usageRequests":"запросы","usageResetAt":"Сбросится через {time}","usageResetAtDays":"Лимиты использования сбросятся {date} (осталось {count} дней)","usageResetEveryDays":"Сбрасывается каждые {count} дней","usageResetEveryHours":"Сбрасывается каждые {count} часов","usageSession":"Использование сессии","usageUnreachable":"Не удалось получить данные об использовании Ollama Cloud. Проверьте подключение к сети и URL API.","usageUnsupported":"Этот эндпоинт не передаёт данные об использовании облака.","usageUpdatedAt":"Обновлено {time}","usageUsed":"Использовано","usageWeekly":"Еженедельное использование","vision":"Зрение"},"settings.permission":{"confirm.acknowledge":"Я понимаю риски и хочу продолжить","confirm.cancel":"Отмена","confirm.description":"Полный доступ позволяет новым сессиям реже спрашивать подтверждение и действовать напрямую, включая чувствительные операции, изменение файлов и внешние команды. Включайте, только если доверяете будущим задачам.","confirm.enable":"Включить полный доступ","confirm.title":"Включить полный доступ?","description":"Режим разрешений по умолчанию для новых сессий","loading":"Загрузка","title":"Разрешения","unavailable":"Недоступно"},"settings.pluginInventory":{"active":"Подключён","catalog":"Список плагинов","configuration":"Настройки","cordis":"Состояние Cordis","disabledTag":"Выключен","empty":"Плагинов нет.","emptySearch":"Подходящих плагинов нет.","enabledTag":"Включён","error":"Плагины временно недоступны.","failed":"Не удалось подключить","loading":"Чтение плагинов…","loadingPhase":"Загрузка","pending":"Ожидает зависимости","retry":"Повторить","search":"Поиск плагинов","tab":"Список плагинов","unloading":"Выгружается","unobserved":"Не подключён"},"settings.plugins":{"agentLoopDescription":"Как агент раздаёт вызовы инструментов.","agentLoopMaxParallel":"Параллельных вызовов","agentLoopMaxParallelHint":"Сколько безопасных для параллели вызовов идёт одновременно в пределах шага.","agentLoopTitle":"Цикл агента","bashDescription":"Ограничения для каждой команды, которую запускает агент.","bashMaxOutputBytes":"Предел вывода на поток (байт)","bashMaxOutputBytesHint":"Всё сверх предела уходит во временный файл, а не теряется.","bashTimeoutMs":"Таймаут команды (мс)","bashTimeoutMsHint":"Сколько команда может выполняться до принудительного завершения.","bashTitle":"Консоль","collapse":"Скрыть настройки","configurableTab":"Настройки плагинов","discard":"Отменить","empty":"В этой установке настройки плагинов не выведены.","expand":"Показать настройки","intro":"Настройка и просмотр плагинов, установленных в этой сборке.","invalidNumber":"Введите число или оставьте пустым, чтобы взять значение по умолчанию.","nav":"Плагины","overridden":"Переопределено","readOnly":"В этой установке настройки доступны только для чтения.","reset":"Вернуть по умолчанию","save":"Сохранить","saveFailed":"Установка не приняла эти значения; они оставлены, чтобы вы их поправили.","saving":"Сохранение…","tabs":"Разделы плагинов","title":"Плагины","unsaved":"Не сохранено","webSearchApiKey":"API-ключ","webSearchApiKeyHint":"Хранится вне файла настроек. Оставьте пустым, чтобы сохранить текущий ключ.","webSearchApiKeySet":"Ключ задан.","webSearchApiKeyUnset":"Ключ не задан; без него поиск недоступен.","webSearchBaseUrl":"Адрес сервиса","webSearchBaseUrlHint":"Оставьте пустым, чтобы взять адрес провайдера по умолчанию.","webSearchDescription":"Поисковый провайдер DeepSeek.","webSearchMaxUses":"Максимум поисков на запрос","webSearchMaxUsesHint":"Сколько раз в рамках одного запроса можно искать, прежде чем придётся отвечать.","webSearchTitle":"Поиск в вебе"},"settings.subscriptions":{"cancel":"Отмена","checking":"Проверка…","generating":"Генерация изображения…","image":"изображение","imageClose":"Закрыть","imageLoadFailed":"Повторить","imageLoading":"Загрузка…","imagePreview":"Просмотр изображения","intro":"Вход и выход из провайдеров по подписке. Вход открывает страницу авторизации в новой вкладке; без браузера можно вставить адрес обратного вызова или код.","loggedIn":"Выполнен вход","loggedInAccount":"Вход выполнен как {account}","loggedInAccountExpires":"Вход выполнен как {account} · истекает {date}","loggedInExpires":"Вход выполнен · истекает {date}","login":"Войти","loginInProgress":"Идёт вход…","loginMissingUrl":"ответ на вход пришёл без authorizeUrl","logout":"Выйти","logoutConfirm":"Выйти из {provider}?","manualPlaceholder":"Вставьте адрес обратного вызова или код","manualSummary":"Не работает вход через браузер? Вставьте адрес обратного вызова или код","nav":"Подписки","notLoggedIn":"Вход не выполнен","submit":"Отправить","unavailable":"Нет связи; состояние подписок не загрузить.","usageEmpty":"Окна расхода не переданы.","usageError":"Не удалось получить расход: {message}","usageLoading":"Загрузка расхода…","usagePlan":"Тариф: {plan}","usageRefresh":"Обновить","usageResets":"сбрасывается {date}","usageSession":"Окно 5 часов","usageTitle":"Расход","usageWeekly":"За неделю","usageWindow":"Окно","viewImage":"Посмотреть изображение","viewImageNamed":"Посмотреть {name}"},"settings.theme":{"appearance.dark":"Тёмная","appearance.light":"Светлая","appearance.system":"Как в системе","appearance.title":"Оформление"},"sidebar":{"session.new":"Новая сессия","session.new.label":"Новая сессия","toggle.collapse":"Свернуть панель","toggle.open":"Открыть панель"},"skill":{"menu.userOnly":"только вручную","row.failed":"Не удалось загрузить скилл","row.instructions":"Инструкции","row.running":"Загрузка скилла","row.stopped":"Загрузка скилла остановлена"},"skills-manager":{"action.create":"создание","action.delete":"удаление","action.disable":"отключение","action.enable":"включение","action.restore":"восстановление","action.toggle":"включение или отключение","btn.cancel":"Отмена","btn.close":"Закрыть","btn.create":"Создать навык","btn.create.now":"Создать навык","btn.delete.forever":"Удалить безвозвратно","btn.detail":"Подробнее","btn.disable":"Отключить","btn.enable":"Включить","btn.file.pick":"Выбрать файл","btn.folder.pick":"Выбрать папку","btn.import":"Импорт","btn.import.now":"Установить","btn.refresh":"Обновить","btn.repair.enable":"Исправить и включить","btn.restore":"Восстановить","btn.trash":"В корзину","confirm.delete.desc":"«{name}» будет безвозвратно удалён из корзины; восстановить невозможно.","confirm.delete.title":"Удалить безвозвратно?","confirm.trash.desc":"«{name}» будет перемещён из текущего источника в корзину; позже его можно восстановить на прежнее место.","confirm.trash.title":"Отправить в корзину?","create.body":"Текст (Markdown)","create.body.placeholder":"Опишите инструкции, шаги и границы навыка…","create.chat.note":"Команда create_skill в чате по-прежнему создаёт пользовательский навык DSH; проектный навык можно создать здесь, выбрав активный проект.","create.description":"Описание","create.description.placeholder":"Одно предложение — когда использовать","create.name":"Название","create.name.placeholder":"например code-review-helper","create.target":"Место создания","create.title":"Создать навык","desc":"Единая загрузка и управление Agent-навыками на этом компьютере.","detail.body":"Текст","detail.diagnostics":"Диагностика","detail.frontmatter":"Frontmatter","detail.noIssues":"Проблем не обнаружено.","detail.path":"Исходный файл","detail.title":"Подробности навыка","diagnostic.description.missing":"В frontmatter нет description","diagnostic.frontmatter.missing":"Отсутствует полный YAML frontmatter","diagnostic.invocation.invalid":"Недопустимое значение политики вызова","diagnostic.name.invalid":"Имя навыка не соответствует kebab-case: {name}","diagnostic.name.missing":"В frontmatter нет name","diagnostic.shadowed":"Перекрыт источником с более высоким приоритетом {root}","empty.search":"Подходящих навыков нет.","empty.source":"Этого каталога не существует или в нём пока нет навыков.","error.action":"Действие не удалось: {error}","error.browse.absolute":"Путь к папке должен быть абсолютным: {path}","error.browse.notDirectory":"Это не папка: {path}","error.browse.unreadable":"Не удалось прочитать папку: {path}","error.create.bodyRequired":"Текст навыка обязателен","error.create.conflict":"Навык с таким именем уже существует: {name}","error.create.descriptionRequired":"Описание навыка обязательно","error.create.tooLarge":"Содержимое навыка слишком велико","error.import.duplicateName":"В пакетном источнике есть навыки с одинаковыми именами: {name}","error.import.emptySource":"В каталоге не найдено ни одного элемента навыков: {path}","error.import.failed":"Импорт не удался","error.import.invalidName":"Не удалось сгенерировать корректное имя kebab-case (исходное: {name})","error.import.overlap":"Источник импорта не может совпадать с каталогом навыков DSH, содержать или находиться внутри него","error.import.rollbackFailed":"Откат перезаписывающего импорта не удался; резервные копии сохранены в: {path} ({error})","error.proto.bodyTooLarge":"Тело запроса слишком велико","error.proto.contentType":"Тело запроса должно быть application/json","error.proto.forbidden":"Запрещённый запрос на изменение (нет клиентского маркера)","error.proto.forbiddenHost":"Запрещённый источник запроса (неверный Host)","error.proto.invalidJson":"Тело запроса — не корректный JSON","error.proto.method":"Метод не поддерживается","error.proto.nonJson":"Сервер вернул ответ не в формате JSON (HTTP {status})","error.proto.unknownAction":"Неизвестное действие","error.root.readonly":"Этот источник не разрешает: {action}","error.root.unknown":"Неизвестный источник навыков: {root}","error.root.unsafe":"Каталог проектных навыков небезопасен, запись отклонена: {path}","error.skill.noFrontmatter":"У навыка неполный frontmatter, нельзя выполнить «{action}»: {name}","error.skill.notFound":"Навык не найден: {name}","error.source.notFound":"Путь не существует: {path}","error.source.symlink":"Источники навыков с символическими ссылками не поддерживаются: {path}","error.source.tooDeep":"Глубина каталога источника превышает {depth} уровней: {path}","error.source.unrecognized":"Нераспознанный источник навыков: {path}","error.state.invalid":"Файл состояния менеджера не читается, перезапись отклонена: {path}","error.trash.conflict":"Нельзя восстановить: навык с таким именем уже существует: {name}","error.trash.invalid":"Недопустимый путь элемента корзины: {id}","error.trash.notFound":"Элемент корзины не найден: {id}","error.trash.projectUnavailable":"Исходный проект не является активной рабочей областью, восстановление невозможно: {path}","error.trash.rollbackFailed":"Откат перемещения в корзину не удался; невосстановленное содержимое сохранено в: {path} ({error})","error.upload.archiveTooLarge":"ZIP-архив слишком велик; лимит {limit} байт","error.upload.duplicate":"Загрузка содержит дублирующийся путь: {path}","error.upload.empty":"Загрузка пуста","error.upload.encoding":"Недопустимая кодировка загружаемого содержимого","error.upload.path":"Загрузка содержит недопустимый путь: {path}","error.upload.tooLarge":"Загрузка слишком велика; лимит {limit} байт","error.upload.tooMany":"Слишком много файлов; максимум {limit}","error.upload.zipInvalid":"ZIP-архив не удаётся распаковать","filter.all":"Все источники","filter.option":"{name} ({count})","filter.source":"Источник","import.title":"Импорт навыка","loading":"Загрузка навыков…","note.missing":"Описание не указано","result.created":"Навык создан: {name}","result.deleted":"Удалён безвозвратно: {name}","result.importEmpty":"Не импортировано ни одного навыка.","result.importPartial":"Импортировано: {imported}; пропущены одноимённые: {skipped}","result.importSkipped":"Ничего не импортировано; пропущены существующие: {names}","result.importWarnings":"{result}; предупреждения: {warnings}","result.imported":"Импорт завершён: {names}","result.restored":"Навык восстановлен: {name}","result.trashed":"Отправлен в корзину: {name}","result.updated":"Состояние обновлено.","root.agents":"Общий Agent","root.claude":"Claude","root.codex":"Codex","root.dsh":"Навыки DSH","root.gemini":"Gemini","root.opencode":"OpenCode","root.projectAgents":"Проектный Agent","root.projectDsh":"Проектный DSH","search":"Поиск","search.clear":"Очистить поиск","search.placeholder":"Поиск по названию или описанию навыка","select.file.invalid":"Выберите .zip или один файл SKILL.md.","select.folder.invalid":"В выбранной папке не найдено SKILL.md.","skill.toggle":"Вкл/выкл навык","source.dsh.note":"Локальные навыки DSH можно создавать, импортировать и отправлять в корзину.","source.external.note":"Загружается через Skills Manager только для чтения; переключения не меняют исходные файлы.","source.toggle":"Вкл/выкл источник","status.bundle":"Набор навыков","status.disabled":"Отключён","status.discovered":"Обнаружен","status.enabled":"Загружен","status.invalid":"Есть проблемы","status.manageable":"Управляемый","status.project":"Проектный","status.rank":"Приоритет {rank}","status.readonly":"Источник только для чтения","status.selected":"Выбрано","status.shadowed":"Перекрыт","status.single":"Один файл","status.source.off":"Отключён","status.source.on":"Загружен","summary.disabled":"Отключено: {count}","summary.group":"Навыков: {count}","summary.issues":"Проблем: {count}","summary.loaded":"Загружено в DSH: {count}","summary.total":"Навыков: {count}","table.skill":"Название и описание навыка","table.status":"Состояние в DSH","title":"Навыки","trash.count":"Навыков в очереди: {count}","trash.deletedAt":"Удалено {time}","trash.empty":"Корзина пуста.","trash.source":"Источник: {source}","trash.title":"Корзина","upload.drop.copy":"Поддерживаются .zip, папка навыка или один SKILL.md","upload.drop.title":"Перетащите навык сюда","upload.importing":"Установка…","upload.remove":"Убрать выбранное","upload.requirement.copy":"Импорт копирует содержимое целиком и не меняет источник","upload.requirement.frontmatter":"SKILL.md должен содержать YAML-название и описание","upload.requirement.skill":"Архив или папка должны содержать SKILL.md","upload.requirements":"Требования к файлам","upload.selected":"Файлов: {count} · {size}","warning.backupUncleaned":"Резервная копия старой версии не удалена: {path} ({error})","warning.project.unavailable":"Не удалось получить активную рабочую область у хоста, проектные навыки скрыты: {path}","warning.state.invalid":"Файл состояния менеджера не читается; внешние навыки отключены, перезапись заблокирована до исправления: {path}"},"slash.menu":{"command":"Команды","loading":"Загрузка…","skill":"Скиллы","subagent":"Субагенты","suggestions.aria":"Подсказки по вводу"},"subagent":{"activity.inactive":"не работает","activity.running":"работает","branch.collapse":"Свернуть потомков {label}","branch.expand":"Развернуть потомков {label}","count.running.few":"{count} субагента работает","count.running.many":"{count} субагентов работает","count.running.one":"{count} субагент работает","count.running.other":"{count} субагентов работает","count.total.few":"{count} субагента","count.total.many":"{count} субагентов","count.total.one":"{count} субагент","count.total.other":"{count} субагентов","diagnostic.corrupt":"запись сессии повреждена","diagnostic.unavailable":"запись сессии временно недоступна","diagnostic.unsupported":"неподдерживаемая версия записи субагента","duration.days":"{days} дн","duration.daysHours":"{days} дн {hours} ч","duration.exactDays":"{days} дн {hours} ч {minutes} мин {seconds} с","duration.exactTitle":"Всего активного времени: {duration}","duration.hours":"{hours} ч {minutes} мин {seconds} с","duration.minutes":"{minutes} мин {seconds} с","duration.months":"~{months} мес","duration.monthsDays":"~{months} мес {days} дн","duration.seconds":"{seconds} с","duration.years":"~{years} г","duration.yearsMonths":"~{years} г {months} мес","load.error":"Не удалось загрузить субагентов","loading.aria":"Загрузка субагентов","loading.label":"Загрузка субагентов…","mode.continuable":"с продолжением","mode.oneShot":"разовый","readonly.body":"Родительская сессия офлайн; откройте её заново, чтобы продолжить переписку.","readonly.oneShot.body":"Разовые задачи не принимают продолжения; здесь можно изучить полную запись выполнения.","readonly.oneShot.title":"Запись разового субагента","readonly.title":"Пока этот субагент доступен только для чтения","retry":"Повторить","switcher.aria":"Переключить субагента: {title}","tree.aria":"Сессии субагентов"},"task-board":{"archive.empty":"В архиве пусто","board.archive":"Архив","board.archiveView":"Архив ({count})","board.backToBoard":"К доске","board.close":"В чат","board.created":"Создана","board.empty":"В этой колонке задач нет","board.filterAll":"Все","board.hostError":"Действие на хосте не удалось: {error}","board.hostMeta":"Часовой пояс хоста {timeZone} · ревизия {revision}","board.new":"Новая задача","board.pending":"Отправка","board.retryHost":"Переподключиться к хосту","board.runs":"запусков","board.search":"Фильтр задач…","board.status":"Статус","board.status.backlog":"Бэклог","board.status.done":"Готово","board.status.failed":"Ошибка","board.status.running":"В работе","board.status.todo":"К выполнению","board.title":"Доска задач","board.updated":"Обновлена","card.scheduled":"по расписанию","delete.cancel":"Отмена","delete.confirm":"Удалить «{name}»? Отменить это будет нельзя.","delete.ok":"Удалить","delete.title":"Удаление задачи","detail.archive":"В архив","detail.archivedAt":"В архиве · {time}","detail.close":"Закрыть","detail.delete":"Удалить","detail.description":"Описание","detail.execution":"История запусков","detail.executionEnded":"Завершён","detail.executionSettings":"Параметры запуска","detail.executionStarted":"Начат","detail.noExecution":"Ещё не запускалась","detail.noSession":"Сессии нет","detail.prompt":"Промпт запуска","detail.rerun":"Запустить снова","detail.restore":"Вернуть из архива","detail.result.cancelled":"Отменён","detail.result.failed":"Ошибка","detail.result.running":"Выполняется","detail.result.succeeded":"Успешно","detail.run":"Запустить","detail.schedule":"Запуски по расписанию","detail.schedule.cron":"Выражение cron","detail.schedule.dueSoon":"Скоро","detail.schedule.enable":"Включить запуски по расписанию","detail.schedule.invalid":"Неверное выражение cron","detail.schedule.lastTriggered":"Последний запуск","detail.schedule.nextRun":"Следующий запуск","detail.schedule.notScheduled":"Расписания пока нет","detail.schedule.preset.daily9":"Каждый день в 09:00","detail.schedule.preset.hourly":"Каждый час","detail.schedule.preset.tenMin":"Каждые 10 минут","detail.schedule.preset.weeklyMon9":"По понедельникам в 09:00","detail.schedule.presets":"Готовые варианты","detail.title":"Задача","detail.viewSession":"Открыть сессию","entry.label":"Доска задач","exec.error.noWorkspace":"Нет рабочей папки, в которой можно выполнить задачу","exec.error.promptRejected":"Промпт отклонён","exec.hint":"Применяется при запуске задачи: рабочая папка определяет, где появится сессия выполнения; режим задаёт пресет агента; разрешение выставляется командой /permission. Пусто — как по умолчанию в рантайме.","exec.mode.brokenSuffix":" (недоступен)","exec.mode.default":"Как в установке","exec.mode.defaultSuffix":" (по умолчанию)","exec.mode.removed":" (удалён)","exec.permission.danger-full-access":"Полный доступ","exec.permission.default":"Как в сессии","exec.permission.read-only":"Только чтение","exec.permission.workspace-write":"Запись в рабочую папку","exec.workspace.recent":"Последняя (по умолчанию)","new.cancel":"Отмена","new.description":"Описание","new.descriptionPlaceholder":"Контекст, границы, критерии приёмки (необязательно)","new.mode":"Режим","new.permission":"Разрешения","new.prompt":"Промпт запуска","new.promptPlaceholder":"Полная инструкция агенту (если пусто, возьмётся заголовок)","new.required":"Нужен заголовок","new.submit":"Создать","new.title":"Заголовок","new.titlePlaceholder":"Что нужно сделать, одной строкой","new.workspace":"Рабочая папка","run.failed":"Запуск не удался: {error}","settings.announceToAgent":"Сообщать агентам о доске задач","settings.announceToAgentHint":"Включено: в системный промпт каждого агента добавляется упоминание доски. Выключено: агенты узнают о ней, только если вы скажете сами.","settings.collapse":"Скрыть настройки","settings.description":"Настройка доски задач на хосте, упоминания в промпте и защиты от засыпания, пока есть незавершённая работа.","settings.discard":"Отменить","settings.enabled":"Включить доску задач","settings.enabledHint":"Когда выключено, пункт в панели и сама доска скрыты.","settings.expand":"Показать настройки","settings.inherit":"Наследовать","settings.invalidNumber":"Введите число или оставьте пустым, чтобы взять значение по умолчанию.","settings.notExposed":"Эта версия DSH не выводит namespace настроек плагина на страницу конфигурации, поэтому форма недоступна. Правьте ~/.dsh/settings.yaml напрямую или добавьте namespace в список WEB_SETTINGS_NAMESPACES у dsh-host-apiproxy и перезапустите.","settings.off":"Выкл","settings.on":"Вкл","settings.overridden":"Переопределено","settings.powerBoundary":"Батарея будет расходоваться быстрее. Закрытие крышки, ручной уход в сон, гибернация, выключение, действия при низком заряде и корпоративные политики под гарантию не попадают; уже спящий компьютер не разбудят.","settings.powerError":"Последняя ошибка защиты от засыпания: {error}","settings.powerStatus":"Платформа: {platform}; защита: {phase}; работающих сессий: {running}; включённых расписаний: {schedules}","settings.powerUnknown":"неизвестно","settings.preventIdleSleep":"Не давать системе засыпать","settings.preventIdleSleepHint":"По умолчанию выключено. Когда включено, хост не даёт системе уйти в сон, пока работает хоть одна сессия DSH, включено расписание или состояние сессий ещё неизвестно. Экран при этом может гаснуть.","settings.readOnly":"В этой установке настройки доступны только для чтения.","settings.reset":"Вернуть по умолчанию","settings.save":"Сохранить","settings.saveFailed":"Установка не приняла эти значения; они оставлены, чтобы вы их поправили.","settings.saving":"Сохранение…","settings.title":"Доска задач","settings.unsaved":"Не сохранено","status.move.backlog":"В бэклог","status.move.todo":"К выполнению","time.justNow":"только что"},"trajectory":{"toolbar.actualTime":"Реальное время","toolbar.aria":"Панель траектории","toolbar.calls":"Вызовы","toolbar.collapseCalls":"Свернуть вызовы","toolbar.collapseTurns":"Свернуть ходы","toolbar.duration":"Длительность","toolbar.expandCalls":"Развернуть вызовы","toolbar.expandTurns":"Развернуть ходы","toolbar.search":"Поиск по траектории","toolbar.searchPlaceholder":"Поиск","toolbar.turns":"Ходы","toolbar.useActualDuration":"По реальной длительности","toolbar.useEqualWidth":"Операции равной ширины","view.trajectory":"Траектория"},"usageDashboard":{"buckets.cacheRead":"Чтение кэша","buckets.cacheWrite":"Запись в кэш","buckets.caption":"Четыре непересекающиеся корзины тарификации · всего {total} ток","buckets.output":"Выход","buckets.title":"Состав токенов","buckets.uncachedInput":"Вход мимо кэша","composition.caption":"Оценка по эвристике, не по счёту; в сумму занятости не сойдётся","composition.messages":"Сообщения","composition.system":"Системный промпт","composition.title":"Состав контекста","composition.tools":"Схемы инструментов","efficiency.llm":"Время модели","efficiency.steps":"Шаги","efficiency.stepsValue":"{steps}","efficiency.throughput":"Скорость выдачи","efficiency.title":"Эффективность запросов","efficiency.tool":"Время инструментов","efficiency.ttft":"Первый токен, среднее","efficiency.ttftOver":"шагов: {steps}","efficiency.turns":"Ходы","efficiency.turnsValue":"{turns}","empty.usage":"Расхода токенов пока нет","empty.usageHint":"Цифры появятся, когда сессия сделает первый запрос к модели.","overview.billedInput":"Оплаченный вход","overview.billedInputSub":"мимо кэша {uncached} · из кэша {cached}","overview.cacheHit":"Попадания в кэш","overview.cacheHitSub":"прочитано {read} из {total} ток","overview.context":"Контекст занят","overview.contextSub":"{used} из {window} ток","overview.contextUnknown":"Размер окна модели неизвестен","overview.output":"Выход","overview.outputSub":"всего {total} ток","scope.aria":"Охват статистики","scope.session":"Эта сессия","scope.sessions":"Все сессии","sessions.currentTag":"Текущая","sessions.detail.noData":"Данные по этой сессии загружаются или их нет","sessions.detail.title":"Подробности сессии","sessions.empty":"Расход по сессиям не записан","sessions.inactive":"Простаивает","sessions.running":"Работает","sessions.selectHint":"Выберите строку, чтобы посмотреть сессию","sessions.subagentTag":"Субагент","sessions.summary.input":"Оплаченный вход, всего","sessions.summary.output":"Выход, всего","sessions.summary.sessions":"Сессий с расходом","sessions.summary.sessionsValue":"{count}","sessions.summary.totalValue":"всего сессий: {count}","sessions.summary.turns":"Ходов всего","sessions.summary.turnsValue":"{turns}","sessions.table.cacheHit":"Попаданий в кэш","sessions.table.input":"Оплаченный вход","sessions.table.output":"Выход","sessions.table.session":"Сессия","sessions.table.status":"Состояние","sessions.table.turns":"Ходы","sessions.table.updated":"Изменена","steps.cacheRead":"Кэш Ч","steps.cacheWrite":"Кэш З","steps.caption":"Только загруженное окно, новые сверху; итог считает то же окно","steps.done":"Готово","steps.empty":"В загруженном окне шагов нет","steps.input":"Вход","steps.interrupted":"Прервано","steps.model":"Модель","steps.output":"Выход","steps.reasoning":"Рассуждения","steps.sortBy":"Сортировать по «{column}»","steps.status":"Состояние","steps.title":"Подробности по шагам","steps.tps":"ток/с","steps.ttft":"Первый токен","steps.turn":"Ход.шаг","steps.windowTotal":"Итог по окну","time.daysAgo":"{n} дн назад","time.hoursAgo":"{n} ч назад","time.justNow":"только что","time.minutesAgo":"{n} мин назад","view.usage":"Статистика"},"usageStats":{"account.balanceMode":"Баланс API","account.blocked":"Запрос к учетной записи был заблокирован локальной политикой безопасности. Проверьте настройки HTTPS, same-origin и private-network.","account.health.age":"Возраст данных","account.health.lastAttempt":"Последняя попытка","account.health.lastSuccess":"Последний успех","account.health.provenance":"Источник","account.invalidResponse":"Провайдер вернул нераспознанные данные о квоте.","account.loading":"Загрузка поставщиков…","account.provenance.configured":"Настроено","account.provenance.experimental":"Экспериментальный","account.provenance.official":"Официальный API","account.provenance.provider":"API провайдера","account.provenance.unknown":"Неизвестно","account.provider":"Текущий провайдер","account.reason.allAddressesUnreachable":"Ни один из проверенных сетевых адресов не доступен.","account.reason.blockedNetwork":"Запрос на учетную запись был заблокирован политикой локальной сети.","account.reason.dnsResolutionFailed":"Имя хоста поставщика не удалось разрешить.","account.reason.noValidatedAddress":"Не было доступно ни одного проверенного адреса поставщика.","account.reason.rateLimited":"Провайдер ограничил проверку аккаунтов по частоте запросов.","account.reason.sub2apiBalanceShapeUnrecognized":"Конечная точка баланса Sub2API вернула данные в нераспознанном формате.","account.reason.timeout":"Запрос аккаунта завершился по тайм-ауту.","account.reason.unauthorized":"Учетные данные аккаунта были отклонены.","account.reason.unknown":"Проверка учетной записи завершилась неудачей без безопасного диагностического сообщения.","account.reason.upstreamInvalidJson":"Вверх по течению возвращен нечитаемый JSON","account.reason.upstreamInvalidResponse":"Восходящий поток вернул нераспознанный ответ.","account.reason.upstreamNotJson":"Ответ вышестоящего сервера не был в формате JSON","account.reason.upstreamTooLarge":"Ответ от вышестоящего сервера превысил допустимый размер.","account.status.blocked":"Заблокировано","account.status.invalidResponse":"Неверный ответ","account.status.loading":"Загрузка","account.status.stale":"Устаревшие данные","account.status.unknown":"Неизвестно","account.status.unsupported":"Баланс не поддерживается","account.title":"Аккаунт провайдера","action.close":"Закрыть","action.nextMonth":"Следующий месяц","action.prevMonth":"Предыдущий месяц","action.refresh":"Обновить","action.retry":"Повторить","action.today":"Сегодня","balance.available":"доступно","balance.error":"Не удалось получить баланс: {message}","balance.granted":"Предоставлено","balance.loading":"Получение баланса…","balance.noCredential":"{ref} не настроен (отредактируйте ~/.dsh/.credentials.yaml)","balance.noSchemeTag":"нет баланса API","balance.provider":"Провайдер","balance.remaining":"Доступный баланс","balance.title":"Баланс счета","balance.toppedUp":"Пополнено","balance.total":"Общий баланс","balance.unavailable":"недоступно","balance.unsupported":"У этого провайдера нет публичного интерфейса для проверки баланса.","balance.used":"Использовано","billing.monthly":"≈ {amount}/мес","billing.parts":"Композиция","billing.projected":"Прогнозируемое использование на конец месяца","billing.tokenOnly":"расчет на основе использования","billing.total":"Ориентировочные ежемесячные траты","budget.exceeded":"превышен бюджет","budget.level.critical":"Превышение бюджета","budget.level.normal":"Обычный","budget.level.unknown":"Неполная стоимость","budget.level.warning":"Близко к бюджету","budget.over":"{pct}% бюджета использовано","budget.period.daily":"Оценка за сегодня","budget.period.monthly":"Ожидаемый за этот месяц","budget.remaining":"осталось","budget.summary":"{period}: {spent} / {limit} · {level}","budget.title":"Ежемесячный бюджет","budget.used":"использовано","col.cacheRead":"Чтение кэша","col.cacheWrite":"Запись в кеш","col.calls":"Звонки","col.cost":"Стоимость","col.created":"Создано","col.cwd":"Рабочая папка","col.day":"День","col.default":"Стандартная ставка","col.hour":"Время","col.input":"Ввод","col.model":"Модель","col.models":"Модели","col.output":"Вывод","col.price":"Тариф","col.provider":"Провайдер","col.session":"Сессия","col.sessions":"Сессии","col.share":"Поделиться","col.time":"Время","col.tokens":"Токены","col.turn":"Поворот/шаг","curve.cost":"Стоимость","curve.empty":"Нет данных о сериях (нет вызовов в указанном интервале)","curve.legendCacheRead":"Чтение кеша","curve.legendInput":"Ввод","curve.legendOutput":"Вывод","curve.tokens":"Токены","details.auto":"Автоматически обновляется вместе с главным окном","details.exportCalls":"Экспорт журнала вызовов в CSV","details.exportCsv":"Экспорт CSV","details.exportJson":"Экспортировать JSON","details.hint":"Звонки, токены и стоимость за сессию × модель","details.open":"Открыть подробности в новом окне","details.title":"Детали звонка · сессия × модель","details.updated":"Обновлено","duration.daysHours":"{days}д {hours}ч","duration.hoursMinutes":"{hours}ч {minutes}м","duration.minutes":"{minutes}м","export.dailyCsv":"Ежедневный CSV","export.json":"Полный JSON","export.sessionsCsv":"Сессии CSV","export.title":"Экспорт без секретов","filter.all":"Все рабочие пространства","filter.scope":"Фильтровать статистику по одной рабочей директории","footnote.disclaimer":"Стоимость рассчитана на основе установленных тарифов и не является счетом.","footnote.errors":"({errors} логов не удалось декодировать)","footnote.scanned":"{sessions} сессий, {calls} звонков просканировано","heatmap.empty":"Данные тепловой карты пока отсутствуют","heatmap.fri":"Пт","heatmap.less":"Меньше","heatmap.mon":"Пн","heatmap.month":"{m}","heatmap.more":"Ещё","heatmap.title":"Тепловая карта активности (52 недели)","heatmap.wed":"Ср","lastUpdated":"Обновлено","month.names":"Янв,Фев,Мар,Апр,Май,Июн,Июл,Авг,Сен,Окт,Ноя,Дек","month.year":"{month} {year}","orcarouter.addError":"Не удалось добавить OrcaRouter. Пожалуйста, попробуйте ещё раз.","orcarouter.choiceSuffix":"(Спонсированная интеграция)","panel.badge":"Использование/Баланс","panel.title":"Расход и баланс","panel.updatedAt":"Обновлено в {time}","perf.empty":"Нет данных о производительности (отсутствуют временные метки в журналах)","perf.est":"прибл.","perf.latencyAvg":"Средняя задержка","perf.modeTps":"токены/с","perf.modeTtft":"ТТФТ","perf.note":"TTFT = запрос → первый токен контента. Последующие шаги в цикле инструментов не имеют отдельного лога запросов, поэтому их TTFT оценивается с начала шага.","perf.samples":"Образцы","perf.title":"Скорость и задержка модели","perf.tps":"токенов/с","perf.ttftAvg":"Среднее значение TTFT","perf.ttftP50":"ТТФТ P50","perf.ttftP90":"TTFT P90","plan.auto":"авто","plan.balance":"Баланс","plan.code":"План кода","plan.noBalance":"не настроен баланс","plan.perMonth":"месяц","plan.period":"последние {days} дней","plan.quota":"квота","plan.remaining":"Осталось","plan.requests":"запросы","plan.subscription":"Подписка","plan.tiers":"Уровни","plan.token":"Тарифный план","plan.tokenEstimate":"оценка токенов","plan.tokens":"Токены","plan.used":"Использовано","plan.usedCost":"Стоимость использования","pricing.peakOffpeak":"пиковый/непиковый","recent.anomaly":"Аномалия стоимости (значительно выше среднего)","refresh":"Обновить","section.byCwd":"Рабочий каталог","section.byDay":"Днём","section.byModel":"По модели","section.byProvider":"По провайдеру","section.bySession":"По сеансу","section.plans":"Тарифы","section.pricing":"Тарифы (за миллион токенов)","section.recent":"Последние звонки","section.series":"Временные ряды","state.empty":"Данные об использовании токенов пока отсутствуют (нет вызовов с использованием)","state.error":"Не удалось загрузить","state.loading":"Вычисление…","state.retry":"Повторить","subscription.error":"Не удалось использовать подписку: {message}","subscription.loading":"Получение данных об использовании подписки…","subscription.notConfigured":"Настройте {refs} для отображения текущего использования подписки.","subscription.planUnknown":"План подписки","subscription.rateLimited":"Провайдер ограничивает частоту проверок; попробуйте позже.","subscription.resetDue":"Сброс квоты","subscription.resets":"Сбросится через {time}","subscription.status.notConfigured":"Не настроено","subscription.status.ok":"В прямом эфире","subscription.status.rateLimited":"Ограничение по частоте запросов","subscription.status.unauthorized":"Войдите снова","subscription.status.unavailable":"Недоступно","subscription.title":"Использование подписки","subscription.unauthorized":"Учетные данные истекли; обновите их и повторите попытку.","subscription.unavailable":"Провайдер не вернул распознаваемых окон квот.","subscription.used":"{value}% использовано","subscription.window.daily":"Ежедневное окно","subscription.window.mcp":"Ежемесячная квота MCP","subscription.window.monthly":"Ежемесячное окно","subscription.window.quota":"Общая квота","subscription.window.session":"5-часовое окно","subscription.window.weekly":"Еженедельное окно","summary.activeDays":"Активные дни","summary.avgCost":"Среднее / вызов","summary.cacheHit":"Процент попаданий в кеш","summary.cacheRead":"Чтение кэша","summary.cacheWrite":"Запись в кеш","summary.calls":"Звонки","summary.cost":"Примерная стоимость","summary.input":"Ввод","summary.output":"Вывод","summary.sessions":"Сессии","summary.streak":"Дневная серия","summary.today":"Сегодня","summary.tokens":"Всего токенов","tab.details":"Детали звонка","tab.overview":"Обзор","tab.perf":"Производительность","tab.today":"Сегодня","today.calls":"Звонков сегодня","today.cost":"Стоимость сегодня","today.empty":"Сегодня звонков еще не было","today.title":"Сегодняшние токены и стоимость","today.tokens":"Токены сегодня","usage.back":"Назад","usage.cacheRead":"Чтение кэша","usage.error":"Агрегация использования не удалась: {message}","usage.heatmap":"Ежедневное использование в этом месяце","usage.hit.today":"Сегодняшний процент попаданий в кэш","usage.hitRate":"Кэш-попадание","usage.input":"Ввод","usage.legendLess":"Меньше","usage.legendMore":"Ещё","usage.loading":"Агрегирование использования…","usage.month":"В этом месяце","usage.noModels":"Нет данных по моделям за этот день.","usage.output":"Вывод","usage.recent":"Последние 14 дней","usage.title":"Использование токенов","usage.today":"Сегодня","usage.total":"За всё время","usage.unknownModel":"Неизвестная модель","weekday.fri":"Ф","weekday.mon":"М","weekday.sat":"С","weekday.sun":"С","weekday.thu":"Т","weekday.tue":"Т","weekday.wed":"В","widget.close":"Свернуть","widget.hint":"Использование токенов & примерная стоимость","widget.hoverHint":"Нажмите, чтобы развернуть","widget.open":"Развернуть"},"workflowRun":{"member.empty":"Пустое имя участника","member.open":"Открыть {name}","phase.empty":"Пустое имя фазы","phase.unassigned":"Вне фаз","run.empty":"Ни один участник не запущен","run.members.few":"{count} участника","run.members.many":"{count} участников","run.members.one":"{count} участник","run.members.other":"{count} участников","run.title":"{name}","status.cancelled":"Отменено","status.completed":"Завершено","status.failed":"Ошибка","status.interrupted":"Прервано","status.running":"Работает","statusCount.cancelled":"Отменено: {count}","statusCount.completed":"Завершено: {count}","statusCount.failed":"Ошибок: {count}","statusCount.interrupted":"Прервано: {count}","statusCount.running":"Работает: {count}"},"workspace":{"actions.newSession.aria":"Новая сессия в {name}","actions.session.aria":"Действия с сессией {name}","actions.workspace.aria":"Действия с рабочей папкой {name}","conflict.named":"Рабочая папка «{name}» уже есть.","date.ymd":"{d}.{m}.{y}","delete.desc":"Уберёт «{name}» из списка рабочих папок. Сама папка и журналы сессий останутся, а её сессии переедут в «Без папки».","delete.pending":"Удаление рабочей папки…","delete.workspace":"Удалить рабочую папку","empty.noMatches":"Ничего не найдено","empty.none":"Сессий пока нет","field.sessionName":"Название сессии","field.workspaceName":"Название рабочей папки","folderError.retry":"Выбрать снова","folderError.title":"Не удалось открыть папку","group.ungrouped":"Без папки","groupBy.flat":"Одним списком","groupBy.label":"Группировать","groupBy.workspace":"По рабочим папкам","hover.copied":"Скопировано","hover.created":"Создано {time}","menu.addWorkspace":"Добавить рабочую папку…","menu.archiveSession":"Убрать сессию в архив","menu.fork":"Ответвить сессию","orderBy.label":"Сортировать","orderBy.manual":"Вручную","orderBy.updated":"По изменению","picker.loading":"Загрузка рабочих папок…","rename":"Переименовать","rename.session.title":"Переименовать сессию","rename.workspace.title":"Переименовать рабочую папку","search.clear":"Очистить поиск","search.hasMore":"Показаны первые {n} результатов. Уточните запрос.","search.hasMore.few":"Показаны первые {n} результата. Уточните запрос.","search.hasMore.one":"Найден один подходящий результат.","search.noMatches":"Подходящих сессий нет","search.pending":"Поиск по истории сессий…","search.placeholder":"Поиск по сессиям...","search.results.aria":"Результаты поиска","search.sessions.aria":"Поиск сессий","search.unavailable":"Поиск по содержимому временно недоступен. Показаны совпадения по названию.","section.sessions":"Сессии","section.workspaces":"Рабочие папки","session.new":"Новая сессия","sessions.collapse":"Показать меньше","sessions.count.few":"{n} сессии","sessions.count.many":"{n} сессий","sessions.count.one":"{n} сессия","sessions.count.other":"{n} сессий","sessions.expand":"Показать ещё {n}","status.completed":"Завершено","status.idle":"Простаивает","status.planReview":"План ждёт проверки","status.running":"Работает","status.subagentsRunning.few":"{n} субагента работает","status.subagentsRunning.many":"{n} субагентов работает","status.subagentsRunning.one":"{n} субагент работает","status.subagentsRunning.other":"{n} субагентов работает","status.waitingAnswer":"Ждёт ответа","status.waitingApproval":"Ждёт подтверждения","time.ago":"{t} назад","time.days":"{n} дн","time.hours":"{n} ч","time.minutes":"{n} мин","time.months":"{n} мес","time.now":"только что","time.years":"{n} г","viewOptions.label":"Параметры отображения","workspace.add":"Добавить рабочую папку"}}
|
|
360
|
+
const RU = {"agentTeams":{"action.openActivityPanel":"Открыть панель активности","activity.badgeAria":"Активность и история команд агентов, {count} записей команд","activity.collapse":"Свернуть панель активности","activity.dockRight":"Закрепить справа","activity.empty":"Нет активности команды","activity.float":"Переключиться на плавающую панель","activity.panelAria":"Панель активности команд агентов","activity.panelButton":"Панель активности","activity.title":"Активность команд агентов","archive.discardedLabel":"План отменен · Архивная история","archive.label":"Завершено · Архивная история","assignment.discarded":"План не выполнен","assignment.empty":"Нет задач","assignment.label":"Капитан назначен","assignment.staged":"Запланированная задача","captain.name":"Капитан","captain.role":"Разделить · Делегировать · Синтезировать","captain.state.awaitingFeedback":"Ожидание отзыва","captain.state.collected":"Все полученные отчеты","captain.state.discarded":"Отменено","captain.state.settled":"Оплачено","captain.state.staged":"Ожидает одобрения","captain.state.takeover":"Работаю над {tasks}","captain.state.waiting":"Ожидание отчетов","captain.state.working":"{count} активных","captain.summary":"Назначено {tasks} задач {members} участникам","captain.summary.awaitingFeedback":"Черновой вариант сохранен; ожидаем ваших указаний по доработке в чате","captain.summary.discarded":"План отменён: {members} участников не созданы и {tasks} задачи не выполнены","captain.summary.staged":"Запланировано {tasks} задач и {members} участников; ожидают утверждения","captain.summary.withTakeover":"Назначено {tasks} участникам · Капитан владеет {captainTasks}","card.memberCount":"{count} участников","delegation.aria":"Карта делегирования капитана","dependency.aria":"Цепочка зависимостей задач","dependency.hint.chain":"Наведите для подсветки зависимостей · Нажмите, чтобы закрепить","dependency.hint.parallel":"Нет зависимостей · Нажмите для подробностей","dependency.hint.pinned":"{taskId} закреплена · Esc для сброса","dependency.parallel":"Параллельные задачи","dependency.title":"Зависимости задач","format.listSeparator":",","member.model":"{model}","member.state.delivered":"Доставлено","member.state.failed":"Имеются сбои","member.state.left":"Левая команда","member.state.notCreated":"Не создано","member.state.pending":"Ожидание","member.state.removed":"Удалено","member.state.staged":"Не создан","member.state.stopped":"Остановлено","member.state.unassigned":"Ожидание назначения","member.state.waiting":"Ожидание","member.state.working":"Работает","member.status.delivered":"Задачи выполнены","member.status.discarded":"План отклонён; участник не был создан","member.status.executing":"Работа над {taskId}","member.status.executingModel":"Работа над {taskId} · {model}","member.status.idle":"Готовы продолжить","member.status.settled":"Вся назначенная работа выполнена","member.status.staged":"Будет создан после одобрения","member.status.stopped":"Команда остановлена; требуется явное возобновление","member.status.unknown":"Статус неизвестен","member.status.waitingAssignment":"Ожидание назначения работы от капитана","member.status.waitingOn":"Ожидание {taskId} · {assignee}","member.status.waitingPrerequisite":"Ожидание выполнения предварительных условий","member.status.working":"Работа над назначенными задачами","members.collapse":"Свернуть","members.empty":"Пока нет участников; ожидаем, пока капитан соберёт команду","members.expand":"Развернуть","members.toggle":"Участники {count}","plan.addTask":"Добавить задачу","plan.adding":"Добавление…","plan.approve":"Одобрить и запустить","plan.approveConfirm":"Подтвердить запуск","plan.approveConfirmTitle":"Подтвердить запуск команды","plan.approveHint":"Одобрение создаёт {members} участников и планирует {tasks} задачи.","plan.approveTitle":"План готов?","plan.approveWarning":"Маршруты участников и зависимости нельзя редактировать здесь после запуска.","plan.approving":"Создание участников…","plan.badge":"Ожидание подтверждения","plan.cancel":"Отмена","plan.continue":"Вернуться в чат и исправить","plan.dependencies.count":"{count} зависимостей","plan.dependencies.none":"Нет зависимостей","plan.description":"Участники не были созданы, и задачи не были назначены. Отредактируйте черновик здесь или вернитесь в чат и сообщите Капитану, что нужно изменить.","plan.discard":"Отменить этот план","plan.discardConfirm":"Отменить план","plan.discardConfirmTitle":"Отменить этот план?","plan.discardWarning":"План будет завершён и заархивирован. Участники не были созданы, и задачи выполняться не будут.","plan.discarding":"Отмена…","plan.failed":"Операция не удалась: {message}","plan.feedbackHint":"Капитан спросит в чате. После вашего ответа он пересмотрит этот черновик и снова будет ждать одобрения.","plan.feedbackTitle":"Ожидание ваших указаний по исправлению","plan.flow.aria":"Процесс запуска команды","plan.flow.review":"Просмотреть план","plan.flow.run":"Начать работу","plan.flow.spawn":"Создать участников","plan.member.model":"Модель","plan.member.prompt":"Роль подсказки","plan.member.provider":"Провайдер","plan.member.reasoning":"Усилие на рассуждение","plan.member.reasoningHint":"Оставьте пустым для значения по умолчанию; принимает low, medium, high, xhigh и другие.","plan.member.role":"Роль","plan.member.roleFallback":"Роль не установлена","plan.members.count":"{count} участников","plan.members.empty":"Пока нет запланированных участников","plan.members.title":"Участники и маршруты моделей","plan.model.back":"Назад","plan.model.choose":"Выберите модель","plan.model.currentUnavailable":"{provider}/{model} (нет в текущем каталоге)","plan.model.defaultReasoning":"Усилия по умолчанию при рассуждении","plan.model.empty":"Нет доступных моделей","plan.model.loading":"Загрузка моделей…","plan.model.modelDefault":"Модель по умолчанию ({effort})","plan.model.partialFailure":"{count} каталогов провайдеров не удалось загрузить","plan.model.providerDefault":"Провайдер по умолчанию","plan.model.retry":"Повторить","plan.model.route":"Маршрут: {provider}/{model}","plan.model.triggerAria":"Выберите модель участника, текущая {model}, уровень усилий для рассуждений {effort}","plan.newTask":"Новая тема задачи","plan.newTaskLabel":"Добавить запланированную задачу","plan.pendingEdits":"Сохраните текущие изменения перед запуском команды.","plan.readySummary":"{members} участников · {tasks} задач · {links} зависимостей","plan.remove":"Удалить","plan.removeConfirm":"Подтвердите удаление","plan.removeWarning":"Удаление {task} приведет к пересчету зависимостей ниже по цепочке.","plan.removed":"Задача удалена","plan.returnToChat":"Вернуться в чат","plan.save":"Сохранить","plan.saved":"План сохранён","plan.saving":"Сохранение…","plan.task.assignee":"Исполнитель","plan.task.dependencies":"ID задач зависимостей (через запятую)","plan.task.dependenciesHint":"Например, task-1, task-2; циклы отклонены","plan.task.description":"Описание задачи","plan.task.subject":"Тема задачи","plan.task.unassigned":"Общий пул задач","plan.taskAdded":"Задача добавлена","plan.tasks.count":"{count} задач · {links} зависимостей","plan.tasks.empty":"Нет запланированных задач","plan.tasks.title":"Задачи и зависимости","plan.title":"Проверка плана перед запуском","plan.unsaved":"Не сохранено","progress.aria":"Общий прогресс команды","progress.blocked":"■ Ожидание {count}","progress.delivered":"■ Доставлено {count}","progress.running":"■ В процессе {count}","progress.title":"Общий прогресс","task.assignee.unclaimed":"Невостребованные","task.detail.completed":"Завершено и доставлено","task.detail.noDownstream":"Нет последующих задач","task.detail.noPrerequisite":"Нет требований; готовы начать","task.detail.notRun":"План отменён; задача не была выполнена","task.detail.ready":"Предварительные условия выполнены; можно начинать","task.detail.unlocks":"Разблокирует {tasks} после завершения","task.detail.waitingOn":"Ожидание {tasks}","task.model":"Модель: {model}","task.runningAria":"Выполняется","task.status.cancelled":"Отменено","task.status.claimed":"Заявлено","task.status.completed":"Завершено","task.status.failed":"Не удалось","task.status.inProgress":"Выполняется","task.status.notRun":"Не запущено","task.status.pending":"Невостребованные","task.summary.allDelivered":"Все {count} задачи доставлены","task.summary.blocked":"{tasks} ожидают выполнения предварительных условий","task.summary.blockedAndRunning":"{tasks}{more} ожидают выполнения предварительных условий; другая работа уже начата","task.summary.discarded":"{count} запланированных задач отменено; ни одна не выполнена","task.summary.ended":"Итог: {completed} доставлено · {cancelled} отменено · {failed} не удалось","task.summary.failedSettled":"{count} ошибок; автоматический цикл остановлен","task.summary.more":"и ещё {count}","task.summary.ready":"{tasks} готовы к началу","task.summary.running":"{tasks} в процессе выполнения","task.summary.staged":"{count} запланированных задач ожидают утверждения","task.summary.waitingBreakdown":"Ожидание, пока капитан распределит работу","task.summary.waitingSchedule":"Ожидание следующего цикла планирования","team.discarded":"Отклонено","team.ended":"Завершено","team.stats.completed":"{completed}/{total} завершено","team.stats.members":"{count} участников","team.stats.messages":"{count} сообщений","team.stop":"Остановить команду","team.stopCancel":"Продолжать работу","team.stopConfirm":"Остановить команду","team.stopDescription":"Это отменяет {tasks} незавершённых задач и останавливает {members} работающих участников. Завершённые результаты сохраняются.","team.stopFailed":"Не удалось остановить команду: {message}","team.stopRequestFailed":"Сервер не смог остановить эту команду. Попробуйте снова.","team.stopTitle":"Остановить “{team}”?","team.stopped":"Остановлено","team.stopping":"Остановка…"},"betterSidebar":{"addPluginsBrowseMore":"Ещё плагины на GitHub (тема: dsh-better-sidebar)","addPluginsEmpty":"Подборки пока нет — опубликуйте свой плагин под темой на GitHub","addPluginsNoMatch":"Нет подходящих плагинов","addPluginsRecommended":"Рекомендуемые плагины","addPluginsSearch":"Поиск по названию или описанию плагина…","addPluginsTabCard":"Добавить плагины вкладок","addPluginsTabCardDesc":"Зарегистрировать новую страницу панели","addPluginsTabDesc":"Страницы панели (вкладки) расширяются плагинами. Плагины регистрируются через сервис ctx.betterSidebar; кнопка «Установить» копирует команду — вставьте её в терминал на машине с профилем DSH и выполните.","addPluginsViewerCard":"Добавить плагины предпросмотра","addPluginsViewerCardDesc":"Зарегистрировать просмотр нового типа файлов","addPluginsViewerDesc":"Просмотрщики файлов расширяются плагинами. Плагины регистрируются через сервис ctx.betterSidebar; кнопка «Установить» копирует команду — вставьте её в терминал на машине с профилем DSH и выполните.","addToConversation":"Добавить в диалог","binary":"Двоичный файл, предпросмотр недоступен","binaryNoPreview":"Этот тип файлов нельзя показать","branch":"Ветка","brokenSymlink":"Битая ссылка","browser":"Браузер","browserBack":"Назад","browserBlockedLoopback":"Заблокировано: локальные и внутренние адреса здесь открывать нельзя","browserBlockedScheme":"Заблокировано: разрешены только адреса http и https","browserEmbedAnyway":"Всё равно загрузить","browserEmbedBlocked":"{host} запрещает встраивание","browserEmbedBlockedDesc":"Сайт запрещает показывать себя внутри других страниц (X-Frame-Options / frame-ancestors), поэтому в панели он не откроется. Откройте его в обычном браузере.","browserForward":"Вперёд","browserGo":"Перейти","browserInvalid":"Неверный адрес","browserNoSandboxWarning":"Песочница выключена: страница работает с полными правами интерфейса (включить обратно можно в настройках)","browserOpenExternal":"Открыть в браузере","browserPlaceholder":"Введите адрес, например example.com","browserStart":"Введите адрес, чтобы начать (режим песочницы)","cancel":"Отмена","changes":"Изменения","checkoutError":"Переключить ветку не удалось","cherryPickCommit":"Перенести коммит","cherryPickDesc":"Применить изменения «{subject}» к текущей ветке.","cherryPickTitle":"Перенос коммита","close":"Закрыть","closeLeftTabs":"Закрыть вкладки слева","closeOtherTabs":"Закрыть остальные вкладки","closePinnedTerminal":"Закрыть терминал","closeRightTabs":"Закрыть вкладки справа","collapse":"Свернуть панель","collapseBottomPanel":"Свернуть нижнюю панель","commit":"Закоммитить","commitError":"Коммит не удался","commitPlaceholder":"Сообщение коммита (Ctrl+Enter)","copied":"Скопировано","copy":"Копировать","copyAbsolute":"Копировать абсолютный путь","copyFullHash":"Копировать полный хеш","copyInstall":"Копировать команду установки","copyRelative":"Копировать относительный путь","copyShortHash":"Копировать короткий хеш","copySubject":"Копировать заголовок","diffAdded":"Добавлено","diffBinary":"Двоичный","diffCollapse":"Свернуть","diffDeleted":"Удалено","diffEmpty":"Текстовых изменений нет","diffExpand":"Показать ещё строк: {count}","diffLoadError":"Не удалось загрузить различия","diffRenamed":"Переименовано","discard":"Отменить изменения","discardDesc":"Изменения «{path}» в рабочем дереве будут отброшены без возможности вернуть.","discardTitle":"Отмена изменений","disconnected":"Терминал отключился, переподключаемся…","dockToSidebar":"Вернуть в боковую панель","download":"Скачать","downloadToView":"Скачать, чтобы посмотреть","edit":"Изменить","editor":"Редактор","editorEmptyHint":"Выберите файл в дереве или введите путь выше, чтобы открыть предпросмотр","editorExplorer":"Как открывать файлы","editorExplorerDesc":"Управляет поведением при открытии файлов","editorExplorerMerged":"В одном окне","editorExplorerMergedDesc":"Файлы сменяются в том же окне; новые окна открываются с деревом","editorExplorerSplit":"Раздельно","editorExplorerSplitDesc":"Окно без пути — это отдельный проводник (только дерево); каждый файл открывается своим окном (дерево пристыковано и по умолчанию закрыто)","editorPathPlaceholder":"Путь к файлу (от папки сессии или абсолютный), Enter — открыть","editorSearchNoResults":"Подходящих файлов нет","editorSearchPlaceholder":"Поиск файлов по имени…","editorSearchTruncated":"Слишком много совпадений — показана часть","editorTreeToggle":"Дерево файлов","error":"Не удалось загрузить","exited":"Процесс терминала завершился","expand":"Развернуть панель","expandBottomPanel":"Развернуть нижнюю панель","explorer":"Проводник","files":"Файлы","floatDropHint":"Отпустите, чтобы открыть в свободном окне","git":"Контроль версий","gitDetail":"Посмотреть изменения","hiddenFiles":"Скрытые файлы","history":"История","historyLoadError":"Не удалось догрузить историю","htmlNoSandboxWarning":"Песочница выключена: этот HTML работает с полными правами интерфейса (включить обратно можно в настройках)","jobDurationHours":"{hours} ч {minutes} мин","jobDurationMinutes":"{minutes} мин {seconds} с","jobDurationSeconds":"{seconds} с","jobHideOutput":"Скрыть вывод","jobKill":"Прервать","jobKillConfirm":"Нажмите ещё раз для подтверждения","jobKillError":"Прервать не удалось","jobNoOutput":"Вывода пока нет","jobNotReadYet":"Ждём, пока модель прочитает эту задачу; вывод появится здесь после вызова job_output","jobOutputError":"Не удалось прочитать вывод","jobOutputTruncated":"Вывод обрезан","jobStatusCompleted":"Завершена","jobStatusFailed":"Ошибка","jobStatusKilled":"Прервана","jobStatusRunning":"Выполняется","jobStatusStopping":"Останавливается","jobViewOutput":"Посмотреть вывод","jobs":"Фоновые задачи","jobsCount":"фоновых задач: {count}","jobsCountRunning":"фоновых задач: {count} · выполняется: {running}","loadMore":"Показать ещё","loading":"Загрузка…","mermaidError":"Ошибка рендеринга Mermaid","mermaidZoomHint":"Прокрутка для масштабирования · перетаскивание для перемещения · Esc для закрытия","mermaidZoomIn":"Увеличить","mermaidZoomOut":"Уменьшить масштаб","mermaidZoomReset":"Сбросить","moveToFreeWindow":"Переместить в свободное окно","newFile":"Новый файл","newTab":"Новая вкладка","newTerminal":"Новый терминал","noChanges":"Изменений нет","noSession":"Выберите диалог, чтобы пользоваться панелью","notRepo":"Эта папка не является репозиторием git","openEditor":"Открыть редактор","openExplorer":"Проводник","openFileNewTab":"Открыть в новой вкладке","openFileSide":"Открыть сбоку","openGit":"Панель git","openPlugin":"Открыть","openSubagent":"Задачи","openWithCursor":"Курсор","openWithExplorer":"Файловый менеджер","openWithMenu":"Открыть с помощью","openWithSettingsAdd":"Добавить","openWithSettingsCustomDesc":"Имя + шаблон URL (заполнитель {path}) + флаг семейства VSCode; в удалённом режиме только редакторы семейства VSCode могут открыть удалённый путь","openWithSettingsCustomTitle":"Пользовательские редакторы","openWithSettingsFamily":"Семейство VSCode","openWithSettingsFamilyDesc":"Этот редактор понимает URL-адреса VSCode (поддерживает открытие через SSH-удалённое подключение)","openWithSettingsInvalidHint":"Редакторы без имени или шаблоны без {path} / scheme:// не отображаются в меню","openWithSettingsName":"Имя","openWithSettingsRemove":"Удалить","openWithSettingsSshDesc":"Пусто = локальная рабочая область; с user@host или SSH-алиасом открыватели семейства VSCode переключаются на протокол vscode-remote/ssh-remote, а Файловый менеджер / Zed / пользовательские редакторы вне семейства VSCode скрываются из меню","openWithSettingsSshPlaceholder":"пользователь@хост или алиас SSH","openWithSettingsSshTitle":"SSH удаленный хост","openWithSettingsTemplate":"напр. cursor://file/{path}","openWithSshSuffix":"(SSH)","openWithVscode":"VS Code","openWithZed":"Зед","parent":"Родительская папка","pinAgentTerminal":"Закрепить терминал агента","pinOpenWith":"Закрепить в меню","pinTerminal":"Закрепить терминал","pinToGlobal":"Закрепить для всех","pinToWorkspace":"Закрепить в рабочей области","pinnedRailLabel":"Закреплённые терминалы","pinnedTerminalKindAgent":"Терминал агента","pinnedTerminalKindUi":"Терминал интерфейса","pinnedTerminalScopeGlobal":"Закреплено глобально","pinnedTerminalScopeWorkspace":"Закреплено в рабочей области","pinnedTerminalTooltip":"{kind} · {scope} · {cwd}","pluginDocsPanelDesc":"Глобальные документы в боковой панели DSH: читайте свои заметки в формате Markdown из любого рабочего пространства — список файлов, структура, открытие в Chrome / VS Code и кнопки копирования; директория документов настраивается (по умолчанию ~/.dsh/docs)","pluginEgoBrowserDesc":"Браузер агента для DeepSeek Harness: 32 инструмента ego_* управляют реальным Chromium, с нативной боковой панелью \"ego browser\", которая предоставляет живой просмотр каждой страницы, посещаемой агентом — вы можете кликать, перетаскивать и печатать, чтобы взять управление на себя. Регистрирует вкладку автоматически, если присутствует better-sidebar, в противном случае переходит на плавающий пузырь.","pluginFlowglassDesc":"Граф потока живого сеанса с тремя полосами для пользователя, ассистента и вызовов инструментов, а также параллельными группами, ветвями под-агентов, детализацией и текущим статусом; регистрирует вкладку Flowglass в нативном режиме при установке better-sidebar и сохраняет отдельный выдвижной ящик в качестве резерва.","pluginGitForgeDesc":"Вкладка Git Forge: библиотека аккаунтов GitHub/Gitea (и других форков) + права на проекты + политика жесткого пуша; токены остаются в локальных секретах (никогда в контексте модели); инструмент GitForge только для чтения и помощник для HTTPS-учетных данных агента","pluginGitRemotesDesc":"Вкладка Git Remotes: ветка, upstream, отставание и опережение, fetch (с необязательным prune), pull только ff-only и push после подтверждения во вкладке. Не заменяет встроенную вкладку git со стадированием и коммитами, не предлагает force-push и не даёт модели инструмент автопуша","pluginNotLoaded":"Плагин не загружен, вкладка недоступна:","pluginOfficeDesc":"Предпросмотр офисных файлов (.docx / .xlsx / .pptx) в редакторе better-sidebar; тяжёлые библиотеки рендеринга держатся вне основного бандла","pluginSentinelDesc":"Пробуждение агента по условию: датчики файлов, процессов, портов, http, команд и вебхуков будят спящие сессии, когда условие сработало; добавляет вкладку Sentinel с общей таблицей наблюдений","pluginSidebarQaDesc":"Выделил и спросил: выделите текст в диалоге, задайте вопрос в правой панели — откроется отдельная сессия-уточнение в той же рабочей папке; быстрая модель без рассуждений сжимает основной контекст и подставляет его вместе с цитатой, не прерывая основной диалог. Уточнения вкладываются, продолжаются и уходят в архив","pluginSshTunnelDesc":"Вкладка SSH-туннеля: инвентарь нескольких хостов + гранты для каждого проекта + локальные секреты; инструмент SSHManager (стратегии выполнения/ SFTP/сеансов); центральный интерактивный терминал и двухпанельный SFTP","pluginTurnReviewDesc":"Человеческий шлюз на только что завершённом ходе: Одобрить / Запросить изменения по пути с необязательным комментарием; пути сгруппированы по основной сессии / суб-агенту / без атрибуции; встроенное сравнение снимка и текущего состояния перед принятием решения. Без форка, без /rewind.","pluginVideoPreviewDesc":"Просмотр видео (.mp4/.webm/.mov/.mkv/.avi и других) прямо в редакторе better-sidebar через отдельный маршрут /video с поддержкой HTTP Range (206) — перемотка работает, ограничение mediaLimit в 20 МБ не действует","preview":"Предпросмотр","produced":"Создано","producedOpen":"Открыть в панели","referenceFile":"@файл","refresh":"Обновить","refreshUnsavedConfirm":"Файл изменился на диске. Обновление приведёт к потере несохранённых изменений. Продолжить?","retry":"Повторить","revertCommit":"Откатить коммит","revertDesc":"Создать в текущей ветке новый коммит, отменяющий «{subject}».","revertTitle":"Откат коммита","sandboxRestore":"Вернуть песочницу","sandboxStatusOn":"Песочница включена · страницы не видят данные интерфейса и локальные файлы; входы и сторонние куки могут не работать","sandboxUnlock":"Временно отключить (небезопасно)","save":"Сохранить","saveFailed":"Сохранить не удалось","saved":"Сохранено","settingsBottomTerminalDesc":"При первом разворачивании нижней панели в сессии открывать в ней новый терминал (ограничение на число терминалов сохраняется; по умолчанию включено)","settingsBottomTerminalTitle":"Открывать терминал при первом разворачивании нижней панели","settingsBrowserHttpDesc":"Если включено, клик по внешней http-ссылке в диалоге или интерфейсе открывает панель (страницы плагинов с urlTarget имеют приоритет); Ctrl/Cmd+клик всегда в обход","settingsBrowserHttpTitle":"Открывать http-страницы в панели","settingsBrowserHttpsDesc":"Если включено, клик по внешней https-ссылке открывает панель. По умолчанию выключено: большинство https-сайтов запрещают встраивание, поэтому системный браузер удобнее","settingsBrowserHttpsTitle":"Открывать https-страницы в панели","settingsBrowserLinksDesc":"Если включено, клик по внешней ссылке открывает панель, а не новое окно; http и https управляются отдельными переключателями ниже; Ctrl/Cmd+клик всегда в обход","settingsBrowserLinksTitle":"Открывать внешние ссылки из диалога в панели","settingsBrowserLoopbackDesc":"Разделённый запятыми список разрешённых адресов локальной петли (например, localhost:5174 или 127.0.0.1:8080), которые может посещать боковой браузер; пустое значение блокирует все локальные адреса по умолчанию. Песочница всё ещё применяется — страницы не могут читать данные GUI.","settingsBrowserLoopbackPlaceholder":"например, localhost:5174, 127.0.0.1:8080","settingsBrowserLoopbackTitle":"Разрешенные локальные адреса","settingsBrowserSandboxDesc":"С выключенной песочницей любой открытый сайт работает в том же origin, что и интерфейс: он может читать данные сессии и действовать от вашего имени. Включайте только для полностью доверенных сайтов","settingsBrowserSandboxTitle":"Отключить песочницу браузера (небезопасно)","settingsConflict":"Настройку изменили в другом окне — повторите","settingsCustomCssDesc":"Стили добавлены в конце страницы (поздние в каскаде выигрывают при равенстве; используйте !important для переопределения встроенных переменных, записанных через JS)","settingsCustomCssPlaceholder":"/* например, зарезервировать 36px для оболочки с нарисованной вручную строкой заголовка */\nhtml[data-dsh-title-bar-height=\"36\"] {\n --dsh-title-bar-strip: 36px !important;\n}","settingsCustomCssTitle":"Пользовательский CSS","settingsDone":"Готово","settingsFontFamilyDesc":"Своя гарнитура терминала (CSS-стек вида \"JetBrains Mono\", monospace; пусто — моноширинный шрифт темы)","settingsFontFamilyPlaceholder":"\"JetBrains Mono\", monospace","settingsFontFamilyTitle":"Шрифт терминала","settingsFontSizeDesc":"Размер шрифта терминала в пикселях (9–32, по умолчанию 13)","settingsFontSizeSuffix":"px","settingsFontSizeTitle":"Размер шрифта терминала","settingsGeneralTitle":"Общие","settingsHtmlDefaultUnsafeDesc":"Если включено, каждый новый предпросмотр HTML открывается без песочницы (тот же origin, что и интерфейс — доступны файлы сессии и внутренние API); вернуть песочницу можно одним нажатием в строке состояния","settingsHtmlDefaultUnsafeTitle":"Открывать предпросмотр HTML без песочницы (небезопасно)","settingsHtmlSandboxDesc":"С выключенной песочницей просматриваемый HTML работает в том же origin, что и интерфейс: он может читать файлы сессии, локальное хранилище и вызывать внутренние API. Включайте только для полностью доверенных файлов","settingsHtmlSandboxTitle":"Отключить песочницу предпросмотра HTML (небезопасно)","settingsIntro":"Что показывает боковая панель и как она себя ведёт","settingsJobsDesc":"Разворачивать панель и открывать страницу задач при появлении новой фоновой задачи в текущем диалоге (срабатывает на каждую); выключите, чтобы открывать вручную","settingsJobsTitle":"Открывать страницу задач при новой фоновой задаче","settingsNav":"Боковая панель","settingsOpenDesc":"Разворачивать панель для совсем новых диалогов; у существующих сохраняется своя раскладка","settingsOpenPathDesc":"Открывать файловые ссылки из диалога (строки инструментов, созданные файлы, упоминания) в редакторе панели, а не в системном приложении","settingsOpenPathTitle":"Открывать файлы из диалога в панели","settingsOpenTitle":"Разворачивать для новых диалогов","settingsOpenToolsDesc":"Когда включено, модель может активно открывать файлы, папки и HTTP(S)-страницы в боковой панели через инструмент sidebar_open (по умолчанию отключено).","settingsOpenToolsTitle":"Внедрите инструмент sidebar-open для модели","settingsPopup":"Настройки функции","settingsPopupDesc":"Параметры для «{feature}»","settingsSaveFailed":"Не удалось сохранить","settingsSchemeAutoDesc":"Консервативный: учитывается только стандартный API Window Controls Overlay (реальная высота наложения заголовка); обычные веб-среды не изменяются","settingsSchemeAutoTitle":"Автоопределение","settingsSchemeCustomDesc":"Полный контроль: вставьте пользовательский CSS (может переопределять встроенные стили) и задайте расстояние смещения строки заголовка","settingsSchemeCustomTitle":"Настроить","settingsSchemeDetectedSuffix":"обнаружено","settingsSchemeWebDesc":"Явно указать официальный веб-интерфейс: без адаптации вообще (даже стандартной геометрии WCO)","settingsSchemeWebTitle":"Официальный сайт DSH","settingsShellArgsDesc":"Явные аргументы командной оболочки, разделённые пробелами; если не пусто, полностью заменяют значения по умолчанию (тот же принцип, что и у shellArgs в yaml)","settingsShellArgsPlaceholder":"напр. -l (пусто = по умолчанию)","settingsShellArgsTitle":"Аргументы командной оболочки","settingsShellDesc":"Оболочка, запускаемая для терминалов UI и моделей (абсолютный путь или имя исполняемого файла). Пустое значение сохраняет устаревший порядок: shell из конфига yaml → $SHELL / логин-шелл / Windows powershell.exe. Применяется к терминалам, открытым после этого.","settingsShellPlaceholder":"например, /bin/zsh (пусто = автоматически)","settingsShellTitle":"Путь к оболочке","settingsSubagentDesc":"Разворачивать панель и открывать страницу задач, когда в диалоге появляется субагент; выключите, чтобы открывать вручную","settingsSubagentTitle":"Открывать страницу задач при появлении субагента","settingsTabsTitle":"Содержимое панели","settingsTitleBarDesc":"Оставлять место под системный заголовок окна Windows справа сверху, чтобы кнопки и содержимое панели располагались ниже, а не под ним","settingsTitleBarStripDesc":"Высота полосы заголовка: на сколько пикселей опускаются кнопки и содержимое панели (0–120, по умолчанию 40)","settingsTitleBarStripTitle":"Смещение","settingsTitleBarTitle":"Режим совместимости с заголовком окна","settingsToolsDesc":"Если включено, модель может создавать терминалы в панели и работать в них через восемь инструментов terminal_* (по умолчанию выключено)","settingsToolsTitle":"Дать модели инструменты терминала","settingsViewerCatchAll":"На всё остальное: любой файл","settingsViewersTitle":"Просмотрщики файлов","settingsWidthDesc":"Какую долю ширины окна занимает панель в новых диалогах (20–60)","settingsWidthSuffix":"%","settingsWidthTitle":"Ширина по умолчанию","showInFolder":"Показать в папке","sideChat":"Боковой чат (бета)","sideChatCancel":"Остановить","sideChatCancelTitle":"Прервать текущий ход (запланированные задачи сохраняются)","sideChatClose":"Закрыть тему","sideChatCloseTitle":"Освободить агента потока (история сохраняется)","sideChatComposerPlaceholder":"Задать уточняющий вопрос…","sideChatCreating":"Создание побочного диалога…","sideChatEmpty":"Без посторонних разговоров","sideChatEmptyDesc":"Каждый побочный диалог открывается в отдельной вкладке на панели — он наследует контекст текущей сессии и никогда не попадает в основной разговор","sideChatError":"Ошибка бокового чата: {message}","sideChatFirstPlaceholder":"Задайте первый вопрос — контекст сохранён…","sideChatInjection":"Контекст внедрен","sideChatNew":"Новая тема","sideChatNoTurn":"Сохранение доступно после первого завершённого хода","sideChatPendingDrop":"Последний неотвеченный вопрос не будет включен в сохраненную сессию","sideChatRetry":"Повторить","sideChatSave":"Сохранить как новую сессию","sideChatSaveTitle":"Повысьте этот тред до уровня отдельной сессии в основном списке сессий","sideChatSaved":"Сохранено как новая сессия","sideChatSend":"Отправить","sideChatThink":"Думаю","sideChatThinking":"Глубокое погружение…","sideChatThreads":"Переключить ветку / новая","sideChatUntitled":"Новая тема","splitDown":"Разделить вниз","splitLeft":"Разделить влево","splitRight":"Разделить вправо","splitUp":"Разделить вверх","stage":"В индекс","stageAll":"Всё в индекс","staged":"В индексе","statusTruncated":"Слишком много изменений; показаны первые 2,000 записей","subagent":"Задачи","subagentCount":"субагентов: {count}","subagentCountRunning":"субагентов: {count} · работает: {running}","subagentDiagCorrupt":"Повреждён","subagentDiagUnavailable":"Недоступен","subagentDiagUnsupported":"Не поддерживается","subagentEmpty":"Субагентов нет","subagentEmptyDesc":"Здесь появятся субагенты, запущенные основным агентом","subagentInactive":"Простаивает","subagentMainAgent":"Основной агент","subagentModeContinuable":"С продолжением","subagentModeOneShot":"Разовый","subagentRunning":"Работает","subagentThinking":"Думает…","terminal":"Терминал","terminalConnectFailed":"Терминал не смог подключиться несколько раз подряд","terminalDepsFailed":"Не удалось загрузить зависимость терминала node-pty","terminalDepsHint":"Выполните команду ниже в терминале на машине с DSH, чтобы починить, и повторите (версия node-pty должна совпадать с версией ядра DSH):","terminalDepsProfile":" (определён профиль: {profile})","terminalError":"Не удалось подключиться к терминалу","terminalLimit":"Достигнут предел терминалов (3)","terminalRetry":"Повторить","timeHoursAgo":"{n} ч назад","timeJustNow":"только что","timeMinutesAgo":"{n} мин назад","timeYesterday":"вчера","toc":"Содержание","truncation":"Файл слишком большой — показаны первые 512 КБ","unpinOpenWith":"Открепить","unpinTerminal":"Открепить","unsaved":"Не сохранено","unstage":"Из индекса","unstageAll":"Всё из индекса","unstaged":"Вне индекса","uploadCancelled":"Загрузка отменена","uploadDone":"Загружено {count} файл(ов)","uploadDropChat":"Перетащите в чат, чтобы добавить изображения","uploadDropHint":"Перетащите файлы/папки сюда для загрузки","uploadFailed":"Не удалось загрузить: {error}","uploadFailedUnknown":"Неизвестная ошибка","uploadFiles":"Загрузить файлы","uploadFolder":"Загрузить папку","uploadHere":"Загрузите сюда","uploadProgress":"Загружено {done}/{total}: {name}","uploadTo":"Загрузить в {dir}","uploadTooLarge":"Файл слишком большой (превышен лимит загрузки)","uploadingTo":"Загрузка в {dir}…","viewCommitDiff":"Посмотреть изменения коммита","viewerBinary":"Скачивание файла","viewerCode":"Код","viewerHtml":"HTML","viewerImage":"Изображение","viewerMarkdown":"Markdown","viewerPdf":"PDF","worktree":"Рабочее дерево"},"command":{"listbox.aria":"Совпадения /{command}","notice.imagesUnsupported":"/{command} не принимает вложения-изображения — сначала удалите их","overlay.aria":"Параметры /{command}","search.aria":"Фильтр параметров","search.placeholder":"Поиск…","status.applying":"Применение…","status.empty":"Нет параметров","status.loading":"Загрузка параметров…"},"common":{"back":"Назад","cancel":"Отмена","close":"Закрыть","collapse":"Свернуть","copied":"Скопировано","copy":"Копировать","delete":"Удалить","edit":"Изменить","expand":"Развернуть","load.failed":"Не удалось загрузить","loading":"Загрузка…","more":"Ещё","next":"Дальше","none":"Нет","ok":"ОК","previous":"Назад","retry":"Повторить","save":"Сохранить","search":"Поиск","skip":"Пропустить","submit":"Отправить","submitting":"Отправка…","truncated":"Обрезано","unknown":"Неизвестно"},"context-doctor":{"cd.attention":"Стоит посмотреть","cd.byFile":"По файлу","cd.byServer":"По серверу","cd.bySource":"По источнику","cd.catalog":"{n} скиллов","cd.catalog.few":"{n} скилла","cd.catalog.many":"{n} скиллов","cd.catalog.one":"{n} скилл","cd.collapse":"Скрыть детализацию","cd.duplicateBlocks":"{n} дублированных блоков · {tokens} токенов","cd.duplicateSkills":"{n} навыков имеют одинаковое описание","cd.empty":"Данных пока нет","cd.emptyCategory":"ничего не внедрено","cd.emptyState":"Данные аудита пока отсутствуют.","cd.error":"Проверка не удалась","cd.expand":"Показать детализацию","cd.files":"файлов","cd.guideline":"из 50k","cd.healthy":"В норме","cd.healthyHint":"Контекст расходуется экономно и укладывается в рекомендованный бюджет.","cd.heavy":"Превышение бюджета","cd.heavyHint":"Резидентный контекст перегружает бюджет. Сначала сократите самые крупные записи.","cd.hint":"Открыть аудит контекста","cd.instructions":"Цепочка инструкций","cd.instructions.sub":"{n} файлов","cd.justNow":"только что","cd.loading":"Проверка…","cd.mcp":"Инструменты MCP","cd.mcp.sub":"{n} инструментов · {servers} серверов","cd.mcpTools":"{n} инструментов","cd.mcpTools.few":"{n} инструмента","cd.mcpTools.many":"{n} инструментов","cd.mcpTools.one":"{n} инструмент","cd.minutesAgo":"{n} минут назад","cd.more":"+{n} ещё","cd.native":"Встроенные инструменты","cd.noDetail":"Нет доступной разбивки","cd.ofBudget":"из бюджета в {budget}","cd.refresh":"Обновить","cd.residentTokens":"Проверка бюджета контекста","cd.residentUnit":"токены резидентные","cd.review":"Стоит посмотреть","cd.reviewHint":"Некоторые части контекста стоит пересмотреть, пока они не стали дорогими.","cd.secondsAgo":"{n} назад","cd.shadowed":"{n} навыков скрыты записью с таким же названием","cd.skills":"Каталог скиллов","cd.skills.sub":"{n} навыков","cd.subtitle":"Аудит контекста","cd.suggestions":"Рекомендации","cd.suggestions.few":"{n} рекомендации","cd.suggestions.many":"{n} рекомендаций","cd.suggestions.one":"{n} рекомендация","cd.title":"Аудит контекста","cd.tokens":"токены","cd.tools":"Схемы инструментов","cd.tools.sub":"{n} встроенных инструментов","cd.toolsCount":"инструментов","cd.topSchemas":"Самые большие схемы","cd.total":"Общее количество","cd.updated":"Обновлено {when}"},"conversation":{"access.confirm.acknowledge":"Я понимаю риски и хочу продолжить","access.confirm.cancel":"Отмена","access.confirm.description":"Полный доступ убирает часть подтверждений и позволяет агенту действовать напрямую, включая чувствительные операции, изменение файлов и внешние команды. Включайте, только если доверяете текущей задаче.","access.confirm.enable":"Включить полный доступ","access.confirm.title":"Включить полный доступ?","approval.allowOnce":"Разрешить один раз","approval.detail.aria":"Подробности запроса","approval.escalation":"Инструмент {toolName} просит повышенных прав","approval.reject":"Отклонить","approval.waiting":"Ожидание подтверждения","ask.answered":"{answered}/{total} отвечено","ask.cancelled":"отменено","ask.interrupted":"прервано","ask.rowTitle":"Вопрос","ask.waiting":"ожидание","bash.failed":"Ошибка","bash.running":"Выполняется","bash.stopped":"Остановлено","chat.loadError":"Не удалось загрузить историю: {message} ({code})","chat.loadOlder":"Загрузить раньше","chat.loadingHistory":"Загрузка истории…","chat.toBottom":"Вниз","clock.md":"{d}.{m}","clock.ymd":"{d}.{m}.{y}","command.done":"Готово","command.failed":"Команда не выполнена","command.imagesUnsupported":"/{command} не принимает вложения-изображения — сначала удалите их","command.running":"Выполняется…","command.title":"Команда","context.aria":"{percent} контекста занято","context.messages":"Сообщения","context.system":"Системный промпт","context.tools":"Инструменты","context.used":"контекста занято","details.close":"Закрыть подробности","details.empty":"Выберите строку инструмента в переписке, чтобы увидеть подробности","details.input":"Вход","details.notInWindow":"Этот вызов вне текущего окна","details.output":"Выход","details.running":"Выполняется…","details.title":"Подробности","duration.minutes":"{minutes} мин {seconds} с","duration.seconds":"{seconds} с","fileOpen.folderTitle":"Не удалось открыть папку","fileOpen.folderUnknown":"Не удалось открыть эту папку","fileOpen.title":"Не удалось открыть файл","fileOpen.unknown":"Не удалось открыть этот файл","hero.chooseWorkspace":"Выбрать рабочую папку","hero.headline":"Навстречу неизвестному","hero.preview":"Предпросмотр","hint.goal":"опишите цель длительной задачи","hint.goal.active":"цель активна — изменить / пауза / продолжить / снять","image.closePreview":"Закрыть просмотр оригинала","image.dimensionTooLarge":"Стороны изображения не больше {size}px — уменьшите его и попробуйте снова","image.dropBlocked":"Сейчас картинки добавить нельзя","image.dropDesc":"До {count} изображений, каждое до {size}","image.dropTitle":"Перетащите изображения сюда","image.fileTooLarge":"Каждое изображение должно быть меньше {size}","image.label":"Изображение","image.loadFailed":"Изображение не загрузилось, нажмите для повтора","image.loading":"Загрузка изображения…","image.modelUnsupported":"Текущая модель не принимает изображения; выберите подходящую","image.openOriginal":"Открыть оригинал","image.openOriginalLabel":"{label}, нажмите, чтобы открыть оригинал","image.original":"Оригинал","image.pending":"Изображения к отправке","image.preview":"Просмотр оригинала","image.remove":"Убрать изображение {name}","image.scrollLeft":"Прокрутить изображения влево","image.scrollRight":"Прокрутить изображения вправо","image.sendFailed":"Не удалось отправить изображения ({reason}); добавьте заново и повторите","image.serviceUnavailable":"Служба загрузки изображений недоступна","image.subagentUnsupported":"Сессии субагентов пока не поддерживают изображения","image.tooMany":"В одно сообщение помещается до {count} изображений","image.tooManyPixels":"Слишком большое разрешение; сожмите изображение и повторите","image.totalTooLarge":"Изображения весят больше {size}; уберите часть и повторите","image.unsupportedType":"Поддерживаются только PNG, JPG, WebP и GIF","input.accessMode":"Режим доступа, сейчас: {name}","input.commands":"Команды","input.send":"Отправить сообщение","input.stop":"Остановить генерацию","json.truncated":"… обрезано, всего символов: {total}","message.branch":"Ответвить новый диалог","message.branchUnavailable":"Доступно только на последнем сообщении завершённого хода","message.compaction":"Контекст сжат","message.compaction.completed":"Сжато элементов истории: {items} (~{tokens} токенов)","message.compaction.expand":"Показать итог сжатия","message.compaction.running":"Сжатие контекста…","message.compaction.unavailable":"Итог сжатия недоступен","message.context.catalog.more":"… ещё {count}","message.context.catalog.replaced":"Каталог заменён","message.context.instructions.added":"добавлено","message.context.instructions.loaded":"загружено","message.context.instructions.removed":"удалено","message.context.instructions.updated":"обновлено","message.context.recall.counts":"{retained} оставлено · {omitted} пропущено","message.context.recall.truncated":"обрезано","message.context.relay.from":"Из сессии {session}","message.context.snapshot.supersedes":"Заменяет прежние снимки","message.contextInjection":"Инъекция контекста","message.contextRecall":"Напоминание из сессии","message.extraBlock":"Дополнительный блок","message.maxTokens":"Достигнут лимит выходных токенов","message.maxTokens.hint":"Ответ обрезан; написанное ранее сохранено в переписке. Отправьте «продолжай», чтобы модель дописала.","message.ranFor":"Заняло {duration}","message.referenceSeparator":", ","message.referenceSummary":"Упомянутая сессия · {labels}","message.retry.active":"Повтор запроса к модели","message.retry.cancelled":"Повтор запроса отменён","message.retry.delay":"Задержка перед повтором: ","message.retry.failure":"Причина сбоя: ","message.retry.scheduled":"Ожидание повтора запроса","message.retry.started":"Запрос к модели повторён","message.retry.status":"{label} ({retry}/{maximum}) · {seconds} с","message.stopped":"Остановлено","message.tokensPerSecond":"{tps} ток/с","message.ttft":"Первый токен {seconds} с","message.turnError":"Ход не удался","message.unknownBlock":"Неизвестный блок содержимого","message.unknownSurface":"Неизвестное событие: {type}","placeholder.default":"Напишите агенту","placeholder.hero":"Опишите, что хотите сделать","placeholder.parentOffline":"Родительская сессия офлайн: отправка недоступна, но остановить выполнение можно","placeholder.steerQueue":"Cmd/Ctrl+Enter направит все сообщения из очереди","placeholder.unavailable":"Сессия недоступна","placeholder.workspace":"Выберите рабочую папку, чтобы начать","queue.cancelEdit":"Отменить правку","queue.count":"Сообщений в очереди: {n}","queue.edit":"Изменить сообщение в очереди","queue.edit.unsupported":"Содержит не только текст; правка пока не поддерживается","queue.editFailed":"Не удалось изменить: сообщение, возможно, уже отправляется.","queue.remove":"Убрать из очереди","queue.removeFailed":"Не удалось убрать: сообщение, возможно, уже отправляется.","queue.save":"Сохранить сообщение","queue.steer":"Направить сообщение","queue.steer.unavailable":"Направлять можно только пока агент работает","queue.steerFailed":"Не удалось направить. Попробуйте ещё раз.","row.failed":"Ошибка","row.running":"Выполняется","row.stopped":"Остановлено","session.hierarchy":"Иерархия сессий","settings.enter.description":"Только когда агент занят; Cmd/Ctrl+Enter даёт другое поведение","settings.enter.queue":"В очередь","settings.enter.steer":"Направить","settings.enter.title":"Enter, когда агент занят","stats.cacheHit":"Попаданий в кэш {percent}%","stats.counts":"ходов: {turns} · шагов: {steps}","stats.llm":"Модель {duration}","stats.tokens":"Вход {input} ток · выход {output} ток","stats.tokensPerSecond":"{throughput} ток/с","stats.toolCall":"Инструменты {duration}","stats.ttftAverage":"Первый токен в среднем {duration}","terminal.collapseAria":"Свернуть вывод","terminal.done":"Готово","terminal.exitCode":"код возврата {code}","terminal.expandAria":"Показать оставшиеся строки вывода: {n}","terminal.expandRest":"… ещё строк: {n}","terminal.failed":"Ошибка","terminal.noOutput":"Вывода нет","terminal.running":"Выполняется","terminal.signal":"сигнал {signal}","todo.completed":"{done}/{total} выполнено","todo.progress.active":"{active} в работе","todo.progress.done":"{done} выполнено","todo.progress.pending":"{pending} в очереди","todo.rowTitle":"Обновить список задач","todo.title":"Задачи","view.chat":"Чат"},"cordis":{"a11y.defining":"Определение плагина","a11y.failed":"Определить не удалось","a11y.stopped":"Определение прервано","action.approve":"Разрешить","action.approveOnce":"Разрешить только эту версию","action.approvePlugin":"Разрешить будущие версии этого плагина","action.decline":"Отклонить","action.remove":"Удалить","action.retry":"Повторить","action.rollback":"Откатить","action.run":"Запустить","action.stop":"Остановить","body.clientCode":"Клиент","body.copied":"Скопировано","body.copy":"Копировать","body.hostCode":"Хост","body.output":"Результат","body.source":"Исходник плагина","panel.approvals.aria":"Подтверждения Cordis","panel.current":"Текущая: {packageId}","panel.empty":"Плагинов пока нет","panel.group.current":"Эта сессия","panel.group.others":"Другие сессии","panel.hint":"Управление запуском — в панели Cordis над настройками","panel.loading":"Чтение…","panel.next":"Следующая: {packageId}","panel.plugins.aria":"Плагины Cordis","panel.readFailed":"Не удалось прочитать список плагинов: {message}","panel.runningCount":"работает: {count}","panel.title":"Плагины Cordis","panel.trigger":"Плагин Cordis","panel.version":"Версия","purpose.missing":"(назначение не указано)","render.failedAbdicated":"Отрисовка в {slot} не удалась, вернули стандартный интерфейс:","render.failedHeld":"Отрисовка в {slot} не удалась:","row.defineTitle":"Зарегистрировать плагин Cordis","row.removeTitle":"Удалить плагин Cordis","row.runTitle":"Запустить плагин Cordis","row.stopTitle":"Остановить плагин Cordis","row.updateTitle":"Обновить плагин Cordis","run.removed":"Этого пакета больше нет","run.superseded":"Ниже есть более свежая карточка запуска","status.awaitingApproval":"Ждёт подтверждения","status.clientPending":"Клиент готов к активации","status.failed":"Запуск не удался","status.idle":"Готов","status.removed":"Удалён","status.running":"Работает","status.superseded":"Есть более свежий запуск"},"deliverables":{"produced.label":"Создано","produced.more":"+ {count} файлов","produced.moreOne":"+ 1 файл","produced.open":"Открыть {name}","produced.showInFolder":"Показать в папке"},"directory-browser":{"browser.cancel":"Отмена","browser.create":"Создать","browser.createIn":"Новая папка в «{name}»","browser.editPath":"Изменить путь","browser.folderName":"Имя папки","browser.home":"Домашняя папка","browser.loading":"Загрузка…","browser.newFolder":"Новая папка","browser.open":"Открыть","browser.showHidden":"Показывать скрытые файлы","browser.title":"Выбор рабочей папки","browser.truncated":"Слишком много папок; показано только начало.","browser.untitledFolder":"Без имени"},"dsh-context":{"agents.billed":"{n} выставлено к оплате","agents.chip.count":"{n} агентов","agents.chip.running":"{n} запущено","agents.chip.tokens":"{n} токенов в контексте","agents.continuable":"продолжаемый","agents.legend.free":"свободное окно","agents.more":"Ещё {n} не показано","agents.oneshot":"одноразовый","agents.open":"нажмите, чтобы открыть →","agents.requests":"{n} запросов","agents.running":"выполняется","agents.self":"текущий","agents.solo":"Пока нет суб-агентов — когда агент делегирует работу через инструмент суб-агентов, сеть будет отображаться здесь","agents.sub":"Живой контекст этого агента и его подчиненных агентов · нажмите на узел, чтобы открыть его сессию","agents.title":"Сеть агентов","attach.close":"Закрыть","attach.image":"Изображение","attach.images":"Изображения","attach.loadFailed":"Не удалось загрузить · нажмите, чтобы повторить","attach.loading":"…","attach.open":"Открыть изображение полностью","attach.other":"Другой контент","attach.preview":"Превью изображения","attach.raw":"Сырой","attach.sent":"Отправлено","attach.token":"Токен","attach.tokensTip":"Расчетная стоимость токенов через официальное преобразование размера изображения DeepSeek (ограничение в 384 токена на изображение)","block.answer":"Ответ","block.content":"Контент","block.line":"1 строка","block.lines":"{n} строк","block.result":"Результат","block.summary":"Сводка","block.thinking":"Обоснование","brief.input":"В","brief.inputTip":"Что было введено после предыдущего ответа и перед этим запросом — обычно результаты предыдущего вызова инструмента; начало нового оборота не содержит ничего нового","brief.locate":"Показать в контекстном браузере","brief.more":"+{n}","brief.noInputs":"(ничего нового)","brief.reply":"Ответ","brief.replyTip":"Что модель вернула на этом шаге (текстовый ответ или вызовы инструментов) — результаты вызовов отображаются в строке In следующего бара","brief.turn":"Пользователь","brief.turnTip":"Сообщение пользователя, которое открыло этот ход — каждый шаг хода ссылается на него","browser.approx":"Некоторые удаленные сообщения этого шага превышают срок хранения — приведенное ниже восстановление является приблизительным","browser.deltaHint":"по сравнению с предыдущим ходом","browser.items":"{n} элементов","browser.live":"В прямом эфире (Следующий запрос)","browser.liveNow":"В прямом эфире · Следующий запрос","browser.loadFailed":"Не удалось загрузить — нажмите, чтобы повторить","browser.loading":"Загрузка полного содержимого из более старой истории сеанса…","browser.missingLive":"… {n} предыдущих сообщений также являются частью контекста (за пределами предоставленного окна)","browser.noContent":"Полное содержимое находится за пределами загруженного окна сообщений (загрузите более старую историю в Чате для просмотра)","browser.noEpoch":"Содержание заголовка (Системное сообщение / Схемы инструментов) этого шага находится за пределами удержания","browser.noHeader":"Обслуживается устаревшей версией плагина: только оценка токенов, без содержимого","browser.notInLog":"Этот элемент больше не находится в журнале сессии (возможно, он был удалён или очищен)","browser.preview":"Предварительный просмотр","browser.rowNoMatch":"Нет строк, соответствующих текущему фильтру","browser.search.assistant":"Фильтровать по ответам или звонкам…","browser.search.inject":"Фильтровать введённый контекст…","browser.search.tool":"Фильтровать по инструменту или аргументам…","browser.search.user":"Фильтровать по тексту сообщения…","browser.title":"Контекстный браузер","call.exit":"выход {n}","call.fail":"Не удалось","call.ok":"ОК","cat.assistant":"Сообщения ассистента","cat.inject":"Введённый контекст","cat.system":"Системное сообщение","cat.tool":"Результаты инструмента","cat.tools":"Схемы инструментов","cat.user":"Сообщения пользователя","cmd.close":"Закрыть","cmd.desc":"Просмотр текущего контекста макияжа, просмотр состава по шагам","detail.actual":"Фактический запрос {n}","detail.cache":"Кэш {n}%","detail.estTotal":"Примерно ≈ {n}","detail.lastStep":"Последний шаг","detail.output":"Вывод {n}","detail.step":"Поверните {t} · Шаг {s}","detail.turn":"Поверните {t} · {n} шагов","error":"Не удалось прочитать данные контекста:","error.retry":"Повторить","ev.compaction":"Контекст сжат (резюме заменено {n} сообщений)","ev.mode.plan.off":"Режим плана выключен","ev.mode.plan.on":"Режим планирования включён","ev.model":"Модель изменена: {a} → {b}","ev.prune":"Вывод инструмента обрезан","ev.skill":"Навык внедрён ({name})","events.at":"Поверните {t} · Шаг {s}","events.empty":"Событий контекста пока нет (компактизация, инъекции, переключения моделей отображаются здесь)","events.range":"Поверните {t} · Шаг {a}→{b}","events.rangeTo":"Поверните {a} · Шаг {as} → Поверните {b} · Шаг {bs}","events.title":"Контекстные события","files.chipTip":"{files} файлов · {ops} операций","files.deltaTip":"Совокупное изменение строк, оцененное по аргументам вызовов редактирования/записи: + добавлено / − удалено","files.empty":"Нет чтений, записей или поиска файлов в этом диапазоне","files.errs":"{n} не удалось","files.files":"{n} файлов","files.form.dir":"Каталог","files.form.image":"Изображение","files.form.text":"Файл","files.glyph.archive":"Архив","files.glyph.assets":"Активы","files.glyph.build":"Результат сборки","files.glyph.config":"Конфигурация","files.glyph.data":"Данные / манифест","files.glyph.database":"База данных","files.glyph.deps":"Зависимости","files.glyph.docker":"Docker","files.glyph.docs":"Документы","files.glyph.document":"Документ","files.glyph.font":"Шрифт","files.glyph.hidden":"Каталог метаданных","files.glyph.ignore":"Игнорировать правила","files.glyph.lang.c":"C","files.glyph.lang.cpp":"C++","files.glyph.lang.csharp":"C#","files.glyph.lang.dart":"Dart","files.glyph.lang.go":"Перейти","files.glyph.lang.html":"HTML","files.glyph.lang.java":"Java","files.glyph.lang.js":"JavaScript","files.glyph.lang.kotlin":"Kotlin","files.glyph.lang.lua":"Lua","files.glyph.lang.php":"PHP","files.glyph.lang.ruby":"Рубин","files.glyph.lang.rust":"Ржавчина","files.glyph.lang.scala":"Скала","files.glyph.lang.svelte":"Свелт","files.glyph.lang.swift":"Быстро","files.glyph.lang.ts":"TypeScript","files.glyph.lang.vue":"Вью","files.glyph.license":"Лицензия","files.glyph.lock":"Файл блокировки","files.glyph.log":"Войти","files.glyph.markdown":"Документ с разметкой","files.glyph.media":"Медиа","files.glyph.notebook":"Блокнот","files.glyph.python":"Питон","files.glyph.root":"Корневая папка рабочей области","files.glyph.scripts":"Скрипты","files.glyph.sheet":"Таблица","files.glyph.shell":"Оболочка","files.glyph.style":"Стили","files.glyph.tests":"Тесты","files.hits":"{n} попаданий","files.kind.all":"Все","files.kind.image":"Изображения","files.kind.read":"Читать","files.kind.search":"Искали","files.kind.write":"Написано","files.locate":"Показать эту операцию в Обозревателе контекста","files.noMatch":"Нет файлов, соответствующих текущим фильтрам","files.open":"Открыть на вашем устройстве","files.readEst":"Строк прочитано, оценка на основе аргумента limit","files.readTip":"Прочитайте строки {a}–{b}","files.scopeLatest":"До последнего · следует за выбором трендового графика","files.search":"Фильтровать по пути…","files.sort.count":"Самый активный","files.sort.latest":"Последние","files.sort.path":"По пути","files.sortTip":"Сортировать файлы по количеству операций (выбранного вида при активной метке вида), последней активности или пути","files.title":"Активность файла","footer":"Оценка: та же эвристика с фиксированной плотностью, что и встроенный tokenMeter в dsh (~4 символа ≈ 1 токен); «фактическое» — это использование, сообщаемое провайдером.","form.catalog":"Обновление каталога","form.context":"Контекстная инъекция","form.instructions":"Инструкции","form.notice":"Уведомление","form.recall":"Напомнить","form.relay":"Агентский ретранслятор","form.snapshot":"Снимок состояния","gran.delta":"Дельта","gran.modeHint":"Итого: суммарное значение; Дельта: изменение по сравнению с предыдущим запросом","gran.step":"Шаг","gran.total":"Всего","gran.turn":"Повернуть","kind.compaction":"Компактный","kind.inject":"Внедрить","kind.mode":"Режим","kind.model":"Переключить","kind.prune":"Обрезать","loading":"Чтение журнала сессии…","node.calls":"Звонки","node.empty":"(пустой ответ)","node.failed":"Выполнение инструмента завершилось с ошибкой","node.nonText":"(сообщение без текста)","node.skillTag":"Навык · {name}","node.snapshot":"Снимок:","node.toolResult":"Результат инструмента","nodes.empty":"Нет видимых сообщений прямо сейчас","nodes.hint":"в настоящее время видимые модели, сначала новые","nodes.more":"… {n} предыдущих сообщений пропущено","nodes.title":"Сообщения","overview.compactReserve":"Резерв автоуплотнения: автоуплотнение срабатывает при {pct}% окна — эта область обычно сохраняется как запас, фактически не используется.","overview.estimate":"токены (примерно)","overview.free":"Бесплатное окно","overview.ofUsed":"из использованного контекста","overview.title":"Текущий контекст","overview.used":"использовано контекста","plugin.github":"GitHub","plugin.hint":"Лучший плагин контекста для DSH ⭐","plugin.name":"Плагин","plugin.title":"Информация о плагине","rich.md":"Markdown","rich.raw":"Сырьё","rich.toMd":"Просмотреть как Markdown","rich.toRaw":"Просмотреть исходный текст","settings.collapse":"Свернуть","settings.desc":"Настройки отображения для панели Context","settings.expand":"Развернуть","settings.fileSort":"Сортировка файлов по умолчанию","settings.gran":"Гранулярность трендов по умолчанию","settings.mode":"Отображение трендов по умолчанию","settings.readOnly":"Настройки доступны только для чтения в этой среде","settings.title":"Контекст","stats.cacheHit":"Кэш-попадания","stats.compactions":"Компактизации","stats.cost":"Расч. стоимость","stats.costHit":"попадание","stats.costMiss":"пропустить","stats.costOut":"Вывод","stats.costPriceHead":"Тарифы за 1 миллион токенов (пиковый | внепиковый по половине цены):","stats.costTip":"Примерная совокупная стоимость всей сессии по прайс-листу DeepSeek: входные данные разделены по попаданию/промаху кэша, выходные данные включают рассуждения; каждый запрос оценивается по пиковой ставке (01:00–04:00, 06:00–10:00 UTC) или по половинной ставке вне пикового времени в зависимости от времени запроса. Применяется к deepseek-v4-flash / deepseek-v4-pro на любом провайдере; цены зафиксированы, только для справки.","stats.hint":"За период сохранённой истории (аналогично графику истории)","stats.images":"Изображения","stats.injects":"Инъекции","stats.prunes":"Чернослив","stats.steps":"Шаги","stats.title":"Статистика контекста","stats.toolCalls":"Вызовы инструментов","stats.turns":"Переключается","tab":"Контекст","tip.actual":"(фактическое {n})","tip.delta":"Дельта {n}","tip.step":"Повернуть {t} · Шаг {s}","tip.total":"Всего ≈ {n}","tip.turn":"Поверните {t} · {n} шагов","tool.desc":"Описание","tool.jsonHide":"Свернуть","tool.jsonToggle":"Просмотреть сырой JSON","tool.noMatch":"Нет инструментов, соответствующих текущему фильтру","tool.params":"Параметры","tool.paramsEmpty":"(без параметров)","tool.plugin":"Регистрирующий плагин этого инструмента (для справки)","tool.search":"Фильтровать по названию, описанию или параметрам…","tool.sort.name":"По имени","tool.sort.size":"По размеру","tool.sortTip":"Сортировать инструменты по размеру токена (по умолчанию) или по названию","tool.unknown":"Неизвестный плагин","tool.unknownTitle":"Инструмент был зарегистрирован до загрузки контекстного плагина, или его плагин был выгружен, поэтому его провайдер не может быть определен","tools.more":"из {n}","tools.top":"Лучшие схемы инструментов:","trend.empty":"Отправьте сообщение, и состав контекста каждого запроса модели появится здесь","trend.hint":"Наведите курсор для просмотра деталей, ✂ обозначает уплотнение/удаление, Шаг/Ход переключает детализацию","trend.title":"История контекста"},"dsh-image-gen":{"f.apiKeyEnv":"Справка по API-ключу","f.apiKeyEnvHint":"Ссылка на учетные данные / переменная окружения, содержащая ключ API FAL. Префикс авторизации \"Key \" добавляется автоматически.","f.baseURL":"Базовый URL очереди","f.baseURLHint":"Базовый URL очереди FAL (queue.fal.run).","f.customBaseURL":"Пользовательский API: базовый URL","f.customBaseURLHint":"Корень API без завершающего слеша. Запрос отправляется на {base}/images/generations.","f.customKeyEnv":"Пользовательский API: ссылка на ключ","f.customKeyEnvHint":"Ссылка на учётные данные / переменная окружения с API-ключом. Пустое значение означает отсутствие заголовка авторизации для шлюзов, которым он не требуется.","f.customModel":"Пользовательский API: модель","f.customModelHint":"Идентификатор модели, отправленный в этот API, например, gpt-image-1.","f.customSize":"Пользовательский API: фиксированный размер","f.customSizeHint":"Оставьте пустым, и именованный размер будет переведён автоматически (square_hd → 1024x1024). Указывайте размер только для API, требующих конкретных размеров.","f.defaultFormat":"Формат по умолчанию","f.defaultFormatHint":"Используется, если вызов инструмента не содержит output_format.","f.defaultSize":"Размер изображения по умолчанию","f.defaultSizeHint":"Используется, когда вызов инструмента пропускает параметр image_size.","f.deliverAs":"Как изображение попадает в чат","f.deliverAsHint":"ссылка — результат представляет собой текст со ссылкой, и карта отображает изображение из неё; работает с любой моделью чата. изображение — результат содержит само изображение, которое текстовые модели чата не могут прочитать, поэтому для этого требуется dsh-vision-bridge или модель с поддержкой зрения.","f.inherit":"Наследовать (по умолчанию)","f.model":"Модель (FAL)","f.modelHint":"Идентификатор модели FAL, вызывается как {baseURL}/{model}. Используется, когда провайдер — fal.","f.outputDir":"Выходной каталог","f.outputDirHint":"Относительно рабочего каталога сессии; абсолютный путь используется как есть.","f.pollIntervalMs":"Интервал опроса (мс)","f.pollIntervalMsHint":"Интервал опроса статуса во время выполнения задачи.","f.provider":"Провайдер","f.providerHint":"fal — очередь FAL, настроенная ниже. custom — любой API, совместимый с OpenAI, настраивается далее.","f.timeoutMs":"Таймаут (мс)","f.timeoutMsHint":"Общее время ожидания генерации: отправка + опрос + загрузка.","p.apiKeyEnv":"Пример: FAL_API_KEY","p.baseURL":"Пример: https://queue.fal.run","p.customBaseURL":"Пример: https://api.openai.com/v1","p.customKeyEnv":"Пример: OPENAI_API_KEY","p.customModel":"Пример: gpt-image-1","p.customSize":"Пример: 1024x1024","p.model":"Пример: fal-ai/flux-2/klein/9b","p.outputDir":"Пример: сгенерированные/изображения","p.pollIntervalMs":"Пример: 2000","p.timeoutMs":"Пример: 180000","settings.collapse":"Свернуть","settings.credentialHint":"API-ключи находятся в разделе Учетные данные в указанном наборе ссылок (Настройки → Учетные данные).","settings.description":"Инструмент generate_image. Провайдер: очередь FAL или любой API изображений, совместимый с OpenAI.","settings.discard":"Отменить","settings.expand":"Развернуть","settings.invalidNumber":"Введите корректное число","settings.navLabel":"Генерация изображений","settings.overridden":"Переопределить","settings.readOnly":"Это развертывание доступно только для чтения: настройки нельзя изменить через графический интерфейс.","settings.reset":"Сбросить","settings.save":"Сохранить","settings.saveFailed":"Не удалось сохранить","settings.saving":"Сохранение…","settings.title":"Генерация изображений","settings.unavailable":"Обвязка еще не опубликовала настройки этого плагина. Если она только что перезапустилась, раздел появится сам через несколько секунд.","settings.unsaved":"Несохранённые изменения"},"dsh-kanban":{"archive.empty":"В архиве пусто.","archive.hint":"Карточки, отстоявшие свой срок в «Выполнено». Ничего не удалено: возвращённая карточка встаёт в ту же колонку, откуда ушла.","archive.restore":"Вернуть на доску","archive.since":"в архиве {ago}","batch.hint":"Одна сессия на все. Задачи приходят по очереди: агент берёт следующую, закончив текущую. В «В работе» уезжает только первая — остальные ждут своей очереди там, где лежат.","batch.start":"Запустить","batch.title":"Запустить {n} задач в одном чате","board.allRepos":"Все репозитории","board.archive":"Архив","board.back":"В чат","board.backHint":"Закрыть доску и вернуться в разговор","board.clearFilters":"Снять отборы","board.collapse":"Свернуть колонку","board.empty":"Задач пока нет.","board.expand":"Развернуть колонку","board.limit":"предел {n}","board.loading":"Доска загружается…","board.newTask":"Задача","board.noMatch":"Ничего не найдено.","board.noRepo":"без проекта","board.pickArchive":"В архив","board.pickMove":"Перенести…","board.pickNone":"Снять выбор","board.pickStart":"Запустить выбранные","board.pickUnqueue":"Снять с очереди","board.pickedCount":"выбрано {n}","board.refresh":"Обновить","board.repo":"репозиторий","board.search":"Поиск","board.shown":"показано {shown} из {total}","board.someFailed":"Сделано у {done} из {total}, остальные отказали.","board.sync":"Сверить с Gitea","board.syncing":"Сверяю…","board.waitCount":"Ждут ответа: {n}","board.waitCountHint":"Задачи, где агент задал вопрос или просит разрешения.","board.waiting":"нужен человек","boardName.main":"Проектная доска","boardName.simple":"Простая доска","card.move":"перенести","card.pack":"пачка {at} из {total}","card.packHint":"Запущены вместе, одной сессией; агент берёт их в этом порядке.","card.pick":"Отметить для группового запуска","card.queue":"в очередь...","card.stop":"остановить","card.toChat":"перейти в чат","card.unqueue":"снять с очереди","chip.moveTo":"Перенести в","chip.note":"Оставить заметку","chip.noteHint":"Заметка дописывается в тело задачи. Тело уходит агенту первым сообщением, поэтому заметка до запуска попадёт в работу, а после запуска — нет.","chip.noteSave":"Дописать","chip.openCard":"Перейти к карточке","column.backlog":"Бэклог","column.cleanup":"Уборка","column.deploy":"Выкатка","column.done":"Выполнено","column.in-progress":"В работе","column.review":"Ревью","dialog.archived":"архив","dialog.bodyHint":"Уйдёт агенту первым сообщением при запуске задачи.","dialog.cancel":"Отмена","dialog.create":"Создать","dialog.fromGitea":"Из Gitea","dialog.imported":"уже на доске","dialog.kind":"Какая это задача","dialog.kindPlain":"Не проект","dialog.kindPlainHint":"Заметка, не относящаяся ни к какому репозиторию. Живёт на простой доске и в Gitea не попадает.","dialog.kindProject":"Проект","dialog.kindProjectHint":"В Gitea заводится issue, карточка привязывается к нему и живёт на проектной доске.","dialog.labelsHint":"через запятую","dialog.loadingRepos":"Репозитории загружаются…","dialog.noIssues":"Открытых issue не найдено.","dialog.noRepos":"Репозиториев нет","dialog.own":"Своя задача","dialog.pickRepo":"Выберите репозиторий","dialog.repo":"Репозиторий","dialog.repoNamePlaceholder":"имя нового репозитория, латиницей","dialog.repoNew":"— новый репозиторий —","dialog.repoNewHint":"Будет создан в организации: приватный и пустой, без README и заготовок. Создание репозитория отсюда не отменить.","dialog.taskBody":"Описание","dialog.taskColumn":"Колонка","dialog.taskLabels":"Метки","dialog.taskTitle":"Заголовок","dialog.title":"Новая задача","discard":"Отменить","error.bad-repo-name":"В имени репозитория допустимы только латинские буквы, цифры, точка, дефис и подчёркивание.","error.crossSite":"Запрос отклонён как межсайтовый.","error.giteaAbsent":"Плагин Gitea не установлен, импорт недоступен.","error.giteaUnconfigured":"Сначала настройте Gitea в карточке плагина Gitea.","error.issue-not-created":"Issue не заведён. Если репозиторий был новым, он остался — ничего не удалено.","error.issueNotFound":"Issue не найден.","error.modelNotSelected":"Модель не выбрана — задайте её в настройках или укажите здесь.","error.no-live-sessions":"Нет ни одной идущей сессии, в очередь ставить некуда.","error.permission-refused":"Уровень доступа не принят, задача не запущена.","error.permission-unavailable":"В этой сборке уровней доступа нет — задача не запущена, чтобы не пойти с бо́льшими правами, чем просили.","error.repo-not-created":"Репозиторий не создан; больше ничего не сделано.","error.repo-required":"Выберите репозиторий или назовите новый.","error.session-not-live":"Эта сессия больше не идёт.","error.sessionNotOpened":"Сессия поднята ({id}), но эта сборка не умеет в неё переключиться. Найдите её в списке сессий.","error.startFailed":"Не удалось поднять сессию.","error.task-not-queued":"Задача не стоит в очереди.","error.taskHasNoIssue":"За этой задачей нет issue в Gitea.","error.taskNotFound":"Задача не найдена.","error.titleRequired":"Нужен заголовок.","error.unknown":"Запрос не выполнен.","facet.author":"Автор","facet.priority":"Приоритет","facet.release":"Выпуск","facet.repo":"Репозиторий","facet.risk":"Риск","facet.scope":"Область","facet.signal":"Сигнал","facet.status":"Статус","facet.type":"Тип","field.archiveAfterDays":"Убирать в архив из «Выполнено» через, дней","field.boardToolEnabled":"Разрешить агенту двигать карточки","field.columnNames":"Свои названия колонок","field.defaultProjectRoot":"Корень проектов","field.giteaOwner":"Организация Gitea","field.giteaTokenRef":"Имя учётной записи","field.giteaUrl":"Адрес инстанса","field.pushToGitea":"Закрывать issue в Gitea","field.replyInstruction":"Постоянная приписка","field.staleAfterMin":"Считать задачу молчащей после, минут","field.startPrompt":"Шаблон первого сообщения","field.syncIntervalSec":"Сверяться с Gitea раз в, секунд","field.watchRepos":"Сузить подхват до репозиториев","field.webhookSecretRef":"Имя учётной записи для вебхука","field.wipInProgress":"Предел «В работе»","field.wipReview":"Предел «Ревью»","group.general":"Общее","group.gitea":"Gitea","group.limits":"Пределы колонок","group.sync":"Автоперемещение","hint.archiveAfterDays":"Считается с попадания карточки в «Выполнено». Ноль — оставлять всё на доске.","hint.boardToolEnabled":"Выключено, пока скилл воркфлоу запрещает этому CLI трогать канбан.","hint.columnNames":"Пары «идентификатор=Название» через запятую, например «backlog=Идеи, review=Проверка». Пусто — обычные названия.","hint.defaultProjectRoot":"Где лежат рабочие копии проектов. Пусто — рабочая папка харнесса.","hint.giteaOwner":"Чьи репозитории смотрит доска. Пусто — определится сама, пока у токена ровно одна организация.","hint.giteaTokenRef":"ИМЯ учётной записи DSH, в которой лежит токен. Сам токен сюда не вводить.","hint.giteaUrl":"Например https://gitea.example.com. Пусто — импорт недоступен.","hint.label":"Пусто — метка для этой колонки не ставится.","hint.limit":"Ноль — без предела. Превышение подсвечивается, но не запрещается.","hint.pushToGitea":"Карточка, дошедшая до «Выполнено», закрывает свой issue. Меток доска не ставит: стадия и так видна по ветке и pull request.","hint.replyInstruction":"Дописывается к каждому первому сообщению — например язык ответа. Пусто — ничего не добавляется.","hint.staleAfterMin":"Помечаются только задачи с сессией. Ноль отключает отметку.","hint.startPrompt":"Шаблон первого сообщения агенту. Пусто — встроенный шаблон.","hint.syncIntervalSec":"Ноль отключает сверку. Меньше пятнадцати секунд поднимается до пятнадцати.","hint.watchRepos":"Через запятую, «владелец/репо» или просто «репо». Пусто — все репозитории организации, где есть открытые задачи.","hint.webhookSecretRef":"ИМЯ учётной записи DSH с секретом вебхука Gitea. Пусто — остаётся только опрос.","move.backlog":"Работа по задаче останавливается: идущий ход агента будет прерван. Если сессии нет, карточка просто переедет.","move.cleanup":"Агент удалит ветку в Gitea, worktree и локальную ветку и запишет это в issue.","move.confirm":"Перенести","move.deploy":"Агент вольёт pull request и выкатит. Сам перенос в эту колонку И ЕСТЬ ваше «ок» на deploy — второй раз агент спрашивать не станет.","move.done":"Задача считается завершённой. Это решение человека: сам агент карточку сюда не переносит.","move.in-progress":"Агент получит команду начать или продолжить реализацию.","move.review":"Агент доведёт работу до ревью: снимет с pull request пометку черновика и запросит проверку.","move.title":"Перенести в «{column}»?","order.manual":"Как разложено","order.new":"Сначала новые","order.old":"Сначала старые","panel.agentPreset":"Профиль агента","panel.archive":"В архив","panel.author":"завёл {who}","panel.bodyLoading":"читаю описание…","panel.close":"Закрыть","panel.continue":"Продолжить","panel.continueHint":"У задачи один чат: открывается прежняя сессия, а не новая.","panel.created":"заведена {ago} назад","panel.delete":"Удалить","panel.deleteConfirm":"Удалить «{title}»? Отменить будет нельзя.","panel.issue":"Issue","panel.log":"Переходы","panel.message":"Сообщение агенту","panel.messageHint":"Правьте перед отправкой. Пустое — уйдёт встроенный текст.","panel.model":"Модель","panel.noLog":"Переходов пока нет.","panel.noModels":"У этого провайдера нет моделей","panel.noProviders":"Провайдеров нет","panel.openChat":"Открыть чат","panel.permission":"Уровень доступа","panel.pickModel":"Выберите модель","panel.pickProvider":"Выберите провайдера","panel.pickProviderFirst":"Сначала выберите провайдера","panel.presetDefault":"Как в харнессе по умолчанию","panel.provider":"Провайдер","panel.refresh":"Обновить из Gitea","panel.start":"Начать","panel.startHint":"Откроется отдельная сессия агента по этой задаче. Ветку и worktree заводит агент после preflight, а не отсюда.","panel.starting":"Запускается…","panel.updated":"последнее изменение {ago} назад","plan.counter":"{done} из {total}","plan.title":"План агента","queue.add":"В очередь","queue.hint":"Задача встанет в очередь сессии: агент возьмёт её, закончив текущую работу. До этого карточка остаётся там, где лежит.","queue.option":"{title} - задач: {n}","queue.session":"Сессия","queue.title":"Поставить в очередь идущей сессии","save":"Сохранить","section.label":"Канбан","settings.loading":"Настройки загружаются…","settings.readOnly":"Настройки в этой сессии доступны только для чтения.","settings.saveFailed":"Не сохранены поля: {fields}","settings.saved":"Сохранено.","settings.unavailable":"Хост не знает пространство настроек dsh-kanban. Перезапустите веб-интерфейс после установки плагина.","state.queued":"в очереди · {n}","state.running":"в работе","state.stopped":"остановился","stop.idle":"Агент не работал, останавливать было нечего.","stop.no-session":"У задачи нет сессии.","subtitle":"Доска задач: issue из Gitea и отдельная сессия под задачу","sync.failed":"сверка не проходит","sync.lastSeen":"последняя удачная сверка {ago} назад","sync.never":"сверки с Gitea ещё не было","sync.neverSeen":"удачной сверки с запуска харнесса не было","sync.okAgo":"сверено {ago} назад","sync.running":"сверяемся с Gitea…","time.day":"{n} дн","time.hour":"{n} ч","time.min":"{n} мин","time.now":"только что","title":"Канбан"},"dsh-market":{"actWhy":"Почему не активен?","agentBusyInstall":"Агент в настоящее время работает — дождитесь завершения (или отмените его) перед установкой. Установка изменяет файлы плагина, поэтому работающий агент может завершиться с ошибкой в процессе.","agentBusyUpdate":"Агент в настоящее время работает — дождитесь завершения (или отмените его) перед обновлением. Обновления заменяют файлы плагина на месте, поэтому работающий агент может завершиться с ошибкой или смешать версии в процессе выполнения.","aiFix":"Починить с агентом","aiFixConservative":"Действуй осторожно: чини только явные ошибки из списка выше (падения при запуске, дубли записей, подтверждённые расхождения зависимостей). Предупреждения и записи к сведению (например, неподтверждённые диапазоны peer-зависимостей) трогай, только если они связаны с явной ошибкой. Не делай лишних обновлений и перестановок; объясняй каждое изменение и жди подтверждения.","aiFixCopied":"Промпт скопирован — вставьте его в новый диалог и отправьте, когда будете готовы","aiFixDetect":"Шаг 1 — сначала определитесь. Прежде чем что-либо трогать, убедитесь, что процесс, в котором вы работаете, ЭТОТ экземпляр DeepSeek Harness, к которому относится данный профиль (то есть текущая диагностируемая композиция — это та, в которой вы сейчас находитесь). Проверьте, указывает ли текущий каталог / $DSH_HOME / командная строка на этот профиль или работает ли процесс внутри deepseek-harness. Если не можете определить, считайте, что ответ «да» (безопасный выбор).","aiFixFail":"Буфер обмена недоступен — скопируйте диагностику ниже вручную","aiFixHint":"Передать диагностику новой сессии агента (скопировано в буфер; отправлять или нет — решаете вы)","aiFixIfSelf":"Если ДА — вы являетесь этим инструментом: никогда не изменяйте текущую конфигурацию, инструмент или основные пакеты на месте (не редактируйте cordis.patch.yml, не меняйте порядок/включайте/отключайте пакеты, не устанавливайте/удаляйте/обновляйте плагины, не переустанавливайте зависимости, не обновляйте/перезапускайте dsh). Три шага: 1) только анализ в режиме чтения, ничего не изменяйте; 2) создайте apply.sh/.bat (изменения для этого исправления) и rollback.sh/.bat (полностью отменяет его); оба идемпотентны — apply создает снимки только если их еще нет и никогда не перезаписывает существующий снимок (если он существует, значит apply уже выполнялся, так что откатитесь или подтвердите перед повторным запуском), а rollback восстанавливает из этого снимка, так что частично выполненный apply все еще можно откатить, а повторный rollback безопасен; 3) дайте мне запустить apply во внешнем терминале и вставьте stdout/stderr обратно вам. Укажите причину и ждите моего подтверждения на каждом шаге — никогда не запускайте это самостоятельно.","aiFixIntro":"Помоги починить проблемы с плагинами DeepSeek Harness (профиль: {0}). Диагностика показала:","aiFixScope":"Можно менять порядок в dsh.profile.bundles, включать и выключать плагины, править cordis.patch.yml. Учти: официальные бандлы трогать нельзя; прежде чем что-то менять, изложи план.","all":"Все","alreadyInstalled":"✓ Установлен","approveBuilds":"Разрешить сборочные скрипты и повторить","autoBackup":"Резервная копия раз в сутки (при открытии маркета)","backTop":"Наверх","backupDone":"Копия загружена","backupDownload":"Выгрузить копию","backupHint":"Включает список плагинов и настройки профиля, но не node_modules. Восстановление ставит плагины заново по списку.","backupImport":"Импортировать и посмотреть","backupLocal":"Локальный файл","backupWorking":"Выполняется…","brokenBundleBanner":"Эти плагины теперь имеют клиентский пакет, который не будет обрабатываться; страница может отображаться пустой после обновления — рекомендуется выполнить откат:","buildsSkipped":"Этому плагину нужны сборочные скрипты; по умолчанию они заблокированы ради безопасности. Разрешите их и переустановите:","busyWait":"Уже выполняется другая операция — дождитесь её окончания (установка, обновление и удаление идут по одной)","cancel":"Отмена","cancelOp":"Отменить","cancelled":"Отменено","cancelling":"Отмена…","catConflict":"Конфликты","catDeps":"Зависимости","catInfo":"Информация","catOrder":"Порядок","catRisk":"Риск","catWarn":"Предупреждение","catsLess":"Свернуть","catsMore":"Ещё","checkBundles":"Порядок загрузки плагинов","checkBundlesEmpty":"Слои плагинов не объявлены","checkCommunity":"сообщество","checkDir":"каталог","checkDuplicates":"Повторяющиеся записи плагинов","checkDuplicatesEmpty":"Повторов нет","checkEntries":"записей (идентификаторы загрузчика)","checkErrors":"Ошибки","checkErrorsEmpty":"Ошибок нет","checkHoisted":"поднят","checkIssues":"Найдены проблемы","checkLoadFail":"Не удалось загрузить диагностику: ","checkLoading":"Анализ профиля…","checkMultiEmpty":"Пакетов ядра в нескольких версиях нет","checkMultiVersion":"Пакеты ядра в нескольких версиях","checkOfficial":"официальный","checkOrderTip":"порядок загрузки бандла сообщества конфликтует с объявленными правилами before/after","checkOrphans":"Неверные записи конфига","checkOrphansEmpty":"Неверных записей нет","checkOverridden":"переопределяет","checkOverrides":"Переопределения","checkOverridesEmpty":"Переопределений нет","checkPatch":"файл патча","checkPeerEmpty":"Расхождений версий зависимостей нет","checkPeerInfo":"{0} записей к сведению (не подтверждено)","checkPeerInfoTier":"Информация о зависимостях","checkPeerInfoTierEmpty":"Нет записей информационных зависимостей","checkPeerMismatches":"Расхождения версий зависимостей","checkPeerOverview":"расхождений: {0} · к сведению: {1}","checkPeerRisk":"Риски зависимостей","checkPeerRiskEmpty":"Нет несоответствий уровней риска зависимостей","checkPeerSatisfied":"Удовлетворены зависимости","checkPeerSatisfiedEmpty":"Нет удовлетворяющих записей зависимостей","checkPeerWarning":"Предупреждения о зависимостях","checkPeerWarningEmpty":"Нет несоответствий зависимостей на уровне предупреждений","checkProfile":"профиль","checkRange":"объявленный диапазон","checkRefresh":"Проверить заново","checkResolved":"разрешённая версия","checkSatisfied":"удовлетворено","checkSource":"источник","checkUnknown":"неизвестно","checkUnsatisfied":"не удовлетворено","checkWarnings":"Предупреждения","checkWarningsEmpty":"Предупреждений нет","cmdDetails":"Команда установки","comments":"Комментарии","commentsError":"Не удалось загрузить комментарии. Проверьте подключение и попробуйте снова.","commentsLoading":"Загрузка комментариев…","commentsNote":"Комментарии поступают из GitHub Discussions. Открытие этого подключается к giscus.app и GitHub; для публикации требуется аккаунт GitHub.","commentsOnGitHub":"Прочитайте обсуждение на GitHub","commentsRetry":"Попробуйте снова","commentsTitle":"Комментарии","compatRiskBanner":"Обнаружен риск несовместимости — откройте Диагностику перед перезапуском или откатите эту операцию.","confirm":"Подтвердить","confirmInstall":"Подтвердить установку","confirmRemove":"Подтверждаете?","confirmTitle":"Установка","confirmWarn":"Плагины — сторонний код сообщества. Устанавливая, вы доверяете этому источнику; сборочные скрипты по умолчанию заблокированы.","conflictBody":"Конфликт с установленным плагином — остаться может только один:","conflictDeclined":"Вы сохранили установленные плагины; этот не был установлен","conflictDetails":"Детали","conflictKeep":"Оставить то, что у меня есть","conflictKeepNote":"Оставить этот","conflictOutcomeInstall":"установить","conflictOutcomeKeep":"оставить","conflictOutcomeRemove":"удалить","conflictOutcomeSkip":"пропустить","conflictReplaceFailed":"Замена не завершена. Перечисленные ниже плагины были удалены и не восстановлены — проверьте их:","conflictReplacing":"Замена…","conflictReverted":"Отменено автоматически; ничего не было изменено","conflictSwap":"Переключиться на этот","conflictSwapNote":"Настройки удалённых плагинов сохраняются, чтобы вы могли установить их позже","conflictTitle":"Невозможно установить: конфликт с установленным плагином","conflictWhy":"cordis отклоняет дерево плагинов, содержащее дублирующиеся идентификаторы записей; сохранение этого плагина предотвратит запуск DeepSeek Harness.","credsWarning":"Внимание: в копию попадают настройки профиля и файлы, где могут лежать секреты (config.toml, .env и подобные). Локальная выгрузка ничего не вырезает, поэтому выгружайте на WebDAV, которому доверяете.","deprecatedBadge":"Устарел","deprecatedWarn":"Каталог помечает этот плагин как устаревший; новым пользователям ставить его не советуют.","descCollapse":"Показать меньше","descExpand":"Показать больше","diagExplain":"Что это","diagExplainText":"Эта страница ищет плагины, конфликтующие друг с другом, несовпадения версий зависимостей и неверный порядок загрузки. Термины:","diagOkAll":"Всё в порядке: конфликтов, проблем с зависимостями и порядком не найдено","diagTermBundle":"бандл — один пакет плагина, применяется по порядку","diagTermEntry":"запись — то, что плагин добавляет в работающую композицию","diagTermOrder":"порядок загрузки — очерёдность активации; более поздний может перекрыть более ранний","diagTermOrphan":"неверная запись — конфиг ссылается на то, чего нет","diagTermPeer":"peer-зависимость — пакет, который плагин ждёт от хоста","diagTermShadow":"перекрытие — старая копия из плагина закрывает более новую хостовую","disable":"Выключить","disabledState":"Выключен","dismiss":"Скрыть","dismissNotice":"Скрыть это уведомление","duplicateNames":"Плагины с одинаковыми именами (к сведению, это не конфликт)","empty":"Подходящих плагинов нет","enable":"Включить","envFix":"Настроить автоматически","envFixFail":"Автоматическая настройка не удалась — выгрузите журнал и пришлите нам файл","envFixing":"Настройка…","envMissing":"Перед установкой плагинов нужен один небольшой компонент","exportLog":"Выгрузить журнал","exportLogFail":"Не удалось выгрузить журнал","exportedLog":"Журнал выгружен: dsh-market-log.txt — приложите его к обращению","exportingLog":"Выгрузка…","filter":"Фильтр","filterDir":"Порядок","filterSort":"Поле сортировки","filterTime":"Вышло за","firstPage":"В начало","gist":"GitHub Gist","gistCreated":"Выгружено:","gistErrAuth":"GitHub не авторизовал: токен неверный или истёк, либо gh CLI не залогинен","gistErrInvalid":"Содержимое Gist повреждено или формат копии не поддерживается","gistErrNetwork":"GitHub недоступен — проверьте сеть или прокси","gistErrNoId":"Для обновления нужен идентификатор Gist — заполните поле или переключитесь на «Создать»","gistErrNotFound":"Gist не найден — проверьте идентификатор или ссылку","gistErrRateLimit":"Достигнут лимит GitHub, либо у токена нет права gist","gistErrTimeout":"GitHub не ответил вовремя — проверьте сеть и повторите","gistExport":"Выгрузить в Gist…","gistExportDone":"Выгружено в Gist","gistExportGo":"Выгрузить","gistExportHint":"Отмечено всё — полная копия вместе с настройками; если снять любую галочку, выгрузятся только выбранные плагины, а настройки — по отдельному флажку.","gistExportSelect":"Выберите плагины для выгрузки","gistId":"Идентификатор или ссылка на Gist (при выгрузке оставьте пустым, чтобы создать новый приватный)","gistImport":"Загрузить из Gist","gistIncludeConfig":"Включить файлы настроек (в них могут быть секреты)","gistModeCreate":"Создать новый приватный Gist","gistModeUpdate":"Обновить Gist из поля","gistNoPlugins":"В этом профиле нечего выгружать","gistNote":"В отличие от локальной выгрузки (архив на этой машине), Gist нужен для переноса между машинами: выгрузите в приватный Gist и загрузите на другом компьютере под тем же аккаунтом. Токен живёт только в памяти этой вкладки и никогда не пишется в браузерное хранилище; если залогинен gh CLI или задан DSH_GITHUB_TOKEN, вводить его не нужно. Gist приватный, до 1 МБ на файл.","gistSelectAll":"Выбрать все","gistSelectNone":"Снять выбор","gistSpecLocal":"локально","gistSrcEnv":"переменная DSH_GITHUB_TOKEN","gistSrcGh":"gh CLI","gistSrcToken":"введён вручную","gistToken":"Токен GitHub (только в памяти вкладки — после обновления страницы введите заново; оставьте пустым, чтобы использовать серверный DSH_GITHUB_TOKEN или залогиненный gh CLI)","gistVerify":"Проверить связь","gistVerifySource":"Проверено — источник токена: {0}","goDiagnose":"Открыть диагностику","gotIt":"Понятно","groupAdd":"Добавить плагин","groupAddEmpty":"Все установленные плагины уже в этой группе","groupAddTheme":"Добавить тему","groupAssign":"Назначить","groupConfirmDelete":"Удалить группу?","groupCreate":"Создать","groupDelete":"Удалить группу","groupEmpty":"Пока пусто","groupMixed":"Включена частично","groupNamePh":"Название группы","groupNew":"Новая группа","groupRemove":"Убрать","groupRename":"Переименовать","hostDependencyMore":"ещё находок пропущено: {0}","hostDependencyWarning":"Плагин перечисляет в зависимостях известные общие пакеты хоста DSH. Это может перекрыть хостовую версию; проверка смотрит только манифест и не подтверждает, что в рантайме появился дубль:","hotBanner":"плагины готовы — обновите страницу, чтобы ими пользоваться","install":"Установить","installFail":"Установить не удалось","installReplacement":"Установить замену","installedBadge":"✓ Установлен","installedEmpty":"Плагинов сообщества пока нет — загляните во вкладку «Обзор»","installing":"Установка…","lastPage":"В конец","lightboxClose":"Закрыть предпросмотр","lightboxNext":"Следующий","lightboxPrev":"Предыдущий","linkedDev":"подключён как разработка","loadFail":"Не удалось загрузить каталог плагинов, попробуйте позже","loadRetry":"Повторить","loading":"Загрузка каталога…","localOnly":"Адрес WebDAV и учётные данные остаются только в этом браузере.","marketNoToggle":"Сам маркет выключить нельзя","marketUpdate":"Доступно обновление маркета — обновить","nav":"Маркет плагинов","nextPage":"Дальше","noGroups":"Групп пока нет — создайте","notInstalled":"Не установлен","noteAdd":"Заметка","noteEdit":"Редактировать заметку","noteMine":"Моя заметка","notePlaceholder":"Опишите это своими словами. Это заменит описание автора.","noteSave":"Сохранить","noteSeeMine":"Вернуться к моей заметке","noteSeeTheirs":"Показать описание автора","noteTheirs":"Оригинал","notesCommits":"Коммиты","notesCommitsRecent":"Последние коммиты (могут не совпадать с установленной версией — только для справки)","notesLink":"Что изменилось","notesLoadFail":"Обновления сейчас недоступны — попробуйте позже.","notesNone":"Этот плагин не публикует заметки об обновлениях.","notesNpm":"Время публикации версии","notesRelease":"Заметки о выпуске","opBlockedCard":"Невозможно установить · подробности","opClear":"Очистить выполненные","opClose":"Свернуть","opDequeue":"Удалить из очереди","opDone":"Готово","opDoneRefresh":"Установлено · обновите страницу для применения","opEmpty":"Нет операций в процессе выполнения","opEmptyHint":"Здесь отображается прогресс установки, обновления и удаления","opInstalling":"Установка","opKind_install":"Установить","opKind_uninstall":"Удалить","opKind_update":"Обновить","opLeaveHint":"Вы можете покинуть эту страницу; вы получите уведомление, когда процесс завершится","opNeedsChoice":"Не удалось установить · откат выполнен автоматически, ничего не изменилось","opNeedsYou":"нужен вам","opQueued":"В очереди","opQueuedAhead":"впереди:","opRetry":"Повторить","opRunning":"Работает","opTitle":"Задачи","orderAlreadyOptimal":"Текущий порядок уже удовлетворяет всем правилам и зависимостям — переставлять нечего","orderApplied":"✓ Применено — перезапустите, чтобы вступило в силу","orderApply":"Применить порядок","orderAutoSort":"Отсортировать автоматически","orderConflicts":"конфликты before/after в текущем порядке","orderDiffHint":"Этот порядок изменит композицию: переопределений {0}, потерянных записей {1}, дублей {2}","orderDown":"↓","orderDrag":"Перетащите, чтобы изменить порядок","orderDragHint":"Тяните ⠿, чтобы переставить; «Применить порядок» сохранит","orderReset":"Сбросить черновик","orderSection":"Порядок загрузки","orderSuggestApply":"Применить предложенный порядок","orderSuggestHint":"Предложенный порядок (отсортирован по правилам before/after):","orderTrialFail":"Статическая проверка композиции не прошла: {0}","orderUp":"↑","orphanBundle":"⚠️ Следующий запуск завершится ошибкой: профиль объявляет эти пакеты, но они не установлены. Переустановите их или удалите из dsh.profile.bundles в файле package.json профиля:","orphanIdRequired":"нет идентификатора","orphanInsertNotArray":"неверный формат","orphanInsertTargetMissing":"цель не найдена","orphanInsertTargetNotGroup":"цель не является группой","orphanNameMismatch":"имя не совпадает","orphanPatchTargetMissing":"цель не найдена","orphanReasonOther":"другое","packagesDone":"обработано пакетов: {0}","pageInfo":"Страница {0} из {1}","partialNote":"Отменено — часть изменений уже применена","patchDisabled":"Выключен патчем","patchForced":"Включён патчем","peerInfoUnverified":"непроверенный","peerRiskAboveMax":"выше явного максимума","peerRiskBelowMin":"ниже заявленного минимума","peerWarnAboveMax":"выше объявленной верхней границы","peerWarnOptional":"необязательный участник","perPage":"На странице","phaseBuilding":"Сборочные скрипты","phaseDownloading":"Загрузка","phaseLinking":"Связывание","phaseResolving":"Разрешение зависимостей","presetApplied":"Применено — перезапустите, чтобы применить","presetApply":"Применить","presetBundleCount":"{0} наборов","presetDelete":"Удалить","presetDeleted":"Пресет удалён","presetDisable":"отключить плагины {0}","presetEmpty":"Нет сохранённых пресетов","presetEnable":"включить плагины {0}","presetFail":"Не удалось выполнить предустановленную операцию:","presetHint":"Сохраните текущий порядок пакетов и список отключенных как пресет и переключайтесь в любое время; применение запускает проверку перед началом пробного периода и сначала создает снимок.","presetListFail":"Не удалось загрузить пресеты:","presetName":"Название пресета","presetNameEmpty":"Введите имя предустановки","presetNoop":"нет изменений","presetPreview":"Предпросмотр","presetPreviewFail":"Не удалось выполнить предварительный просмотр:","presetPreviewTitle":"Применение этого пресета приведёт к:","presetReorder":"переупорядочить {0} наборы","presetSave":"Сохранить текущее состояние","presetSaved":"Пресет сохранён","presetSaving":"Сохранение…","presetSection":"Пресеты плагинов","prevPage":"Назад","progressHint":"Первая установка скачивает и разрешает зависимости — крупные плагины занимают 1–3 минуты","published":"выпущен","readme":"README","reconciledNote":"Удалено, но pnpm сообщил об ошибке при завершении (обычно это заблокированный файл). Профиль уже согласован — повторная попытка не требуется.","refresh":"Обновить","refreshBanner":"изменения применены — обновите страницу, чтобы их увидеть","replacementHint":"Каталог предлагает","repoLink":"Посмотреть репозиторий на GitHub","restartBanner":"изменения внесены — перезапустите DeepSeek Harness","restartFail":"Перезапустить не удалось","restartHint":"Как перезапустить: остановите текущий процесс dsh и запустите его снова (например, dsh web)","restartHintSupervised":"Этот процесс является собственным сервисным процессом {0}, поэтому перезапуски относятся к нему — перезапуск отсюда завершит процесс передачи вместе с cgroup, и сервис не восстановится. Используйте systemctl restart <ваш юнит>. Если ваш юнит может пережить самостоятельный перезапуск (KillMode=process), включите параметр \"Разрешить перезапуск\" в настройках этого плагина.","restartNow":"Перезапустить","restartTimeout":"Не дождались запуска DeepSeek Harness","restarting":"Перезапуск…","restore":"Восстановить","restoreBootError":"Не удается загрузиться после восстановления:","restoreConfirm":"Восстановление перезапишет настройки этого профиля и переустановит плагины. Продолжить?","restoreContinue":"Продолжить обновление","restoreDone":"Восстановление завершено — перезапустите DeepSeek Harness","restoreFail":"Не удалось восстановить","restoreHint":"Это удалит локальную версию, переустановит версию из каталога и сохранит проверку обновлений. Это действие нельзя отменить — подтвердите ещё раз.","restoreMissing":"Плагинов из копии не установлено: {0}","restoreNoCatalog":"Этот плагин отсутствует в курируемом каталоге, поэтому его нельзя восстановить. Удалите локальную копию или продолжайте разрабатывать её локально.","restorePartial":"Восстановление продолжилось, но эти плагины установить не удалось:","restorePreviewDone":"Копия загружена. Проверьте вкладку «Установленные» и запускайте восстановление.","restoreStart":"Начать восстановление","restoreUnportable":"указывает на абсолютный путь с другой машины, который здесь не существует — перенаправьте его локально или переустановите плагин","rollbackNow":"Откатить","rollingBack":"Откат изменений…","searchPh":"Поиск плагинов: уведомления, терминал, память…","setCardDesc":"Версия маркета, обновление и удаление.","setChannel":"Канал обновлений","setChannelBeta":"Бета","setChannelBetaHint":"Ранний доступ к непроверенным версиям. Влияет только на рынок плагинов.","setChannelDev":"Разработка","setChannelDevHint":"Непроверенные сборки из ветки разработки. Не рекомендуются для общего использования.","setChannelStable":"Стабильный","setChannelStableHint":"Только выпущенные версии.","setChannelSwitch":"Переключиться на","setChannelSwitchHint":"Эта версия ниже установленной.","setRegion":"Скачать регион","setRegionAuto":"Выбрано на основе проверки сети. Можете изменить в любое время.","setRegionChina":"Китай, материковая часть","setRegionChinaHint":"Быстрее в материковом Китае. Изменяет маршрут загрузки, не источник.","setRegionGlobal":"Глобальный","setRegionGlobalHint":"Загрузки напрямую из npm и GitHub.","setSelfCancel":"Отмена","setSelfConfirm":"Удалить маркет плагинов? Поставить его заново можно будет только из командной строки.","setSelfFailed":"Операция не удалась","setSelfPurge":"Заодно стереть данные маркета","setSelfPurgeOff":"Данные маркета сохранятся. Учтите: плагины, которые он выключил, останутся выключенными, а интерфейса, чтобы вернуть их, после удаления не будет.","setSelfPurgeOn":"Будут удалены: список выключенных плагинов, свои группы и строки выключения, которые маркет записал в патч профиля, — выключенные им плагины снова заработают. Паролей и токенов это не касается: маркет их на диск не пишет.","setSelfRemove":"Удалить маркет плагинов","setSelfRemoveConfirm":"Удалить","setSelfRemoveHint":"Удаляет маркет из этого профиля. Остальные плагины не трогаются.","setSelfRemoved":"Удалён","setSelfRemovedHint":"Перезапустите DeepSeek Harness, чтобы завершить.","setSelfRestartAfter":"Перезапустить DeepSeek Harness сразу после удаления","setSelfRestartingHint":"Перезапуск DeepSeek Harness…","setSelfUpToDate":"Обновлений нет","setSelfUpToDateHint":"Актуально, обновление не требуется","setSelfUpdate":"Обновить","setSelfUpdateHint":"Обновление скачает новую версию; она заработает после перезапуска.","setSelfUpdateReady":"Доступна новая версия:","setSelfUpdatedHint":"Скачано. Перезапустите DeepSeek Harness, чтобы обновление вступило в силу: страница обновляется сразу, серверная половина — нет.","setSelfWorking":"Удаление…","shadowNameBanner":"Эта операция оставила одно имя плагина, определенное в двух слоях; после перезапуска загрузится только один:","snapCreate":"Создать снимок","snapCreateFail":"Не удалось создать снимок:","snapCreated":"Снимок создан","snapCreating":"Создание…","snapDelete":"Удалить","snapDeleteConfirm":"Подтвердить удаление","snapDeleteConfirmText":"Этот снимок нельзя будет восстановить после удаления.","snapDeleteFail":"Не удалось удалить снимок:","snapDeleted":"Снимок удалён","snapDeleting":"Удаление…","snapEmpty":"Снимков пока нет","snapFiles":"файлы","snapHint":"Снимки создаются автоматически перед применением изменений; вы также можете создать их вручную и откатиться в любой момент.","snapListFail":"Не удалось загрузить снимки:","snapRestore":"Восстановить","snapRestoreConfirm":"Подтвердите восстановление","snapRestoreConfirmText":"Восстановление перезаписывает текущий package.json профиля и конфигурацию из снимка; это действие нельзя отменить (создайте новый снимок, если не уверены).","snapRestoreFail":"Не удалось восстановить:","snapRestored":"Восстановлено — перезапустите для применения","snapRestoring":"Восстановление…","snapSection":"Снимки & Откат","sortAdded":"Дата выпуска","sortAsc":"По возрастанию","sortDesc":"По убыванию","sortDownloads":"npm загрузки (30д)","sortNewest":"Сначала новые","sortOldest":"Сначала старые","sortStars":"Звёзды","stateBroken":"Установлен, но не прошёл проверку","stateDisabled":"Выключен","stateInert":"Установлен, но не является плагином слоя профиля","stateLive":"Работает (загружен на лету)","stateRestart":"Установлен — перезапустите, чтобы применить","submitPlugin":"Хотите, чтобы ваш плагин был добавлен в список?","subtitle":"Плагины сообщества для DeepSeek Harness","switchOnLabel":"Включено","tabAdvanced":"Дополнительно","tabBackup":"Копия и восстановление","tabDiagnostics":"Диагностика","tabDiscover":"Обзор","tabGroups":"Группы","tabInstalled":"Установленные","tabList":"Список","tabThemes":"Темы","terminalWarn":"Похоже, это плагин для терминала: в веб-профиле он может ничего не делать или даже сломать запуск DeepSeek Harness. Прочитайте его README и ставьте в тот профиль, для которого он написан.","themeActive":"Активна","themeApply":"Применить","themeDeactivate":"Отключить","themeEmpty":"Других тем в каталоге пока нет — следите за обновлениями","themeExitFullscreen":"Выйти из полноэкранного режима","themeFullscreen":"Просмотр в полноэкранном режиме","themePreview":"Предпросмотр","themePreviewCount":"{0} предпросмотры","themePreviewLoading":"Поиск предварительного просмотра…","themePreviewMissing":"Предпросмотр недоступен","themeResultCount":"{0} темы","timeAll":"Всё время","timeDay":"Сутки","timeMonth":"30 дней","timeQuarter":"90 дней","timeWeek":"7 дней","timeYear":"Год","toastReady":"установлен и работает","toastTheme":"теперь активна. Переключить можно в «Настройки → Маркет плагинов → Темы»","toastToggledOff":"теперь выключено — перестало работать сразу","toastToggledOn":"включён","toggleFail":"Переключить не удалось","ungrouped":"Без группы","uninstall":"Удалить","uninstallConfirmDesc":"Плагин будет удалён из текущего профиля.","uninstalling":"Удаление…","upToDate":"Обновлений нет","update":"Обновить","updateAll":"Обновить все","updateFail":"Обновить не удалось","updateNow":"Обновить сейчас","updated":"✓ Обновлён — перезапустите, чтобы применить","updatedLive":"✓ Обновлён — работает","updating":"Обновление…","versionHint":"Версия маркета плагинов — указывайте её при обращении","viewReplacement":"Посмотреть замену","viewSource":"Исходник","webdav":"WebDAV","webdavNote":"Адрес WebDAV и имя пользователя остаются только в этом браузере; пароль хранится на сервере и вводится заново каждую сессию.","webdavPassword":"Пароль (необязательно)","webdavPreset":"Готовая настройка провайдера","webdavRestore":"Восстановить с WebDAV","webdavUpload":"Выгрузить копию","webdavUrl":"Адрес файла копии","webdavUser":"Имя пользователя (необязательно)"},"dsh-skill-hub":{"badge.source.bundled":"встроенный","badge.source.custom":"свой каталог","badge.source.project-agents":"проект .agents","badge.source.project-dsh":"проект .dsh","badge.source.runtime":"runtime","badge.source.user-agents":"пользователь .agents","badge.source.user-dsh":"пользователь .dsh","delete.confirm":"В корзину","delete.confirmText":"Переместить «{name}» в корзину? Его можно восстановить в любой момент.","delete.confirmTitle":"В корзину?","detail.addedAt":"Добавлен","detail.back":"К списку","detail.groups":"Группы","detail.loading":"Загрузка текста навыка…","detail.path":"Путь","detail.provider":"Провайдер","detail.updatedAt":"Обновлён","detail.uses":"Вызовы","detail.whenToUse":"Когда применять","entry.label":"Навыки","entry.tooltip":"Центр навыков: просмотр, группировка и синхронизация локальных навыков","err.dismiss":"Понятно","filter.allSources":"Все источники","filter.private":"Личные","form.busy":"Создание…","form.cancel":"Отмена","form.capabilityHint":"Как выбрать способность: повторяемый метод → навык; внешняя система → MCP; долгосрочные знания → база знаний.","form.desc":"Описание (одно предложение для маршрутизации)","form.descPlaceholder":"Одна строка — что делает (с триггерными словами); по этому описанию агенты активируют навык","form.error":"Ошибка создания: ","form.name":"Имя навыка (kebab-case, например code-review)","form.root":"Целевой каталог","form.submit":"Создать","form.success":"Создано: ","group.bundled":"Встроенные","group.custom":"Пользовательские каталоги","group.other":"Другие источники","group.project-agents":"Проектные .agents/skills","group.project-dsh":"Проектные .dsh/skills","group.runtime":"Runtime","group.user-agents":"Пользовательские ~/.agents/skills","group.user-dsh":"Пользовательские ~/.dsh/skills","groups.closeAll":"Закрыть все","groups.conflictText":"Эти навыки включены и в других группах; их закрытие затронет и те группы:","groups.conflictTitle":"Закрыть эту группу?","groups.delete":"Удалить сценарий","groups.edit":"Изменить","groups.empty":"Сценариев ещё нет. Создайте один и начните раскладывать навыки.","groups.keepOn":"Оставить включёнными","groups.membersHint":"Отметьте навыки, чтобы добавить их в сценарий (включая отключённые).","groups.merge":"Объединить","groups.namePlaceholder":"Название сценария","groups.new":"Новый сценарий","groups.noCollections":"Групп по источникам пока нет. Импортируйте навыки из маркета — они сгруппируются по источникам.","groups.noWritable":"В группе нет перезаписываемых навыков (состояние навыков «только чтение» нельзя менять из центра)","groups.personal":"Личные","groups.project":"Проектные","groups.rename":"Сохранить название","groups.saveMembers":"Сохранить состав","groups.subdivide":"Разделить","legend.hint":"У навыка не более одной точки; нет точки = не вызывается.","legend.model":"Вызывается моделью — агенты могут вызывать автоматически","legend.user":"Вызывается пользователем — только явный вызов","market.add":"Добавить","market.addPlaceholder":"owner/repo или https://github.com/…","market.addSource":"Добавить источник","market.branchConfirm":"Подтвердить","market.branchHint":"У репозитория нет релизов. Выберите ветку для отслеживания (по умолчанию main):","market.branchTitle":"Выберите ветку","market.catalog.anthropics":"Официальная коллекция навыков Anthropic (Claude Skills)","market.catalog.mattpocock":"Коллекция навыков Matt Pocock","market.catalog.openDesign":"Коллекция навыков дизайна (design-templates)","market.catalog.superpowers":"Коллекция навыков сообщества Superpowers","market.catalogHint":"Отобранные репозитории навыков — добавьте, чтобы сканировать и устанавливать, с постоянной проверкой обновлений.","market.check":"Проверить","market.checkAll":"Проверить все","market.checkUpdate":"Проверить обновления","market.checking":"Проверка…","market.deleteSource":"Удалить источник","market.deletedUpstream":"Удалено в источнике: {count}","market.installed":"Установлено: {count}","market.newRelease":"Новая версия v{version}","market.noSources":"Источников пока нет. Добавьте из каталога ниже или введите репозиторий GitHub.","market.removeHint":"Удаление источника не затрагивает установленные навыки.","market.scan":"Сканировать","market.scanning":"Сканирование…","market.sync":"Синхронизировать","market.syncCancel":"Пропустить","market.syncNone":"Из этого репозитория пока не импортировано ни одного навыка.","market.syncText":"Источник выровнен с {ref}. Обновить эти локальные навыки?","market.syncTitle":"Обновить локальные навыки","market.syncing":"Синхронизация…","market.title":"Маркет","market.upToDate":"Актуально","market.updatable":"Обновляемо: {count}","market.update":"Обновить","market.updateAll":"Обновить всё","market.updateAllConfirmText":"Обновляемые навыки этих источников будут перезаписаны их новейшими версиями из источника:","market.updateAllConfirmTitle":"Обновить все навыки?","market.updateAllDone":"Обновлено источников: {count}","market.updateAllItem":"{repo} (навыков: {count})","market.updateCount":"Обновить {count}","market.updated":"Есть обновления","panel.count":"Всего навыков: {count}","panel.diagnostics":"Диагностика обнаружения","panel.disabled":"Отключено","panel.disabledCount":"Отключено: {count}","panel.empty":"Нет подходящих навыков.","panel.emptyAll":"Навыков пока нет. Создайте первый.","panel.enabled":"Включено","panel.incomplete":"(каталог может быть неполным)","panel.loading":"Загрузка…","panel.new":"Новый навык","panel.search":"Поиск навыков…","panel.title":"Центр навыков","panel.workspaceClear":"Очистить рабочую область","panel.workspaceHint":"Укажите путь проекта, чтобы показать навыки его .dsh/skills и .agents/skills (только чтение); очистите и нажмите Enter, чтобы вернуться к пользовательскому виду.","panel.workspacePlaceholder":"Путь рабочей области (Enter — применить)","repo.cancel":"Отмена","repo.cancelled":"Отменено · {imported}/{total} сохранено, временные файлы удалены","repo.clearAll":"Очистить","repo.empty":"Импортируемых навыков не найдено.","repo.existing":"Существующие","repo.failed":"Не удалось: {count}","repo.files":"Файлов: {count} · {size}","repo.import":"Импортировать выбранные ({count})","repo.imported":"Импортировано: {count}","repo.importing":"Импорт…","repo.importingCurrent":"Импорт: {name} ({done}/{total})","repo.ready":"Найдено импортируемых навыков: {count}","repo.root.designTemplates":"Шаблоны design-templates","repo.root.generic":"{root}","repo.root.skills":"Навыки (skills)","repo.selectAll":"Выбрать все","repo.skippedExisting":"Пропущено существующих: {count}","row.delete":"В корзину","row.disable":"Отключить","row.enable":"Включить","row.open":"Подробнее о навыке {name} (Enter)","row.readonly":"только чтение","settings.announceToAgent":"Объявлять агенту","settings.announceToAgentHint":"Добавляет раздел в системный промпт, чтобы агенты знали, как сотрудничать, когда пользователь упоминает управление навыками.","settings.collapse":"Скрыть настройки","settings.description":"Управление локальным каталогом навыков dsh: просмотр, группировка, синхронизация источников и создание.","settings.discard":"Отменить","settings.dotModelColor":"Цвет точки «вызывается моделью»","settings.dotModelColorHint":"Цвет синей точки «модель может вызвать» в панели навыков и чате/меню (#rrggbb).","settings.dotUserColor":"Цвет точки «вызывается пользователем»","settings.dotUserColorHint":"Цвет зелёной точки «только пользователь» в панели навыков и чате/меню (#rrggbb).","settings.enabled":"Включить плагин","settings.enabledHint":"Отключает маршруты, элементы и объявление центра навыков.","settings.expand":"Показать настройки","settings.inherit":"Наследовать","settings.notExposed":"Это развёртывание не предоставляет пространство настроек.","settings.off":"Выкл","settings.on":"Вкл","settings.overridden":"Переопределено","settings.readOnly":"Настройки этого развёртывания доступны только для чтения.","settings.reset":"Сбросить к значению по умолчанию","settings.save":"Сохранить","settings.saveFailed":"Развёртывание не приняло эти значения; они оставлены для исправления.","settings.saving":"Сохранение…","settings.showGroupSummary":"Показывать сводку по группам","settings.showGroupSummaryHint":"После заголовков групп показывать число вызовов и время последнего вызова.","settings.showUseCount":"Показывать число вызовов","settings.showUseCountHint":"Показывать янтарный счётчик вызовов рядом с именем навыка.","settings.showUseTime":"Показывать время последнего вызова","settings.showUseTimeHint":"Показывать относительное время в строке имени (например «3 дн назад»).","settings.statsScanMinutes":"Интервал автостатистики (минут)","settings.statsScanMinutesHint":"Как часто фоновое сканирование журналов сессий выполняется (минимум 1); тяжёлые сканирования автоматически растягивают интервал.","settings.statsWindowDays":"Окно статистики (дней)","settings.statsWindowDaysHint":"Учитывать использование только за последние N дней (по умолчанию 14); 0 = вся история. Изменения применяются сразу.","settings.title":"Центр навыков","settings.unsaved":"Есть несохранённые","sort.added":"По дате добавления","sort.name":"По названию","sort.uses":"По числу вызовов","source.check":"Проверить обновления","source.checkHint":"Нажмите, чтобы проверить источник на обновления","source.checking":"Проверка…","source.clearTrash":"Очистить корзину","source.clearTrashConfirm":"Удалить безвозвратно","source.clearTrashConfirmText":"Навыки в корзине будут удалены безвозвратно и не могут быть восстановлены.","source.clearTrashConfirmTitle":"Очистить корзину?","source.commit":"Синхронизированная ревизия","source.deleteConfirmText":"Эти навыки удалены из источника; их локальные каталоги уйдут в корзину (восстановимо):","source.deleteConfirmTitle":"Согласиться с удалением в источнике?","source.deleteGroup":"Удалить группу","source.deleteGroupHint":"Удалить все навыки ({count}) этой группы","source.deleteGroupText":"Все навыки ({count}) группы «{name}» будут перемещены в корзину (восстановимо); навыки «только чтение» будут пропущены:","source.deleteGroupTitle":"Удалить группу?","source.deleted":"Удалено в источнике: {count}","source.error":"Проверка не удалась","source.followDelete":"Согласиться с удалением","source.private":"Личный навык (не привязан к источнику; проверки обновлений нет)","source.restore":"Восстановить","source.sync":"Синхронизировать","source.syncConfirmText":"Локальные изменения этих навыков будут перезаписаны новейшими версиями из источника:","source.syncConfirmTitle":"Синхронизировать навыки?","source.syncing":"Синхронизация…","source.throttled":"Недавно проверено","source.trash":"Корзина","source.unverified":"источник ещё не проверен","source.upToDate":"Актуально","source.updated":"Обновлений: {count}","time.daysAgo":"{value} дн назад","time.hoursAgo":"{value} ч назад","time.justNow":"только что","time.minutesAgo":"{value} мин назад","time.weeksAgo":"{value} нед назад","update.available":"Доступно обновление: v{version} (текущая v{current})","update.check":"Проверить обновления","update.checking":"Проверка…","update.error":"Не удалось проверить обновления: {error}","update.newVersion":"Новая версия v{version}","update.unavailable":"Нет доступных релизов","update.upToDate":"Актуальная версия: v{version}","update.viewRelease":"Открыть релиз","view.flat":"Списком","view.grouped":"По группам","view.market":"Маркет","view.scenes":"Сценарии","view.sources":"Источники"},"dsh-subscriptions":{"accountLabel":"Аккаунт","addAccount":"+ Добавить аккаунт","cardIntro":"Подписки, ротация и ограничения аккаунтов.","connect":"Подключить","connected":"Подключено","coolingDown":"Охлаждение","disconnect":"Отключить","hide":"Скрыть","intro":"Войдите с помощью потребительской подписки. Токены остаются в хранилище учетных данных хоста. Браузер никогда не читает их обратно. После подключения, если провайдер перенаправляет на localhost или страницу провайдера, вставьте перенаправленный URL или код сюда.","loading":"Загрузка…","notConnected":"Не подключено","pastePlaceholder":"Вставьте перенаправленный URL или код","plan":"План","reconnect":"Переподключиться","removeSlot":"Удалить слот","save":"Сохранить","saved":"Сохранено","show":"Показать","storedAs":"Хранится как","submitCode":"Отправить код","title":"Подписки","usageFull":"Использование 100%","useOrigin":"Используйте этот источник Web UI как redirect_uri для OAuth","useOriginHint":"Не включайте, если вы не зарегистрировали собственный OAuth-клиент для этого источника. CLI-клиенты провайдеров обычно требуют опубликованный URI перенаправления и шаг вставки.","verifyAccount":"Подтвердить аккаунт","verifyLink":"Откройте ссылку для подтверждения","verifyPrefix":"Google требует одноразовой проверки аккаунта.","verifySuffix":"затем переподключитесь."},"dsh-tts":{"addProvider":"Добавить провайдера","announce":"Объявлять одобрения","announceHint":"Произнесите вслух и воспроизведите мелодию, когда агент остановится для подтверждения или задаст вопрос.","approvalHint":"Сказано, когда запрашивается одобрение; добавляется название инструмента.","approvalText":"Формулировка одобрения","azureHint":"Необходимо для провайдера Azure, например, eastus.","azureRegion":"Регион Azure","bargeIn":"Замолкать, когда вы говорите","bargeInHint":"Перестаньте читать, как только микрофон откроется.","binHint":"Ищется в PATH, если не указан абсолютный путь.","cardHint":"Цепочка провайдеров, голоса и параметры воспроизведения.","chainHint":"Сверху вниз указан порядок резервирования. Ключи облака сохраняются в хранилище учетных данных хоста, никогда в настройки плагина.","chainHintCard":"Выберите провайдера, вставьте его API-ключ и сохраните (или оставьте поле ключа пустым). Ключ сразу записывается в хранилище учетных данных хоста. Браузер никогда не читает его обратно.","chainTitle":"Цепочка провайдеров","chime":"Звонок","chimeHint":"динь, бип или ничего.","clear":"Очистить","configured":"Настроено","down":"Вниз","edgeBin":"бинарный файл edge-tts","edgeHint":"Python CLI из пакета edge-tts.","espeakBin":"Бинарный файл eSpeak","espeakHint":"Обычно espeak-ng.","fromEnv":"Задано в окружении","general":"Общие","language":"Язык","languageHint":"Подсказка для голосов, которым требуется локаль (eSpeak, Azure SSML).","loading":"Загрузка…","localProvider":"Локальный / CLI провайдер — без API-ключа","notSet":"Не задано","piperBin":"Бинарный файл Piper","piperModel":"Путь к модели Piper","piperModelHint":"Абсолютный путь к модели ONNX. Оставьте пустым, чтобы пропустить Piper.","questionHint":"Используется, когда агент задаёт вопрос. Если оставить пустым, функция будет отключена.","questionText":"Формулировка вопроса","rate":"Скорость воспроизведения","rateHint":"От 0.5 до 2. Синтез не изменяется; браузер воспроизводит быстрее или медленнее.","remove":"Удалить","save":"Сохранить","saved":"Сохранено","speakAsItGoes":"Говорите по мере проигрывания","speakAsItGoesHint":"Читайте каждый ответ сразу, как только он появляется, предложение за предложением, вместо ожидания всей очереди.","speakReplies":"Озвучивать ответы агента","speakRepliesHint":"Когда включено, каждый завершённый ответ синтезируется на хосте и воспроизводится в этом браузере. Аудио не отправляется обратно в модель.","title":"Речь","up":"Вверх"},"dsh-voice":{"addCustom":"Добавить своего провайдера","addProvider":"Добавить провайдера","browserFailed":"Браузер не распознал:","browserHint":"браузер выполняет распознавание, ключ не требуется","cancel":"Отмена","chainHint":"Сверху вниз — порядок, в котором они проверяются","clearKey":"Очистить ключ","composerUnavailable":"Композитор недоступен","customHint":"Любой OpenAI-совместимый API. Название становится доступным в цепочках выше.","customKeyName":"название ключа","customModel":"модель","customModelHint":"модель для запроса (пустое значение означает встроенную)","customName":"имя, используемое в цепочке","customTitle":"Ваши собственные провайдеры","deepinfraHint":"openai/whisper-large-v3-turbo · ключ DEEPINFRA_API_KEY","dictationBtn":"Голосовой ввод","dictationHint":"Речь обрезается на паузах, а текст добавляется к вводу.","dictationPill":"Диктовка — текст добавляется к вводу","down":"Вниз","fireworksHint":"whisper-v3-turbo · ключ FIREWORKS_API_KEY","general":"Общие","hide":"Скрыть","holdHint":"Удерживайте — отпустите, чтобы отправить","hotkey":"Клавиша голосового сообщения","hotkeyHint1":"Держите для записи, отпустите, чтобы отправить агенту, Esc отменяет.","hotkeyHint2":"Подойдёт любая клавиша: буква, F-клавиша или модификатор.","keepPending":"Не отправлять","keySpace":"Пространство","keyUnset":"не задано","language":"Язык","listening":"Слушаю в браузере…","loadingSettings":"Загрузка настроек…","localHint":"устанавливается при запуске сервера","messageBtn":"Голосовое сообщение — нажмите или удерживайте","messageHint":"Одна целая запись, отправленная агенту после расшифровки.","messagePill":"Запись голосового сообщения","messageTitle":"Голосовое сообщение","micUnavailable":"Микрофон недоступен: требуется HTTPS или localhost","mistralHint":"voxtral-mini-latest · ключ MISTRAL_API_KEY","noRecorder":"Этот браузер не поддерживает MediaRecorder","notReady1":"Харнесс ещё не объявил настройки этого плагина. Если он только что перезапустился,","notReady2":"раздел появится сам через несколько секунд.","nothingHeard":"Ничего не было распознано","openaiHint":"whisper-1 · ключ OPENAI_API_KEY","openrouterHint":"google/gemini-2.5-flash · ключ OPENROUTER_API_KEY","openrouterWarning":"У OpenRouter нет /audio/transcriptions — используйте там шаблон openai-chat-audio","pauseHint":"Меньшее значение означает более частые фрагменты и быстрый текст, но выше риск разрыва слова","pauseMs":"Пауза, завершающая фразу, мс","pressKey":"Нажмите клавишу…","recognitionError":"распознавание не удалось","recordSlot":"Запись голоса","remove":"Удалить","save":"Сохранить","saveFailed":"Некоторые поля не были сохранены —","saved":"Сохранено ✓","secondsShort":"с","sendingIn":"Отправка агенту через","siliconflowHint":"FunAudioLLM/SenseVoiceSmall · ключ SILICONFLOW_API_KEY","stop":"Стоп","title":"Голос","transcribing":"Транскрибируем…","undoHint":"Как долго ещё можно отменить автоматическую отправку","undoMs":"Окно отмены, мс","up":"Вверх","whisperAutostart":"Автозапуск локального whisper","whisperBin":"Локальный шепот: бинарный","whisperBinHint":"используется при включённом автозапуске","whisperEndpoint":"Локальный whisper: адрес","whisperEndpointHint":"POST /inference сервера whisper.cpp","whisperModel":"Локальная модель Whisper"},"feedback":{"action.dislike":"Плохой ответ","action.dislikeActive":"Убрать оценку","action.like":"Хороший ответ","action.likeActive":"Убрать оценку","error.conflict":"Эту оценку изменили в другом месте; показано актуальное состояние","error.generic":"Не удалось сохранить оценку","error.load":"Не удалось загрузить оценку","note.aria":"Комментарий к оценке","note.cancel":"Отмена","note.dialog":"Отзыв","note.open":"Добавить комментарий","note.placeholder":"Что получилось хорошо, а что нет? (необязательно)","note.save":"Сохранить"},"goal":{"action.cancel":"Отменить правку","action.clear":"Снять цель","action.edit":"Изменить цель","action.pause":"Приостановить цель","action.resume":"Продолжить цель","action.save":"Сохранить цель","commandInput.aria":"Ввод команды","objective.aria":"Формулировка цели","phase.active":"Цель в работе","phase.blocked":"Цель заблокирована","phase.paused":"Цель на паузе"},"im-hub":{"f.agentCwd":"Рабочая папка","f.agentCwdHint":"Папка для сессий агента; пусто — папка процесса dsh.","f.agentMaxMessageLength":"Длина сообщения","f.agentMaxMessageLengthHint":"Максимум символов в исходящем сообщении; длинные ответы разбиваются.","f.agentModel":"Модель","f.agentModelHint":"Переопределить модель; пусто — как задано в установке.","f.agentProvider":"Провайдер","f.agentProviderHint":"Переопределить провайдера модели; пусто — как задано в установке.","f.allowedUserIdsHint":"Идентификаторы через запятую; пусто — доступ всем (для боевой работы не советуем).","f.configured":"Задано","f.enabled":"Включено","f.enabledHint":"Общий выключатель всего IM-шлюза.","f.feishuAllowedUserIds":"Разрешённые open id","f.feishuAppId":"App id","f.feishuAppIdHint":"App id приложения Feishu (cli_…).","f.feishuAppSecret":"App secret","f.feishuEnabled":"Включено","f.feishuEnabledHint":"Включить адаптер Feishu по постоянному WebSocket-соединению (публичный адрес не нужен).","f.httpHost":"Адрес привязки","f.httpHostHint":"Адрес, на котором слушают HTTP-серверы в режиме вебхуков.","f.httpPort":"Порт привязки","f.httpPortHint":"Порт, на котором слушают HTTP-серверы в режиме вебхуков.","f.inherit":"Наследовать","f.larkAllowedUserIds":"Разрешённые open id","f.larkAppId":"App id","f.larkAppSecret":"App secret","f.larkEnabled":"Включено","f.larkEnabledHint":"Включить международный адаптер Lark (open.larksuite.com).","f.mockEnabled":"Включено","f.mockEnabledHint":"Адаптер только для тестов: локальный HTTP-эндпоинт без учётных данных платформы.","f.mockPort":"Порт","f.mockPortHint":"Фиксированный HTTP-порт тестового эндпоинта (0 — любой свободный).","f.notConfigured":"Не задано","f.off":"Выкл","f.on":"Вкл","f.secretHint":"Хранится на сервере и больше не показывается. Оставьте пустым, чтобы сохранить текущее значение.","f.telegramAllowedUserIds":"Разрешённые id пользователей","f.telegramEnabled":"Включено","f.telegramEnabledHint":"Включить адаптер Telegram Bot API с опросом обновлений.","f.telegramToken":"Токен бота","f.telegramTokenHint":"Токен от @BotFather (123456:ABC-DEF…).","f.wecomAgentId":"Agent id","f.wecomAgentIdHint":"Agent id приложения WeCom.","f.wecomAllowedUserIds":"Разрешённые id пользователей","f.wecomCorpId":"Corp id","f.wecomCorpIdHint":"Идентификатор организации из консоли WeCom.","f.wecomCorpSecret":"App secret","f.wecomEnabled":"Включено","f.wecomEnabledHint":"Включить адаптер WeCom с обратным вызовом (нужен публичный адрес).","f.wecomEncodingAesKey":"EncodingAESKey","f.wecomToken":"Токен обратного вызова","g.agent":"Агент","g.feishu":"Feishu (Китай)","g.general":"Общие","g.http":"HTTP (режим вебхуков)","g.lark":"Lark (международный)","g.mock":"Тестовый адаптер","g.telegram":"Telegram","g.wecom":"WeCom (WeChat Work)","p.agentCwd":"Например: /home/user/projects/my-agent (пусто — папка DSH)","p.agentMaxMessageLength":"Например: 4000","p.agentModel":"Например: deepseek-v4-flash (пусто — по умолчанию)","p.agentProvider":"Например: volcengine (пусто — по умолчанию)","p.feishuAllowedUserIds":"Например: ou_xxxxxxxxxxxxx","p.feishuAppId":"Например: cli_xxxxxxxxxxxxx","p.feishuAppSecret":"App Secret приложения Feishu","p.httpHost":"Например: 0.0.0.0","p.httpPort":"Например: 8080","p.larkAllowedUserIds":"Например: ou_xxxxxxxxxxxxx","p.larkAppId":"Например: cli_xxxxxxxxxxxxx","p.larkAppSecret":"App Secret приложения Lark","p.mockPort":"Например: 9099 (0 — автоматически)","p.telegramAllowedUserIds":"Например: 123456789, 987654321","p.telegramToken":"Например: 123456789:AA...","p.wecomAgentId":"Например: 1000002","p.wecomAllowedUserIds":"Например: ivanov, petrov","p.wecomCorpId":"Например: wwxxxxxxxxxxxxxx","p.wecomCorpSecret":"Secret приложения WeCom","p.wecomEncodingAesKey":"EncodingAESKey из 43 символов","p.wecomToken":"Токен адреса обратного вызова","settings.collapse":"Свернуть","settings.description":"Подключает агентов dsh к Feishu (Lark), WeCom и Telegram. Каждый чат получает свою сессию агента.","settings.discard":"Отменить","settings.expand":"Развернуть","settings.invalidNumber":"Введите корректное число","settings.overridden":"Переопределено","settings.readOnly":"Установка доступна только для чтения: настройки из интерфейса не меняются.","settings.reset":"Сбросить","settings.save":"Сохранить","settings.saveFailed":"Сохранить не удалось","settings.saving":"Сохранение…","settings.title":"IM-шлюз (dsh-im-hub)","settings.unsaved":"Есть несохранённые изменения"},"job":{"count.idle.few":"{count} фоновые задачи","count.idle.many":"{count} фоновых задач","count.idle.one":"{count} фоновая задача","count.idle.other":"{count} фоновых задач","count.live.few":"{count} фоновые задачи выполняется","count.live.many":"{count} фоновых задач выполняется","count.live.one":"{count} фоновая задача выполняется","count.live.other":"{count} фоновых задач выполняется","duration.hours":"{hours} ч {minutes} мин","duration.minutes":"{minutes} мин {seconds} с","duration.seconds":"{seconds} с","duration.title.done":"Заняло {duration}","duration.title.live":"Выполняется {duration}","list.aria":"Фоновые задачи","status.completed":"завершена","status.failed":"ошибка","status.killed":"отменена","status.running":"выполняется","status.stopping":"останавливается"},"model":{"action.reload":"Обновить","blocked.composer":"Эта модель недоступна — выберите другую, чтобы продолжить","command.description":"Выбрать модель для этого диалога","effort.providerDefault":"По умолчанию","empty.efforts":"У этой модели нет уровней рассуждения.","empty.models":"Доступных моделей нет.","error.action":"Операция с моделью не удалась: {message}","menu.aria":"Модель и уровень рассуждения","menu.effort":"Уровень рассуждений","menu.model":"Модель","option.loadError":"Каталог не загрузился: {message}","status.loading":"Обновление списка моделей…","trigger.aria":"Выбор модели, сейчас {model}","trigger.ariaEffort":"Выбор модели, сейчас {model}, уровень рассуждения {effort}","trigger.fallback":"Выбрать модель","trigger.selectAria":"Выбрать модель","warning.groupLoad":"{name} не загрузился: {message}"},"permission.access":{"confirm.acknowledge":"Я понимаю риски и хочу продолжить","confirm.cancel":"Отмена","confirm.description":"Полный доступ убирает часть подтверждений и позволяет агенту действовать напрямую, включая чувствительные операции, изменение файлов и внешние команды. Включайте, только если доверяете текущей задаче.","confirm.enable":"Включить полный доступ","confirm.title":"Включить полный доступ?"},"pin":{"action.pin":"Закрепить","action.unpin":"Открепить"},"plan":{"chip.off.aria":"Режим плана выключен, нажмите, чтобы включить","chip.off.title":"Режим плана выключен — нажмите, чтобы включить (/plan)","chip.on.aria":"Режим плана включён, нажмите, чтобы выключить","chip.on.title":"Режим плана включён — нажмите, чтобы выключить (/plan off)"},"plugin-store":{"dialog.close":"Закрыть магазин плагинов","header.open":"Открыть магазин плагинов","header.title":"Магазин плагинов DSH","settings.tab":"Магазин плагинов","store.analyzeFailed":"Передать разбор агенту не удалось","store.analyzeHint":"Отправить эту ошибку в новую сессию агента для разбора.","store.analyzeSent":"Отправлено агенту","store.analyzeWithAgent":"Попросить агента разобраться","store.analyzing":"Создаём сессию агента…","store.cancel":"Отмена","store.category":"Категория","store.categoryAll":"Все категории","store.confirmInstall":"Установить плагин","store.confirmRemove":"Удалить плагин","store.confirmUpdate":"Обновить плагин","store.copied":"Ссылка для установки скопирована","store.copyInstall":"Скопировать ссылку для установки","store.disclaimer":"Наличие в каталоге не подтверждает работоспособность, совместимость, безопасность или качество.","store.done":"Готово","store.empty":"Под эти фильтры ничего не подходит","store.install":"Установить","store.installFailed":"Установить не удалось","store.installSuccess":"Установлено. Перезапустите DSH Web, чтобы плагин заработал.","store.installed":"Установлен","store.installedLoadFailed":"Список установленных плагинов недоступен","store.installedOnly":"Только установленные","store.installing":"Установка…","store.loadFailed":"Не удалось загрузить каталог","store.loadMore":"Показать ещё","store.loading":"Загрузка каталога плагинов…","store.openDetails":"Открыть карточку в магазине","store.refresh":"Обновить каталог","store.refreshFailed":"Каталог не обновился; показаны последние успешные данные","store.remove":"Удалить плагин","store.removeDetail":"Меняется только зависимость текущего профиля. Чтобы удаление вступило в силу, перезапустите DSH Web.","store.removeFailed":"Удалить не удалось","store.removeLead":"Плагин будет удалён из текущего профиля DSH Web.","store.removeSuccess":"Удалено. Перезапустите DSH Web, чтобы изменение вступило в силу.","store.removeTitle":"Удаление плагина","store.removing":"Удаление…","store.results":"{visible} из {total} проектов","store.retry":"Повторить","store.riskAcknowledge":"Я понимаю риск и хочу установить этот сторонний плагин","store.riskDetail":"Присутствие в каталоге не является проверкой безопасности, совместимости или качества. Установленный код выполняется с правами процесса DSH, а чтобы он заработал, DSH Web нужно перезапустить.","store.riskLead":"В текущий профиль DSH Web будет установлен код из стороннего репозитория.","store.riskTitle":"Подтверждение риска стороннего плагина","store.search":"Поиск по названию, автору, описанию или теме","store.sort":"Сортировка","store.sortName":"Название","store.sortRecommended":"Рекомендуемые","store.sortStars":"Звёзды","store.sortUpdated":"Недавно обновлённые","store.stars":"звёзд: {count}","store.topicListed":"Указана тема","store.update":"Обновить","store.updateAvailable":"Есть обновление","store.updateRiskDetail":"Обновление заменит версию плагина в этом профиле. Чтобы оно вступило в силу, перезапустите DSH Web.","store.updateRiskLead":"В текущий профиль DSH Web будет установлена более новая ревизия стороннего репозитория.","store.updateRiskTitle":"Подтверждение обновления стороннего плагина","store.updateSuccess":"Обновлено. Перезапустите DSH Web, чтобы плагин заработал.","store.updated":"Каталог обновлён {date}","store.updating":"Обновление…","store.validation.check-failed":"Проверка структуры не пройдена","store.validation.check-pending":"Проверка структуры в очереди","store.validation.check-running":"Идёт проверка структуры","store.validation.expired":"Нужна повторная проверка","store.validation.inconclusive":"Требует рассмотрения","store.validation.not-applicable":"Вне проверки плагинов","store.validation.recorded":"Есть запись о проверке","store.validation.sandbox-failed":"Проверка в песочнице не пройдена","store.validation.sandbox-pending":"Проверка в песочнице в очереди","store.validation.sandbox-running":"Идёт проверка в песочнице","store.validation.security-review":"Проверка безопасности","store.validation.unrecognized":"Требует опознания","store.validation.verified":"Проверен","store.verified":"Проверен","store.verifiedOnly":"Только проверенные"},"question":{"action.next":"Дальше","action.skip":"Пропустить вопрос","custom.placeholder":"Впишите свой ответ","error.incomplete":"Сначала ответьте на этот вопрос.","error.unanswered":"Выберите вариант или впишите свой ответ.","nav.cancel":"Закрыть все вопросы","nav.maximize":"Развернуть карточку вопроса","nav.minimize":"Свернуть карточку вопроса","nav.next":"Следующий вопрос","nav.prev":"Предыдущий вопрос","option.recommended":"Рекомендуем","plan.approve":"Утвердить","plan.decline":"Отклонить","plan.discuss":"Обсудить","plan.header":"Проверка плана"},"reference":{"candidate.file":"Файл","candidate.folder":"Папка","candidate.noCwd":"(нет cwd)","candidate.session":"Сессия","section.files":"Файлы и папки","section.sessions":"Диалоги сессий"},"session-log-download":{"dialog.close":"Закрыть","dialog.commandFailed":"Не удалось запустить экспорт сессии.","dialog.errorTitle":"Экспорт сессии не удался","dialog.preparingDescription":"Готовится ZIP с этой сессией, её подсессиями и вложениями.","dialog.preparingTitle":"Экспорт сессии","dialog.successDescription":"Браузер загружает ZIP с сессией.","dialog.successTitle":"Загрузка сессии началась"},"settings":{"close":"Закрыть","general.nav":"Общие","openDocument":"Открыть файл настроек","openDocument.error":"Не удалось открыть файл настроек","title":"Настройки","trigger":"Настройки"},"settings.agentPreset":{"brokenBadge":"Не загрузился","brokenNoCopy":"Пресет, который не загрузился, скопировать нельзя","builtIn":"Встроенный","builtInGroup":"Встроенные","cancel":"Отмена","close":"Закрыть","composition":"Композиция (agent.cordis.yml)","copyIntro":"Пресет копируется целиком на этой машине. Идентификатор станет именем каталога и позже не меняется; всё остальное правится в файлах самого пресета.","copyOf":"Скопирован с","copyTitle":"Скопировать пресет","create":"Создать","creating":"Создание…","creatorDraft":"Набросать свой пресет в режиме «Конструктор»","customGroup":"Свои","delete":"Удалить","deleteConfirm":"Удалить","deleteDescription":"Каталог пресета будет удалён. Уже запущенные на нём сессии продолжат работать, но выбрать его для новых нельзя.","deleteTitle":"Удалить этот пресет?","deleting":"Удаление…","description":"Действует на сессии, запущенные с этого момента. Работающие сессии остаются на своём пресете.","displayName":"Название","displayNamePlaceholder":"Показывается в списке; по умолчанию — идентификатор","duplicate":"Скопировать","duplicateUnavailable":"В этой установке нет каталога пресетов с правом записи","error":"Не удалось загрузить пресеты агента.","headerHint":"Пресет агента, на котором идёт сессия; зафиксирован при запуске","idInvalid":"Строчные буквы, цифры и дефисы, начиная с буквы или цифры.","idRequired":"Задайте пресету идентификатор.","idTaken":"Пресет с таким идентификатором уже есть.","inUse":"Используется","loading":"Загрузка пресетов…","nav":"Пресеты агента","noDescription":"Без описания.","openLocation":"Открыть папку","presetCodeDescription":"Всё, что умеет обычный режим, но инструменты отдаются через Code Mode SDK: модель собирает многошаговые операции в одну программу на TypeScript.","presetCodeName":"Режим кода","presetCordisDescription":"Для создания своих пресетов: всё из обычного режима плюс инспекция рантайма, опыты с плагинами и подсказки по авторству пресетов.","presetCordisName":"Конструктор","presetId":"Идентификатор","presetIdPlaceholder":"my-agent","presetMinimalDescription":"Агент из двух инструментов: постоянный bash и str_replace_editor.","presetMinimalName":"Минимальный режим","presetStandardDescription":"Полноценный кодинг-агент: правка файлов, консоль, поиск по файлам и в вебе, скиллы, планирование, цели, субагенты и воркфлоу.","presetStandardName":"Обычный режим","retry":"Повторить","revealedPathLabel":"Файлы пресета:","seatHint":"Пресет агента для сессии, которую вы собираетесь запустить","sectionIntro":"Пресет — это состав плагинов, на котором работает агент сессии: его инструменты, промпт и возможности. Скопируйте готовый и допилите под себя или попросите агента набросать свой в режиме «Конструктор».","setDefault":"Сделать основным","showLocation":"Показать расположение","title":"Пресет агента","userTrust":"Свой","view":"Посмотреть"},"settings.commandcode":{"accountAdd":"Добавить аккаунт","accountDefault":"Основной аккаунт","accountKey":"API-ключ","accountKeyHint":"API-ключ этого аккаунта. Если оставить поле пустым, сохранённый ключ останется без изменений.","accountLabel":"Название аккаунта","accountRemove":"Удалить","accountsHint":"Когда активный аккаунт достигает лимита использования (429) или его ключ недействителен (401), запросы переключаются на следующий аккаунт; когда все аккаунты исчерпаны, ошибка указывает ближайшее время сброса окна.","accountsTitle":"Смена аккаунта","activeAccount":"Активный аккаунт","activeAccountAuto":"Авто (первый доступный аккаунт)","activeAccountHint":"Закрепите предпочтительный аккаунт; применяется к следующему запросу после сохранения. Если выбранный аккаунт исчерпан, запросы будут перенаправлены на другой доступный аккаунт.","advancedInvalid":"Число в расширенных настройках не готово к сохранению; раскройте, чтобы исправить.","advancedOverriddenMany":"{count} настроено","advancedOverriddenOne":"1 настроенный","advancedSettings":"Дополнительно","advancedSettingsHint":"Редко используемые параметры: базовый URL API, рабочая директория, тайм-ауты и фильтрация моделей.","apiBase":"Базовый URL API","apiBaseHint":"По умолчанию используется https://api.commandcode.ai; обычно оставляйте как есть.","apiKey":"API-ключ","apiKeyHint":"Создайте его в консоли commandcode.ai. Если оставить это поле пустым, сохранённый ключ останется без изменений.","apiKeyLocked":"Ключ предоставлен только для чтения","apiKeySet":"Настроено","apiKeyUnset":"Не настроено","cancel":"Отмена","cardConfiguredHint":"API-ключ готов. Чтобы заменить его, добавить ротацию аккаунтов, проверить использование или изменить базовый API, откройте страницу \"Command Code\" в Настройках.","cardLoadingHint":"Загрузка конфигурации командного кода…","cardRegistrationHint":"Эта карта предоставлена плагином Command Code; для отображения всех элементов управления требуется более новая версия DeepSeek Harness.","cardRouteActive":"Активный","cardTitle":"Подключение командного кода","discard":"Отменить","filterModelsByPlan":"Скрыть модели вне тарифного плана","filterModelsByPlanHint":"Если включено, в выборе моделей отображаются только те, что входят в вашу подписку; при наличии баланса кредитов по запросу показывается полный каталог.","hide":"Скрыть","intro":"Настройте подключение к Command Code Provider. API-ключ сохраняется только в локальной службе учетных данных и никогда не отображается; остальные поля записываются в пользовательские настройки и вступают в силу при следующем запросе.","invalidNumber":"Недопустимый номер","loginButton":"Войдите в Command Code","loginCancel":"Отменить вход","loginCancelled":"Вход отменён.","loginDenied":"Доступ запрещён. Попробуйте снова или вставьте ключ вручную.","loginFailedGeneric":"Не удалось войти; попробуйте снова или вставьте ключ вручную.","loginHintIdle":"Не хотите создавать ключ вручную? Войдите в систему, и ваш браузер откроет страницу авторизации commandcode.ai; одобренный ключ сохранится в локальном сервисе учетных данных и будет применяться к следующему запросу.","loginInvalidKey":"Доставленный ключ не прошел проверку (401). Попробуйте снова или вставьте его вручную.","loginNetwork":"Не удалось подключиться к сервису Command Code для проверки ключа; проверьте подключение к сети и повторите попытку.","loginOpenLink":"Откройте страницу авторизации ↗","loginStarting":"Запуск локального серверного обработчика callback…","loginStoreFailed":"Не удалось сохранить ключ в локальной службе учетных данных; вставьте его вручную.","loginSuccess":"Вошли как","loginTimeout":"Истекло время ожидания ответа авторизации; попробуйте снова.","loginTitle":"Войти, чтобы получить ключ","loginUnavailable":"Вход в систему недоступен в этой среде; вставьте {API key} вместо этого.","loginWaiting":"Ожидание авторизации в вашем браузере…","nav":"Код команды","numberTooLarge":"Превышено допустимое максимальное значение (2147483647 мс)","numberTooSmall":"Должно быть не менее 1 (мс)","overridden":"Переопределено","readOnly":"Настройки доступны только для чтения.","requestTimeoutMs":"Таймаут запроса (мс)","requestTimeoutMsHint":"Время ожидания первого байта ответа; по умолчанию 60000.","reset":"Сбросить","save":"Сохранить","saveFailed":"Не удалось сохранить, попробуйте снова.","saved":"Сохранено ✓","saving":"Сохранение","show":"Показать","streamIdleTimeoutMs":"Таймаут простоя потока (мс)","streamIdleTimeoutMsHint":"Как долго зависший поток считается мёртвым; по умолчанию 300000 (намеренно щедро — модели с долгим обдумыванием могут молчать минутами).","title":"Код команды","unsaved":"Не сохранено","updateAvailable":"доступно обновление","updateHint":"Доступна новая версия; нажмите для просмотра заметок о выпуске. Уведомление исчезнет после обновления плагина.","usageActive":"Активно","usageCooldown":"Охлаждение","usageCost":"Потратить","usageError":"Не удалось получить данные об использовании","usageExceeded":"Превышено","usageFailed":"не удалось","usageFiveHour":"5-часовое окно","usageFree":"Бесплатно","usageInvalidKey":"Неверный ключ","usageKeyClear":"Очистить сохранённый ключ","usageKeyClearStaged":"Будет очищено при сохранении","usageKeyInvalid":"Неверный или просроченный API-ключ","usageKeyInvalidHint":"Сервер отклоняет все запросы (401). Проверьте ключ, настроенный для этого аккаунта, или создайте новый в консоли commandcode.ai.","usageLoading":"Получение данных об использовании аккаунта…","usageMonthly":"Ежемесячно","usageNetworkError":"Не удалось подключиться к сервису Command Code","usageNetworkHint":"На сервер не поступило ни одного запроса. Проверьте подключение к сети или настройку базового API.","usageNoKey":"Настройте API-ключ, чтобы увидеть здесь данные об использовании и состоянии кредитов этого аккаунта.","usagePartial":"Некоторые данные конечной точки недоступны","usagePeriodEnd":"Период заканчивается","usagePurchased":"Куплено","usageRefresh":"Обновить","usageRefreshing":"Обновление…","usageRequests":"Запросы","usageReset":"Сбросить","usageServiceUnavailable":"Сервис Command Code временно недоступен","usageServiceUnavailableHint":"Сервер вернул ошибки (5xx); попробуйте обновить позже.","usageSuccessRate":"Уровень успеха","usageTitle":"Использование аккаунта","usageTokens":"Токены","usageTokensIn":"в","usageTokensOut":"выход","usageUnconfigured":"Для этого аккаунта ещё не настроен API-ключ.","usageUndoKeyClear":"Отменить очистку","usageUpdated":"Обновлено","usageWeekly":"Еженедельное окно","workingDir":"Рабочая директория","workingDirHint":"Необязательно. Оставьте пустым, чтобы использовать текущий рабочий каталог процесса (указан в поле); укажите путь только для фиксации конкретного расположения."},"settings.locale":{"language.title":"Язык"},"settings.models":{"add":"Добавить провайдера","addModel":"Добавить модель","advancedHint":"Остальные поля живут в settings.yaml — правьте этот раздел напрямую.","apply":"Применить","applying":"Применение…","baseUrl":"Базовый URL","baseUrlDefault":"По умолчанию у провайдера","cancel":"Отмена","close":"Закрыть","conflict":"Пока карточка была открыта, настройки изменил кто-то ещё. Закройте и откройте заново, чтобы править актуальные значения.","contextWindow":"Окно контекста","contextWindowPlaceholder":"Как у провайдера по умолчанию","create":"Создать провайдера","creating":"Создание…","credentialConfigured":"API-ключ задан","credentialMissing":"API-ключ не задан","customAdd":"Добавить своего провайдера","customApi":"Протокол API","customApiUnset":"Не выбран","customDisplayName":"Отображаемое имя","customNeedsBaseUrl":"Своему провайдеру нужен базовый URL.","customNeedsModels":"Своему провайдеру нужна хотя бы одна модель.","customRoute":"Идентификатор провайдера","customRouteHint":"Идентификатор в нижнем регистре, начинается с буквы. По нему провайдер адресуется в запросах, и так же называется его ключ.","customRouteInvalid":"Начните со строчной буквы, дальше строчные буквы, цифры и дефисы.","customRouteTaken":"Такой идентификатор уже занят другим провайдером.","customTag":"Свой","customTitle":"Свой провайдер","customized":"Настройки изменены","deleteConfirm":"Удалить {provider}","deleteDescription":"Удаление {provider} убирает его настройки. Ключ, которым он пользовался, хранится отдельно и останется.","deleteDescriptionWithCredential":"Удаление {provider} убирает его настройки и сохранённый API-ключ.","deleteTitle":"Удалить {provider}?","deleting":"Удаление {provider}…","edit":"Изменить","editProvider":"Изменить {provider}","fetchAdopt":"Добавить выбранные","fetchDescription":"Вот модели, доступные у этого провайдера. Отметьте те, что нужно добавить.","fetchDeselectAll":"Снять выбор","fetchEmpty":"Провайдер не вернул ни одной модели. Добавьте их вручную.","fetchModels":"Запросить список моделей","fetchNeedsBaseUrl":"Сначала укажите базовый URL, потом запрашивайте.","fetchSelectAll":"Выбрать все","fetchTitle":"Выберите модели","fetching":"Запрос к провайдеру…","intro":"Введите свои API-ключи, чтобы пользоваться моделями этих провайдеров.","keyBlank":"Введите API-ключ или оставьте поле пустым, чтобы сохранить прежний.","keyBlankNew":"Введите API-ключ или оставьте поле пустым, если провайдер авторизуется иначе.","keyEnvLocked":"Задан переменной окружения (только чтение)","keyIllegalCharacters":"Ключ в недопустимом формате. Проверьте его.","keyInput":"API-ключ","keyPlaceholder":"Введите API-ключ","keyPlaceholderNative":"Введите API-ключ или оставьте пустым для авторизации из окружения","keyRequired":"Чтобы продолжить, введите API-ключ.","keyStored":"Задан — введите новое значение, чтобы заменить","loadFailed":"Не удалось загрузить список провайдеров","maxTokens":"Максимум выходных токенов","maxTokensPlaceholder":"Как у провайдера по умолчанию","model":"Модель","modelAdvanced":"Ёмкости","modelCapacityInvalid":"Ёмкость задаётся числом, можно с суффиксом K или M.","modelContextInvalid":"Окно контекста — положительное число, например 131072, 256K или 1M.","modelContextWindow":"Окно контекста","modelDuplicate":"Каждый идентификатор модели встречается один раз.","modelId":"Идентификатор модели","modelIdDuplicate":"Идентификатор модели должен быть уникальным.","modelIdRequired":"Нужен идентификатор модели.","modelMaxTokens":"Максимум выходных токенов","modelMaxTokensInvalid":"Максимум выходных токенов — положительное число, например 8192, 64K или 1M.","modelName":"Отображаемое имя","modelNameInvalid":"Отображаемое имя не может быть пустым.","modelNamePlaceholder":"Пусто — возьмётся идентификатор модели","models":"Модели","modelsCustomized":"Каталог моделей изменён","modelsEmpty":"В выборе моделей не будет ничего. Неуказанные идентификаторы всё равно можно отправлять напрямую.","modelsInherited":"По умолчанию, как в адаптере","nav":"Модели","onboardingDescription":"Настройте официального провайдера DeepSeek, чтобы начать.","onboardingLater":"Настроить позже","onboardingSave":"Сохранить и продолжить","onboardingSaving":"Сохранение…","onboardingTitle":"Добавьте API-ключ, чтобы начать","provider":"Провайдер","readOnly":"В этой установке файл настроек доступен только для чтения.","remove":"Удалить","removeModel":"Удалить модель","removeProvider":"Удалить {provider}","resetModels":"Вернуть значения по умолчанию","retry":"Повторить","savedProvider":"{provider} сохранён.","title":"Модели","welcomeError":"Не удалось сохранить подтверждение. Попробуйте ещё раз."},"settings.ollama-cloud":{"addModel":"Добавить модель вручную","apiKey":"API-ключ","apiKeyConfigured":"Настроено — введите новое значение для замены","apiKeyPending":"Введён новый ключ — теперь он используется для обнаружения; Сохранить для хранения","apiKeyPlaceholder":"Введите API-ключ","apiKeyUnset":"API-ключ не настроен","applySelected":"Применить выбранное","baseURL":"URL API","cancel":"Отмена","close":"Закрыть","collapse":"Свернуть настройки","connection":"Подключение","customized":"Пользовательский каталог","defaultEffort":"Стандартное мышление","description":"Родной API-ключ Ollama Cloud, конечная точка и каталог моделей.","discard":"Отменить","dragModel":"Перетащите для изменения порядка","expand":"Развернуть настройки","fetchEmpty":"Конечная точка не вернула ни одной модели.","fetchModels":"Получить доступные модели","fetchingModels":"Получение моделей…","inherited":"Использование составленного каталога","invalidApiKey":"API-ключ не может состоять только из пробелов.","invalidBaseURL":"Введите URL API HTTP или HTTPS.","invalidModel":"Каждая модель должна иметь уникальный ID и допустимые положительные значения мощностей.","loading":"Загрузка настроек плагина…","modelContext":"Контекстное окно","modelDetails":"Подробности","modelId":"ID модели","modelName":"Отображаемое имя","modelOutput":"Максимальная мощность","models":"Каталог моделей","pickerDescription":"Выберите модели, которые нужно оставить в этом каталоге.","pickerLoading":"Получение метаданных модели…","pickerTitle":"Выбрать каталог моделей","readOnly":"Настройки этого профиля доступны только для чтения.","remoteAccess":"Удалённые браузеры не могут изменять настройки плагинов: API конфигурации Harness работает только через локальный интерфейс. Откройте страницу на самом хосте или пробросьте её (ssh -L 3080:127.0.0.1:3080 user@host, затем откройте http://127.0.0.1:3080). Сохранённые там настройки продолжают работать в удалённых сеансах.","remove":"Удалить","requestFailed":"Не удалось выполнить запрос.","save":"Сохранить","saved":"Сохранено","saving":"Сохранение…","summaryModels":"{count} моделей","summaryOff":"Не настроено","summaryOn":"Настроено","thinking":"Рассуждение","title":"Ollama Облако","tools":"Инструменты","unavailable":"Этот профиль не предоставляет доступ к настройкам Ollama Cloud.","unsaved":"Несохранённые изменения","usage":"Использование облака","usageLoading":"Чтение использования…","usageModels":"Модели, использованные на этой неделе","usageNeedsRestart":"Использование отображается после перезагрузки этого плагина на работающем хосте (перезапустите dsh).","usageRefresh":"Обновить","usageRefreshFailed":"Не удалось обновить","usageRequests":"запросы","usageResetAt":"Сбросится через {time}","usageResetAtDays":"Лимиты использования сбросятся {date} (осталось {count} дней)","usageResetEveryDays":"Сбрасывается каждые {count} дней","usageResetEveryHours":"Сбрасывается каждые {count} часов","usageSession":"Использование сессии","usageUnreachable":"Не удалось получить данные об использовании Ollama Cloud. Проверьте подключение к сети и URL API.","usageUnsupported":"Этот эндпоинт не передаёт данные об использовании облака.","usageUpdatedAt":"Обновлено {time}","usageUsed":"Использовано","usageWeekly":"Еженедельное использование","vision":"Зрение"},"settings.permission":{"confirm.acknowledge":"Я понимаю риски и хочу продолжить","confirm.cancel":"Отмена","confirm.description":"Полный доступ позволяет новым сессиям реже спрашивать подтверждение и действовать напрямую, включая чувствительные операции, изменение файлов и внешние команды. Включайте, только если доверяете будущим задачам.","confirm.enable":"Включить полный доступ","confirm.title":"Включить полный доступ?","description":"Режим разрешений по умолчанию для новых сессий","loading":"Загрузка","title":"Разрешения","unavailable":"Недоступно"},"settings.pluginInventory":{"active":"Подключён","catalog":"Список плагинов","configuration":"Настройки","cordis":"Состояние Cordis","disabledTag":"Выключен","empty":"Плагинов нет.","emptySearch":"Подходящих плагинов нет.","enabledTag":"Включён","error":"Плагины временно недоступны.","failed":"Не удалось подключить","loading":"Чтение плагинов…","loadingPhase":"Загрузка","pending":"Ожидает зависимости","retry":"Повторить","search":"Поиск плагинов","tab":"Список плагинов","unloading":"Выгружается","unobserved":"Не подключён"},"settings.plugins":{"agentLoopDescription":"Как агент раздаёт вызовы инструментов.","agentLoopMaxParallel":"Параллельных вызовов","agentLoopMaxParallelHint":"Сколько безопасных для параллели вызовов идёт одновременно в пределах шага.","agentLoopTitle":"Цикл агента","bashDescription":"Ограничения для каждой команды, которую запускает агент.","bashMaxOutputBytes":"Предел вывода на поток (байт)","bashMaxOutputBytesHint":"Всё сверх предела уходит во временный файл, а не теряется.","bashTimeoutMs":"Таймаут команды (мс)","bashTimeoutMsHint":"Сколько команда может выполняться до принудительного завершения.","bashTitle":"Консоль","collapse":"Скрыть настройки","configurableTab":"Настройки плагинов","discard":"Отменить","empty":"В этой установке настройки плагинов не выведены.","expand":"Показать настройки","intro":"Настройка и просмотр плагинов, установленных в этой сборке.","invalidNumber":"Введите число или оставьте пустым, чтобы взять значение по умолчанию.","nav":"Плагины","overridden":"Переопределено","readOnly":"В этой установке настройки доступны только для чтения.","reset":"Вернуть по умолчанию","save":"Сохранить","saveFailed":"Установка не приняла эти значения; они оставлены, чтобы вы их поправили.","saving":"Сохранение…","tabs":"Разделы плагинов","title":"Плагины","unsaved":"Не сохранено","webSearchApiKey":"API-ключ","webSearchApiKeyHint":"Хранится вне файла настроек. Оставьте пустым, чтобы сохранить текущий ключ.","webSearchApiKeySet":"Ключ задан.","webSearchApiKeyUnset":"Ключ не задан; без него поиск недоступен.","webSearchBaseUrl":"Адрес сервиса","webSearchBaseUrlHint":"Оставьте пустым, чтобы взять адрес провайдера по умолчанию.","webSearchDescription":"Поисковый провайдер DeepSeek.","webSearchMaxUses":"Максимум поисков на запрос","webSearchMaxUsesHint":"Сколько раз в рамках одного запроса можно искать, прежде чем придётся отвечать.","webSearchTitle":"Поиск в вебе"},"settings.subscriptions":{"cancel":"Отмена","checking":"Проверка…","generating":"Генерация изображения…","image":"изображение","imageClose":"Закрыть","imageLoadFailed":"Повторить","imageLoading":"Загрузка…","imagePreview":"Просмотр изображения","intro":"Вход и выход из провайдеров по подписке. Вход открывает страницу авторизации в новой вкладке; без браузера можно вставить адрес обратного вызова или код.","loggedIn":"Выполнен вход","loggedInAccount":"Вход выполнен как {account}","loggedInAccountExpires":"Вход выполнен как {account} · истекает {date}","loggedInExpires":"Вход выполнен · истекает {date}","login":"Войти","loginInProgress":"Идёт вход…","loginMissingUrl":"ответ на вход пришёл без authorizeUrl","logout":"Выйти","logoutConfirm":"Выйти из {provider}?","manualPlaceholder":"Вставьте адрес обратного вызова или код","manualSummary":"Не работает вход через браузер? Вставьте адрес обратного вызова или код","nav":"Подписки","notLoggedIn":"Вход не выполнен","submit":"Отправить","unavailable":"Нет связи; состояние подписок не загрузить.","usageEmpty":"Окна расхода не переданы.","usageError":"Не удалось получить расход: {message}","usageLoading":"Загрузка расхода…","usagePlan":"Тариф: {plan}","usageRefresh":"Обновить","usageResets":"сбрасывается {date}","usageSession":"Окно 5 часов","usageTitle":"Расход","usageWeekly":"За неделю","usageWindow":"Окно","viewImage":"Посмотреть изображение","viewImageNamed":"Посмотреть {name}"},"settings.theme":{"appearance.dark":"Тёмная","appearance.light":"Светлая","appearance.system":"Как в системе","appearance.title":"Оформление"},"sidebar":{"session.new":"Новая сессия","session.new.label":"Новая сессия","toggle.collapse":"Свернуть панель","toggle.open":"Открыть панель"},"skill":{"menu.userOnly":"только вручную","row.failed":"Не удалось загрузить скилл","row.instructions":"Инструкции","row.running":"Загрузка скилла","row.stopped":"Загрузка скилла остановлена"},"skills-manager":{"action.create":"создание","action.delete":"удаление","action.disable":"отключение","action.enable":"включение","action.restore":"восстановление","action.toggle":"включение или отключение","btn.cancel":"Отмена","btn.close":"Закрыть","btn.create":"Создать навык","btn.create.now":"Создать навык","btn.delete.forever":"Удалить безвозвратно","btn.detail":"Подробнее","btn.disable":"Отключить","btn.enable":"Включить","btn.file.pick":"Выбрать файл","btn.folder.pick":"Выбрать папку","btn.import":"Импорт","btn.import.now":"Установить","btn.refresh":"Обновить","btn.repair.enable":"Исправить и включить","btn.restore":"Восстановить","btn.trash":"В корзину","confirm.delete.desc":"«{name}» будет безвозвратно удалён из корзины; восстановить невозможно.","confirm.delete.title":"Удалить безвозвратно?","confirm.trash.desc":"«{name}» будет перемещён из текущего источника в корзину; позже его можно восстановить на прежнее место.","confirm.trash.title":"Отправить в корзину?","create.body":"Текст (Markdown)","create.body.placeholder":"Опишите инструкции, шаги и границы навыка…","create.chat.note":"Команда create_skill в чате по-прежнему создаёт пользовательский навык DSH; проектный навык можно создать здесь, выбрав активный проект.","create.description":"Описание","create.description.placeholder":"Одно предложение — когда использовать","create.name":"Название","create.name.placeholder":"например code-review-helper","create.target":"Место создания","create.title":"Создать навык","desc":"Единая загрузка и управление Agent-навыками на этом компьютере.","detail.body":"Текст","detail.diagnostics":"Диагностика","detail.frontmatter":"Frontmatter","detail.noIssues":"Проблем не обнаружено.","detail.path":"Исходный файл","detail.title":"Подробности навыка","diagnostic.description.missing":"В frontmatter нет description","diagnostic.frontmatter.missing":"Отсутствует полный YAML frontmatter","diagnostic.invocation.invalid":"Недопустимое значение политики вызова","diagnostic.name.invalid":"Имя навыка не соответствует kebab-case: {name}","diagnostic.name.missing":"В frontmatter нет name","diagnostic.shadowed":"Перекрыт источником с более высоким приоритетом {root}","empty.search":"Подходящих навыков нет.","empty.source":"Этого каталога не существует или в нём пока нет навыков.","error.action":"Действие не удалось: {error}","error.browse.absolute":"Путь к папке должен быть абсолютным: {path}","error.browse.notDirectory":"Это не папка: {path}","error.browse.unreadable":"Не удалось прочитать папку: {path}","error.create.bodyRequired":"Текст навыка обязателен","error.create.conflict":"Навык с таким именем уже существует: {name}","error.create.descriptionRequired":"Описание навыка обязательно","error.create.tooLarge":"Содержимое навыка слишком велико","error.import.duplicateName":"В пакетном источнике есть навыки с одинаковыми именами: {name}","error.import.emptySource":"В каталоге не найдено ни одного элемента навыков: {path}","error.import.failed":"Импорт не удался","error.import.invalidName":"Не удалось сгенерировать корректное имя kebab-case (исходное: {name})","error.import.overlap":"Источник импорта не может совпадать с каталогом навыков DSH, содержать или находиться внутри него","error.import.rollbackFailed":"Откат перезаписывающего импорта не удался; резервные копии сохранены в: {path} ({error})","error.proto.bodyTooLarge":"Тело запроса слишком велико","error.proto.contentType":"Тело запроса должно быть application/json","error.proto.forbidden":"Запрещённый запрос на изменение (нет клиентского маркера)","error.proto.forbiddenHost":"Запрещённый источник запроса (неверный Host)","error.proto.invalidJson":"Тело запроса — не корректный JSON","error.proto.method":"Метод не поддерживается","error.proto.nonJson":"Сервер вернул ответ не в формате JSON (HTTP {status})","error.proto.unknownAction":"Неизвестное действие","error.root.readonly":"Этот источник не разрешает: {action}","error.root.unknown":"Неизвестный источник навыков: {root}","error.root.unsafe":"Каталог проектных навыков небезопасен, запись отклонена: {path}","error.skill.noFrontmatter":"У навыка неполный frontmatter, нельзя выполнить «{action}»: {name}","error.skill.notFound":"Навык не найден: {name}","error.source.notFound":"Путь не существует: {path}","error.source.symlink":"Источники навыков с символическими ссылками не поддерживаются: {path}","error.source.tooDeep":"Глубина каталога источника превышает {depth} уровней: {path}","error.source.unrecognized":"Нераспознанный источник навыков: {path}","error.state.invalid":"Файл состояния менеджера не читается, перезапись отклонена: {path}","error.trash.conflict":"Нельзя восстановить: навык с таким именем уже существует: {name}","error.trash.invalid":"Недопустимый путь элемента корзины: {id}","error.trash.notFound":"Элемент корзины не найден: {id}","error.trash.projectUnavailable":"Исходный проект не является активной рабочей областью, восстановление невозможно: {path}","error.trash.rollbackFailed":"Откат перемещения в корзину не удался; невосстановленное содержимое сохранено в: {path} ({error})","error.upload.archiveTooLarge":"ZIP-архив слишком велик; лимит {limit} байт","error.upload.duplicate":"Загрузка содержит дублирующийся путь: {path}","error.upload.empty":"Загрузка пуста","error.upload.encoding":"Недопустимая кодировка загружаемого содержимого","error.upload.path":"Загрузка содержит недопустимый путь: {path}","error.upload.tooLarge":"Загрузка слишком велика; лимит {limit} байт","error.upload.tooMany":"Слишком много файлов; максимум {limit}","error.upload.zipInvalid":"ZIP-архив не удаётся распаковать","filter.all":"Все источники","filter.option":"{name} ({count})","filter.source":"Источник","import.title":"Импорт навыка","loading":"Загрузка навыков…","note.missing":"Описание не указано","result.created":"Навык создан: {name}","result.deleted":"Удалён безвозвратно: {name}","result.importEmpty":"Не импортировано ни одного навыка.","result.importPartial":"Импортировано: {imported}; пропущены одноимённые: {skipped}","result.importSkipped":"Ничего не импортировано; пропущены существующие: {names}","result.importWarnings":"{result}; предупреждения: {warnings}","result.imported":"Импорт завершён: {names}","result.restored":"Навык восстановлен: {name}","result.trashed":"Отправлен в корзину: {name}","result.updated":"Состояние обновлено.","root.agents":"Общий Agent","root.claude":"Claude","root.codex":"Codex","root.dsh":"Навыки DSH","root.gemini":"Gemini","root.opencode":"OpenCode","root.projectAgents":"Проектный Agent","root.projectDsh":"Проектный DSH","search":"Поиск","search.clear":"Очистить поиск","search.placeholder":"Поиск по названию или описанию навыка","select.file.invalid":"Выберите .zip или один файл SKILL.md.","select.folder.invalid":"В выбранной папке не найдено SKILL.md.","skill.toggle":"Вкл/выкл навык","source.dsh.note":"Локальные навыки DSH можно создавать, импортировать и отправлять в корзину.","source.external.note":"Загружается через Skills Manager только для чтения; переключения не меняют исходные файлы.","source.toggle":"Вкл/выкл источник","status.bundle":"Набор навыков","status.disabled":"Отключён","status.discovered":"Обнаружен","status.enabled":"Загружен","status.invalid":"Есть проблемы","status.manageable":"Управляемый","status.project":"Проектный","status.rank":"Приоритет {rank}","status.readonly":"Источник только для чтения","status.selected":"Выбрано","status.shadowed":"Перекрыт","status.single":"Один файл","status.source.off":"Отключён","status.source.on":"Загружен","summary.disabled":"Отключено: {count}","summary.group":"Навыков: {count}","summary.issues":"Проблем: {count}","summary.loaded":"Загружено в DSH: {count}","summary.total":"Навыков: {count}","table.skill":"Название и описание навыка","table.status":"Состояние в DSH","title":"Навыки","trash.count":"Навыков в очереди: {count}","trash.deletedAt":"Удалено {time}","trash.empty":"Корзина пуста.","trash.source":"Источник: {source}","trash.title":"Корзина","upload.drop.copy":"Поддерживаются .zip, папка навыка или один SKILL.md","upload.drop.title":"Перетащите навык сюда","upload.importing":"Установка…","upload.remove":"Убрать выбранное","upload.requirement.copy":"Импорт копирует содержимое целиком и не меняет источник","upload.requirement.frontmatter":"SKILL.md должен содержать YAML-название и описание","upload.requirement.skill":"Архив или папка должны содержать SKILL.md","upload.requirements":"Требования к файлам","upload.selected":"Файлов: {count} · {size}","warning.backupUncleaned":"Резервная копия старой версии не удалена: {path} ({error})","warning.project.unavailable":"Не удалось получить активную рабочую область у хоста, проектные навыки скрыты: {path}","warning.state.invalid":"Файл состояния менеджера не читается; внешние навыки отключены, перезапись заблокирована до исправления: {path}"},"slash.menu":{"command":"Команды","loading":"Загрузка…","skill":"Скиллы","subagent":"Субагенты","suggestions.aria":"Подсказки по вводу"},"subagent":{"activity.inactive":"не работает","activity.running":"работает","branch.collapse":"Свернуть потомков {label}","branch.expand":"Развернуть потомков {label}","count.running.few":"{count} субагента работает","count.running.many":"{count} субагентов работает","count.running.one":"{count} субагент работает","count.running.other":"{count} субагентов работает","count.total.few":"{count} субагента","count.total.many":"{count} субагентов","count.total.one":"{count} субагент","count.total.other":"{count} субагентов","diagnostic.corrupt":"запись сессии повреждена","diagnostic.unavailable":"запись сессии временно недоступна","diagnostic.unsupported":"неподдерживаемая версия записи субагента","duration.days":"{days} дн","duration.daysHours":"{days} дн {hours} ч","duration.exactDays":"{days} дн {hours} ч {minutes} мин {seconds} с","duration.exactTitle":"Всего активного времени: {duration}","duration.hours":"{hours} ч {minutes} мин {seconds} с","duration.minutes":"{minutes} мин {seconds} с","duration.months":"~{months} мес","duration.monthsDays":"~{months} мес {days} дн","duration.seconds":"{seconds} с","duration.years":"~{years} г","duration.yearsMonths":"~{years} г {months} мес","load.error":"Не удалось загрузить субагентов","loading.aria":"Загрузка субагентов","loading.label":"Загрузка субагентов…","mode.continuable":"с продолжением","mode.oneShot":"разовый","readonly.body":"Родительская сессия офлайн; откройте её заново, чтобы продолжить переписку.","readonly.oneShot.body":"Разовые задачи не принимают продолжения; здесь можно изучить полную запись выполнения.","readonly.oneShot.title":"Запись разового субагента","readonly.title":"Пока этот субагент доступен только для чтения","retry":"Повторить","switcher.aria":"Переключить субагента: {title}","tree.aria":"Сессии субагентов"},"task-board":{"archive.empty":"В архиве пусто","board.archive":"Архив","board.archiveView":"Архив ({count})","board.backToBoard":"К доске","board.close":"В чат","board.created":"Создана","board.empty":"В этой колонке задач нет","board.filterAll":"Все","board.hostError":"Действие на хосте не удалось: {error}","board.hostMeta":"Часовой пояс хоста {timeZone} · ревизия {revision}","board.new":"Новая задача","board.pending":"Отправка","board.retryHost":"Переподключиться к хосту","board.runs":"запусков","board.search":"Фильтр задач…","board.status":"Статус","board.status.backlog":"Бэклог","board.status.done":"Готово","board.status.failed":"Ошибка","board.status.running":"В работе","board.status.todo":"К выполнению","board.title":"Доска задач","board.updated":"Обновлена","card.scheduled":"по расписанию","delete.cancel":"Отмена","delete.confirm":"Удалить «{name}»? Отменить это будет нельзя.","delete.ok":"Удалить","delete.title":"Удаление задачи","detail.archive":"В архив","detail.archivedAt":"В архиве · {time}","detail.close":"Закрыть","detail.delete":"Удалить","detail.description":"Описание","detail.execution":"История запусков","detail.executionEnded":"Завершён","detail.executionSettings":"Параметры запуска","detail.executionStarted":"Начат","detail.noExecution":"Ещё не запускалась","detail.noSession":"Сессии нет","detail.prompt":"Промпт запуска","detail.rerun":"Запустить снова","detail.restore":"Вернуть из архива","detail.result.cancelled":"Отменён","detail.result.failed":"Ошибка","detail.result.running":"Выполняется","detail.result.succeeded":"Успешно","detail.run":"Запустить","detail.schedule":"Запуски по расписанию","detail.schedule.cron":"Выражение cron","detail.schedule.dueSoon":"Скоро","detail.schedule.enable":"Включить запуски по расписанию","detail.schedule.invalid":"Неверное выражение cron","detail.schedule.lastTriggered":"Последний запуск","detail.schedule.nextRun":"Следующий запуск","detail.schedule.notScheduled":"Расписания пока нет","detail.schedule.preset.daily9":"Каждый день в 09:00","detail.schedule.preset.hourly":"Каждый час","detail.schedule.preset.tenMin":"Каждые 10 минут","detail.schedule.preset.weeklyMon9":"По понедельникам в 09:00","detail.schedule.presets":"Готовые варианты","detail.title":"Задача","detail.viewSession":"Открыть сессию","entry.label":"Доска задач","exec.error.noWorkspace":"Нет рабочей папки, в которой можно выполнить задачу","exec.error.promptRejected":"Промпт отклонён","exec.hint":"Применяется при запуске задачи: рабочая папка определяет, где появится сессия выполнения; режим задаёт пресет агента; разрешение выставляется командой /permission. Пусто — как по умолчанию в рантайме.","exec.mode.brokenSuffix":" (недоступен)","exec.mode.default":"Как в установке","exec.mode.defaultSuffix":" (по умолчанию)","exec.mode.removed":" (удалён)","exec.permission.danger-full-access":"Полный доступ","exec.permission.default":"Как в сессии","exec.permission.read-only":"Только чтение","exec.permission.workspace-write":"Запись в рабочую папку","exec.workspace.recent":"Последняя (по умолчанию)","new.cancel":"Отмена","new.description":"Описание","new.descriptionPlaceholder":"Контекст, границы, критерии приёмки (необязательно)","new.mode":"Режим","new.permission":"Разрешения","new.prompt":"Промпт запуска","new.promptPlaceholder":"Полная инструкция агенту (если пусто, возьмётся заголовок)","new.required":"Нужен заголовок","new.submit":"Создать","new.title":"Заголовок","new.titlePlaceholder":"Что нужно сделать, одной строкой","new.workspace":"Рабочая папка","run.failed":"Запуск не удался: {error}","settings.announceToAgent":"Сообщать агентам о доске задач","settings.announceToAgentHint":"Включено: в системный промпт каждого агента добавляется упоминание доски. Выключено: агенты узнают о ней, только если вы скажете сами.","settings.collapse":"Скрыть настройки","settings.description":"Настройка доски задач на хосте, упоминания в промпте и защиты от засыпания, пока есть незавершённая работа.","settings.discard":"Отменить","settings.enabled":"Включить доску задач","settings.enabledHint":"Когда выключено, пункт в панели и сама доска скрыты.","settings.expand":"Показать настройки","settings.inherit":"Наследовать","settings.invalidNumber":"Введите число или оставьте пустым, чтобы взять значение по умолчанию.","settings.notExposed":"Эта версия DSH не выводит namespace настроек плагина на страницу конфигурации, поэтому форма недоступна. Правьте ~/.dsh/settings.yaml напрямую или добавьте namespace в список WEB_SETTINGS_NAMESPACES у dsh-host-apiproxy и перезапустите.","settings.off":"Выкл","settings.on":"Вкл","settings.overridden":"Переопределено","settings.powerBoundary":"Батарея будет расходоваться быстрее. Закрытие крышки, ручной уход в сон, гибернация, выключение, действия при низком заряде и корпоративные политики под гарантию не попадают; уже спящий компьютер не разбудят.","settings.powerError":"Последняя ошибка защиты от засыпания: {error}","settings.powerStatus":"Платформа: {platform}; защита: {phase}; работающих сессий: {running}; включённых расписаний: {schedules}","settings.powerUnknown":"неизвестно","settings.preventIdleSleep":"Не давать системе засыпать","settings.preventIdleSleepHint":"По умолчанию выключено. Когда включено, хост не даёт системе уйти в сон, пока работает хоть одна сессия DSH, включено расписание или состояние сессий ещё неизвестно. Экран при этом может гаснуть.","settings.readOnly":"В этой установке настройки доступны только для чтения.","settings.reset":"Вернуть по умолчанию","settings.save":"Сохранить","settings.saveFailed":"Установка не приняла эти значения; они оставлены, чтобы вы их поправили.","settings.saving":"Сохранение…","settings.title":"Доска задач","settings.unsaved":"Не сохранено","status.move.backlog":"В бэклог","status.move.todo":"К выполнению","time.justNow":"только что"},"trajectory":{"toolbar.actualTime":"Реальное время","toolbar.aria":"Панель траектории","toolbar.calls":"Вызовы","toolbar.collapseCalls":"Свернуть вызовы","toolbar.collapseTurns":"Свернуть ходы","toolbar.duration":"Длительность","toolbar.expandCalls":"Развернуть вызовы","toolbar.expandTurns":"Развернуть ходы","toolbar.search":"Поиск по траектории","toolbar.searchPlaceholder":"Поиск","toolbar.turns":"Ходы","toolbar.useActualDuration":"По реальной длительности","toolbar.useEqualWidth":"Операции равной ширины","view.trajectory":"Траектория"},"usageDashboard":{"buckets.cacheRead":"Чтение кэша","buckets.cacheWrite":"Запись в кэш","buckets.caption":"Четыре непересекающиеся корзины тарификации · всего {total} ток","buckets.output":"Выход","buckets.title":"Состав токенов","buckets.uncachedInput":"Вход мимо кэша","composition.caption":"Оценка по эвристике, не по счёту; в сумму занятости не сойдётся","composition.messages":"Сообщения","composition.system":"Системный промпт","composition.title":"Состав контекста","composition.tools":"Схемы инструментов","efficiency.llm":"Время модели","efficiency.steps":"Шаги","efficiency.stepsValue":"{steps}","efficiency.throughput":"Скорость выдачи","efficiency.title":"Эффективность запросов","efficiency.tool":"Время инструментов","efficiency.ttft":"Первый токен, среднее","efficiency.ttftOver":"шагов: {steps}","efficiency.turns":"Ходы","efficiency.turnsValue":"{turns}","empty.usage":"Расхода токенов пока нет","empty.usageHint":"Цифры появятся, когда сессия сделает первый запрос к модели.","overview.billedInput":"Оплаченный вход","overview.billedInputSub":"мимо кэша {uncached} · из кэша {cached}","overview.cacheHit":"Попадания в кэш","overview.cacheHitSub":"прочитано {read} из {total} ток","overview.context":"Контекст занят","overview.contextSub":"{used} из {window} ток","overview.contextUnknown":"Размер окна модели неизвестен","overview.output":"Выход","overview.outputSub":"всего {total} ток","scope.aria":"Охват статистики","scope.session":"Эта сессия","scope.sessions":"Все сессии","sessions.currentTag":"Текущая","sessions.detail.noData":"Данные по этой сессии загружаются или их нет","sessions.detail.title":"Подробности сессии","sessions.empty":"Расход по сессиям не записан","sessions.inactive":"Простаивает","sessions.running":"Работает","sessions.selectHint":"Выберите строку, чтобы посмотреть сессию","sessions.subagentTag":"Субагент","sessions.summary.input":"Оплаченный вход, всего","sessions.summary.output":"Выход, всего","sessions.summary.sessions":"Сессий с расходом","sessions.summary.sessionsValue":"{count}","sessions.summary.totalValue":"всего сессий: {count}","sessions.summary.turns":"Ходов всего","sessions.summary.turnsValue":"{turns}","sessions.table.cacheHit":"Попаданий в кэш","sessions.table.input":"Оплаченный вход","sessions.table.output":"Выход","sessions.table.session":"Сессия","sessions.table.status":"Состояние","sessions.table.turns":"Ходы","sessions.table.updated":"Изменена","steps.cacheRead":"Кэш Ч","steps.cacheWrite":"Кэш З","steps.caption":"Только загруженное окно, новые сверху; итог считает то же окно","steps.done":"Готово","steps.empty":"В загруженном окне шагов нет","steps.input":"Вход","steps.interrupted":"Прервано","steps.model":"Модель","steps.output":"Выход","steps.reasoning":"Рассуждения","steps.sortBy":"Сортировать по «{column}»","steps.status":"Состояние","steps.title":"Подробности по шагам","steps.tps":"ток/с","steps.ttft":"Первый токен","steps.turn":"Ход.шаг","steps.windowTotal":"Итог по окну","time.daysAgo":"{n} дн назад","time.hoursAgo":"{n} ч назад","time.justNow":"только что","time.minutesAgo":"{n} мин назад","view.usage":"Статистика"},"usageStats":{"account.balanceMode":"Баланс API","account.blocked":"Запрос к учетной записи был заблокирован локальной политикой безопасности. Проверьте настройки HTTPS, same-origin и private-network.","account.health.age":"Возраст данных","account.health.lastAttempt":"Последняя попытка","account.health.lastSuccess":"Последний успех","account.health.provenance":"Источник","account.invalidResponse":"Провайдер вернул нераспознанные данные о квоте.","account.loading":"Загрузка провайдеров…","account.provenance.configured":"Настроено","account.provenance.experimental":"Экспериментальный","account.provenance.official":"Официальный API","account.provenance.provider":"API провайдера","account.provenance.unknown":"Неизвестно","account.provider":"Текущий провайдер","account.reason.allAddressesUnreachable":"Ни один из проверенных сетевых адресов не доступен.","account.reason.blockedNetwork":"Запрос на учетную запись был заблокирован политикой локальной сети.","account.reason.dnsResolutionFailed":"Имя хоста провайдера не удалось разрешить.","account.reason.noValidatedAddress":"Не было доступно ни одного проверенного адреса провайдера.","account.reason.rateLimited":"Провайдер ограничил проверку аккаунтов по частоте запросов.","account.reason.sub2apiBalanceShapeUnrecognized":"Конечная точка баланса Sub2API вернула данные в нераспознанном формате.","account.reason.timeout":"Запрос аккаунта завершился по тайм-ауту.","account.reason.unauthorized":"Учетные данные аккаунта были отклонены.","account.reason.unknown":"Проверка учетной записи завершилась неудачей без безопасного диагностического сообщения.","account.reason.upstreamInvalidJson":"Вверх по течению возвращен нечитаемый JSON","account.reason.upstreamInvalidResponse":"Восходящий поток вернул нераспознанный ответ.","account.reason.upstreamNotJson":"Ответ вышестоящего сервера не был в формате JSON","account.reason.upstreamTooLarge":"Ответ от вышестоящего сервера превысил допустимый размер.","account.status.blocked":"Заблокировано","account.status.invalidResponse":"Неверный ответ","account.status.loading":"Загрузка","account.status.stale":"Устаревшие данные","account.status.unknown":"Неизвестно","account.status.unsupported":"Баланс не поддерживается","account.title":"Аккаунт провайдера","action.close":"Закрыть","action.nextMonth":"Следующий месяц","action.prevMonth":"Предыдущий месяц","action.refresh":"Обновить","action.retry":"Повторить","action.today":"Сегодня","balance.available":"доступно","balance.error":"Не удалось получить баланс: {message}","balance.granted":"Предоставлено","balance.loading":"Получение баланса…","balance.noCredential":"{ref} не настроен (отредактируйте ~/.dsh/.credentials.yaml)","balance.noSchemeTag":"нет баланса API","balance.provider":"Провайдер","balance.remaining":"Доступный баланс","balance.title":"Баланс счета","balance.toppedUp":"Пополнено","balance.total":"Общий баланс","balance.unavailable":"недоступно","balance.unsupported":"У этого провайдера нет публичного интерфейса для проверки баланса.","balance.used":"Использовано","billing.monthly":"≈ {amount}/мес","billing.parts":"Композиция","billing.projected":"Прогнозируемое использование на конец месяца","billing.tokenOnly":"расчет на основе использования","billing.total":"Ориентировочные ежемесячные траты","budget.exceeded":"превышен бюджет","budget.level.critical":"Превышение бюджета","budget.level.normal":"Обычный","budget.level.unknown":"Неполная стоимость","budget.level.warning":"Близко к бюджету","budget.over":"{pct}% бюджета использовано","budget.period.daily":"Оценка за сегодня","budget.period.monthly":"Ожидаемый за этот месяц","budget.remaining":"осталось","budget.summary":"{period}: {spent} / {limit} · {level}","budget.title":"Ежемесячный бюджет","budget.used":"использовано","col.cacheRead":"Чтение кэша","col.cacheWrite":"Запись в кеш","col.calls":"Звонки","col.cost":"Стоимость","col.created":"Создано","col.cwd":"Рабочая папка","col.day":"День","col.default":"Стандартная ставка","col.hour":"Время","col.input":"Ввод","col.model":"Модель","col.models":"Модели","col.output":"Вывод","col.price":"Тариф","col.provider":"Провайдер","col.session":"Сессия","col.sessions":"Сессии","col.share":"Поделиться","col.time":"Время","col.tokens":"Токены","col.turn":"Поворот/шаг","curve.cost":"Стоимость","curve.empty":"Нет данных о сериях (нет вызовов в указанном интервале)","curve.legendCacheRead":"Чтение кеша","curve.legendInput":"Ввод","curve.legendOutput":"Вывод","curve.tokens":"Токены","details.auto":"Автоматически обновляется вместе с главным окном","details.exportCalls":"Экспорт журнала вызовов в CSV","details.exportCsv":"Экспорт CSV","details.exportJson":"Экспортировать JSON","details.hint":"Звонки, токены и стоимость за сессию × модель","details.open":"Открыть подробности в новом окне","details.title":"Детали звонка · сессия × модель","details.updated":"Обновлено","duration.daysHours":"{days}д {hours}ч","duration.hoursMinutes":"{hours}ч {minutes}м","duration.minutes":"{minutes}м","export.dailyCsv":"Ежедневный CSV","export.json":"Полный JSON","export.sessionsCsv":"Сессии CSV","export.title":"Экспорт без секретов","filter.all":"Все рабочие пространства","filter.scope":"Фильтровать статистику по одной рабочей директории","footnote.disclaimer":"Стоимость рассчитана на основе установленных тарифов и не является счетом.","footnote.errors":"({errors} логов не удалось декодировать)","footnote.scanned":"{sessions} сессий, {calls} звонков просканировано","heatmap.empty":"Данные тепловой карты пока отсутствуют","heatmap.fri":"Пт","heatmap.less":"Меньше","heatmap.mon":"Пн","heatmap.month":"{m}","heatmap.more":"Ещё","heatmap.title":"Тепловая карта активности (52 недели)","heatmap.wed":"Ср","lastUpdated":"Обновлено","month.names":"Янв,Фев,Мар,Апр,Май,Июн,Июл,Авг,Сен,Окт,Ноя,Дек","month.year":"{month} {year}","orcarouter.addError":"Не удалось добавить OrcaRouter. Пожалуйста, попробуйте ещё раз.","orcarouter.choiceSuffix":"(Спонсированная интеграция)","panel.badge":"Использование/Баланс","panel.title":"Расход и баланс","panel.updatedAt":"Обновлено в {time}","perf.empty":"Нет данных о производительности (отсутствуют временные метки в журналах)","perf.est":"прибл.","perf.latencyAvg":"Средняя задержка","perf.modeTps":"токены/с","perf.modeTtft":"ТТФТ","perf.note":"TTFT = запрос → первый токен контента. Последующие шаги в цикле инструментов не имеют отдельного лога запросов, поэтому их TTFT оценивается с начала шага.","perf.samples":"Образцы","perf.title":"Скорость и задержка модели","perf.tps":"токенов/с","perf.ttftAvg":"Среднее значение TTFT","perf.ttftP50":"ТТФТ P50","perf.ttftP90":"TTFT P90","plan.auto":"авто","plan.balance":"Баланс","plan.code":"План кода","plan.noBalance":"не настроен баланс","plan.perMonth":"месяц","plan.period":"последние {days} дней","plan.quota":"квота","plan.remaining":"Осталось","plan.requests":"запросы","plan.subscription":"Подписка","plan.tiers":"Уровни","plan.token":"Тарифный план","plan.tokenEstimate":"оценка токенов","plan.tokens":"Токены","plan.used":"Использовано","plan.usedCost":"Стоимость использования","pricing.peakOffpeak":"пиковый/непиковый","recent.anomaly":"Аномалия стоимости (значительно выше среднего)","refresh":"Обновить","section.byCwd":"Рабочий каталог","section.byDay":"Днём","section.byModel":"По модели","section.byProvider":"По провайдеру","section.bySession":"По сеансу","section.plans":"Тарифы","section.pricing":"Тарифы (за миллион токенов)","section.recent":"Последние звонки","section.series":"Временные ряды","state.empty":"Данные об использовании токенов пока отсутствуют (нет вызовов с использованием)","state.error":"Не удалось загрузить","state.loading":"Вычисление…","state.retry":"Повторить","subscription.error":"Не удалось использовать подписку: {message}","subscription.loading":"Получение данных об использовании подписки…","subscription.notConfigured":"Настройте {refs} для отображения текущего использования подписки.","subscription.planUnknown":"План подписки","subscription.rateLimited":"Провайдер ограничивает частоту проверок; попробуйте позже.","subscription.resetDue":"Сброс квоты","subscription.resets":"Сбросится через {time}","subscription.status.notConfigured":"Не настроено","subscription.status.ok":"В прямом эфире","subscription.status.rateLimited":"Ограничение по частоте запросов","subscription.status.unauthorized":"Войдите снова","subscription.status.unavailable":"Недоступно","subscription.title":"Использование подписки","subscription.unauthorized":"Учетные данные истекли; обновите их и повторите попытку.","subscription.unavailable":"Провайдер не вернул распознаваемых окон квот.","subscription.used":"{value}% использовано","subscription.window.daily":"Ежедневное окно","subscription.window.mcp":"Ежемесячная квота MCP","subscription.window.monthly":"Ежемесячное окно","subscription.window.quota":"Общая квота","subscription.window.session":"5-часовое окно","subscription.window.weekly":"Еженедельное окно","summary.activeDays":"Активные дни","summary.avgCost":"Среднее / вызов","summary.cacheHit":"Процент попаданий в кеш","summary.cacheRead":"Чтение кэша","summary.cacheWrite":"Запись в кеш","summary.calls":"Звонки","summary.cost":"Примерная стоимость","summary.input":"Ввод","summary.output":"Вывод","summary.sessions":"Сессии","summary.streak":"Дневная серия","summary.today":"Сегодня","summary.tokens":"Всего токенов","tab.details":"Детали звонка","tab.overview":"Обзор","tab.perf":"Производительность","tab.today":"Сегодня","today.calls":"Звонков сегодня","today.cost":"Стоимость сегодня","today.empty":"Сегодня звонков еще не было","today.title":"Сегодняшние токены и стоимость","today.tokens":"Токены сегодня","usage.back":"Назад","usage.cacheRead":"Чтение кэша","usage.error":"Агрегация использования не удалась: {message}","usage.heatmap":"Ежедневное использование в этом месяце","usage.hit.today":"Сегодняшний процент попаданий в кэш","usage.hitRate":"Кэш-попадание","usage.input":"Ввод","usage.legendLess":"Меньше","usage.legendMore":"Ещё","usage.loading":"Агрегирование использования…","usage.month":"В этом месяце","usage.noModels":"Нет данных по моделям за этот день.","usage.output":"Вывод","usage.recent":"Последние 14 дней","usage.title":"Использование токенов","usage.today":"Сегодня","usage.total":"За всё время","usage.unknownModel":"Неизвестная модель","weekday.fri":"Ф","weekday.mon":"М","weekday.sat":"С","weekday.sun":"С","weekday.thu":"Т","weekday.tue":"Т","weekday.wed":"В","widget.close":"Свернуть","widget.hint":"Использование токенов & примерная стоимость","widget.hoverHint":"Нажмите, чтобы развернуть","widget.open":"Развернуть"},"workflowRun":{"member.empty":"Пустое имя участника","member.open":"Открыть {name}","phase.empty":"Пустое имя фазы","phase.unassigned":"Вне фаз","run.empty":"Ни один участник не запущен","run.members.few":"{count} участника","run.members.many":"{count} участников","run.members.one":"{count} участник","run.members.other":"{count} участников","run.title":"{name}","status.cancelled":"Отменено","status.completed":"Завершено","status.failed":"Ошибка","status.interrupted":"Прервано","status.running":"Работает","statusCount.cancelled":"Отменено: {count}","statusCount.completed":"Завершено: {count}","statusCount.failed":"Ошибок: {count}","statusCount.interrupted":"Прервано: {count}","statusCount.running":"Работает: {count}"},"workspace":{"actions.newSession.aria":"Новая сессия в {name}","actions.session.aria":"Действия с сессией {name}","actions.workspace.aria":"Действия с рабочей папкой {name}","conflict.named":"Рабочая папка «{name}» уже есть.","date.ymd":"{d}.{m}.{y}","delete.desc":"Уберёт «{name}» из списка рабочих папок. Сама папка и журналы сессий останутся, а её сессии переедут в «Без папки».","delete.pending":"Удаление рабочей папки…","delete.workspace":"Удалить рабочую папку","empty.noMatches":"Ничего не найдено","empty.none":"Сессий пока нет","field.sessionName":"Название сессии","field.workspaceName":"Название рабочей папки","folderError.retry":"Выбрать снова","folderError.title":"Не удалось открыть папку","group.ungrouped":"Без папки","groupBy.flat":"Одним списком","groupBy.label":"Группировать","groupBy.workspace":"По рабочим папкам","hover.copied":"Скопировано","hover.created":"Создано {time}","menu.addWorkspace":"Добавить рабочую папку…","menu.archiveSession":"Убрать сессию в архив","menu.fork":"Ответвить сессию","orderBy.label":"Сортировать","orderBy.manual":"Вручную","orderBy.updated":"По изменению","picker.loading":"Загрузка рабочих папок…","rename":"Переименовать","rename.session.title":"Переименовать сессию","rename.workspace.title":"Переименовать рабочую папку","search.clear":"Очистить поиск","search.hasMore":"Показаны первые {n} результатов. Уточните запрос.","search.hasMore.few":"Показаны первые {n} результата. Уточните запрос.","search.hasMore.one":"Найден один подходящий результат.","search.noMatches":"Подходящих сессий нет","search.pending":"Поиск по истории сессий…","search.placeholder":"Поиск по сессиям...","search.results.aria":"Результаты поиска","search.sessions.aria":"Поиск сессий","search.unavailable":"Поиск по содержимому временно недоступен. Показаны совпадения по названию.","section.sessions":"Сессии","section.workspaces":"Рабочие папки","session.new":"Новая сессия","sessions.collapse":"Показать меньше","sessions.count.few":"{n} сессии","sessions.count.many":"{n} сессий","sessions.count.one":"{n} сессия","sessions.count.other":"{n} сессий","sessions.expand":"Показать ещё {n}","status.completed":"Завершено","status.idle":"Простаивает","status.planReview":"План ждёт проверки","status.running":"Работает","status.subagentsRunning.few":"{n} субагента работает","status.subagentsRunning.many":"{n} субагентов работает","status.subagentsRunning.one":"{n} субагент работает","status.subagentsRunning.other":"{n} субагентов работает","status.waitingAnswer":"Ждёт ответа","status.waitingApproval":"Ждёт подтверждения","time.ago":"{t} назад","time.days":"{n} дн","time.hours":"{n} ч","time.minutes":"{n} мин","time.months":"{n} мес","time.now":"только что","time.years":"{n} г","viewOptions.label":"Параметры отображения","workspace.add":"Добавить рабочую папку"}}
|
|
22
361
|
|
|
23
362
|
/** zh-строка -> ru-строка для DOM-перевода панелей вне locale-ядра. */
|
|
24
363
|
const ZH_RU = {"Anthropic 官方技能合集(Claude Skills)": "Официальная коллекция навыков Anthropic (Claude Skills)", "DSH 加载状态": "Состояние в DSH", "DSH 技能": "Навыки DSH", "DSH 本地技能可创建、导入和移到回收站。": "Локальные навыки DSH можно создавать, импортировать и отправлять в корзину.", "Matt Pocock 技能集": "Коллекция навыков Matt Pocock", "SKILL.md 需包含 YAML 格式的技能名称和描述": "SKILL.md должен содержать YAML-название и описание", "Superpowers 社区技能合集": "Коллекция навыков сообщества Superpowers", "ZIP 压缩包无法解压": "ZIP-архив не удаётся распаковать", "ZIP 压缩包过大,限制为 {limit} 字节": "ZIP-архив слишком велик; лимит {limit} байт", "frontmatter 缺少 description": "В frontmatter нет description", "frontmatter 缺少 name": "В frontmatter нет name", "owner/repo 或 https://github.com/…": "owner/repo или https://github.com/…", "skill 来源目录层级超过 {depth} 层: {path}": "Глубина каталога источника превышает {depth} уровней: {path}", "{count} 个已停用": "Отключено: {count}", "{count} 个已在 DSH 加载": "Загружено в DSH: {count}", "{count} 个待处理技能": "Навыков в очереди: {count}", "{count} 个技能": "Навыков: {count}", "{count} 个文件 · {size}": "Файлов: {count} · {size}", "{count} 个诊断项": "Проблем: {count}", "{repo}({count} 个技能)": "{repo} (навыков: {count})", "{result};警告:{warnings}": "{result}; предупреждения: {warnings}", "{value} 分钟前": "{value} мин назад", "{value} 周前": "{value} нед назад", "{value} 天前": "{value} дн назад", "{value} 小时前": "{value} ч назад", "“{name}”将从回收站永久删除,无法恢复。": "«{name}» будет безвозвратно удалён из корзины; восстановить невозможно.", "“{name}”将从当前技能来源移入回收站,之后可以恢复到原位置。": "«{name}» будет перемещён из текущего источника в корзину; позже его можно восстановить на прежнее место.", "一句话说明什么时候使用": "Одно предложение — когда использовать", "一句话说明用途(含触发词),Agent 靠它自动激活技能": "Одна строка — что делает (с триггерными словами); по этому описанию агенты активируют навык", "上传内容为空": "Загрузка пуста", "上传内容包含重复路径:{path}": "Загрузка содержит дублирующийся путь: {path}", "上传内容包含非法路径:{path}": "Загрузка содержит недопустимый путь: {path}", "上传内容编码无效": "Недопустимая кодировка загружаемого содержимого", "上传内容过大,限制为 {limit} 字节": "Загрузка слишком велика; лимит {limit} байт", "上传文件过多,最多 {limit} 个": "Слишком много файлов; максимум {limit}", "上游已删 {count}": "Удалено в источнике: {count}", "上游已删除 {count} 个": "Удалено в источнике: {count}", "不支持包含符号链接的 skill 来源: {path}": "Источники навыков с символическими ссылками не поддерживаются: {path}", "不支持的请求方法": "Метод не поддерживается", "不是目录:{path}": "Это не папка: {path}", "个人": "Личные", "个人技能(未绑定上游,不检查更新)": "Личный навык (не привязан к источнику; проверки обновлений нет)", "以下技能也在其他组中开启,关闭它们会影响那些组:": "Эти навыки включены и в других группах; их закрытие затронет и те группы:", "以下技能已从上游仓库移除,本地目录将移入回收站(可恢复):": "Эти навыки удалены из источника; их локальные каталоги уйдут в корзину (восстановимо):", "优先级 {rank}": "Приоритет {rank}", "例如 code-review-helper": "например code-review-helper", "保存": "Сохранить", "保存中…": "Сохранение…", "保存名称": "Сохранить название", "保存成员": "Сохранить состав", "保留开启": "Оставить включёнными", "修复并启用": "Исправить и включить", "停用": "Отключить", "全选": "Выбрать все", "全部关闭": "Закрыть все", "全部更新": "Обновить всё", "全部来源": "Все источники", "公共 Agent": "Общий Agent", "共 {count} 个技能": "Всего навыков: {count}", "关": "Выкл", "关闭": "Закрыть", "关闭后技能中枢的路由、入口与公告全部下线。": "Отключает маршруты, элементы и объявление центра навыков.", "关闭此组?": "Закрыть эту группу?", "其他来源": "Другие источники", "内置": "Встроенные", "写下技能要遵循的指令、步骤和边界…": "Опишите инструкции, шаги и границы навыка…", "分组": "По группам", "刚刚": "только что", "刚刚检查过": "Недавно проверено", "创建": "создание", "创建中…": "Создание…", "创建位置": "Место создания", "创建失败:": "Ошибка создания: ", "创建技能": "Создать навык", "删除": "удаление", "删除于 {time}": "Удалено {time}", "删除场景": "Удалить сценарий", "删除整组": "Удалить группу", "删除整组?": "Удалить группу?", "删除该分组下的全部 {count} 个技能": "Удалить все навыки ({count}) этой группы", "刷新": "Обновить", "勾选技能加入此场景(含已禁用)。": "Отметьте навыки, чтобы добавить их в сценарий (включая отключённые).", "单文件": "Один файл", "压缩包或文件夹需包含 SKILL.md": "Архив или папка должны содержать SKILL.md", "原项目当前不在活动工作区中,无法恢复:{path}": "Исходный проект не является активной рабочей областью, восстановление невозможно: {path}", "发现 {count} 个可导入技能": "Найдено импортируемых навыков: {count}", "发现新版本 v{version}(当前 v{current})": "Доступно обновление: v{version} (текущая v{current})", "发现诊断": "Диагностика обнаружения", "取消": "Отмена", "只统计最近 N 天的使用次数,默认 14 天;0 = 全部历史。改动立即生效。": "Учитывать использование только за последние N дней (по умолчанию 14); 0 = вся история. Изменения применяются сразу.", "只读": "только чтение", "可更新 {count}": "Обновляемо: {count}", "可管理": "Управляемый", "合并": "Объединить", "同名技能已存在: {name}": "Навык с таким именем уже существует: {name}", "同步": "Синхронизировать", "同步中…": "Синхронизация…", "同步技能?": "Синхронизировать навыки?", "同步本地技能": "Обновить локальные навыки", "名称": "Название", "后台扫描会话日志的间隔,最小 1 分钟;扫描耗时会自动拉长间隔。": "Как часто фоновое сканирование журналов сессий выполняется (минимум 1); тяжёлые сканирования автоматически растягивают интервал.", "向 Agent 公告": "Объявлять агенту", "启停技能": "Вкл/выкл навык", "启停来源": "Вкл/выкл источник", "启用": "Включить", "启用或停用": "включение или отключение", "启用插件": "Включить плагин", "回收站": "Корзина", "回收站为空。": "Корзина пуста.", "回收站条目不存在: {id}": "Элемент корзины не найден: {id}", "回收站条目路径非法: {id}": "Недопустимый путь элемента корзины: {id}", "回收站里的技能会被永久删除,无法恢复。此操作不可撤销。": "Навыки в корзине будут удалены безвозвратно и не могут быть восстановлены.", "在分组标题后汇总调用次数与最近调用时间。": "После заголовков групп показывать число вызовов и время последнего вызова.", "在技能名旁显示琥珀色调用次数。": "Показывать янтарный счётчик вызовов рядом с именем навыка.", "在技能名行右侧显示相对时间(如「3 天前」)。": "Показывать относительное время в строке имени (например «3 дн назад»).", "在系统提示中加入本插件说明,用户提到技能管理时 Agent 知道如何协作。": "Добавляет раздел в системный промпт, чтобы агенты знали, как сотрудничать, когда пользователь упоминает управление навыками.", "场景": "Сценарии", "场景名": "Название сценария", "填写项目路径后,面板同时显示该项目 .dsh/skills 与 .agents/skills 下的技能(只读);留空回车恢复用户级视图。": "Укажите путь проекта, чтобы показать навыки его .dsh/skills и .agents/skills (только чтение); очистите и нажмите Enter, чтобы вернуться к пользовательскому виду.", "失败 {count} 个": "Не удалось: {count}", "安装": "Установить", "对话中的 create_skill 仍创建用户级 DSH Skill;项目 Skill 可在这里选择活动项目后创建。": "Команда create_skill в чате по-прежнему создаёт пользовательский навык DSH; проектный навык можно создать здесь, выбрав активный проект.", "导入": "Импорт", "导入中…": "Импорт…", "导入失败": "Импорт не удался", "导入完成:{names}": "Импорт завершён: {names}", "导入成功 {count} 个": "Импортировано: {count}", "导入所选 ({count})": "Импортировать выбранные ({count})", "导入技能": "Импорт навыка", "导入时复制完整内容,不修改原始来源": "Импорт копирует содержимое целиком и не меняет источник", "导入来源不能与 DSH 技能目录相同、包含或位于其中": "Источник импорта не может совпадать с каталогом навыков DSH, содержать или находиться внутри него", "将把以下来源的可更新技能更新到上游最新版本(覆盖本地修改):": "Обновляемые навыки этих источников будут перезаписаны их новейшими версиями из источника:", "将把分组“{name}”下的全部 {count} 个技能移入回收站(可恢复),只读技能会跳过:": "Все навыки ({count}) группы «{name}» будут перемещены в корзину (восстановимо); навыки «только чтение» будут пропущены:", "将用上游最新版本覆盖本地对以下技能的所有修改:": "Локальные изменения этих навыков будут перезаписаны новейшими версиями из источника:", "尚未核对上游": "источник ещё не проверен", "展开设置": "Показать настройки", "工作区路径(回车应用)": "Путь рабочей области (Enter — применить)", "已停用": "Отключён", "已创建技能:{name}": "Навык создан: {name}", "已创建:": "Создано: ", "已加载": "Загружен", "已发现": "Обнаружен", "已取消 · 已导入 {imported}/{total} 已保留,临时文件已清理": "Отменено · {imported}/{total} сохранено, временные файлы удалены", "已同步版本": "Синхронизированная ревизия", "已启用": "Включено", "已存在": "Существующие", "已导入:{imported};已跳过同名技能:{skipped}": "Импортировано: {imported}; пропущены одноимённые: {skipped}", "已恢复技能:{name}": "Навык восстановлен: {name}", "已是最新": "Актуально", "已是最新版本 v{version}": "Актуальная версия: v{version}", "已更新 {count} 个来源": "Обновлено источников: {count}", "已永久删除:{name}": "Удалён безвозвратно: {name}", "已禁用": "Отключено", "已禁用 {count}": "Отключено: {count}", "已移到回收站:{name}": "Отправлен в корзину: {name}", "已装 {count}": "Установлено: {count}", "已覆盖": "Переопределено", "已选择": "Выбрано", "市场": "Маркет", "市场源已对齐到 {ref},要同步更新以下本地技能吗?": "Источник выровнен с {ref}. Обновить эти локальные навыки?", "平铺": "Списком", "开": "Вкл", "恢复": "Восстановить", "恢复默认": "Сбросить к значению по умолчанию", "所属场景": "Группы", "所选文件夹中没有找到 SKILL.md。": "В выбранной папке не найдено SKILL.md.", "扫描": "Сканировать", "扫描中…": "Сканирование…", "批量更新全部技能?": "Обновить все навыки?", "批量来源中存在多个同名技能: {name}": "В пакетном источнике есть навыки с одинаковыми именами: {name}", "技能": "Навыки", "技能 skills": "Навыки (skills)", "技能不存在: {name}": "Навык не найден: {name}", "技能中枢": "Центр навыков", "技能中枢:浏览、分组与同步管理本地技能": "Центр навыков: просмотр, группировка и синхронизация локальных навыков", "技能内容过长": "Содержимое навыка слишком велико", "技能名称不是合法 kebab-case:{name}": "Имя навыка не соответствует kebab-case: {name}", "技能名称与描述": "Название и описание навыка", "技能名(kebab-case,如 code-review)": "Имя навыка (kebab-case, например code-review)", "技能正文不能为空": "Текст навыка обязателен", "技能简介不能为空": "Описание навыка обязательно", "技能管理器状态文件不可读,已拒绝覆盖:{path}": "Файл состояния менеджера не читается, перезапись отклонена: {path}", "技能管理器状态文件不可读;外部技能已安全停用,修复文件前不会覆盖状态:{path}": "Файл состояния менеджера не читается; внешние навыки отключены, перезапись заблокирована до исправления: {path}", "技能缺少完整 frontmatter,无法{action}: {name}": "У навыка неполный frontmatter, нельзя выполнить «{action}»: {name}", "技能行/聊天 / 菜单中「仅用户可调」绿色圆点的颜色(#rrggbb)。": "Цвет зелёной точки «только пользователь» в панели навыков и чате/меню (#rrggbb).", "技能行/聊天 / 菜单中「模型可调」蓝色圆点的颜色(#rrggbb)。": "Цвет синей точки «модель может вызвать» в панели навыков и чате/меню (#rrggbb).", "技能详情": "Подробности навыка", "拖拽技能到此处": "Перетащите навык сюда", "按名称": "По названию", "按添加时间": "По дате добавления", "按调用次数": "По числу вызовов", "描述(一句话路由说明)": "Описание (одно предложение для маршрутизации)", "提供者": "Провайдер", "搜索": "Поиск", "搜索技能…": "Поиск навыков…", "搜索技能名称或描述": "Поиск по названию или описанию навыка", "操作失败:{error}": "Действие не удалось: {error}", "支持 .zip、技能文件夹或单个 SKILL.md": "Поддерживаются .zip, папка навыка или один SKILL.md", "收起设置": "Скрыть настройки", "放弃修改": "Отменить", "文件要求": "Требования к файлам", "新建场景": "Новый сценарий", "新建技能": "Новый навык", "新版本 v{version}": "Новая версия v{version}", "无法从宿主读取活动工作区,项目技能未显示:{path}": "Не удалось получить активную рабочую область у хоста, проектные навыки скрыты: {path}", "无法恢复,同名技能已存在: {name}": "Нельзя восстановить: навык с таким именем уже существует: {name}", "无法生成合法 kebab-case 名称(原始名: {name})": "Не удалось сгенерировать корректное имя kebab-case (исходное: {name})", "无法识别的 skill 来源: {path}": "Нераспознанный источник навыков: {path}", "无法读取目录:{path}": "Не удалось прочитать папку: {path}", "旧版本备份未清理: {path}({error})": "Резервная копия старой версии не удалена: {path} ({error})", "显示分组汇总": "Показывать сводку по группам", "显示最近调用时间": "Показывать время последнего вызова", "显示调用次数": "Показывать число вызовов", "暂无可用的发布版本": "Нет доступных релизов", "暂无来源组。从市场导入技能后自动按来源聚合。": "Групп по источникам пока нет. Импортируйте навыки из маркета — они сгруппируются по источникам.", "更新": "Обновить", "更新 {count} 个": "Обновить {count}", "更新时间": "Обновлён", "有更新": "Есть обновления", "有更新 {count} 个": "Обновлений: {count}", "服务端返回非 JSON 响应(HTTP {status})": "Сервер вернул ответ не в формате JSON (HTTP {status})", "未保存": "Есть несохранённые", "未发现诊断问题。": "Проблем не обнаружено.", "未导入任何技能。": "Не импортировано ни одного навыка.", "未导入任何技能;已跳过同名技能:{names}": "Ничего не импортировано; пропущены существующие: {names}", "未提供简介": "Описание не указано", "未知技能来源:{root}": "Неизвестный источник навыков: {root}", "未知操作": "Неизвестное действие", "本地还没有技能。点击「新建技能」创建第一个。": "Навыков пока нет. Создайте первый.", "本部署没有挂载该设置命名空间。": "Это развёртывание не предоставляет пространство настроек.", "本部署没有接受这些值,已保留供你修改。": "Развёртывание не приняло эти значения; они оставлены для исправления.", "本部署的设置为只读。": "Настройки этого развёртывания доступны только для чтения.", "来源": "Источник", "来源:{source}": "Источник: {source}", "查看 {name} 详情(回车)": "Подробнее о навыке {name} (Enter)", "查看发布": "Открыть релиз", "查看详情": "Подробнее", "检查": "Проверить", "检查中…": "Проверка…", "检查全部": "Проверить все", "检查失败": "Проверка не удалась", "检查更新": "Проверить обновления", "检查更新失败:{error}": "Не удалось проверить обновления: {error}", "模型可调 — Agent 可自动调用": "Вызывается моделью — агенты могут вызывать автоматически", "模型可调圆点颜色": "Цвет точки «вызывается моделью»", "模板 design-templates": "Шаблоны design-templates", "正在加载技能…": "Загрузка навыков…", "正在安装…": "Установка…", "正在导入: {name} ({done}/{total})": "Импорт: {name} ({done}/{total})", "正文": "Текст", "正文(Markdown)": "Текст (Markdown)", "每个技能最多一个圆点;无圆点 = 不可被调用。": "У навыка не более одной точки; нет точки = не вызывается.", "永久删除": "Удалить безвозвратно", "永久删除?": "Удалить безвозвратно?", "没有匹配的技能。": "Подходящих навыков нет.", "没有找到可导入技能。": "Импортируемых навыков не найдено.", "添加": "Добавить", "添加时间": "Добавлен", "添加源": "Добавить источник", "清空": "Очистить", "清空回收站": "Очистить корзину", "清空回收站?": "Очистить корзину?", "清除工作区": "Очистить рабочую область", "清除搜索": "Очистить поиск", "源文件": "Исходный файл", "源文件只读": "Источник только для чтения", "点击检查上游更新": "Нажмите, чтобы проверить источник на обновления", "状态已更新。": "Состояние обновлено.", "用户 .agents": "пользователь .agents", "用户 .dsh": "пользователь .dsh", "用户 ~/.agents/skills": "Пользовательские ~/.agents/skills", "用户 ~/.dsh/skills": "Пользовательские ~/.dsh/skills", "用户可调 — 仅显式点名时触发": "Вызывается пользователем — только явный вызов", "用户可调圆点颜色": "Цвет точки «вызывается пользователем»", "目录下未找到任何 skill 条目: {path}": "В каталоге не найдено ни одного элемента навыков: {path}", "目录技能": "Набор навыков", "目录路径必须是绝对路径:{path}": "Путь к папке должен быть абсолютным: {path}", "目标目录": "Целевой каталог", "知道了": "Понятно", "确定": "Подтвердить", "确定把「{name}」移入回收站吗?可随时恢复。": "Переместить «{name}» в корзину? Его можно восстановить в любой момент.", "禁止的修改请求(缺少客户端标记)": "Запрещённый запрос на изменение (нет клиентского маркера)", "禁止的请求来源(非法 Host)": "Запрещённый источник запроса (неверный Host)", "禁用": "Отключить", "移入回收站": "В корзину", "移入回收站回滚失败,未恢复内容保留在: {path}({error})": "Откат перемещения в корзину не удался; невосстановленное содержимое сохранено в: {path} ({error})", "移入回收站?": "В корзину?", "移到回收站": "В корзину", "移到回收站?": "Отправить в корзину?", "移除所选内容": "Убрать выбранное", "移除源": "Удалить источник", "移除源不影响已安装的技能。": "Удаление источника не затрагивает установленные навыки.", "简介": "Описание", "管理 dsh 本地技能目录:浏览、分组、来源同步与新建。": "Управление локальным каталогом навыков dsh: просмотр, группировка, синхронизация источников и создание.", "精选技能仓库,添加后即可扫描安装,并持续检查更新。": "Отобранные репозитории навыков — добавьте, чтобы сканировать и устанавливать, с постоянной проверкой обновлений.", "细分": "Разделить", "统一加载和管理本机 Agent Skills。": "Единая загрузка и управление Agent-навыками на этом компьютере.", "统计窗口(天)": "Окно статистики (дней)", "继承": "Наследовать", "编辑": "Изменить", "缺少完整 YAML frontmatter": "Отсутствует полный YAML frontmatter", "能力怎么选:重复方法 → 技能;外部系统 → MCP;长期资料 → 知识库。": "Как выбрать способность: повторяемый метод → навык; внешняя система → MCP; долгосрочные знания → база знаний.", "自动统计间隔(分钟)": "Интервал автостатистики (минут)", "自定义": "свой каталог", "自定义目录": "Пользовательские каталоги", "被更高优先级来源 {root} 覆盖": "Перекрыт источником с более высоким приоритетом {root}", "被覆盖": "Перекрыт", "覆盖导入回滚失败,备份保留在: {path}({error})": "Откат перезаписывающего импорта не удался; резервные копии сохранены в: {path} ({error})", "设计技能合集(design-templates)": "Коллекция навыков дизайна (design-templates)", "诊断": "Диагностика", "诊断异常": "Есть проблемы", "该仓库没有正式发布,选择要跟踪的分支(默认为 main):": "У репозитория нет релизов. Выберите ветку для отслеживания (по умолчанию main):", "该来源不允许{action}": "Этот источник не разрешает: {action}", "该来源目录不存在或暂时没有技能。": "Этого каталога не существует или в нём пока нет навыков.", "该来源还没有导入本地技能。": "Из этого репозитория пока не импортировано ни одного навыка.", "该组没有可写技能(只读技能无法由中枢开关)": "В группе нет перезаписываемых навыков (состояние навыков «только чтение» нельзя менять из центра)", "请求体不是合法 JSON": "Тело запроса — не корректный JSON", "请求体必须是 application/json": "Тело запроса должно быть application/json", "请求体过大": "Тело запроса слишком велико", "请选择 .zip 或单个 SKILL.md。": "Выберите .zip или один файл SKILL.md.", "读取中…": "Загрузка…", "读取技能正文…": "Загрузка текста навыка…", "调用次数": "Вызовы", "调用策略字段值无效": "Недопустимое значение политики вызова", "跟进上游删除?": "Согласиться с удалением в источнике?", "跟进删除": "Согласиться с удалением", "路径": "Путь", "路径不存在: {path}": "Путь не существует: {path}", "跳过": "Пропустить", "跳过已存在 {count} 个": "Пропущено существующих: {count}", "运行时": "Runtime", "返回列表": "К списку", "还没有场景。先新建一个,再把技能归类。": "Сценариев ещё нет. Создайте один и начните раскладывать навыки.", "还没有市场源。从下方内置市场添加,或输入一个 GitHub 仓库。": "Источников пока нет. Добавьте из каталога ниже или введите репозиторий GitHub.", "适用场景": "Когда применять", "选择分支": "Выберите ветку", "选择文件": "Выбрать файл", "选择文件夹": "Выбрать папку", "通过 Skills Manager 只读加载,启停不会改写源文件。": "Загружается через Skills Manager только для чтения; переключения не меняют исходные файлы.", "项目 .agents": "проект .agents", "项目 .agents/skills": "Проектные .agents/skills", "项目 .dsh": "проект .dsh", "项目 .dsh/skills": "Проектные .dsh/skills", "项目 Agent": "Проектный Agent", "项目 DSH": "Проектный DSH", "项目技能目录不安全,拒绝写入:{path}": "Каталог проектных навыков небезопасен, запись отклонена: {path}", "项目级": "Проектный", "(目录可能不完整)": "(каталог может быть неполным)"}
|
|
@@ -45,7 +384,6 @@ window.__ModuleLoader__.load({
|
|
|
45
384
|
// 1b. Пользовательские переопределения + плюрализация.
|
|
46
385
|
// Overrides: пользовательский слой поверх словарей (russian-lang.overrides).
|
|
47
386
|
// Plural: ядро выбирает .one/.other по n===1, русскому нужны few/many.
|
|
48
|
-
const pluralRules = new Intl.PluralRules('ru-RU')
|
|
49
387
|
const origTranslate = runtime.translate.bind(runtime)
|
|
50
388
|
const getOverrides = () => {
|
|
51
389
|
try {
|
|
@@ -53,174 +391,16 @@ window.__ModuleLoader__.load({
|
|
|
53
391
|
return value && value.overrides ? value.overrides : {}
|
|
54
392
|
} catch (err) { return {} }
|
|
55
393
|
}
|
|
56
|
-
|
|
57
|
-
const numberFormat = new Intl.NumberFormat('ru-RU')
|
|
58
|
-
const relativeTimeFormat = new Intl.RelativeTimeFormat('ru-RU', { numeric: 'auto' })
|
|
59
|
-
const currencyFormats = new Map()
|
|
60
|
-
const getCurrencyFormat = (cur) => {
|
|
61
|
-
const c = (cur || 'RUB').toUpperCase()
|
|
62
|
-
if (!currencyFormats.has(c)) {
|
|
63
|
-
try {
|
|
64
|
-
currencyFormats.set(c, new Intl.NumberFormat('ru-RU', { style: 'currency', currency: c }))
|
|
65
|
-
} catch (e) {
|
|
66
|
-
currencyFormats.set(c, numberFormat)
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return currencyFormats.get(c)
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const formatNumber = (val) => {
|
|
73
|
-
const n = typeof val === 'number' ? val : Number(val)
|
|
74
|
-
return isNaN(n) ? String(val) : numberFormat.format(n)
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
const formatRelativeTime = (val, unit) => {
|
|
78
|
-
if (typeof val === 'number' && typeof unit === 'string') {
|
|
79
|
-
return relativeTimeFormat.format(val, unit)
|
|
80
|
-
}
|
|
81
|
-
const ts = val instanceof Date ? val.getTime() : (typeof val === 'number' ? (val < 1e12 ? val * 1000 : val) : Number(val))
|
|
82
|
-
if (isNaN(ts)) return String(val)
|
|
83
|
-
const diffSec = Math.round((ts - Date.now()) / 1000)
|
|
84
|
-
const absSec = Math.abs(diffSec)
|
|
85
|
-
if (absSec < 45) return 'только что'
|
|
86
|
-
if (absSec < 3600) return relativeTimeFormat.format(Math.round(diffSec / 60), 'minute')
|
|
87
|
-
if (absSec < 86400) return relativeTimeFormat.format(Math.round(diffSec / 3600), 'hour')
|
|
88
|
-
if (absSec < 2592000) return relativeTimeFormat.format(Math.round(diffSec / 86400), 'day')
|
|
89
|
-
if (absSec < 31536000) return relativeTimeFormat.format(Math.round(diffSec / 2592000), 'month')
|
|
90
|
-
return relativeTimeFormat.format(Math.round(diffSec / 31536000), 'year')
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// Морфологический хелпер склонений сущностей (Smart Inflection Engine)
|
|
94
|
-
const INFLECT_CUSTOM = {
|
|
95
|
-
'пользователь': { gen: 'пользователя', dat: 'пользователю', acc: 'пользователя', ins: 'пользователем', pre: 'пользователе' },
|
|
96
|
-
'агент': { gen: 'агента', dat: 'агенту', acc: 'агента', ins: 'агентом', pre: 'агенте' },
|
|
97
|
-
'субагент': { gen: 'субагента', dat: 'субагенту', acc: 'субагента', ins: 'субагентом', pre: 'субагенте' },
|
|
98
|
-
'модель': { gen: 'модели', dat: 'модели', acc: 'модель', ins: 'моделью', pre: 'модели' },
|
|
99
|
-
'промпт': { gen: 'промпта', dat: 'промпту', acc: 'промпт', ins: 'промптом', pre: 'промпте' },
|
|
100
|
-
'инструмент': { gen: 'инструмента', dat: 'инструменту', acc: 'инструмент', ins: 'инструментом', pre: 'инструменте' },
|
|
101
|
-
'сессия': { gen: 'сессии', dat: 'сессии', acc: 'сессию', ins: 'сессией', pre: 'сессии' },
|
|
102
|
-
'ветка': { gen: 'ветки', dat: 'ветке', acc: 'ветку', ins: 'веткой', pre: 'ветке' },
|
|
103
|
-
'файл': { gen: 'файла', dat: 'файлу', acc: 'файл', ins: 'файлом', pre: 'файле' },
|
|
104
|
-
'папка': { gen: 'папки', dat: 'папке', acc: 'папку', ins: 'папкой', pre: 'папке' }
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const inflectWord = (word, cName) => {
|
|
108
|
-
if (!word || typeof word !== 'string') return word
|
|
109
|
-
const lower = word.toLowerCase()
|
|
110
|
-
if (INFLECT_CUSTOM[lower] && INFLECT_CUSTOM[lower][cName]) {
|
|
111
|
-
const res = INFLECT_CUSTOM[lower][cName]
|
|
112
|
-
return word[0] === word[0].toUpperCase() ? res[0].toUpperCase() + res.slice(1) : res
|
|
113
|
-
}
|
|
114
|
-
if (/[a-zA-Z0-9_-]/.test(word) || /^[А-ЯЁ]{2,}$/.test(word)) return word
|
|
115
|
-
if (/[оеиую]$/i.test(word) && !/(ко|ло|но|то|во|ро|до|по|со|мо|го)$/i.test(word)) return word
|
|
116
|
-
|
|
117
|
-
const isCap = word[0] === word[0].toUpperCase()
|
|
118
|
-
const w = lower
|
|
119
|
-
if (w.endsWith('ия')) {
|
|
120
|
-
const stem = w.slice(0, -2)
|
|
121
|
-
const map = { gen: stem + 'ии', dat: stem + 'ии', acc: stem + 'ию', ins: stem + 'ией', pre: stem + 'ии' }
|
|
122
|
-
const out = map[cName] || w
|
|
123
|
-
return isCap ? out[0].toUpperCase() + out.slice(1) : out
|
|
124
|
-
}
|
|
125
|
-
if (w.endsWith('а')) {
|
|
126
|
-
const stem = w.slice(0, -1)
|
|
127
|
-
const lastCons = stem.slice(-1)
|
|
128
|
-
const genEnd = /[гкхжшчщ]/.test(lastCons) ? 'и' : 'ы'
|
|
129
|
-
const map = { gen: stem + genEnd, dat: stem + 'е', acc: stem + 'у', ins: stem + 'ой', pre: stem + 'е' }
|
|
130
|
-
const out = map[cName] || w
|
|
131
|
-
return isCap ? out[0].toUpperCase() + out.slice(1) : out
|
|
132
|
-
}
|
|
133
|
-
if (w.endsWith('я')) {
|
|
134
|
-
const stem = w.slice(0, -1)
|
|
135
|
-
const map = { gen: stem + 'и', dat: stem + 'е', acc: stem + 'ю', ins: stem + 'ей', pre: stem + 'е' }
|
|
136
|
-
const out = map[cName] || w
|
|
137
|
-
return isCap ? out[0].toUpperCase() + out.slice(1) : out
|
|
138
|
-
}
|
|
139
|
-
if (w.endsWith('ь')) {
|
|
140
|
-
const stem = w.slice(0, -1)
|
|
141
|
-
const map = { gen: stem + 'и', dat: stem + 'и', acc: stem + 'ь', ins: stem + 'ью', pre: stem + 'и' }
|
|
142
|
-
const out = map[cName] || w
|
|
143
|
-
return isCap ? out[0].toUpperCase() + out.slice(1) : out
|
|
144
|
-
}
|
|
145
|
-
if (w.endsWith('й')) {
|
|
146
|
-
const stem = w.slice(0, -1)
|
|
147
|
-
const map = { gen: stem + 'я', dat: stem + 'ю', acc: stem + 'я', ins: stem + 'ем', pre: stem + 'е' }
|
|
148
|
-
const out = map[cName] || w
|
|
149
|
-
return isCap ? out[0].toUpperCase() + out.slice(1) : out
|
|
150
|
-
}
|
|
151
|
-
if (/[бвгджзклмнпрстфхцчшщ]$/.test(w)) {
|
|
152
|
-
const map = { gen: w + 'а', dat: w + 'у', acc: w, ins: w + 'ом', pre: w + 'е' }
|
|
153
|
-
const out = map[cName] || w
|
|
154
|
-
return isCap ? out[0].toUpperCase() + out.slice(1) : out
|
|
155
|
-
}
|
|
156
|
-
return word
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
const inflect = (phrase, cName) => {
|
|
160
|
-
if (!phrase || typeof phrase !== 'string') return phrase
|
|
161
|
-
const validCases = new Set(['gen', 'dat', 'acc', 'ins', 'pre'])
|
|
162
|
-
if (!validCases.has(cName)) return phrase
|
|
163
|
-
return phrase.split(' ').map((w) => inflectWord(w, cName)).join(' ')
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
const getPluginLocalizationStatus = (ns) => {
|
|
167
|
-
if (!ns) return { status: 'none', count: 0, label: 'RU отсутствует' }
|
|
168
|
-
const dict = RU[ns] || {}
|
|
169
|
-
const count = Object.keys(dict).length
|
|
170
|
-
if (count > 0) {
|
|
171
|
-
return { status: 'full', count, label: `RU: ${count} строк` }
|
|
172
|
-
}
|
|
173
|
-
return { status: 'none', count: 0, label: 'RU отсутствует' }
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
const makeIssueUrl = (opts = {}) => {
|
|
177
|
-
const repo = 'GooDAnDReaDY/dsh-russian-lang'
|
|
178
|
-
const title = opts.title || (opts.plugin ? `[Перевод] Запрос локализации для плагина ${opts.plugin}` : '[Ошибка перевода] Неточный перевод фразы')
|
|
179
|
-
const bodyLines = [
|
|
180
|
-
'### Описание проблемы',
|
|
181
|
-
opts.description || (opts.plugin ? `Просьба добавить русскую локализацию для плагина \`${opts.plugin}\`.` : 'Обнаружена неточность в переводе интерфейса.'),
|
|
182
|
-
'',
|
|
183
|
-
'### Технический контекст',
|
|
184
|
-
opts.ns ? `- **Namespace**: \`${opts.ns}\`` : null,
|
|
185
|
-
opts.key ? `- **Ключ**: \`${opts.key}\`` : null,
|
|
186
|
-
opts.en ? `- **Оригинал (EN)**: ${opts.en}` : null,
|
|
187
|
-
opts.ru ? `- **Текущий перевод (RU)**: ${opts.ru}` : null,
|
|
188
|
-
opts.plugin ? `- **Плагин**: \`${opts.plugin}\`` : null,
|
|
189
|
-
`- **Версия dsh-russian-lang**: \`0.1.29\``,
|
|
190
|
-
typeof navigator !== 'undefined' ? `- **User Agent**: \`${navigator.userAgent}\`` : null,
|
|
191
|
-
'',
|
|
192
|
-
'### Предлагаемый вариант перевода',
|
|
193
|
-
opts.proposal || '_Опишите ваш вариант перевода..._'
|
|
194
|
-
].filter(Boolean)
|
|
195
|
-
const params = new URLSearchParams()
|
|
196
|
-
params.set('title', title)
|
|
197
|
-
params.set('body', bodyLines.join('\n'))
|
|
198
|
-
return `https://github.com/${repo}/issues/new?` + params.toString()
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
const formatCurrency = (val, cur) => {
|
|
202
|
-
const n = typeof val === 'number' ? val : Number(val)
|
|
203
|
-
if (isNaN(n)) return String(val)
|
|
204
|
-
return getCurrencyFormat(cur).format(n)
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// Расширенный fill с поддержкой спецификаторов {param:number}, {param:reltime}, {param:currency}
|
|
208
|
-
const fill = (template, params) => template.replace(/\{(\w+)(?::(\w+))?\}/g, (match, name, spec) => {
|
|
209
|
-
if (!(name in params)) return match
|
|
210
|
-
const val = params[name]
|
|
211
|
-
if (spec === 'number') return formatNumber(val)
|
|
212
|
-
if (spec === 'reltime') return formatRelativeTime(val)
|
|
213
|
-
if (spec === 'currency') return formatCurrency(val, params.currency || 'RUB')
|
|
214
|
-
if (spec === 'gen' || spec === 'dat' || spec === 'acc' || spec === 'ins' || spec === 'pre') return inflect(String(val), spec)
|
|
215
|
-
return String(val)
|
|
216
|
-
})
|
|
217
|
-
|
|
394
|
+
const getPluginLocalizationStatus = makePluginLocalizationStatus(RU)
|
|
218
395
|
try {
|
|
219
396
|
runtime.formatNumber = formatNumber
|
|
220
397
|
runtime.formatRelativeTime = formatRelativeTime
|
|
221
398
|
runtime.formatCurrency = formatCurrency
|
|
222
399
|
runtime.inflect = inflect
|
|
223
400
|
runtime.getPluginLocalizationStatus = getPluginLocalizationStatus
|
|
401
|
+
runtime.stemRussian = stemRussian
|
|
402
|
+
runtime.fuzzyMatchRu = fuzzyMatchRu
|
|
403
|
+
runtime.humanizeError = humanizeError
|
|
224
404
|
} catch (err) { /* ignore */ }
|
|
225
405
|
// lookup: в ядре 0.1.2 lookup(ns, key, chain) требует третий довод —
|
|
226
406
|
// цепочку языков; в старых ядрах его два. Спрашиваем у самого метода
|
|
@@ -248,7 +428,7 @@ window.__ModuleLoader__.load({
|
|
|
248
428
|
if (runtime.getLocale().active === 'ru' && params) {
|
|
249
429
|
const n = params.n ?? params.count
|
|
250
430
|
if (typeof n === 'number') {
|
|
251
|
-
const form =
|
|
431
|
+
const form = pluralForm(n)
|
|
252
432
|
const m = /^(.*)[.](one|other)$/.exec(key)
|
|
253
433
|
if (m) {
|
|
254
434
|
// Ядро выбирает .one/.other по n===1; русскому нужны few/many.
|
|
@@ -515,41 +695,9 @@ window.__ModuleLoader__.load({
|
|
|
515
695
|
// пробелы перед короткими словами, опционально ё (безопасный список).
|
|
516
696
|
// Код, ссылки, кнопки и поля ввода не трогаем. Правила идемпотентны,
|
|
517
697
|
// повторный проход по своим же правкам ничего не меняет.
|
|
518
|
-
|
|
519
|
-
const
|
|
520
|
-
|
|
521
|
-
.replace(/[“„]([^“”\n]{1,200})[”"]/g, '\u00AB$1\u00BB')
|
|
522
|
-
.replace(/[『「]([^』」\n]{1,200})[』」]/g, '\u00AB$1\u00BB')
|
|
523
|
-
const typoDash = (text) => text
|
|
524
|
-
.replace(/(^|[\s(\[\u00AB])--(?=\s|$)/g, '$1\u2014')
|
|
525
|
-
.replace(/(^|[\s(\[\u00AB])-(?=\s)/g, '$1\u2014')
|
|
526
|
-
const typoPunct = (text) => text.replace(/\s+([,.:;!?])(?=\s|$)/g, '$1')
|
|
527
|
-
const TYPO_SHORT = new Set(['в', 'с', 'к', 'о', 'у', 'а', 'и', 'но', 'не', 'ни', 'на', 'по', 'до', 'из', 'за', 'от', 'об'])
|
|
528
|
-
const typoNbsp = (text) => text.replace(/(^|[\s(\[\u00AB])([а-яё]{1,2})(\s+)/g, (match, lead, word) => (
|
|
529
|
-
TYPO_SHORT.has(word) ? lead + word + '\u00A0' : match
|
|
530
|
-
))
|
|
531
|
-
const TYPO_YO_CURATED = [
|
|
532
|
-
[/еще/g, 'ещё'], [/Еще/g, 'Ещё'], [/ЕЩЕ/g, 'ЕЩЁ'],
|
|
533
|
-
[/\bее\b/g, 'её'], [/\bЕе\b/g, 'Её'],
|
|
534
|
-
[/\bчерный\b/g, 'чёрный'], [/\bчерная\b/g, 'чёрная'], [/\bчерные\b/g, 'чёрные'],
|
|
535
|
-
[/\bзеленый\b/g, 'зелёный'], [/\bжелтый\b/g, 'жёлтый'],
|
|
536
|
-
[/\bлегкий\b/g, 'лёгкий'], [/\bтяжелый\b/g, 'тяжёлый'],
|
|
537
|
-
[/\bнадежный\b/g, 'надёжный'], [/\bдешевый\b/g, 'дешёвый'],
|
|
538
|
-
[/\bидет\b/g, 'идёт'], [/\bдает\b/g, 'даёт'], [/\bберет\b/g, 'берёт'],
|
|
539
|
-
[/\bведет\b/g, 'ведёт'], [/\bнесет\b/g, 'несёт'], [/\bживет\b/g, 'живёт'],
|
|
540
|
-
[/\bпривел\b/g, 'привёл'], [/\bшел\b/g, 'шёл']
|
|
541
|
-
]
|
|
542
|
-
// Корпусные ё-пары из freq-словаря (безопасные написания), генерируются build.py.
|
|
543
|
-
const TYPO_YO_FREQ = [["все", "всё"], ["ее", "её"], ["еще", "ещё"], ["чем", "чём"], ["нее", "неё"], ["черт", "чёрт"], ["мое", "моё"], ["серьезно", "серьёзно"], ["придется", "придётся"], ["насчет", "насчёт"], ["твое", "твоё"], ["свое", "своё"], ["пойдем", "пойдём"], ["пришел", "пришёл"], ["идет", "идёт"], ["нашел", "нашёл"], ["идем", "идём"], ["нем", "нём"], ["вперед", "вперёд"], ["пошел", "пошёл"], ["ребенка", "ребёнка"], ["ребенок", "ребёнок"], ["всем", "всём"], ["моем", "моём"], ["ето", "ёто"], ["счет", "счёт"], ["своем", "своём"], ["придет", "придёт"], ["ушел", "ушёл"], ["ждет", "ждёт"], ["че", "чё"], ["живет", "живёт"], ["мертв", "мёртв"], ["твоем", "твоём"], ["черта", "чёрта"], ["ен", "ён"], ["вернется", "вернётся"], ["днем", "днём"], ["найдем", "найдём"], ["пойдет", "пойдёт"], ["начнем", "начнём"], ["пеп", "пёп"], ["вернемся", "вернёмся"], ["остается", "остаётся"], ["принес", "принёс"], ["идешь", "идёшь"], ["трех", "трёх"], ["дает", "даёт"], ["ребенком", "ребёнком"], ["самолет", "самолёт"], ["определенно", "определённо"], ["пойдешь", "пойдёшь"], ["умрет", "умрёт"], ["прием", "приём"], ["прошел", "прошёл"], ["убьет", "убьёт"], ["черный", "чёрный"], ["хен", "хён"], ["тетя", "тётя"], ["ведет", "ведёт"], ["черту", "чёрту"], ["провел", "провёл"], ["чертов", "чёртов"], ["произойдет", "произойдёт"], ["семьей", "семьёй"], ["пойдемте", "пойдёмте"], ["пройдет", "пройдёт"], ["возьмем", "возьмём"], ["вернешься", "вернёшься"], ["найдешь", "найдёшь"], ["живешь", "живёшь"], ["отчет", "отчёт"], ["займет", "займёт"], ["привел", "привёл"], ["ждем", "ждём"], ["сошел", "сошёл"], ["вдвоем", "вдвоём"], ["найдет", "найдёт"], ["вел", "вёл"], ["живем", "живём"], ["зашел", "зашёл"], ["шел", "шёл"], ["начнется", "начнётся"], ["путем", "путём"], ["подойдет", "подойдёт"], ["режиссер", "режиссёр"], ["уйдет", "уйдёт"], ["придешь", "придёшь"], ["идемте", "идёмте"], ["ведешь", "ведёшь"], ["пес", "пёс"], ["умрешь", "умрёшь"], ["ждешь", "ждёшь"], ["найдете", "найдёте"], ["найдется", "найдётся"], ["клево", "клёво"], ["поймешь", "поймёшь"], ["ей", "ёй"], ["разберемся", "разберёмся"], ["времен", "времён"], ["берет", "берёт"], ["введен", "введён"], ["включен", "включён"], ["включенных", "включённых"], ["возьмется", "возьмётся"], ["завершен", "завершён"], ["завершенного", "завершённого"], ["задает", "задаёт"], ["задается", "задаётся"], ["заменен", "заменён"], ["звезд", "звёзд"], ["звезды", "звёзды"], ["изменен", "изменён"], ["истек", "истёк"], ["незавершенная", "незавершённая"], ["неподтвержденные", "неподтверждённые"], ["несохраненные", "несохранённые"], ["обновлен", "обновлён"], ["обновленные", "обновлённые"], ["определен", "определён"], ["отклонен", "отклонён"], ["отменен", "отменён"], ["очередность", "очерёдность"], ["поврежден", "повреждён"], ["повторен", "повторён"], ["подключен", "подключён"], ["подтвержденные", "подтверждённые"], ["приемки", "приёмки"], ["раздает", "раздаёт"], ["разрешенная", "разрешённая"], ["разрешенные", "разрешённые"], ["создаем", "создаём"], ["сойдется", "сойдётся"], ["сохранен", "сохранён"], ["сохраненный", "сохранённый"], ["счету", "счёту"], ["тяжелые", "тяжёлые"], ["темная", "тёмная"], ["уберет", "уберёт"], ["удален", "удалён"], ["учетные", "учётные"], ["учетных", "учётных"], ["емкости", "ёмкости"], ["емкость", "ёмкость"]]
|
|
544
|
-
const TYPO_YO = TYPO_YO_CURATED.concat(
|
|
545
|
-
TYPO_YO_FREQ
|
|
546
|
-
.filter((p) => p[0].length >= 3 && p[0] !== p[1])
|
|
547
|
-
.map((p) => [new RegExp('\\b' + p[0] + '\\b', 'g'), p[1]])
|
|
548
|
-
)
|
|
549
|
-
const typoYo = (text) => {
|
|
550
|
-
for (const pair of TYPO_YO) text = text.replace(pair[0], pair[1])
|
|
551
|
-
return text
|
|
552
|
-
}
|
|
698
|
+
// ё-пары: ручные + корпусные, омографы отсеяны в build.py (#132).
|
|
699
|
+
const TYPO_YO_PAIRS = [["еще", "ещё"], ["ее", "её"], ["черный", "чёрный"], ["черная", "чёрная"], ["черные", "чёрные"], ["зеленый", "зелёный"], ["желтый", "жёлтый"], ["легкий", "лёгкий"], ["тяжелый", "тяжёлый"], ["надежный", "надёжный"], ["дешевый", "дешёвый"], ["идет", "идёт"], ["дает", "даёт"], ["ведет", "ведёт"], ["несет", "несёт"], ["живет", "живёт"], ["привел", "привёл"], ["шел", "шёл"], ["нее", "неё"], ["мое", "моё"], ["серьезно", "серьёзно"], ["придется", "придётся"], ["насчет", "насчёт"], ["твое", "твоё"], ["свое", "своё"], ["пойдем", "пойдём"], ["пришел", "пришёл"], ["нашел", "нашёл"], ["идем", "идём"], ["вперед", "вперёд"], ["пошел", "пошёл"], ["ребенка", "ребёнка"], ["ребенок", "ребёнок"], ["счет", "счёт"], ["своем", "своём"], ["придет", "придёт"], ["ушел", "ушёл"], ["ждет", "ждёт"], ["мертв", "мёртв"], ["твоем", "твоём"], ["вернется", "вернётся"], ["днем", "днём"], ["найдем", "найдём"], ["пойдет", "пойдёт"], ["начнем", "начнём"], ["вернемся", "вернёмся"], ["остается", "остаётся"], ["принес", "принёс"], ["идешь", "идёшь"], ["трех", "трёх"], ["ребенком", "ребёнком"], ["самолет", "самолёт"], ["определенно", "определённо"], ["пойдешь", "пойдёшь"], ["умрет", "умрёт"], ["прием", "приём"], ["прошел", "прошёл"], ["убьет", "убьёт"], ["тетя", "тётя"], ["провел", "провёл"], ["произойдет", "произойдёт"], ["семьей", "семьёй"], ["пойдемте", "пойдёмте"], ["пройдет", "пройдёт"], ["возьмем", "возьмём"], ["вернешься", "вернёшься"], ["найдешь", "найдёшь"], ["живешь", "живёшь"], ["отчет", "отчёт"], ["займет", "займёт"], ["ждем", "ждём"], ["сошел", "сошёл"], ["вдвоем", "вдвоём"], ["найдет", "найдёт"], ["вел", "вёл"], ["живем", "живём"], ["зашел", "зашёл"], ["начнется", "начнётся"], ["путем", "путём"], ["подойдет", "подойдёт"], ["режиссер", "режиссёр"], ["уйдет", "уйдёт"], ["придешь", "придёшь"], ["идемте", "идёмте"], ["ведешь", "ведёшь"], ["пес", "пёс"], ["умрешь", "умрёшь"], ["ждешь", "ждёшь"], ["найдете", "найдёте"], ["найдется", "найдётся"], ["клево", "клёво"], ["поймешь", "поймёшь"], ["разберемся", "разберёмся"], ["времен", "времён"], ["введен", "введён"], ["включен", "включён"], ["включенных", "включённых"], ["возьмется", "возьмётся"], ["завершен", "завершён"], ["завершенного", "завершённого"], ["задает", "задаёт"], ["задается", "задаётся"], ["заменен", "заменён"], ["звезд", "звёзд"], ["звезды", "звёзды"], ["изменен", "изменён"], ["истек", "истёк"], ["незавершенная", "незавершённая"], ["неподтвержденные", "неподтверждённые"], ["несохраненные", "несохранённые"], ["обновлен", "обновлён"], ["обновленные", "обновлённые"], ["определен", "определён"], ["отклонен", "отклонён"], ["отменен", "отменён"], ["очередность", "очерёдность"], ["поврежден", "повреждён"], ["повторен", "повторён"], ["подключен", "подключён"], ["подтвержденные", "подтверждённые"], ["приемки", "приёмки"], ["раздает", "раздаёт"], ["разрешенная", "разрешённая"], ["разрешенные", "разрешённые"], ["создаем", "создаём"], ["сойдется", "сойдётся"], ["сохранен", "сохранён"], ["сохраненный", "сохранённый"], ["счету", "счёту"], ["тяжелые", "тяжёлые"], ["темная", "тёмная"], ["уберет", "уберёт"], ["удален", "удалён"], ["учетные", "учётные"], ["учетных", "учётных"], ["емкости", "ёмкости"], ["емкость", "ёмкость"]]
|
|
700
|
+
const typoYo = makeTypoYo(TYPO_YO_PAIRS)
|
|
553
701
|
const getTypoConf = () => {
|
|
554
702
|
try {
|
|
555
703
|
const t = scope.getSnapshot().value && scope.getSnapshot().value.typography
|
|
@@ -620,52 +768,11 @@ window.__ModuleLoader__.load({
|
|
|
620
768
|
// 7. Фикс раскладки (russian-lang.layout): подсказка-конвертер.
|
|
621
769
|
// Пользователь печатает в неверной раскладке (yjdsq gjvfu -> новый вопрос).
|
|
622
770
|
// Показываем плашку с превью, клик заменяет текст; тихой замены нет.
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
'a':'ф','s':'ы','d':'в','f':'а','g':'п','h':'р','j':'о','k':'л','l':'д',';':'ж','\'':'э',
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
}
|
|
629
|
-
const LAYOUT_CYR_TO_LAT = {}
|
|
630
|
-
for (const k in LAYOUT_LAT_TO_CYR) LAYOUT_CYR_TO_LAT[LAYOUT_LAT_TO_CYR[k]] = k
|
|
631
|
-
const FREQ = new Set(["не", "что", "ты", "это", "на", "он", "мы", "как", "вы", "да", "мне", "нет", "меня", "так", "но", "его", "все", "она", "тебя", "если", "за", "бы", "тебе", "они", "чтобы", "же", "есть", "просто", "из", "для", "ну", "когда", "хорошо", "здесь", "по", "был", "знаю", "то", "только", "всё", "было", "вас", "может", "нас", "вот", "от", "быть", "кто", "будет", "почему", "вам", "их", "очень", "могу", "уже", "спасибо", "или", "нам", "еще", "там", "нужно", "сейчас", "где", "чем", "хочу", "ничего", "этого", "была", "мой", "ее", "ладно", "знаешь", "до", "этом", "потому", "теперь", "думаю", "больше", "её", "со", "раз", "ему", "надо", "время", "этот", "ли", "ещё", "пока", "даже", "привет", "сказал", "себя", "должен", "тоже", "хочешь", "давай", "никогда", "эй", "того", "тогда", "него", "ни", "тут", "были", "конечно", "правда", "об", "моя", "пожалуйста", "тобой", "сказать", "сегодня", "один", "лучше", "можешь", "сюда", "мной", "значит", "сделать", "всегда", "дело", "можно", "ей", "должны", "порядке", "без", "день", "том", "буду", "делать", "хотел", "чего", "эти", "много", "после", "этим", "всего", "во", "твой", "ним", "лет", "боже", "них", "сэр", "ведь", "мистер", "жизнь", "потом", "ней", "такой", "который", "всех", "через", "им", "возможно", "немного", "такое", "слишком", "себе", "зачем", "должна", "моей", "люди", "знаете", "этой", "думаешь", "свою", "точно", "человек", "твоя", "под", "сказала", "назад", "эту", "можем", "случилось", "мама", "мог", "вместе", "отец", "сделал", "мои", "кажется", "друг", "куда", "никто", "поэтому", "эта", "которые", "два", "тот", "сколько", "понимаю", "снова", "жизни", "нравится", "людей", "помочь", "видел", "люблю", "хочет", "место", "знать", "прости", "отлично", "похоже", "парень", "домой", "всем", "деньги", "иди", "времени", "дома", "именно", "доктор", "думал", "говорил", "делаешь", "будем", "прямо", "стоит", "поговорить", "найти", "разве", "слушай", "своей", "лишь", "ага", "можете", "простите", "хотела", "сам", "тем", "будешь", "прошу", "три", "деле", "хотите", "говорить", "давайте", "совсем", "знал", "знает", "какой", "моего", "скажи", "дом", "дела", "вами", "свои", "говорит", "несколько", "должно", "про", "ваш", "происходит", "жаль", "туда", "действительно", "папа", "завтра", "оно", "черт", "одна", "перед", "наш", "уверен", "отсюда", "нужна", "самом", "тех", "нужен", "свой", "мою", "кого", "верно", "работу", "каждый", "твоей", "будут", "хватит", "понял", "нее", "уж", "имя", "против", "пор", "чём", "раньше", "говорю", "более", "надеюсь", "итак", "при", "ваша", "вообще", "пошли", "мать", "нельзя", "наверное", "нами", "твои", "могли", "дай", "ради", "всю", "ребята", "ко", "хотя", "понимаешь", "идти", "этих", "откуда", "такая", "ясно", "другой", "извините", "вижу", "видеть", "над", "могут", "равно", "мисс", "скоро", "будто", "зовут", "виду", "наши", "думала", "послушай", "между", "своего", "вопрос", "этому", "почти", "года", "человека", "которая", "подожди", "руки", "нормально", "такие", "возьми", "минут", "извини", "вещи", "могла", "смотри", "хоть", "работа", "пару", "сын", "ваше", "дня", "пора", "неё", "жить", "видишь", "достаточно", "господи", "быстро", "твою", "весь", "убить", "ночь", "говоришь", "собой", "скажу", "готов", "слышал", "какая", "посмотри", "первый", "самое", "видела", "пусть", "месте", "нашли", "сказали", "плохо", "смогу", "ваши", "отца", "детей", "знаем", "рад", "прав", "никаких", "имею", "миссис", "иногда", "смерти", "своих", "пойду", "брат", "вроде", "рядом", "мир", "произошло", "которую", "сделала", "говорила", "знала", "мое", "одного", "таким", "помощь", "такого", "кем", "насчет", "вчера", "случае", "увидеть", "нашей", "говорят", "правильно", "убил", "одно", "пойти", "друга", "сама", "долго", "работать", "дверь", "делает", "женщина", "важно", "кроме", "будь", "собираюсь", "вашей", "нужны", "здорово", "номер", "проблема", "проблемы", "денег", "чёрт", "хороший", "твоего", "одну", "дальше", "вернуться", "давно", "последний", "ночи", "узнать", "уверена", "машину", "права", "пять", "моих", "также", "тому", "вечером", "дети", "опять", "серьезно", "работает", "своим", "сначала", "две", "одной", "моим", "те", "жена", "думаете", "помнишь", "глаза", "ними", "чувак", "ночью", "чувствую", "взять", "сразу", "утром", "часть", "придется", "стать", "идея", "дорогая", "прекрасно", "слова", "сделали", "видели", "наша", "сердце", "помню", "парня", "момент", "утро", "здравствуйте", "стал", "скорее", "ох", "большой", "часов", "год", "друзья", "сильно", "говори", "смысле", "которой", "уйти", "которого", "капитан", "работы", "любовь", "дочь", "новый", "боюсь", "имеет", "стой", "дней", "той", "голову", "ах", "столько", "понятно", "дать", "девушка", "довольно", "доме", "вечер", "оба", "пойдем", "увидимся", "шанс", "хорошая", "прежде", "сделаю", "какого", "быстрее", "понять", "рассказать", "вашего", "бог", "интересно", "затем", "умер", "обо", "никого", "парни", "самый", "твое", "вон", "пришел", "чтоб", "поверить", "слово", "будете", "нашел", "милая", "странно", "какие", "ой", "та", "однажды", "сможешь", "получить", "обычно", "ума", "полагаю", "алло", "посмотреть", "иначе", "наших", "тело", "хотели", "свое", "пришли", "моё", "другие", "выглядит", "подумал", "лицо", "приятно", "мам", "говорите", "обратно", "нашего", "телефон", "мире", "честь", "господин", "доброе", "план", "другом", "час", "джон", "пути", "делал", "типа", "посмотрим", "насколько", "пытался", "правду", "решил", "поздно", "нем", "работе", "любит", "хотят", "кому", "сестра", "места", "скажешь", "следующий", "других", "получил", "кстати", "говорили", "пришла", "безопасности", "рада", "город", "внимание", "кофе", "которое", "вся", "семья", "конец", "позже", "дал", "думать", "спать", "вернулся", "остаться", "некоторые", "кровь", "оружие", "пришлось", "хуже", "дорогой", "полиция", "сможем", "понимаете", "четыре", "которых", "ужасно", "ждать", "способ", "делаю", "готовы", "совершенно", "смотреть", "вернусь", "большое", "единственный", "вперед", "часа", "муж", "идет", "таких", "ребенка", "машина", "стороны", "смог", "сына", "играть", "сами", "верю", "честно", "нашла", "звучит", "угодно", "руку", "начала", "перевод", "какое", "взял", "станет", "пытаюсь", "внутри", "знали", "новости", "добрый", "подождите", "скажите", "ребенок", "вашу", "мальчик", "осталось", "делаете", "году", "мере", "поняла", "отношения", "далеко", "вокруг", "хотим", "слышала", "двух", "приятель", "никому", "мужчина", "неделю", "вернуть", "смерть", "сих", "ту", "сможет", "дайте", "двое", "видите", "долларов", "крови", "решение", "путь", "следует", "неужели", "около", "готова", "семьи", "идем", "смотрите", "круто", "история", "вдруг", "спросить", "твоих", "второй", "вина", "джек", "женщины", "нашу", "заткнись", "минуту", "собираешься", "твоим", "шоу", "прощения", "больно", "машины", "пап", "трудно", "постоянно", "поможет", "проблем", "например", "дерьмо", "полиции", "начать", "знают", "лучший", "добро", "спасти", "рождения", "оставить", "чарли", "любишь", "конце", "забыл", "месяцев", "часто", "мило", "комнате", "нему", "матери", "милый", "полностью", "школе", "леди", "серьёзно", "убили", "случай", "джо", "убийство", "послушайте", "посмотрите", "пошел", "никакого", "сделаем", "говоря", "неплохо", "использовать", "прошлой", "иду", "узнал", "прекрати", "чуть", "держи", "невозможно", "господа", "слушайте", "наше", "машине", "сэм", "свет", "образом", "иметь", "другое", "другого", "шесть", "людям", "погоди", "имени", "детка", "недели", "меньше", "легко", "крайней", "девочка", "придётся", "мало", "ненавижу", "последние", "насчёт", "выглядишь", "сообщение", "думает", "друзей", "обещаю", "агент", "вместо", "последнее", "самого", "настолько", "ответ", "детектив", "понятия", "родители", "показать", "поехали", "стало", "мэм", "своими", "всей", "очевидно", "помогите", "маленький", "школу", "пожаловать", "твоё", "либо", "забрать", "прошло", "особенно", "имеешь", "истории", "эм", "вопросы", "большая", "минутку", "пол", "остановить", "чему", "свидания", "обязательно", "городе", "убийца", "сделай", "ваших", "любви", "спокойной", "своё", "мадам", "идите", "выйти", "делают", "немедленно", "делай", "возможность", "человеком", "бывает", "ужин", "моем", "купить", "позвонить", "наконец", "стала", "любой", "клянусь", "смешно", "абсолютно", "всему", "переводчики", "забудь", "секунду", "выбор", "тысяч", "потерял", "майкл", "волнуйся", "ноги", "таком", "настоящий", "означает", "встретиться", "известно", "работаю", "замечательно", "любом", "оставь", "связи", "боль", "выпить", "представить", "убийства", "малыш", "умерла", "воды", "окей", "речь", "хорошие", "поводу", "перестань", "увидел", "повезло", "президент", "мужик", "которым", "прошлом", "дам", "десять", "умереть", "поговорим", "отцом", "искать", "тихо", "оставил", "пистолет", "начал", "сложно", "города", "неделе", "хотелось", "принять", "историю", "босс", "держать", "пойдём", "подумала", "фильм", "слышишь", "рано", "удачи", "еду", "словно", "причина", "пришёл", "компании", "спокойно", "работал", "подумать", "вести", "вещь", "брата", "конца", "получится", "блин", "право", "ввиду", "бога", "подарок", "комнату", "мира", "успокойся", "позволить", "моему", "идёт", "самая", "рассказал", "курсе", "намного", "мистера", "женщин", "тяжело", "ух", "предложение", "одним", "счет", "улице", "другим", "уходи", "майк", "среди", "помоги", "получилось", "месяц", "проверить", "генри", "голос", "позвольте", "стороне", "вероятно", "случится", "уверены", "мужа", "питер", "провести", "людьми", "неважно", "нашёл", "доктора", "месяца", "игра", "идём", "нём", "джордж", "познакомиться", "возьму", "слышали", "пошла", "корабль", "чувствуешь", "позволь", "сторону", "игры", "согласен", "письмо", "вниз", "молодец", "наверняка", "утра", "вашим", "нечего", "встречи", "вид", "никакой", "связь", "список", "такую", "весело", "сидеть", "гораздо", "собирался", "впервые", "находится", "объяснить", "полицию", "решили", "семью", "свидание", "отличная", "остальные", "прийти", "руках", "фбр", "чувство", "котором", "решила", "понадобится", "сынок", "найду", "фрэнк", "школы", "чувства", "дядя", "стали", "ушла", "первым", "поверь", "расскажи", "хочется", "девушки", "сон", "имел", "каким", "парнем", "многие", "части", "ехать", "считаю", "никуда", "голове", "старый", "оттуда", "называется", "вопросов", "фото", "пройти", "заниматься", "другу", "вернулась", "пара", "никак", "девочки", "благодарю", "своем", "недавно", "приехал", "глаз", "могло", "становится", "пыталась", "является", "брось", "богу", "нашим", "помощи", "волосы", "невероятно", "одном", "ушел", "джейн", "тела", "недель", "собирается", "защитить", "всеми", "существует", "жив", "первая", "позвоню", "благодаря", "вперёд", "навсегда", "помните", "земле", "делу", "вполне", "пытается", "будущее", "семь", "своему", "ок", "идиот", "слава", "стоило", "удалось", "делаем", "команда", "главное", "огонь", "дэнни", "замуж", "начали", "мужчины", "силы", "семье", "шеф", "суд", "слышу", "тюрьме", "попробовать", "друзьями", "алекс", "вашем", "новая", "маленькая", "черта", "придет", "страшно", "услышать", "новые", "общем", "звонил", "купил", "понравится", "близко", "самой", "смысл", "хорошее", "любил", "сара", "единственная", "делали", "макс", "мэри", "жду", "получается", "хорошего", "эми", "дамы", "жену", "гарри", "неправильно", "стоять", "плевать", "ключ", "верить", "лично", "слышать", "взяли", "поздравляю", "пить", "заставить", "получили", "рот", "делала", "преступления", "двери", "землю", "разумеется", "очередь", "первой", "разговор", "видимо", "звонок", "джеймс", "менее", "нового", "получила", "хм", "подальше", "сможете", "похож", "состоянии", "необходимо", "адвокат", "касается", "секунд", "стоп", "дали", "оставаться", "сделает", "ходить", "помощью", "хватает", "изменить", "король", "народ", "новую", "девушку", "живет", "секс", "сделаешь", "думали", "нашем", "попасть", "каждого", "другую", "просил", "пошёл", "войны", "случайно", "игру", "мертв", "держись", "забыла", "цель", "минуты", "месье", "выше", "однако", "женщину", "раза", "мысли", "выход", "платье", "вовсе", "пришло", "женой", "ребёнка", "сожалею", "твоем", "осторожно", "смогла", "этими", "стану", "маме", "парней", "нравятся", "покое", "поехать", "садись", "миллионов", "отличный", "ребёнок", "дочери", "дороги", "ого", "ха", "нечто", "первое", "выяснить", "ник", "информацию", "офис", "записи", "лучшее", "течение", "вечеринку", "убью", "годы", "забыть", "правила", "сожалению", "слов", "джимми", "дни", "дала", "жизнью", "совет", "занят", "попробуй", "подруга", "расскажу", "целый", "красивая", "попросил", "вышел", "удар", "вещей", "адрес", "дэвид", "оставьте", "сержант", "увидишь", "виноват", "разница", "открыть", "написал", "ждет", "новое", "счастлив", "вау", "выбора", "продолжай", "задницу", "покажу", "единственное", "доверять", "встреча", "убивать", "концов", "обоих", "будьте", "останется", "тюрьму", "наверно", "ищу", "момента", "обед", "лица", "видео", "стойте", "взяла", "подождать", "считает", "вечно", "покажи", "бен", "книгу", "многое", "земли", "дел", "какую", "поскольку", "узнала", "сильнее", "жены", "встречу", "весьма", "блядь", "поняли", "родителей", "оу", "лейтенант", "глупо", "узнает", "думают", "сезон", "снаружи", "голова", "мамой", "заняться", "кино", "вечера", "свете", "выйдет", "восемь", "найдем", "помогу", "больницу", "больнице", "магазин", "тони", "заметил", "договорились", "слушать", "бизнес", "примерно", "уехать", "мамы", "позвонил", "выходит", "маму", "документы", "попал", "шаг", "отпусти", "смотрю", "здравствуй", "понравилось", "смогли", "правы", "большие", "рассказала", "идут", "готово", "плохой", "офицер", "узнали", "скажет", "сюрприз", "внимания", "вышло", "дорогу", "считаешь", "фотографии", "вода", "делом", "каком", "полный", "следующей", "доказать", "захочешь", "книги", "война", "планы", "мысль", "веришь", "видно", "скажем", "большинство", "ребят", "продолжать", "ранее", "жертвы", "ближе", "качестве", "двигаться", "написано", "чувствовать", "хорош", "любить", "величество", "головы", "дороге", "попросить", "времена", "подумай", "забавно", "главный", "внизу", "каждую", "остался", "вставай", "мнение", "твоему", "часы", "вряд", "постой", "сомневаюсь", "отдай", "вечеринка", "ошибка", "приехали", "бросил", "вернется", "профессор", "любят", "ключи", "подходит", "беги", "ничто", "поле", "вышла", "открой", "воду", "сексом", "музыка", "побери", "бабушка", "собираемся", "несмотря", "госпожа", "стране", "рэй", "отдать", "трубку", "сил", "кончено", "другая", "комната", "ричард", "сердца", "опасности", "сша", "закончить", "детьми", "врач", "живу", "имеете", "команды", "пожалуй", "роль", "порядок", "группа", "встретимся", "кольцо", "самые", "позвони", "всём", "вверх", "разговаривать", "джим", "закон", "мужчин", "шутишь", "играет", "хорошим", "новой", "начнем", "ухожу", "член", "такси", "серия", "днк", "получше", "убила", "настоящая", "молодой", "эмили", "показания", "одному", "шутка", "уходить", "снять", "недостаточно", "каких", "кейт", "одни", "разобраться", "язык", "едем", "директор", "сто", "энди", "учитывая", "спросил", "днем", "первого", "джей", "наверху", "говорим", "счастлива", "помог", "отцу", "приходится", "определенно", "сигнал", "закончится", "помогает", "группы", "моём", "едва", "легче", "ответить", "спустя", "принести", "секрет", "приказ", "де", "опасно", "позволю", "билли", "бросить", "телефону", "самых", "эдди", "получишь", "господь", "внутрь", "компания", "прекрасный", "томми", "такими", "пойдет", "женщиной", "работаешь", "большую", "волнует", "рук", "память", "старик", "избавиться", "квартиру", "закончили", "информация", "встречаться", "удовольствием", "спас", "мозг", "читать", "ким", "чертовски", "стол", "джонни", "ублюдок", "дон", "тысячи", "боб", "ложь", "ёто", "потеряла", "взглянуть", "писать", "мен", "увидела", "передать", "войти", "везде", "бобби", "кое", "солнце", "устал", "сделку", "настоящее", "потеряли", "мм", "класс", "смотрел", "держите", "закончил", "марк", "джерри", "потрясающе", "обещал", "убедиться", "скажете", "факт", "уничтожить", "страны", "учитель", "полно", "начинается", "бежать", "операции", "сукин", "ошибку", "украл", "данные", "двоих", "света", "запах", "придурок", "найди", "лучшая", "вернулись", "убирайся", "боишься", "окно", "убийстве", "ситуации", "костюм", "казалось", "доказательства", "обсудить", "жил", "принимать", "море", "оставила", "судя", "штука", "ситуация", "возможности", "следы", "генерал", "рождество", "платить", "пытались", "забрал", "эрик", "самым", "великолепно", "песню", "билл", "помогать", "новость", "силу", "жертва", "баксов", "другими", "обожаю", "достать", "вовремя", "появился", "кларк", "тише", "одежду", "приходит", "расследование", "зато", "девушкой", "яйца", "зависит", "принадлежит", "согласно", "предложить", "уровень", "любила", "вашему", "собака", "знак", "чисто", "срочно", "начало", "вне", "клуб", "искал", "собираетесь", "души", "расслабься", "супер", "ждал", "неправда", "доступ", "куча", "туалет", "знакомы", "офисе", "сука", "слегка", "ждут", "песня", "наверх", "небольшой", "анна", "красиво", "запись", "причины", "работала", "состояние", "белый", "зайти", "дважды", "думай", "центр", "дружище", "исправить", "джейк", "использовал", "идешь", "желание", "книга", "многих", "разные", "полковник", "оказался", "идеи", "добраться", "нос", "возьмите", "матерью", "суда", "каково", "сила", "уходите", "рука", "повсюду", "лучшие", "сделано", "взгляд", "наркотики", "бери", "судья", "чушь", "плохая", "система", "практически", "выходные", "лили", "суде", "еда", "док", "узнаю", "нож", "написать", "собиралась", "чай", "глазах", "остальное", "брак", "представляешь", "остальных", "мимо", "поеду", "потерять", "старые", "звук", "частью", "приехала", "даст", "спит", "пытаешься", "выглядеть", "беременна", "увижу", "спал", "вкус", "крис", "поезд", "пиво", "уехал", "устроить", "радио", "обе", "команду", "безумие", "решить", "солдат", "ме", "мальчика", "короля", "проще", "особо", "ребенком", "дедушка", "мертва", "церкви", "результаты", "имена", "беспокойся", "неприятности", "камеры", "отправить", "брайан", "здание", "шон", "возле", "защищать", "плохие", "работают", "называть", "третий", "способен", "удивительно", "смысла", "долг", "боли", "клэр", "первую", "стыдно", "случиться", "сестры", "называют", "райан", "счёт", "слушаю", "мартин", "возвращаться", "выбрал", "черту", "инспектор", "земля", "оказалось", "сходить", "головой", "плюс", "оружия", "музыку", "явно", "сказано", "назвал", "стрелять", "своём", "столь", "ушли", "последняя", "лицом", "решать", "остались", "заплатить", "разу", "жене", "даю", "центре", "началось", "президента", "сообщить", "кучу", "звали", "принял", "придёт", "рода", "справиться", "поцелуй", "сбежал", "еды", "встречались", "прошла", "команде", "оставлю", "ищем", "согласна", "останусь", "тест", "прошлое", "смотришь", "код", "двумя", "шучу", "человеку", "выбраться", "следовало", "продать", "которому", "звонила", "поставить", "клиент", "здоровье", "прочь", "приду", "держу", "поговорю", "похожа", "рассказывать", "играл", "стив", "заставил", "встретил", "самолет", "кости", "сбежать", "прекратить", "уйду", "принесу", "власти", "ушёл", "остается", "постели", "вернись", "впереди", "захочет", "реально", "двадцать", "квартире", "маленькой", "важное", "ешь", "бар", "жива", "дает", "завтрак", "любовью", "зря", "полицейский", "принес", "мария", "страшного", "устала", "прекратите", "убери", "нравишься", "заходи", "энни", "сработает", "старая", "скучаю", "заявление", "плохого", "поймать", "ответственность", "прощай", "девять", "осталась", "наедине", "выбрать", "обвинения", "ммм", "компанию", "поедем", "цветы", "имела", "ждёт", "камеру", "новых", "преступление", "трех", "кусок", "пропал", "посмотрю", "медленно", "душу", "получит", "рады", "значения", "забрали", "пойдешь", "сохранить", "привести", "видит", "информации", "войну", "письма", "бумаги", "холодно", "руками", "томас", "упал", "моими", "отношение", "карл", "ма", "операция", "судьба", "любимый", "задать", "папочка", "внезапно", "временем", "представляю", "церковь", "решения", "чувствовал", "чудесно", "специально", "маленькие", "дурак", "ад", "мальчики", "начинает", "компьютер", "станешь", "продолжайте", "роберт", "урок", "кровью", "глазами", "занимается", "линии", "люк", "брать", "давать", "вновь", "трое", "девушек", "чё", "услышал", "вызвать", "работали", "позвонила", "бороться", "остановись", "вариант", "послал", "назвать", "просила", "ход", "положение", "вернемся", "уходим", "уилл", "связано", "каждой", "звонит", "роман", "миру", "беспокоит", "кэтрин", "номера", "комнаты", "прекрасная", "победить", "правительство", "ищет", "систему", "попросила", "операцию", "ногу", "поступил", "прошлый", "живёт", "герой", "воздух", "живут", "читал", "адвоката", "поступить", "поможешь", "адам", "люси", "чудо", "разных", "школа", "курс", "отель", "задание", "приехать", "умру", "телефона", "считать", "ценю", "мечты", "родился", "работой", "вспомнить", "виде", "похожи", "слышите", "уходит", "понимает", "угу", "кровати", "умоляю", "срок", "действовать", "мужем", "извиниться", "пахнет", "дух", "лучших", "отдел", "будущем", "большим", "беспокоиться", "узнаем", "интервью", "скотт", "сыном", "предлагаю", "убит", "болит", "каждое", "встретились", "итоге", "мяч", "закрой", "умею", "справлюсь", "убедить", "остановиться", "возвращайся", "цели", "форме", "сидит", "королева", "дождь", "отдал", "бывший", "едет", "танцевать", "пива", "причин", "обязан", "проклятье", "колледж", "мозга", "оставайся", "системы", "карты", "просить", "садитесь", "хорошей", "душ", "смогут", "камень", "волнуйтесь", "страну", "звонить", "проводить", "ура", "мёртв", "смотрит", "детям", "мужчиной", "труп", "вино", "армии", "убивал", "вкусно", "заставляет", "любое", "которыми", "твоём", "малышка", "эбби", "правило", "кровать", "кабинет", "чарльз", "баре", "действия", "ситуацию", "убрать", "жениться", "ходил", "джона", "исчез", "келли", "погиб", "зрения", "счастье", "желаю", "давление", "душе", "взгляни", "основном", "прошел", "душа", "свадьбу", "тюрьмы", "отдохнуть", "фунтов", "встать", "произойдет", "дженни", "миллион", "святого", "глубоко", "сзади", "святой", "подобного", "предложил", "пит", "значение", "отеле", "позади", "идеально", "занимаюсь", "занимался", "нескольких", "подобное", "мозги", "несчастный", "рассказывал", "считаете", "выходи", "полной", "свадьбы", "мамочка", "страх", "появится", "банк", "носить", "отпечатки", "ничем", "чак", "возрасте", "горжусь", "выиграл", "принесла", "встрече", "нибудь", "приходить", "следить", "лео", "ног", "лекарство", "лучшим", "тип", "умирает", "признать", "воспоминания", "имеют", "защиты", "билет", "выпьем", "работаем", "купила", "выиграть", "трогай", "магазине", "красный", "петь", "название", "вытащить", "сестру", "отвечать", "отпустите", "кевин", "контролировать", "чёрта", "власть", "вторая", "волноваться", "бросила", "спрашиваю", "секса", "данный", "красивый", "джентльмены", "суть", "уши", "оставили", "начинаю", "сотни", "связаться", "окна", "доброй", "майор", "держаться", "цру", "штаны", "занята", "отвали", "цвет", "получу", "сидел", "случается", "хозяин", "учиться", "некоторых", "прошли", "погодите", "некоторое", "братом", "считают", "новым", "показалось", "целую", "поблагодарить", "количество", "лекарства", "сумасшедший", "расскажите", "ожидал", "элис", "умрет", "грейс", "слухи", "участок", "улицу", "классно", "животных", "изменилось", "странный", "передай", "ди", "надеялся", "собственной", "гости", "дэн", "контроль", "грудь", "братья", "миль", "улики", "огромное", "замок", "данных", "дому", "районе", "сядь", "наоборот", "богом", "элли", "создать", "закончилось", "отвечает", "побыть", "поесть", "умеешь", "лесу", "самому", "алан", "отправил", "деньгами", "принеси", "таблетки", "ресторан", "нашему", "поверьте", "включая", "живо", "мужчину", "придумал", "шериф", "хрена", "ханна", "собирались", "половину", "ён", "забыли", "сделайте", "удовольствие", "стараюсь", "проходит", "спала", "автобус", "настоящие", "узнаешь", "спроси", "лучшего", "придумать", "вечеринке", "пользу", "появилась", "списке", "лежит", "живой", "счастливы", "понимать", "плохое", "любого", "зубы", "кухне", "попытаться", "расскажешь", "буквально", "клиентов", "ван", "копы", "великий", "пяти", "прием", "скучно", "приходил", "песни", "девчонка", "рукой", "попала", "джош", "проект", "бой", "естественно", "стивен", "увидите", "процесс", "делайте", "вызов", "ниже", "рейчел", "перерыв", "дерьма", "принцесса", "само", "врн", "ненадолго", "радостью", "ответил", "убьет", "тед", "короче", "провел", "сесть", "вечеринки", "попробуем", "теб", "вернётся", "разберусь", "умный", "поймали", "ак", "кошмар", "днём", "дорога", "общего", "жертв", "ведет", "очки", "барри", "чикаго", "найдём", "игре", "официально", "попробую", "энн", "женат", "совпадение", "начальник", "убивает", "терпеть", "счастью", "гей", "множество", "убьют", "болезнь", "свидетель", "тему", "элизабет", "службы", "положи", "пригласить", "бояться", "точки", "голоса", "дин", "собрать", "памяти", "хороша", "думаем", "пригласил", "классе", "проверь", "парню", "убийцы", "вину", "харви", "больницы", "смертью", "всякий", "принц", "бойся", "надеяться", "поднять", "обнаружили", "перестать", "отойди", "покинуть", "чувствует", "нелегко", "ими", "оказаться", "жила", "избежать", "старший", "представляет", "столе", "ошибки", "половина", "смей", "заботиться", "лаборатории", "любим", "успокойтесь", "имеем", "последней", "вызывает", "важнее", "первые", "убийцу", "полегче", "женщине", "жили", "позволил", "груди", "праздник", "умеет", "присоединиться", "черный", "опыт", "бред", "болен", "су", "источник", "собираются", "любимая", "занимаешься", "картер", "эмма", "побольше", "закрыть", "ангел", "тренер", "откройте", "ветер", "остров", "первом", "семьей", "интересует", "беру", "уехала", "виновата", "кэти", "морган", "ищешь", "контракт", "получите", "телевизор", "любите", "попали", "местах", "ненавидит", "целью", "дольше", "полчаса", "согласны", "войне", "осторожнее", "замужем", "звонки", "причине", "папой", "пойдёт", "роли", "спишь", "управлять", "собаку", "бля", "представь", "глава", "постель", "правде", "шум", "придут", "ударил", "схожу", "провели", "начинать", "внимательно", "пятницу", "проходите", "кафе", "отказаться", "поговори", "предупредить", "свободу", "переживай", "начнём", "полная", "руке", "улицы", "виски", "странное", "фил", "артур", "карту", "знаком", "словами", "оказывается", "звоню", "уолтер", "энергии", "познакомились", "ларри", "бежим", "сквозь", "шлюха", "ордер", "капитана", "согласился", "мертвы", "класса", "написала", "париж", "страна", "умирать", "зад", "счета", "сильный", "ерунда", "дерево", "одолжение", "домом", "колени", "выжить", "ждала", "грузовик", "заплатил", "путешествие", "узнают", "чек", "билеты", "достал", "спину", "останешься", "надолго", "рак", "помощник", "парк", "стены", "сработало", "ощущение", "показал", "полу", "находиться", "девочек", "робин", "карен", "пёп", "любую", "зная", "сообщения", "именем", "квартира", "анализ", "другому", "совершил", "оливер", "лошадь", "ответы", "готовить", "субботу", "дышать", "зла", "мэгги", "выгляжу", "разрешение", "девчонки", "хрень", "секундочку", "перезвоню", "миллиона", "одиночку", "займусь", "увидит", "боится", "одновременно", "использовали", "спрашивал", "лиза", "врать", "отказался", "цвета", "жертву", "теми", "метров", "горло", "дворе", "пропала", "дитя", "пошло", "небольшая", "станции", "чувствовала", "бедный", "статус", "поведение", "начинай", "ванной", "кабинете", "немножко", "извинения", "здания", "удастся", "виделись", "пытаемся", "отпустить", "спросила", "выходить", "извиняюсь", "свадьба", "джесси", "марта", "проверю", "контролем", "отвезти", "доверяю", "найдешь", "сражаться", "звезда", "найдут", "заберу", "лагерь", "ходит", "посреди", "звони", "браво", "мишель", "скорость", "использует", "заслуживает", "заметила", "спиной", "прям", "возвращается", "положить", "воскресенье", "чертов", "мэтт", "ть", "камера", "впечатление", "оказалась", "корабля", "мясо", "обсуждать", "фильма", "разговаривал", "штата", "результат", "крайне", "держит", "доказательств", "вселенной", "признаться", "необходимости", "детали", "группу", "грустно", "штук", "ком", "эндрю", "меч", "убей", "занять", "одежда", "бомба", "чувствуете", "кейси", "поймал", "ящик", "работаете", "клубе", "тоби", "забудьте", "живых", "алиби", "пройдет", "проблему", "свободен", "подойди", "каждая", "детстве", "считал", "налево", "помни", "девушке", "напоминает", "дают", "увидели", "фильме", "постараюсь", "потребуется", "сестрой", "отношениях", "отношений", "доктором", "джин", "надежда", "приедет", "личное", "обычный", "изменился", "ужас", "салли", "мэр", "условия", "ай", "иисус", "научиться", "играю", "разрешения", "нашими", "связаны", "пациент", "обвинение", "жди", "старше", "начну", "старой", "пропустил", "палец", "позабочусь", "прошлого", "сумку", "боялся", "красивые", "простить", "найдите", "франции", "секреты", "верите", "америке", "ужасный", "драться", "создал", "гостей", "колледже", "нигде", "заметили", "молли", "позаботиться", "терять", "рисковать", "отдела", "след", "золото", "волос", "простой", "доктору", "отстой", "будущего", "ровно", "собрались", "совета", "штуку", "водой", "саймон", "спрашивать", "приняли", "пытаются", "воспользоваться", "требует", "марти", "живешь", "играешь", "клиента", "позвонили", "стоял", "отпуск", "аминь", "движение", "особенного", "каждом", "заняты", "наплевать", "мечта", "надеть", "зал", "арестовали", "виктор", "шансы", "минимум", "оружием", "неловко", "захотел", "джейсон", "начинаем", "понедельник", "сне", "вернешься", "риск", "сучка", "попытка", "скучать", "софи", "каждым", "огромный", "помогла", "второе", "встретила", "провела", "сомнения", "подумали", "скорей", "мастер", "пальцы", "небо", "открыл", "съесть", "сериале", "займет", "добиться", "сперва", "заходите", "ла", "послушать", "двигайся", "большого", "норме", "личность", "товарищ", "донна", "поставил", "приходи", "быстрей", "следующем", "заслужил", "мест", "лес", "горы", "собаки", "джереми", "гений", "занимались", "встречался", "джонс", "твоими", "проверил", "привело", "врача", "людях", "сверху", "опоздал", "мистером", "парке", "мо", "поиграть", "нил", "несомненно", "дашь", "вышли", "управление", "разум", "хороших", "прибыли", "плакать", "получает", "украсть", "стоят", "собрался", "лондон", "стене", "рш", "джейми", "заново", "напротив", "искали", "программу", "желания", "полное", "девочку", "болезни", "планете", "покончить", "близки", "рик", "взгляните", "охрана", "лице", "сделка", "армия", "выстрел", "ужасное", "крутой", "выйду", "круг", "поехал", "стену", "поделать", "счастливой", "хэнк", "росс", "вещах", "зале", "требуется", "нравилось", "зло", "украли", "верит", "отправиться", "наружу", "последнюю", "устройство", "лето", "уме", "хан", "поисках", "отчет", "встретить", "закончила", "отойдите", "хелен", "вскоре", "дочерью", "ответь", "враг", "ищут", "исследования", "оказались", "пола", "сцену", "умерли", "используют", "отдам", "наблюдать", "мсье", "закончим", "силой", "пытаясь", "подружка", "справишься", "ждали", "бесплатно", "поиски", "попрошу", "форму", "открывай", "живым", "неожиданно", "своя", "бывают", "появились", "мистеру", "собственный", "писал", "пожар", "обнаружил", "следов", "продал", "командир", "планеты", "представление", "говорится", "важный", "псих", "тим", "бо", "борту", "свидетелей", "полном", "выглядят", "уильям", "контакт", "ранен", "смотрели", "позвоните", "хрен", "снимать", "субтитры", "стэн", "ходят", "жарко", "цена", "терри", "хмм", "сети", "животное", "искала", "плачу", "постарайся", "бутылку", "пенни", "надоело", "объясню", "футбол", "похороны", "управления", "тупой", "агента", "приходят", "второго", "останься", "пальцев", "упала", "обмен", "миром", "продолжим", "безусловно", "торт", "уйди", "выхода", "блять", "поработать", "взрыв", "отвратительно", "волнуюсь", "клуба", "участие", "счастья", "получим", "квартиры", "папы", "красавица", "участвовать", "америки", "вырос", "недалеко", "добавить", "отправили", "дэниел", "тетя", "платят", "элисон", "пьян", "общаться", "сбежала", "кайл", "удобно", "коп", "дл", "лицу", "вспомнил", "рождества", "фу", "ходила", "принято", "наблюдения", "голоден", "подозреваемый", "джексон", "выбрала", "группе", "смотрела", "дождаться", "направо", "столом", "нога", "дорогуша", "сыну", "куплю", "просит", "каждому", "занятия", "выбирать", "папе", "нападение", "англии", "вернёмся", "произойти", "хранить", "чаще", "тратить", "возраста", "восторге", "обязаны", "некуда", "объясняет", "молоко", "служба", "корабле", "напал", "сыграть", "помогли", "степени", "лечение", "остаётся", "продолжить", "париже", "осторожен", "настоящим", "закона", "границы", "кэролайн", "радость", "беспокоюсь", "луис", "глупости", "превосходно", "заставила", "благодарен", "собак", "уберите", "хорошенько", "выбрали", "приняла", "входите", "последнего", "пойдемте", "преступник", "устраивает", "теле", "самую", "женаты", "пирог", "бросай", "карта", "постойте", "лорд", "джеки", "расстались", "носит", "плана", "верни", "сок", "установить", "пациентов", "родителями", "книге", "мари", "надежды", "модель", "общества", "следующее", "мусор", "сплю", "единственным", "эд", "доказательство", "беспокойтесь", "ходили", "держитесь", "уходишь", "нанял", "большее", "мак", "напали", "призрак", "связан", "свадьбе", "уверяю", "последним", "посмотрел", "далее", "цену", "заказ", "патрик", "маленькую", "играли", "определить", "повторяю", "продавать", "точка", "дружок", "процентов", "пишет", "джефф", "родителям", "оставайтесь", "газеты", "дар", "новостей", "приступ", "словам", "ворота", "штат", "здании", "число", "автомобиль", "ти", "сердцем", "принимаю", "секунды", "папу", "понравился", "разговаривали", "дыхание", "помнить", "замечательный", "возьмем", "пример", "пользоваться", "проверьте", "борт", "ужасная", "принёс", "роза", "смотрят", "идёшь", "оставим", "причиной", "штуки", "звонили", "сними", "настроение", "положении", "судить", "ею", "водитель", "собрание", "угол", "названием", "привел", "отстань", "предпочитаю", "странные", "подарки", "звезды", "концерт", "отвечай", "разговоры", "убирайтесь", "кан", "четверг", "камер", "защиту", "доставить", "задача", "шею", "прислал", "живы", "острове", "сумасшедшая", "фургон", "арестовать", "ложись", "солнца", "счастливого", "хорошую", "силах", "одиночестве", "контроля", "каков", "трёх", "нравлюсь", "шансов", "верну", "магазина", "увидеться", "поля", "маленьким", "пары", "сан", "лучшей", "живот", "туфли", "роуз", "образ", "вирус", "дьявол", "талант", "наказание", "владелец", "видим", "отличное", "пугает", "погибли", "даёт", "творится", "договор", "очереди", "безопасность", "сознание", "сошел", "самоубийство", "свободны", "увидим", "причину", "способности", "пытаться", "заплачу", "вины", "века", "миллионы", "кричать", "системе", "высочество", "президентом", "женился", "события", "доверие", "роджер", "зомби", "следовать", "обеда", "джесс", "сделаете", "относится", "ребёнком", "стиле", "виновен", "изо", "джулия", "скрывать", "фамилия", "прекрасна", "банка", "фотографию", "правил", "успел", "дверью", "пальто", "ответа", "эпизод", "тридцать", "выглядел", "делами", "защита", "сделают", "счастливым", "лестнице", "оставлять", "воде", "провожу", "повод", "спросите", "послать", "столик", "найдет", "полгода", "летом", "месяце", "вера", "началась", "ми", "ошибся", "хлеб", "пари", "чжин", "устроил", "шанса", "программа", "должность", "выглядите", "танец", "подняться", "завести", "духе", "пули", "расстроен", "ждем", "лондоне", "появляется", "приятного", "ел", "исключением", "расти", "пациента", "покупать", "глупая", "положил", "захотите", "дорого", "прокурор", "раны", "народа", "ребекка", "исчезла", "подумайте", "опасность", "почувствовал", "злишься", "нехорошо", "роде", "нуждается", "младший", "дадим", "сестре", "пропустить", "спрашиваешь", "стреляй", "событий", "редко", "базе", "свободе", "скорую", "пуля", "минуточку", "освободить", "приглашение", "слушаешь", "выйдешь", "кэрол", "точку", "журнал", "наркотиков", "вход", "теория", "глупый", "тома", "умираю", "стрелял", "навестить", "безопасно", "настоящего", "прибыл", "этаж", "уволили", "службу", "самолёт", "услугу", "определённо", "забуду", "молчать", "шутки", "подожду", "оливия", "проверим", "картину", "пей", "пост", "рой", "смех", "ногами", "поддерживать", "бить", "вел", "полицейские", "членов", "страха", "оскар", "покажите", "разрушить", "заметить", "лоис", "обещание", "поддержки", "начале", "следи", "разговора", "собственную", "странным", "кусочек", "одежды", "держал", "будучи", "позволит", "приготовить", "понравилась", "лгать", "обсудим", "суп", "обоим", "встречалась", "общество", "тысячу", "пойдёшь", "умрёт", "боялась", "маргарет", "принимает", "воздуха", "победа", "маленьких", "старого", "район", "подряд", "поедешь", "спрошу", "неа", "приём", "неделя", "снял", "успех", "возможное", "собственного", "личности", "находятся", "чья", "перестал", "дыши", "подойти", "годами", "целая", "территории", "уроки", "любили", "машин", "хватило", "сцене", "углу", "странная", "друзьям", "смит", "кармане", "сьюзан", "спасла", "смеяться", "эрика", "попробуйте", "милорд", "станут", "эйприл", "сценарий", "доволен", "фактически", "сути", "директора", "майка", "съел", "пулю", "газ", "маленького", "хо", "безумно", "слева", "деньгах", "надеялась", "принесли", "звать", "высоко", "сеть", "изменится", "эшли", "вторник", "вынужден", "едешь", "заднице", "ем", "тени", "задницы", "позволяет", "зак", "показывает", "поцеловать", "прошлым", "закончу", "точнее", "солдаты", "настоящей", "заработать", "береги", "расследования", "фред", "большего", "отличие", "веди", "действует", "замолчи", "речи", "играют", "возражаете", "этаже", "хватало", "фрэнки", "вреда", "делам", "средства", "представляете", "поспать", "зеркало", "тедди", "расстроена", "верил", "читала", "почувствовать", "свободы", "нравиться", "поверил", "толку", "бюро", "проснулся", "отеля", "фотография", "следующая", "образец", "правительства", "области", "последствия", "услышала", "меняет", "десяти", "бомбу", "позволите", "навредить", "поступила", "шевелись", "поближе", "долгое", "половиной", "правды", "пакет", "пойми", "движения", "переговоры", "программы", "подвале", "поступать", "офиса", "победил", "задница", "армию", "лиз", "грант", "умная", "небольшое", "урод", "захочу", "кэрри", "классный", "справедливо", "дне", "новом", "фильмы", "ибо", "стоишь", "щрн", "чжу", "передайте", "просили", "сильная", "поддержку", "проблемой", "концу", "протяжении", "больна", "джули", "подать", "слышно", "стиль", "обращаться", "согласилась", "следующие", "искусство", "аварии", "отличные", "копов", "счастливо", "отвезу", "карьеру", "дура", "се", "старых", "машиной", "пригласили", "остановите", "рассказывала", "занимаетесь", "юн", "улик", "интернете", "ужасные", "слушает", "вдвоем", "продолжает", "лжи", "живем", "правилам", "хуй", "больших", "признание", "делах", "маркус", "попрощаться", "отправился", "вызвал", "предстоит", "лесли", "обещала", "переехать", "звонков", "прекрасное", "остановились", "сделки", "опусти", "статью", "уровне", "полную", "забывай", "служить", "поблизости", "жертвой", "танцы", "университет", "заставили", "научился", "сошла", "скрыть", "приходите", "рай", "давал", "врачи", "угроза", "горе", "невеста", "лодку", "ээ", "заранее", "ум", "пью", "становятся", "белого", "учителя", "печально", "сенатор", "красавчик", "идею", "мадемуазель", "подтвердить", "скажут", "самим", "изменил", "прошёл", "видят", "яд", "отследить", "напарник", "детства", "пойму", "факты", "заканчивается", "начинают", "родилась", "выпил", "период", "ресторане", "купили", "ведешь", "уважения", "подарил", "левой", "проверили", "существо", "любопытно", "вашингтон", "почту", "любые", "чудовище", "непросто", "замечательная", "выпей", "помнит", "тайлер", "смотря", "построить", "пережить", "направлении", "ненавидишь", "меры", "вред", "тема", "зашел", "интерес", "красота", "справа", "кожа", "способны", "барни", "настроении", "назвали", "брюс", "убийств", "главным", "придешь", "начнется", "подписать", "приходилось", "майкла", "менеджер", "подруги", "елена", "лучшему", "сломал", "веду", "остановился", "жопу", "округе", "сознания", "ножом", "встречается", "главная", "товар", "уровня", "кожи", "приеду", "сегодняшнего", "пил", "выражение", "летать", "научил", "сижу", "рэйчел", "такова", "получать", "джека", "тошнит", "обсуждали", "фредди", "бывшая", "аэропорт", "позиции", "лорен", "повторять", "прочитать", "бонни", "проваливай", "найдете", "результате", "считается", "вправду", "станем", "белые", "прикрытием", "рыба", "форма", "записку", "поделиться", "сью", "ааа", "относительно", "остановитесь", "имели", "остальным", "расслабиться", "учился", "винить", "женщинами", "ведут", "соседи", "мешок", "засранец", "восстановить", "сеньор", "городу", "лабораторию", "сволочь", "спасли", "классная", "помогут", "лошади", "приму", "наркотиками", "охраны", "прокурора", "банке", "подойдет", "издеваешься", "выходите", "парнями", "останови", "пораньше", "помогал", "че", "фигня", "представьте", "умирают", "лу", "забрала", "убьёт", "америку", "гость", "монстр", "линда", "мин", "изменилась", "помешает", "сосед", "попытался", "острова", "громко", "сад", "правильный", "судьбу", "добры", "отомстить", "адвокатом", "народу", "менять", "занималась", "наиболее", "расскажет", "бум", "проснись", "нахуй", "счастливый", "вернутся", "интересное", "каждые", "стакан", "важная", "уйдет", "хлоя", "чёрный", "масло", "русские", "врагов", "коробку", "линию", "существуют", "взрыва", "министр", "обратиться", "отменить", "скорости", "сложнее", "жалко", "передо", "лукас", "нету", "миссия", "винсент", "шла", "спенсер", "аманда", "размер", "окажется", "падает", "джоуи", "сообщили", "шел", "ограбление", "лежать", "поймешь", "прелесть", "больной", "проиграл", "повторить", "изменения", "привезли", "личные", "поехала", "справимся", "испортил", "бет", "нечестно", "закончилась", "свидетеля", "санта", "вашими", "картины", "зол", "курить", "поездка", "хожу", "отсутствие", "доброго", "убивают", "спрашивает", "узнаете", "проверка", "боятся", "чан", "плане", "гордон", "бетти", "купер", "шести", "огня", "мотив", "поговорил", "занимаются", "полицейского", "назвала", "реки", "чжон", "брату", "сумму", "пишу", "мальчиков", "ставки", "материал", "лодке", "вали", "желает", "прочим", "перестаньте", "привела", "напомнить", "учить", "местечко", "застрял", "трогать", "рид", "луи", "бросили", "творишь", "север", "показаться", "заполучить", "вероятность", "рикки", "ведьма", "нэнси", "вор", "высокий", "ест", "метро", "героем", "передам", "братьев", "пацан", "встречаюсь", "открою", "взамен", "встречаемся", "кот", "лора", "последних", "способна", "члены", "угрозу", "совершить", "америка", "следующего", "рыбу", "джессика", "пешком", "известный", "службе", "мужу", "выжил", "ответила", "пригласила", "разок", "действий", "реальность", "чей", "вторую", "вес", "дорогие", "ошибаешься", "сиди", "камере", "разницы", "пляже", "послание", "хи", "казино", "езжай", "благодарения", "нравился", "джоан", "первых", "итан", "подобные", "мешать", "уезжаю", "дерек", "ночам", "мечтал", "мороженое", "туалете", "стою", "миллер", "побыстрее", "автор", "запомни", "рон", "нарушение", "свинья", "партнер", "хён", "встречал", "обязана", "разговариваю", "уехали", "происходило", "бедная", "тётя", "мальчиком", "базу", "добра", "отдала", "луна", "соглашение", "способом", "встал", "губы", "канал", "изменит", "шутите", "закрыто", "сдать", "огромная", "подними", "поможете", "ездить", "научить", "печенье", "колледжа", "брал", "саду", "гэри", "поддержать", "мнению", "джонсон", "тейлор", "заменить", "какова", "поспорить", "обычная", "входит", "сыр", "согласиться", "участке", "случая", "успеха", "взрослый", "бесполезно", "одри", "стреляли", "троих", "девочкой", "лидер", "гиббс", "осторожней", "угадай", "помогло", "сидишь", "бомбы", "забери", "беспокойство", "отряд", "ожидала", "умрешь", "ведёт", "получаю", "позволила", "скорой", "снег", "звонка", "снимай", "энергию", "времен", "животные", "ева", "рассказали", "отправила", "телом", "стоить", "развод", "предполагаю", "хороши", "чёрту", "лив", "арест", "искренне", "играем", "кристина", "вещами", "пусти", "использовала", "возвращайтесь", "организации", "крышу", "рубашку", "удержать", "конкретно", "аду", "километров", "залог", "бей", "обстоятельства", "являются", "брака", "выходных", "крошка", "врага", "воздухе", "показывают", "возвращаюсь", "поиск", "пытаетесь", "приближается", "ботинки", "полицейских", "шоссе", "похитили", "рассказывай", "искусства", "состоит", "выступление", "личный", "бизнеса", "спорить", "считаем", "джастин", "священник", "хвост", "деревне", "меняется", "украла", "ждешь", "снимки", "начинаешь", "признаю", "специальный", "берегу", "дадут", "присаживайтесь", "сиськи", "касл", "сообщил", "кит", "злой", "перейти", "визит", "победу", "привлечь", "натворил", "борьбе", "важна", "уважение", "судьбы", "задавать", "свобода", "болтать", "интернет", "микки", "нина", "одиноко", "музыки", "включить", "рейс", "осторожны", "сорок", "говард", "заднем", "попозже", "любая", "потратил", "комиссар", "джордан", "свободна", "местом", "арестованы", "спальне", "натали", "подери", "правой", "трус", "понимал", "шли", "дед", "убежище", "убежать", "чая", "браун", "какими", "радости", "позор", "вызову", "придти", "молодая", "характер", "продолжается", "лошадей", "температура", "кухню", "жестоко", "впечатляет", "агенты", "подругой", "зои", "попросили", "горит", "предположить", "тодд", "херня", "художник", "тревога", "старался", "номере", "стрит", "приходила", "нести", "плачет", "угадаю", "опасен", "ищете", "путем", "сторона", "ждите", "причинить", "проходи", "красивое", "стюарт", "приказы", "жутко", "мост", "плану", "уволить", "запрещено", "тост", "пэм", "неизвестно", "спине", "испугался", "рэнди", "идиоты", "подпись", "набор", "энтони", "удивлен", "штатов", "убийцей", "влюблен", "камни", "враги", "партии", "стола", "принесите", "обувь", "подходящее", "границу", "подумаю", "объект", "братан", "сэмми", "кенни", "правдой", "кровотечение", "берет", "разговаривает", "луиза", "порой", "неудобно", "понимают", "входи", "реакция", "самостоятельно", "чувств", "картина", "автобусе", "большей", "заказать", "сел", "приказал", "вопросом", "удача", "сэма", "влюбился", "ногах", "охрану", "поживаете", "беда", "поторопись", "отце", "притворяться", "возвращения", "тень", "советую", "недолго", "верится", "зашла", "попался", "слышит", "справится", "важные", "возвращением", "предложения", "планету", "серии", "николь", "выходной", "кресло", "поездки", "нормальный", "долю", "тина", "эдвард", "умнее", "магия", "двигатель", "звоните", "вечность", "привык", "невиновен", "рори", "кузен", "отношению", "начнут", "потише", "винс", "парочку", "останемся", "звуки", "мешает", "глупость", "собственность", "карлос", "таков", "потери", "понимаем", "лиам", "оборудование", "заказал", "маленькое", "книг", "гнев", "смеется", "помимо", "слушал", "поверишь", "парочка", "приведет", "бут", "главного", "желаете", "красивой", "платит", "офицера", "чаю", "белье", "сосредоточиться", "берегись", "пустой", "мудак", "кристин", "отделение", "университете", "милые", "вернул", "четверо", "тепло", "прямой", "глубже", "линдси", "эффект", "пульс", "трудом", "пускай", "пятьдесят", "ночной", "грубо", "опухоль", "четырех", "паркер", "выполнять", "проводит", "линия", "обид", "кончится", "оуэн", "берите", "кричит", "темноте", "устроим", "спасать", "майами", "пиццу", "беспокоить", "покой", "малыша", "сходи", "марко", "босса", "грей", "занимаемся", "солнышко", "леонард", "бегать", "дневник", "моменты", "испортить", "неприятно", "домик", "мэй", "стекло", "прими", "влюблена", "ян", "ужина", "объяснение", "эээ", "мю", "допустить", "крыше", "тхэ", "ожидать", "детектива", "провёл", "крик", "называли", "играла", "выразить", "успокоиться", "джорджа", "надежду", "всяких", "использую", "сильным", "градусов", "морской", "марш", "починить", "уилсон", "замке", "крепко", "послали", "заплатили", "спокойствие", "скучал", "согласились", "такому", "собственные", "событие", "дама", "используй", "дженна", "извиняться", "предал", "нанять", "соль", "сидела", "би", "теории", "стул", "месть", "ошибкой", "терпение", "целых", "вида", "обязанности", "поздравления", "выхожу", "днях", "сна", "выясним", "приятный", "медсестра", "капли", "здоров", "карла", "прекрасные", "отделе", "чёртов", "дочка", "небе", "шее", "диана", "исчезнуть", "барт", "райли", "остаток", "птица", "встань", "клетки", "чжун", "лиззи", "ставить", "программе", "новостях", "пропали", "разговаривала", "разговоров", "выиграли", "ноль", "плачь", "эмоции", "пространство", "увидят", "заодно", "возражаешь", "сменить", "выполнить", "используя", "считай", "ударить", "вывести", "пальцем", "хейли", "веру", "эх", "законы", "сомнений", "клиенты", "усилия", "посадить", "сотрудников", "позвать", "врачу", "ходишь", "трейси", "горячая", "природы", "эдриан", "утверждает", "почувствовала", "показывать", "английский", "исследование", "знай", "золотой", "костюме", "чо", "благодарна", "сойти", "тщательно", "просим", "идеальный", "полезно", "умно", "студии", "погода", "км", "поставь", "командой", "средств", "объяснять", "тв", "диване", "жених", "кнопку", "ванну", "председатель", "обстоятельствах", "пойдут", "следующим", "рим", "нетерпением", "телефоне", "изнутри", "воняет", "минутка", "позволишь", "юг", "страсть", "нью", "взрослые", "течении", "задумал", "настоящую", "моника", "трусы", "следил", "иск", "предыдущих", "опаздываю", "присядь", "джеймса", "передал", "покинул", "втором", "эфире", "разрешите", "питера", "наоми", "списка", "рассчитывать", "коем", "эксперт", "произойдёт", "дэйв", "личной", "центра", "ставлю", "прочитал", "рынок", "принца", "лагере", "вызвали", "позицию", "семьёй", "агентов", "реальности", "поворот", "отказалась", "дышит", "бегите", "личного", "расходы", "игрок", "лодка", "меган", "театр", "полон", "предупреждение", "бывшей", "опыта", "океан", "сердцу", "смириться", "знакомо", "судно", "блэр", "приговор", "уважаю", "секретарь", "единственной", "условиях", "языке", "робби", "открыто", "заставило", "молодых", "паспорт", "экзамен", "гордиться", "шампанское", "движется", "раскрыть", "фирмы", "ошибок", "используем", "возраст", "жен", "меню", "чести", "американцы", "пострадал", "несправедливо", "найдется", "белых", "грег", "южной", "болван", "лемон", "тишина", "филипп", "пределами", "надень", "заслуживаешь", "бедняжка", "напишу", "доверяешь", "тюрьма", "угрозы", "пробовал", "никки", "коул", "небеса", "справился", "даг", "трюк", "приносит", "войска", "страдать", "плохих", "поговорили", "вела", "вошел", "бабушки", "бассейн", "шарлотта", "конечном", "руль", "венди", "стефан", "проснулась", "всякие", "приготовила", "водить", "денни", "удивлена", "планета", "насилия", "бегом", "марка", "бросьте", "груз", "показали", "сняли", "записать", "смс", "эл", "диск", "местные", "помогаю", "силе", "прятаться", "сегодняшний", "глянь", "предлагаешь", "присутствие", "членом", "худшее", "грязные", "ын", "редактор", "советник", "полицией", "временно", "начнет", "салат", "ненавидеть", "называешь", "пойдёмте", "пропустила", "старую", "наполовину", "летит", "строить", "подробности", "кей", "ричи", "беде", "крики", "духа", "захотела", "миледи", "делается", "числа", "помешать", "переехал", "молчание", "длинный", "горячий", "закону", "феликс", "воли", "долгий", "ищите", "пушку", "сравнению", "рынке", "подозреваемого", "напугал", "чемодан", "американский", "нападения", "захватить", "спасение", "спрашивала", "жизней", "купи", "борьбы", "начиная", "пароль", "шкафу", "многим", "военные", "германии", "выросла", "судьи", "исчезли", "гас", "грех", "обычные", "выглядела", "уходят", "сны", "спятил", "арестован", "ухо", "блюдо", "симпатичный", "молока", "дьявола", "разберемся", "нахожу", "сдаться", "лори", "привели", "тяжелый", "грязи", "важен", "насилие", "повесить", "спасения", "университета", "обещали", "подобных", "граф", "поступок", "способность", "поднимайся", "молод", "чересчур", "потеря", "футов", "уезжать", "обеих", "сдал", "женщинам", "мяса", "боги", "хей", "смеешь", "удара", "процессе", "красная", "досье", "предупреждаю", "пройдёт", "велел", "сотрудничать", "достану", "моря", "ублюдки", "битва", "сигареты", "читаю", "нужды", "темно", "дрю", "переведено", "версия", "идемте", "объявление", "поймет", "кольца", "дворец", "преступников", "тайна", "стреляйте", "гомер", "джонатан", "поезда", "причинам", "поднимите", "тайны", "познакомился", "вытащил", "заставит", "прислали", "боя", "сердечный", "игр", "опоздала", "присяжных", "наделал", "северной", "нервы", "позволили", "поживаешь", "бывало", "файлы", "первыми", "слабость", "чудесный", "мировой", "возвращение", "поставили", "называет", "просьба", "собрал", "установили", "особенный", "подозреваемых", "хранилище", "формы", "преследовать", "средство", "синий", "полтора", "попытки", "старым", "спуститься", "мгновение", "джина", "выстрелил", "допрос", "примеру", "повторится", "телефоны", "японии", "голубой", "идей", "мальчишка", "всяком", "алкоголь", "удовольствия", "устроили", "наручники", "коннор", "подкрепление", "приз", "клаус", "рана", "убита", "признался", "уеду", "боитесь", "политика", "показала", "восхитительно", "числе", "технически", "уладить", "прогуляться", "бал", "джен", "получаешь", "йо", "вставать", "отправлю", "отдыха", "пункт", "выступать", "убраться", "дэвис", "брошу", "описать", "поможем", "холли", "третьего", "спали", "эйвери", "повидаться", "влияние", "доказывает", "победы", "мнения", "среду", "присесть", "прекрасной", "родной", "эли", "очков", "альбом", "белая", "парой", "случаях", "ка", "очередной", "приготовил", "обеспечить", "произошла", "ловушка", "написали", "третья", "корабли", "победитель", "мэра", "грязь", "грязный", "рабочий", "неприятностей", "лана", "александр", "принимал", "особенное", "поезде", "коллега", "здрасьте", "военный", "солгал", "слову", "варианты", "мэтью", "спрятать", "позвонит", "минута", "вмешиваться", "предложили", "агентом", "верят", "браке", "барбара", "символ", "забудем", "точности", "ада", "главной", "единого", "лечения", "намерен", "монро", "возвращаемся", "ненавидят", "уйдешь", "угрожал", "осмотреть", "признаков", "поужинать", "назови", "деревья", "создание", "правый", "отвести", "отныне", "середине", "возьмём", "блага", "королевы", "ответьте", "ронни", "чтож", "воле", "центов", "мести", "кира", "совести", "мередит", "пуаро", "сильные", "успеть", "носом", "разбил", "газете", "деревню", "дженнифер", "рики", "эллиот", "кампании", "лжец", "поженились", "приветствую", "деревни", "зайду", "си", "человеке", "трогайте", "врата", "сходим", "нервничаю", "объясни", "принимаешь", "идеей", "случаев", "спи", "встречаешься", "положите", "хорошем", "сексуально", "считала", "существа", "следующую", "называй", "жителей", "часами", "ответственности", "порно", "готовит", "кэт", "полночь", "служил", "дрянь", "выйдем", "двор", "указывает", "руби", "мобильный", "дадите", "красотка", "убираться", "цифры", "большом", "ношу", "разговариваешь", "безопасное", "привез", "вернёшься", "уважением", "отдайте", "документов", "ам", "выиграла", "застрелил", "старина", "сити", "размера", "собирать", "гм", "бросать", "галстук", "зашли", "сли", "компанией", "скорая", "кинг", "молчи", "жители", "решит", "коллеги", "едят", "одежде", "верь", "кладбище", "собственно", "целое", "аэропорту", "плавать", "действие", "дерева", "старика", "подходи", "калифорнии", "грехи", "услуги", "чемпион", "покажет", "иван", "улицах", "ошибаюсь", "вынести", "альберт", "допустим", "сторон", "добрые", "бывшего", "бизнесе", "переехала", "повреждения", "найдёшь", "незаконно", "тупая", "сидели", "виктория", "таки", "занятие", "глядя", "примет", "выглядело", "спок", "доступа", "бою", "расстоянии", "улица", "соврал", "держишь", "языком", "упоминал", "мертвых", "сид", "кошка", "майя", "создали", "организовать", "преимущество", "забирай", "россии", "гарольд", "губернатор", "добр", "лезь", "дерьмом", "держат", "снимок", "сцены", "режиссер", "образование", "просишь", "больница", "превратить", "писатель", "ели", "птицы", "чистый", "собралась", "дяди", "толпа", "сэндвич", "связался", "подписал", "награду", "необязательно", "перестала", "миссии", "открыта", "чрезвычайно", "склад", "грин", "прощайте", "читаешь", "ловушку", "скучала", "невесты", "спрятаться", "заклинание", "роз", "национальной", "сладкий", "дно", "оператор", "учил", "глупостей", "смена", "общий", "войдите", "живёшь", "рост", "идете", "льюис", "рецепт", "дилан", "остальными", "выключи", "нелепо", "погибла", "человечества", "бокал", "господина", "евро", "ребенку", "максимум", "спрашивай", "местный", "случалось", "катастрофа", "целом", "чистая", "кожу", "рози", "игрушки", "алисия", "ланч", "зуб", "элейн", "детях", "собственное", "неплохая", "клара", "банки", "измениться", "аллергия", "норман", "свидетели", "очнись", "двойной", "сообщу", "стар", "ездил", "поменять", "огромные", "путешествия", "шляпу", "поездку", "залезай", "плохим", "неудачник", "шоколад", "рут", "эрл", "джеффри", "тварь", "предатель", "наличными", "иисусе", "словом", "дю", "шампанского", "мер", "свидетелем", "сутки", "начался", "стояла", "старое", "сведения", "демон", "понадобятся", "пирс", "гулять", "отдых", "фантастика", "чон", "подарить", "услышали", "разделить", "пушки", "ехал", "группой", "причем", "заставляй", "мэтти", "поддержка", "бара", "леса", "союз", "надпись", "углом", "бумажник", "попало", "нравилась", "волосами", "веселье", "местных", "городской", "месту", "лечь", "донни", "страдания", "карьера", "настало", "поскорее", "коробке", "милой", "юмора", "кризис", "присяжные", "черная", "гордость", "повезет", "едой", "ручку", "проклятие", "проводил", "независимо", "позвал", "коктейль", "отчёт", "территорию", "похитил", "сигнала", "хер", "едут", "придумала", "шелдон", "представлял", "видеться", "энергия", "могилу", "особый", "непременно", "обучение", "наслаждайся", "технологии", "медведь", "пистолета", "тайне", "европе", "замешан", "сумка", "называю", "заботится", "обмануть", "дошло", "добрался", "облажался", "получают", "шерифа", "шуток", "рака", "чьи", "заболел", "уснуть", "предложила", "называл", "неплохой", "убиты", "пытайся", "злиться", "наука", "отношении", "военных", "тесты", "ожидания", "глубине", "начинайте", "коробки", "соседей", "благодарность", "передумал", "кругом", "заслужила", "достичь", "серьезные", "шоке", "оставляет", "иисуса", "мечтала", "пустая", "шейн", "убийством", "бил", "окончена", "справедливости", "присматривать", "предмет", "изменились", "злюсь", "повернись", "потрясающий", "самолете", "свидании", "основания", "банды", "влюбилась", "округа", "отставку", "электричество", "вызовите", "предотвратить", "ущерб", "джентльмен", "пожениться", "ошиблись", "остаюсь", "зоне", "расписание", "выпустить", "запад", "яйцо", "ин", "фиби", "отвечаю", "белом", "лекс", "русский", "реке", "связана", "пляж", "профессора", "отрицать", "считали", "ужином", "вдоль", "изменила", "сейф", "продюсер", "убежал", "здоровья", "обещай", "тайну", "дурака", "некоторым", "уважать", "двигайтесь", "оправдание", "фонд", "занятий", "обнаружила", "поймают", "закончился", "объясните", "напуган", "врачом", "ценой", "потеряю", "модели", "семи", "маршалл", "бабуля", "зови", "янг", "целиком", "угрозой", "кормить", "выборы", "ящике", "общее", "сайт", "соус", "опоздали", "плечо", "подругу", "перенести", "планировал", "ненавидел", "цветок", "моложе", "кара", "прожить", "травмы", "координаты", "окончательно", "вздыхает", "образцы", "входа", "благодарить", "свободно", "убийц", "договориться", "покажем", "фрэнка", "чувствах", "предоставить", "лучшем", "симптомы", "мужчине", "ходи", "подготовить", "открытие", "заснуть", "рассказ", "скорого", "писала", "уезжает", "оставишь", "близок", "копию", "вошла", "костюмы", "детский", "приведи", "арти", "выпивку", "магии", "дана", "попытаюсь", "пан", "станете", "волк", "снимите", "пойди", "интересный", "подход", "джулиан", "займёт", "остановит", "эллен", "познакомить", "матч", "труда", "интересах", "мэнни", "веры", "дэвида", "пишут", "коробка", "отпраздновать", "приготовлю", "приводит", "чжи", "травма", "великого", "чашку", "всякое", "борьба", "вслух", "молодые", "заглянуть", "впрочем", "предупреждал", "верните", "чист", "положено", "вспомнила", "зоны", "гостиной", "живете", "конкурс", "пак", "пенсию", "находимся", "продажи", "хотеть", "беспорядок", "шар", "помогают", "показаний", "обвинить", "вчерашнего", "ооо", "небольшую", "нейт", "отвечу", "акции", "чхве", "заключается", "гараже", "выяснили", "громче", "уйдем", "страдает", "цены", "диван", "ряд", "пропало", "вселенная", "сахара", "отличается", "важным", "многого", "привёл", "каковы", "захотелось", "капитаном", "гольф", "стресс", "выбросить", "владеет", "вариантов", "совесть", "неудивительно", "сообщите", "представления", "рабочих", "акт", "требую", "шин", "примите", "птиц", "проверила", "займемся", "молодцы", "банда", "протестую", "члена", "убедись", "базы", "описание", "эфир", "потрясающая", "тереза", "схватил", "макги", "оплатить", "хаос", "знания", "полицейским", "испытание", "лифт", "поймут", "открыли", "перчатки", "переживать", "прикрытие", "приходили", "должности", "лететь", "следит", "сошли", "переживаю", "честным", "интересы", "поискать", "направляется", "анализы", "решено", "создания", "понадобилось", "угрожает", "остаются", "зеленый", "зарплату", "думая", "родственники", "нора", "застрелили", "дебби", "мною", "одинаковые", "получал", "закрыты", "проникнуть", "лежал", "успешно", "мыслей", "захотят", "брук", "сбежали", "мужики", "трудности", "зверь", "спросили", "грани", "эксперимент", "осторожна", "называем", "ярости", "аварию", "органы", "выйди", "копа", "департамент", "альфа", "закончились", "обычное", "королем", "ходу", "подходите", "андре", "цветов", "фанат", "ела", "следуйте", "ждём", "преследует", "лучшую", "французский", "милость", "какому", "открывать", "наступит", "любимое", "костей", "лгал", "кретин", "вернули", "проходил", "фирма", "выслушать", "пиздец", "сцена", "скандал", "удалить", "быстрый", "вели", "долгая", "сжечь", "эмм", "легенда", "полным", "дик", "поболтать", "песен", "номером", "повтори", "понадобиться", "глория", "орудие", "займись", "удачу", "намерения", "хаус", "кармен", "озеро", "вошли", "увы", "телевизору", "копия", "семейный", "волю", "рыбы", "подвал", "улыбка", "красные", "круче", "скотти", "видом", "материалы", "выяснил", "хреново", "перекусить", "колин", "коммандер", "немало", "надеемся", "уезжаешь", "мотор", "тео", "придумали", "поговорите", "звездой", "спят", "одолжить", "спаси", "гектор", "репутацию", "бензин", "сериях", "братишка", "молодым", "звонят", "закрыли", "сильное", "представлять", "согласится", "напугана", "атаку", "городом", "информацией", "воля", "пятно", "статья", "долгу", "ники", "следите", "чертова", "илай", "поставлю", "аккуратно", "куски", "почте", "пас", "чертям", "раздражает", "рок", "голодна", "токио", "мелкий", "плачешь", "продолжаться", "честное", "выпускной", "гору", "строго", "пиджак", "обыск", "милым", "сидни", "идиотом", "сошёл", "пилот", "жалость", "харрис", "инструменты", "свежий", "скоростью", "врал", "записал", "съездить", "проходить", "ненависть", "домов", "напиток", "чертовы", "тремя", "снято", "пообещал", "посмотрела", "перевести", "свалить", "кеннеди", "смотрим", "протокол", "лондона", "сводит", "разумно", "собственных", "аарон", "восток", "холодильник", "рукам", "поверит", "приступим", "полдень", "рта", "уважении", "запомнить", "переспать", "пианино", "попроси", "врешь", "родила", "дата", "стена", "крыши", "крыса", "хватай", "начались", "массаж", "сумки", "слух", "ощущения", "долги", "вернитесь", "небес", "доверься", "рулем", "бессмысленно", "сентября", "давали", "даешь", "век", "нечем", "советы", "подвезти", "стэнли", "дыру", "фотографий", "послала", "напугать", "появилось", "закрыт", "преступника", "неба", "бывал", "империи", "пыль", "связать", "молиться", "зону", "испугалась", "защите", "карте", "врем", "сидите", "финн", "неподалеку", "заходил", "знакома", "предпочел", "христа", "очистить", "пропустили", "длинная", "сир", "преступлений", "извращенец", "добрались", "заключить", "закончишь", "вдвоём", "обществе", "достала", "двенадцать", "поцеловал", "одинок", "фрэнсис", "признаки", "валентина", "месяцы", "умрут", "антонио", "облегчение", "открывается", "йен", "средней", "важны", "газету", "фильмов", "положила", "волны", "годится", "покончено", "поверхности", "грязная", "собраться", "стерва", "ткани", "берут", "открыла", "носишь", "девчонку", "специалист", "секретов", "найдёт", "аж", "родом", "трагедия", "рене", "смешной", "десерт", "остановка", "меняются", "дафни", "изабель", "дозвониться", "версию", "авеню", "тысяча", "фишер", "статьи", "лед", "рассел", "забота", "застряла", "отказ", "пятнадцать", "учителем", "сильной", "заставлю", "задания", "синди", "лидия", "победили", "значок", "ремонт", "голода", "заходит", "единственные", "помогаешь", "бутылки", "напитки", "наслаждаться", "сексе", "устали", "спрятал", "метод", "гвен", "рождеством", "красоты", "бишоп", "поднял", "поедет", "козел", "мэдисон", "записей", "велосипед", "брэд", "ногой", "суждено", "задержать", "шпион", "постарайтесь", "гейл", "поверила", "смешного", "подумаешь", "одет", "наняли", "навыки", "пальца", "вёл", "звонишь", "лодки", "шок", "растет", "черные", "кэмерон", "объяснил", "повышение", "дейзи", "позаботься", "курт", "мужской", "рабочие", "ожидает", "выступить", "ферме", "рис", "продолжаем", "бена", "относиться", "собеседование", "виню", "флаг", "убьешь", "ступай", "змея", "паре", "охотник", "заработал", "управляет", "природа", "охранник", "ника", "аренду", "убейте", "стараться", "поступки", "оставалось", "возьмешь", "симпатичная", "поступили", "кость", "интересная", "читает", "политики", "довольны", "бесит", "выходил", "читали", "позову", "сядьте", "агентство", "попытается", "чужие", "мужчинами", "крыша", "берег", "золота", "стейси", "мардж", "доллар", "реку", "тара", "перезвони", "пишешь", "сообщений", "рту", "проекта", "курок", "рассказывает", "охота", "выпила", "взрослых", "похищение", "небольшие", "спорим", "появиться", "ра", "вампир", "вылезай", "позволяй", "ошиблась", "файл", "вилли", "серьезное", "догадаться", "преподобный", "тянет", "сумке", "мертвым", "живём", "академии", "напрасно", "худший", "милашка", "открыт", "побережье", "природе", "джи", "недоразумение", "сахар", "смены", "детективы", "тур", "изображение", "уничтожил", "бейли", "телефонный", "ошибаетесь", "синьор", "генерала", "платья", "сочувствую", "прочесть", "маску", "джулс", "направление", "успехи", "сидят", "обуви", "взялся", "инструкции", "человеческой", "светлость", "браслет", "сей", "портрет", "обман", "зашёл", "поражение", "составить", "китти", "еврей", "огромную", "училась", "ищи", "нормальной", "потратить", "выпью", "италии", "братец", "сотен", "перестали", "джейкоб", "пар", "авария", "духи", "логан", "станцию", "софия", "похоронах", "наблюдал", "проведу", "построил", "обращай", "спешить", "мебель", "новичок", "зона", "подходящий", "виноваты", "краю", "слезы", "логично", "саша", "эван", "приезжает", "кругу", "уволен", "уедем", "думайте", "флот", "музей", "ле", "космос", "отправились", "пригодится", "холодильнике", "честен", "привезти", "вопроса", "атаки", "беспокоится", "случайность", "режим", "газа", "митчелл", "плакала", "съела", "шутку", "красной", "красива", "многом", "защищает", "покоя", "лагеря", "хирург", "глупые", "церемонии", "база", "сериал", "тсс", "проверять", "габи", "королевой", "расстаться", "решает", "берешь", "газетах", "немцы", "пресса", "ударила", "кусочки", "простая", "оценки", "третьей", "впустую", "пропустите", "комплимент", "тон", "роберта", "заслуживаю", "брюки", "убедил", "необычно", "вспомни", "героя", "считая", "святая", "сценария", "закройте", "аппарат", "приведу", "лорел", "дуайт", "используешь", "аа", "соседка", "эль", "коридоре", "парне", "кен", "спрашивали", "играете", "вспоминать", "верный", "сойдет", "застряли", "каникулы", "слепой", "шёл", "возвращаются", "воспоминаний", "смену", "хозяйка", "череп", "себастьян", "носил", "кредит", "деда", "посидеть", "жалею", "небесах", "запрос", "пусто", "библиотеке", "красного", "правосудия", "скрывает", "пообедать", "страсти", "соня", "достали", "акцент", "возможностей", "уолт", "верила", "наблюдение", "комитет", "кухня", "верх", "познакомилась", "холмс", "охоту", "одинаково", "проходят", "кент", "сокровище", "обидеть", "действительности", "проводили", "совершила", "йюй", "большими", "взорвать", "свободное", "великой", "здравствует", "перевели", "леон", "доверяет", "стрелок", "чужой", "видение", "схватить", "студентов", "известен", "мелочь", "копии", "тупица", "привыкла", "останутся", "дружба", "душой", "молодого", "носят", "договаривались", "отметить", "клиентом", "захочется", "всерьез", "физически", "выключить", "льда", "сделаны", "отойти", "благослови", "упустил", "постепенно", "али", "приготовиться", "начнётся", "посол", "репутация", "ожерелье", "исчезнет", "вики", "девушками", "запустить", "проехали", "уверенность", "стук", "прячется", "роста", "подобно", "карьеры", "полотенце", "разрушил", "шрам", "ненависти", "заткнитесь", "заплатит", "крест", "идиотка", "старшей", "методы", "трата", "продукты", "печень", "исключительно", "рубашка", "божий", "произвести", "принесет", "крутая", "существование", "ветра", "чжэ", "вампиров", "виновным", "предупредил", "фон", "зацени", "посадили", "отдавать", "славы", "дым", "люка", "миллиардов", "проверку", "разрешил", "узнай", "королю", "пабло", "сделан", "хорошими", "заставлять", "откровенно", "мотоцикл", "устрою", "научилась", "доверия", "сладкая", "поет", "плоть", "уоррен", "умрем", "обещаешь", "завидую", "следят", "пьер", "сыграем", "путём", "актриса", "гадость", "кота", "джинни", "успели", "смеются", "полуночи", "становишься", "отдали", "учится", "уезжаем", "заинтересован", "носа", "подойдёт", "приют", "гараж", "простое", "плоти", "пошутил", "эмбер", "стихи", "надел", "линкольн", "славно", "чудеса", "держали", "прощу", "романтично", "поход", "чертову", "парням", "спрашиваете", "станция", "выходят", "присаживайся", "растут", "мужика", "поешь", "зарабатывать", "бардак", "пустыне", "закрыта", "кататься", "стен", "живее", "удачно", "пенис", "успокоить", "невинных", "участвовал", "режиссёр", "бак", "дату", "прямом", "основе", "третьем", "сезона", "июля", "цене", "забывать", "сложный", "уэйн", "позвонишь", "любимой", "играй", "годом", "теряем", "крылья", "помогала", "привыкнуть", "любимые", "нахожусь", "конфеты", "флота", "друге", "ближайшее", "вине", "правосудие", "бойтесь", "неправ", "напиши", "кайфом", "подозрения", "хлеба", "сказав", "перемены", "свечи", "подождем", "пила", "обороны", "сми", "куртку", "представитель", "умница", "принадлежат", "помещение", "устраивать", "нарушил", "предчувствие", "старалась", "красное", "горячо", "кролик", "сумма", "предположим", "шелби", "умеют", "готовлю", "руди", "матушка", "половины", "просят", "родственников", "продолжал", "закончена", "подготовиться", "бумага", "подойдите", "науки", "дэниэл", "производство", "обнаружить", "кокаин", "снов", "обманул", "напрямую", "пустите", "тайно", "оставляю", "среднего", "учеников", "курица", "получат", "уходил", "поступают", "отложить", "ошибался", "храм", "девчонок", "степень", "отпущу", "элен", "поженимся", "днями", "нахрен", "мерлин", "выслушай", "сигарету", "уйдёт", "поразительно", "отключить", "придумаем", "рита", "забавный", "шторм", "майки", "редакция", "водителя", "дороже", "щас", "внести", "проклят", "рэймонд", "график", "фрейзер", "испортила", "битвы", "документ", "прибыль", "землей", "поделаешь", "разговариваем", "переехали", "выпустите", "честный", "пицца", "найден", "игнорировать", "корова", "поймите", "одних", "избегать", "некогда", "школьный", "выборов", "сломать", "жалеть", "миранда", "глубокий", "богов", "побег", "писем", "юная", "заболела", "марго", "зависимости", "робот", "аппетита", "вашингтоне", "благодарности", "лме", "почитать", "оказать", "развода", "шевелитесь", "отвечаешь", "синдром", "поговорила", "хозяина", "текст", "отчаянно", "бумагу", "почерк", "шмидт", "учили", "поддерживаю", "резко", "проверял", "спорт", "начальника", "придёшь", "покончил", "джозеф", "идёмте", "совпадает", "дерьме", "сэнди", "веселиться", "ау", "держится", "стряслось", "джуди", "спальню", "джилл", "африке", "колесо", "прыгай", "терапии", "заметит", "справедливость", "бутылка", "увеличить", "останетесь", "отпечатков", "дракона", "значило", "симпсон", "ведёшь", "шкаф", "подошел", "сном", "пистолетом", "великим", "пациенты", "запомнил", "победит", "реджи", "фокус", "называете", "маленьком", "мартина", "ленни", "эрин", "страшный", "продали", "кристи", "крейн", "гора", "поколения", "пообещай", "адреса", "торопись", "мечтать", "огда", "присутствии", "великолепен", "путешествовать", "поставила", "уильямс", "вопросу", "проиграли", "луну", "состоится", "успела", "данном", "лжет", "планировали", "декстер", "вдох", "теряет", "проблемами", "китай", "лесбиянка", "розы", "алиса", "холодный", "несет", "открыты", "участка", "милях", "приятное", "шума", "давления", "сложная", "тяжелая", "длинные", "офицеры", "выбираться", "обычной", "соответствует", "мерзавец", "боссом", "предлагает", "выпустили", "спектакль", "одеяло", "остановил", "карьере", "совершили", "таблеток", "ловушке", "довольна", "богатый", "нарочно", "кэм", "великолепна", "сдаюсь", "отказываюсь", "кончилось", "села", "ричарда", "озера", "даниэль", "детки", "воображение", "заполнить", "нанести", "заместитель", "фамилию", "вру", "оставит", "солгала", "прояснить", "откажусь", "светит", "парковке", "горах", "качества", "опасный", "желудок", "племянник", "ноге", "великая", "состояния", "личная", "побежал", "ручки", "грозит", "мая", "выкинуть", "слышь", "рану", "лучшими", "проходили", "самих", "покончим", "усилий", "самолета", "выбирай", "остановится", "выяснилось", "сет", "личную", "индии", "ловить", "спеть", "проведем", "нуждаюсь", "ближайшие", "согласие", "правильное", "передачу", "всякой", "рюй", "забочусь", "вылечить", "любимых", "кирк", "лови", "пейдж", "выпуск", "алек", "услышит", "любому", "ракеты", "лекарств", "отправимся", "рекорд", "пожалеешь", "кончай", "чип", "давала", "ужинать", "секрете", "упомянул", "носу", "поверю", "тащи", "маршал", "мона", "диагноз", "наслаждайтесь", "ромео", "филип", "хобби", "шляпа", "хэй", "дождя", "приветик", "подстрелили", "позволим", "врачей", "копом", "казаться", "кристофер", "подставил", "стадии", "начни", "тупик", "ужасной", "разрыв", "себ", "главе", "превратился", "американцев", "человечество", "ребятки", "позаботится", "гони", "клетке", "вторжение", "отказывается", "приведите", "ствол", "опознать", "дем", "голосом", "иль", "слушание", "появятся", "обвинений", "соболезнования", "бежит", "напасть", "пес", "ванесса", "бекки", "парка", "свитер", "встаньте", "передачи", "пёс", "шутить", "включи", "умрёшь", "прыгать", "носки", "крысы", "слушаюсь", "занимает", "ванную", "купим", "сексуальный", "кэсси", "милое", "крепче", "бежал", "учились", "лемъ", "вирджиния", "плакал", "забирать", "эстер", "вызвала", "зовите", "заключение", "продажу", "партия", "третье", "молода", "данным", "медовый", "проводим", "чувствуют", "император", "поведения", "площади", "беспокоишься", "зубов", "глазам", "минди", "взломать", "позднее", "блейк", "создавать", "прогресс", "лестницы", "отказались", "основной", "лев", "упустили", "луны", "оценить", "рисовать", "персонал", "торопиться", "огромной", "короткий", "дорог", "гляди", "печать", "ставит", "кандидат", "редактируется", "ждёшь", "ресторана", "трупы", "дыра", "клинику", "фр", "минус", "обожает", "опустите", "спор", "папаша", "клетку", "беременности", "лаборатория", "трубы", "присутствовать", "объявить", "окончания", "читай", "шикарно", "остатки", "буквы", "сведению", "разума", "выгнали", "детской", "отправь", "устроила", "компьютера", "вторым", "сексуальная", "ллойд", "зубами", "кроули", "сяду", "реклама", "сделана", "масла", "свободный", "ручка", "сомневаться", "взаимно", "отпустили", "управляющий", "находился", "нормальным", "спорю", "парижа", "выросли", "подходят", "становиться", "резюме", "смеешься", "словах", "присмотреть", "бенни", "смелости", "съешь", "бок", "влияет", "милли", "пойдете", "гриффин", "допоздна", "штате", "подружки", "звезд", "медицинской", "напряжение", "бросает", "пасибо", "офицеров", "св", "отпечаток", "герр", "частный", "пи", "кресле", "род", "повеселиться", "спина", "семей", "появляются", "давить", "богат", "увидев", "ноа", "зовет", "коме", "счастливая", "говнюк", "куинн", "прихожу", "юрист", "нисколько", "уилла", "окончен", "приказу", "соглашусь", "лин", "шестой", "арчи", "заявил", "награда", "любезно", "представляла", "переодеться", "адвокаты", "найдёте", "рекламу", "клинике", "дурацкий", "коленях", "работник", "разошлись", "пожить", "версии", "вынуждены", "скучаешь", "обойти", "компьютере", "рассмотреть", "миссию", "партию", "последнем", "багаж", "терпится", "делиться", "пьяный", "теряю", "забираю", "потеряешь", "работников", "риз", "кричал", "мышь", "сказки", "убежала", "находишь", "полна", "синьора", "пятый", "старших", "заявления", "уэйд", "прикрыть", "идеальное", "журналист", "результатов", "силами", "справилась", "подал", "семейные", "расследовании", "необычное", "размером", "живи", "признаюсь", "отчасти", "мили", "проклятый", "женится", "сумасшедшие", "выбросил", "случаи", "отвлечь", "спасите", "установил", "показатели", "мелочи", "распоряжении", "пережил", "случился", "детство", "снимаю", "преступники", "суду", "жар", "американских", "добрым", "джой", "знакомый", "задуматься", "сотню", "разбираться", "испытания", "ставку", "отведу", "товарищи", "заложников", "забывайте", "песок", "боба", "вик", "традиция", "вершине", "идеальная", "заплатишь", "заботился", "работай", "выпивка", "высокая", "догадался", "шерлок", "уговорить", "трогал", "пользы", "прямиком", "алкоголя", "сработать", "приезжай", "сохранять", "видения", "понравиться", "заходить", "значить", "одержим", "стояли", "белой", "восьми", "военной", "поедим", "насрать", "находит", "казни", "герои", "найдено", "наказания", "темы", "отдыхать", "сеньора", "разбираюсь", "притормози", "шелли", "приготовьтесь", "подозреваю", "обойтись", "океана", "тренировки", "правильным", "негодяй", "фиона", "мелани", "королеву", "попытку", "выбери", "сотовый", "собственном", "взрослая", "нормальные", "дойл", "платил", "бойд", "наказать", "площадке", "труднее", "сбил", "домашний", "госпиталь", "чистой", "получаем", "мерфи", "департамента", "просите", "еле", "якобы", "назовите", "холл", "гостинице", "рисунок", "страховка", "расскажете", "сотрудник", "решим", "деб", "край", "приходишь", "духом", "хранит", "преданность", "спрашивают", "закрыл", "животе", "заседание", "проход", "наличные", "злится", "комитета", "шлем", "отпустил", "продвигается", "славу", "изменили", "ухода", "сопротивление", "мечту", "ублюдка", "обязанность", "американец", "организация", "инструмент", "родная", "приблизительно", "защищал", "местам", "мусора", "признателен", "почта", "охотиться", "магию", "просыпайся", "пищу", "перестанешь", "надежде", "чепуха", "гениально", "принимают", "дональд", "бабушкой", "собакой", "устройства", "отказать", "десятки", "запасной", "настоящих", "стефани", "обедать", "поезжай", "ожидали", "стоун", "означать", "благо", "вызывают", "приглашения", "слуга", "поддерживает", "новенький", "ученик", "добился", "большинства", "достань", "ферму", "президенту", "налоги", "ворот", "томаса", "реальный", "калеб", "изучить", "выстрелы", "покер", "адвокату", "держала", "отчаянии", "белое", "автомобиля", "невесту", "важного", "лайла", "белым", "везет", "майлз", "несчастью", "жалкий", "счастливчик", "воу", "прислала", "голосов", "выдать", "встретился", "судебный", "обедом", "финч", "проверки", "подойду", "сары", "найдётся", "позови", "придурки", "требуют", "находитесь", "врет", "бабушке", "подарила", "поздороваться", "новому", "выступления", "великолепный", "помолчи", "адама", "сиденье", "харпер", "джанет", "исключение", "лезть", "прессе", "маршрут", "посетителей", "нельсон", "комиссии", "молитвы", "близких", "счету", "слежу", "экран", "встречала", "дверей", "волновался", "ритм", "сделало", "воспользовался", "девочке", "кэлли", "пришлю", "мн", "ангела", "пассажиров", "депрессии", "волнуешься", "ответов", "четко", "магазинам", "наряд", "воздухом", "поймаем", "непонятно", "подтверждение", "клёво", "славный", "бедняга", "жениха", "важных", "любитель", "складе", "шагом", "руководство", "полезен", "карман", "франков", "улыбаться", "простит", "продолжают", "яблоко", "романа", "выбираю", "прочитала", "нашло", "построили", "вайолет", "сексуальные", "поймёшь", "умеете", "способы", "положу", "чудесная", "схватили", "фирме", "праздновать", "явился", "рассказываешь", "соединенных", "персонаж", "изучать", "всякого", "американской", "сыром", "вертолет", "броуди", "сайте", "процедура", "гроб", "чистого", "положиться", "андреа", "сексуальной", "ноутбук", "пьет", "дождусь", "открытым", "убило", "уроков", "аэропорта", "хью", "кэл", "йоу", "языка", "передумала", "бегу", "дамочка", "потеряем", "проявить", "легкие", "тардис", "добровольно", "возьмет", "сниму", "драку", "форд", "черного", "глазом", "кошки", "поколение", "понимала", "делая", "собственная", "крутые", "готовиться", "пили", "сопротивляться", "констебль", "вивиан", "штаты", "продолжаешь", "отдохни", "фантазии", "микрофон", "иной", "клэй", "прекрасную", "настал", "конни", "теряешь", "жаловаться", "боевой", "дядю", "голосовать", "противостоять", "планирует", "уведите", "заслужили", "незачем", "прощаю", "го", "моста", "значительно", "назначил", "бш", "добрая", "историей", "личных", "волновалась", "драка", "пальцами", "предпочла", "бегах", "блондинка", "поверили", "мэдди", "кай", "отведи", "разбить", "произнести", "свести", "проверяю", "историй", "порядка", "начнешь", "гари", "олли", "оставался", "прекрасным", "печени", "библии", "трэвис", "поищу", "субтитров", "оо", "яиц", "злая", "толстый", "легких", "мертвый", "безопаснее", "орошо", "бри", "энджи", "следили", "исследований", "птичка", "работ", "пропуск", "отнести", "справляешься", "вступить", "миг", "двум", "нормальная", "разочарован", "продолжаю", "свидетельство", "цепи", "серийный", "замка", "трахнуть", "ёй", "съем", "выходим", "нм", "заставляют", "заехать", "противном", "приедешь", "настаиваю", "простого", "падения", "ребятами", "маленькими", "имея", "лифте", "адвокатов", "лечить", "следуй", "выиграю", "выживет", "дополнительные", "постараться", "преодолеть", "свиньи", "страницы", "хилл", "велик", "река", "традиции", "расстояние", "джоном", "рискнуть", "предположение", "журнала", "поиска", "царь", "уайт", "грэм", "охотится", "разрешить", "лист", "утрам", "случаем", "совещание", "услугам", "поправится", "вытащи", "дракон", "возражаю", "битве", "колено", "удостоверение", "гитлер", "композитор", "крепкий", "атака", "шона", "открытия", "старом", "вспоминаю", "разберёмся", "расслабьтесь", "попытайся", "мик", "попадает", "впрямь", "испании", "изначально", "освобождения", "посетить", "обвинять", "происходят", "палмер", "жюри", "зайди", "причинил", "взгляда", "ку", "прикольно", "рей", "величества", "девочками", "бинго", "марии", "пределы", "подонок", "высокие", "висит", "чокнутый", "устроит", "ушло", "убивала", "переспал", "спускайся", "решением", "копать", "учительница", "близнецы", "прах", "зрелище", "рекламы", "министерство", "обморок", "органов", "трудный", "требования", "доусон", "четверть", "помощника", "ареста", "завтрашнего", "половине", "конверт", "времён", "полли", "соответствии", "соревнование", "усердно", "четвертый", "нервничать", "ри", "похуже", "продают", "ремень", "курсы", "местонахождение", "открывает", "говно", "трой", "плечи", "флоррик", "оставляй", "ответили", "достанется", "чьей", "долгие", "кораблей", "насквозь", "обратном", "исполнилось", "выстрела", "использование", "приедут", "условии", "шеи", "убивали", "кошмары", "состав", "дядей", "теста", "соберись", "странного", "достиг", "священника", "останки", "штатах", "макса", "покупает", "ударили", "июня", "лука", "признай", "теорию", "собственными", "цирк", "обнять", "велосипеде", "высоте", "мэнди", "поют", "вскрытие", "дозу", "собрали", "отличным", "музыке", "игроков", "любовник", "хуя", "ехали", "соседству", "пламя", "доллара", "пожертвовать", "повидать", "покупки", "необходимое", "проблемах", "уважаемый", "берёт", "черных", "подумают", "основании", "собственности", "домашнее", "операционной", "стиви", "поссорились", "фирму", "следа", "погнали", "интересуют", "знакомству", "кейн", "мелкие", "передача", "благодарим", "гонки", "тэд", "клер", "услышишь", "противника", "кэри", "директором", "верим", "кучка", "николас", "проводишь", "ограбления", "врагом", "багажнике", "фостер", "шефа", "взгляды", "малый", "забавная", "исчезает", "развития", "няня", "клево", "серьезный", "уход", "обидно", "область", "пожелаешь", "пушка", "лежат", "пространства", "хон", "кабинета", "кону", "диего", "отто", "марио", "сломался", "охранять", "профессионал", "округ", "назначена", "чувствовали", "гарантирую", "вдвое", "целыми", "вытащу", "обещания", "заговор", "выходишь", "аллен", "покажется", "задержали", "монстра", "уволил", "учусь", "поторопиться", "обдумать", "замену", "смирно", "дружбу", "вуди", "грейсон", "снизу", "строя", "остановимся", "духов", "заявить", "руководитель", "клятву", "пофиг", "началом", "ввести", "альфред", "несешь", "давненько", "проследить", "ви", "довериться", "познакомься", "завод", "евреев", "стереть", "скотина", "властью", "особое", "поцеловала", "кристиан", "билла", "цел", "напоминать", "желаешь", "доставили", "поверите", "срочное", "отпуске", "позовите", "великие", "любимого", "провал", "маслом", "абсолютный", "автоматическая", "автоматически", "автопуша", "авторизации", "авторизовал", "авторизуется", "авторству", "автору", "агентам", "агенту", "адаптер", "адаптере", "адресуется", "аккаунтом", "активации", "активен", "активна", "активного", "актуальное", "актуальные", "архив", "архива", "архиве", "аудит", "базовый", "байт", "бандл", "бандла", "бандлы", "батарея", "безопасных", "библиотеки", "битая", "блок", "боковая", "бота", "браузер", "браузера", "браузере", "браузерное", "будущие", "будущим", "будят", "буфер", "быстрая", "бэклог", "бюджет", "бюджета", "введите", "введён", "ввод", "вводится", "вводить", "вводу", "веб", "вебе", "вебхуков", "версией", "версий", "версиях", "весят", "ветка", "ветке", "ветку", "вкл", "вкладка", "вкладке", "вкладки", "вкладку", "вкладок", "вкладываются", "включает", "включайте", "включать", "включена", "включено", "включён", "включённых", "влево", "вложения", "вложениями", "внесены", "внешней", "внешние", "внутренние", "возврата", "возрастанию", "возьмётся", "воркфлоу", "восстановление", "впишите", "вправо", "временный", "вручную", "вставить", "вставьте", "встраивание", "встроенную", "встроенные", "встроенный", "вступило", "входы", "выберите", "выборе", "выбран", "выбранные", "выведены", "вывод", "вывода", "выводит", "выгружается", "выгружайте", "выгружать", "выгружен", "выгружено", "выгрузите", "выгрузить", "выгрузка", "выгрузке", "выгрузки", "выгрузятся", "выдачи", "выделил", "выделите", "вызова", "вызовов", "вызовом", "вызовы", "вызывать", "выкл", "выключатель", "выключать", "выключен", "выключена", "выключение", "выключения", "выключенной", "выключенные", "выключенными", "выключенных", "выключено", "выключил", "выключите", "выполнен", "выполнена", "выполнение", "выполнению", "выполнения", "выполнено", "выполните", "выполняется", "выполняться", "выпуска", "выпущен", "вырезает", "высота", "выставляется", "галочку", "гарантию", "гарнитура", "гаснуть", "генерацию", "генерация", "гибернация", "готовая", "готовится", "готовые", "готовый", "групп", "группировать", "датчики", "двоичный", "действуй", "дереве", "деревом", "держатся", "дефисы", "диагностика", "диагностику", "диалог", "диалога", "диалогах", "диалоге", "диалоги", "диалогов", "диапазон", "диапазоны", "длина", "длительной", "длительности", "длительность", "добавлено", "добавляет", "добавляется", "добавьте", "доверенных", "доверяете", "догрузить", "дождались", "дождитесь", "домашняя", "допилите", "дописала", "дополнительный", "дорогими", "доска", "доске", "доски", "доску", "достигнут", "доступен", "доступна", "доступно", "доступны", "доступные", "доступных", "дублей", "дубли", "дубль", "журналы", "заблокирована", "заблокировано", "заблокированы", "завершена", "завершения", "завершено", "завершился", "завершить", "завершён", "завершённого", "зависимостей", "зависимость", "зависимостям", "зависимостями", "зависимостях", "загляните", "заголовка", "заголовком", "заголовок", "загружает", "загружаются", "загружен", "загружена", "загруженное", "загруженном", "загружено", "загрузилось", "загрузился", "загрузите", "загрузить", "загрузка", "загрузки", "загрузчика", "задайте", "задан", "задано", "задач", "задачам", "задаче", "задачи", "задачу", "задаёт", "задаётся", "задержка", "закоммитить", "закрепить", "закрывает", "закрытие", "залогинен", "залогиненный", "заменит", "заменяет", "заменён", "занимают", "заняло", "занято", "занятости", "записан", "заполните", "запрашивайте", "запрещает", "запрещают", "запроса", "запросах", "запросить", "запросов", "запуск", "запуска", "запускает", "запускайте", "запускалась", "запуске", "запуски", "запусков", "запуском", "запустите", "запущен", "запущенные", "запятую", "заработает", "заработают", "зарегистрировать", "заряде", "засыпания", "засыпать", "зафиксирован", "звёзд", "звёзды", "идентификатор", "идентификатора", "идентификатором", "идентификаторы", "иерархия", "известные", "изложи", "изменена", "изменение", "изменений", "изменению", "изменены", "изменён", "изображений", "изображения", "именами", "импортировать", "индекс", "индекса", "индексе", "инспекция", "инструкций", "инструкция", "инструмента", "инструментов", "интерфейс", "интерфейса", "интерфейсе", "инъекция", "используется", "истекает", "источнику", "истёк", "исходник", "исходящем", "итог", "картинки", "карточка", "карточку", "каталог", "каталога", "каталоге", "категории", "категория", "качество", "клик", "кнопка", "кнопки", "кода", "кодинг", "колонке", "команд", "командной", "комментарий", "коммит", "коммита", "коммитами", "композиции", "композицию", "композиция", "компонент", "консоли", "консоль", "конструктор", "контекст", "контекста", "конфиг", "конфига", "конфигурации", "конфликт", "конфликтов", "конфликтует", "конфликтующие", "конфликты", "копировать", "копирует", "копируется", "корзины", "корпоративные", "корректное", "критерии", "крупные", "крышки", "куки", "кэш", "кэша", "лету", "лимит", "лишних", "локальная", "локально", "локальное", "локальной", "локальные", "локальный", "манифест", "маркет", "маркета", "машинами", "международный", "мес", "минимальный", "многошаговые", "моделей", "моделью", "моделями", "моноширинный", "наблюдений", "набросать", "навстречу", "нажатием", "нажмите", "названию", "назначение", "назначить", "найдена", "найдены", "наличие", "написан", "написанное", "напишите", "напоминание", "направит", "направить", "направлять", "наследовать", "настроек", "настроить", "настройка", "настройками", "настройках", "настройки", "настройку", "настройте", "находок", "начат", "начните", "небезопасно", "неверная", "неверное", "неверные", "неверный", "неверных", "недопустимом", "недоступен", "недоступна", "недоступно", "недоступны", "незавершённая", "неизвестен", "неизвестное", "неизвестному", "неизвестный", "необязательным", "непересекающиеся", "неподдерживаемая", "неподтверждённые", "несовпадения", "несохранённые", "неуказанные", "нижней", "нижнем", "нижнюю", "низком", "обзор", "обмена", "обновился", "обновите", "обновить", "обновлена", "обновление", "обновлений", "обновления", "обновлениями", "обновлено", "обновляется", "обновлён", "обновлённые", "обработано", "обратного", "обратным", "обращении", "обращению", "обрезан", "обрезано", "обход", "общей", "общие", "объявленный", "объявленными", "объявлены", "объясняй", "обычного", "обычном", "ограничение", "ограничения", "одинаковыми", "ожидание", "окне", "окном", "окну", "окружения", "опережение", "описанию", "описания", "опишите", "оплаченный", "опознания", "определение", "определяет", "определён", "опросом", "опубликуйте", "опускаются", "опыты", "оригинал", "оригинала", "основного", "основным", "оставлено", "оставлены", "оставшиеся", "останавливается", "остановлена", "остановлено", "отброшены", "ответвить", "отвечено", "отдаются", "отдельная", "отдельно", "отдельному", "отдельный", "отдельными", "отзыв", "откат", "откатить", "отклонить", "отклонён", "отключился", "открепить", "откроется", "открываются", "открытии", "открытый", "отмена", "отменена", "отменено", "отменяющий", "отменён", "отметьте", "отмечено", "относительный", "отображаемое", "отображения", "отправка", "отправке", "отправлено", "отправляется", "отправлять", "отправьте", "отрисовка", "отсортирован", "отсортировать", "отставание", "офисных", "официального", "официальные", "официальный", "офлайн", "оформление", "охват", "оценка", "оценке", "оценку", "очерёдность", "пакета", "пакетов", "пакеты", "панели", "панель", "панелью", "папка", "папкам", "папке", "папки", "папкой", "папку", "папок", "параллели", "параллельных", "параметров", "параметры", "паролей", "патч", "патча", "патчем", "пауза", "паузе", "переданы", "переедут", "перезапишет", "перезапуск", "перезапуска", "перезапустите", "перезапустить", "переименовано", "переименовать", "переключателями", "переключитесь", "переключить", "перекрытие", "перекрыть", "переменная", "переменной", "перемотка", "перенос", "переноса", "переопределений", "переопределения", "переопределено", "переопределить", "переопределяет", "переписке", "переписку", "переподключаемся", "переподключиться", "пересмотреть", "переставить", "переставлять", "перестановок", "перетащите", "переустановит", "переустановите", "перечисляет", "песочница", "песочнице", "песочницей", "песочницу", "песочницы", "пикселей", "пикселях", "пишется", "плагин", "плагина", "плагинами", "плагинов", "плагином", "плагину", "плагины", "планирование", "платформа", "платформы", "поведением", "повреждена", "повреждено", "повреждён", "повтор", "повтора", "повторите", "повторная", "повторов", "повтором", "повторяющиеся", "повторён", "повышенных", "подборки", "поддерживается", "поддерживают", "поддерживаются", "поддержкой", "подключает", "подключить", "подключиться", "подключён", "поднят", "подписке", "подписки", "подписок", "подсессиями", "подсказки", "подставляет", "подтверждает", "подтверждаете", "подтверждений", "подтверждения", "подтверждено", "подтверждённые", "подходящих", "подходящую", "поздний", "поисков", "поисковый", "показана", "показано", "показаны", "показывается", "полноценный", "полными", "положительное", "полосы", "пользовался", "пользователей", "пользователя", "пользователям", "помечает", "помещается", "понедельникам", "попаданий", "попадания", "попадают", "поправили", "попросите", "порт", "портов", "порядком", "порядку", "постоянному", "постоянный", "потерянных", "поток", "потомков", "появлении", "пояс", "правами", "правилами", "правится", "править", "правка", "правку", "правом", "правьте", "предел", "предела", "пределах", "предложенный", "предпросмотр", "предпросмотра", "предупреждений", "предупреждения", "предыдущий", "прежние", "прежний", "прервана", "прервано", "прервать", "прерывая", "пресет", "пресета", "пресете", "пресетов", "пресету", "пресеты", "приватный", "привязки", "приложении", "приложения", "приложите", "применена", "применение", "применено", "применены", "применить", "применяется", "принудительного", "приоритет", "приостановить", "пристыковано", "пришлите", "приёмки", "пробуждение", "провайдер", "провайдера", "провайдеров", "провайдером", "провайдеру", "проверен", "проверенные", "проверено", "проверке", "проверкой", "проводник", "продолжат", "продолжаются", "продолжением", "продолжения", "продолжилось", "проектов", "пройдена", "прокрутить", "прокси", "промпт", "промпте", "пропущено", "просматриваемый", "просмотр", "просмотрщики", "простаивает", "профиле", "профилем", "профиль", "профиля", "процесса", "процессов", "прочитает", "прочитайте", "прочитано", "публичный", "пустое", "пустым", "работающие", "работающих", "работающую", "работоспособность", "рабочая", "рабочей", "рабочем", "рабочим", "рабочую", "равной", "разбиваются", "разбор", "разбора", "разбудят", "развернуть", "разворачивании", "разворачивать", "раздаёт", "раздел", "разделы", "раздельно", "различия", "разового", "разовые", "разовый", "разработка", "разрешает", "разрешений", "разрешены", "разрешённая", "разрешённые", "рамках", "ранний", "рантайма", "рантайме", "раскладка", "расписаний", "расписанию", "расписания", "располагались", "расположение", "рассмотрения", "рассуждений", "рассуждения", "расход", "расхода", "расходоваться", "расходом", "расходуется", "расхождений", "расхождения", "расширяются", "реальное", "реальной", "ревизия", "регистре", "регистрируются", "редакторе", "реже", "режима", "режиме", "резервная", "результата", "рекомендации", "рекомендаций", "рекомендация", "рекомендованный", "рекомендуем", "рекомендуемые", "рендеринга", "репозиторием", "репозитория", "решаете", "риска", "риски", "родительская", "ручной", "сайтов", "сбоку", "сборке", "сборочные", "сбоя", "сбрасывается", "сбросить", "свежая", "свернуть", "сверх", "светлая", "связывание", "сервере", "серверная", "серверный", "серверы", "сервис", "сервиса", "сессией", "сессии", "сессий", "сессию", "сессия", "сессиям", "сжат", "сжатие", "сжатия", "сжато", "сжимает", "символов", "системном", "системный", "скачает", "скачано", "скачать", "скачивает", "скачивание", "скилл", "скилла", "скиллов", "скиллы", "скопирован", "скопирована", "скопировано", "скопировать", "скопируйте", "скрипты", "скрыты", "скрытые", "слои", "слоя", "слушают", "сменяются", "смещение", "собирает", "советуем", "советуют", "совместимости", "совместимость", "совпадать", "совпадений", "совпадения", "содержимого", "содержимое", "содержимому", "содержит", "соединению", "сожмите", "создайте", "создана", "созданные", "создано", "создаём", "сойдётся", "сообщать", "сообщении", "сообщества", "сообщество", "сортировать", "сортировка", "сортировки", "сохранение", "сохранено", "сохранит", "сохраняется", "сохранятся", "сохранён", "сохранённый", "списком", "списку", "спящие", "спящий", "срабатывает", "среднее", "среднем", "ссылается", "ссылка", "ссылке", "ссылки", "ссылку", "ставьте", "стадированием", "стандартный", "статистика", "статистики", "статическая", "стек", "стороннего", "сторонние", "сторонний", "страниц", "страница", "странице", "страницу", "строк", "строке", "строки", "строкой", "строку", "строчной", "строчные", "структуры", "субагент", "субагента", "субагентов", "субагенты", "суффиксом", "существующих", "схемы", "счёту", "таблицей", "таймаут", "тариф", "тарификации", "текстовых", "текущая", "текущего", "текущее", "текущей", "текущем", "текущий", "теме", "темой", "терминал", "терминала", "терминале", "терминалов", "терминалу", "терминалы", "термины", "теряется", "тестов", "тестового", "тестовый", "ток", "токен", "токена", "токенов", "траектории", "траектория", "трогаются", "тяжёлые", "тяните", "тёмная", "уберёт", "убирает", "убыванию", "уведомление", "уведомления", "удалась", "удаление", "удаления", "удалено", "удалены", "удалите", "удался", "удаляет", "удалён", "удобнее", "удовлетворено", "удовлетворяет", "укажите", "указана", "указано", "указывайте", "укладывается", "уменьшите", "умолчанию", "уникальным", "упоминание", "упоминания", "упомянутая", "управляются", "уровней", "условие", "условию", "успешные", "устанавливая", "установка", "установке", "установки", "установкой", "установлен", "установлена", "установленные", "установленный", "установленных", "установлено", "устаревший", "устарел", "утвердить", "уточнение", "уточнения", "уточните", "участник", "участника", "участников", "учти", "учтите", "учётные", "учётных", "фаз", "фазы", "файла", "файлам", "файлах", "файлов", "файловые", "файлу", "фиксированный", "фильтр", "фильтры", "флажку", "фоновая", "фоновой", "фоновые", "фоновых", "формат", "формате", "формулировка", "функции", "хеш", "хода", "ходов", "ходы", "хост", "хоста", "хосте", "хостовую", "хосту", "хранится", "цепочка", "цикл", "цитатой", "часовой", "частично", "чат", "черновик", "чини", "числом", "чтение", "чтения", "чувствительные", "шага", "шагам", "шаги", "шагов", "ширина", "ширины", "шлюз", "шлюза", "шрифт", "шрифта", "эвристике", "экономно", "экспорт", "элементов", "эндпоинт", "эндпоинта", "эффективность", "явной", "явные", "ядра", "ёмкости", "ёмкость"])
|
|
632
|
-
|
|
633
|
-
const isLatin = (ch) => /[a-z]/.test(ch)
|
|
634
|
-
const isCyrillic = (ch) => /[\u0430-\u044f\u0451]/.test(ch)
|
|
635
|
-
const translit = (word, map) => {
|
|
636
|
-
let out = ''
|
|
637
|
-
for (const ch of word.toLowerCase()) out += map[ch] !== undefined ? map[ch] : ch
|
|
638
|
-
return out
|
|
639
|
-
}
|
|
640
|
-
const ruWordFraction = (text) => {
|
|
641
|
-
// доля слов текста, присутствующих в частотном словаре или локальном
|
|
642
|
-
const words = text.toLowerCase().split(/[^а-яё]+/).filter(Boolean)
|
|
643
|
-
if (!words.length) return 0
|
|
644
|
-
const hit = words.filter((w) => FREQ.has(w) || localDict.has(w)).length
|
|
645
|
-
return hit / words.length
|
|
646
|
-
}
|
|
647
|
-
// Локальный словарь обучения (#67): слова, которые пользователь принял
|
|
648
|
-
// через «Исправить». Живёт в памяти сессии, в настройки/бандл не пишется.
|
|
649
|
-
const localDict = new Set()
|
|
650
|
-
const learnWords = (text) => {
|
|
651
|
-
for (const w of text.toLowerCase().split(/[^а-яё]+/).filter(Boolean)) {
|
|
652
|
-
if (w.length >= 3) localDict.add(w)
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
|
-
const layoutFixCandidate = (value, direction) => {
|
|
656
|
-
// direction: 'lat2cyr' | 'cyr2lat'. Возвращает {converted} если подозрительно.
|
|
657
|
-
if (direction === 'lat2cyr') {
|
|
658
|
-
const converted = translit(value, LAYOUT_LAT_TO_CYR)
|
|
659
|
-
if (!/[а-яё]{2}/.test(converted)) return null
|
|
660
|
-
if (ruWordFraction(converted) < 0.7) return null
|
|
661
|
-
return { converted }
|
|
662
|
-
} else {
|
|
663
|
-
// cyr2lat только для команды в инпуте (/...)
|
|
664
|
-
const converted = translit(value, LAYOUT_CYR_TO_LAT)
|
|
665
|
-
if (!converted.startsWith('/')) return null
|
|
666
|
-
return { converted }
|
|
667
|
-
}
|
|
668
|
-
}
|
|
771
|
+
// Локальный словарь обучения (#67): слова, принятые через «Исправить».
|
|
772
|
+
// Живёт в памяти сессии, в настройки и бандл не пишется.
|
|
773
|
+
const layout = makeLayout(new Set(["не", "что", "ты", "это", "на", "он", "мы", "как", "вы", "да", "мне", "нет", "меня", "так", "но", "его", "все", "она", "тебя", "если", "за", "бы", "тебе", "они", "чтобы", "же", "есть", "просто", "из", "для", "ну", "когда", "хорошо", "здесь", "по", "был", "знаю", "то", "только", "всё", "было", "вас", "может", "нас", "вот", "от", "быть", "кто", "будет", "почему", "вам", "их", "очень", "могу", "уже", "спасибо", "или", "нам", "еще", "там", "нужно", "сейчас", "где", "чем", "хочу", "ничего", "этого", "была", "мой", "ее", "ладно", "знаешь", "до", "этом", "потому", "теперь", "думаю", "больше", "её", "со", "раз", "ему", "надо", "время", "этот", "ли", "ещё", "пока", "даже", "привет", "сказал", "себя", "должен", "тоже", "хочешь", "давай", "никогда", "эй", "того", "тогда", "него", "ни", "тут", "были", "конечно", "правда", "об", "моя", "пожалуйста", "тобой", "сказать", "сегодня", "один", "лучше", "можешь", "сюда", "мной", "значит", "сделать", "всегда", "дело", "можно", "ей", "должны", "порядке", "без", "день", "том", "буду", "делать", "хотел", "чего", "эти", "много", "после", "этим", "всего", "во", "твой", "ним", "лет", "боже", "них", "сэр", "ведь", "мистер", "жизнь", "потом", "ней", "такой", "который", "всех", "через", "им", "возможно", "немного", "такое", "слишком", "себе", "зачем", "должна", "моей", "люди", "знаете", "этой", "думаешь", "свою", "точно", "человек", "твоя", "под", "сказала", "назад", "эту", "можем", "случилось", "мама", "мог", "вместе", "отец", "сделал", "мои", "кажется", "друг", "куда", "никто", "поэтому", "эта", "которые", "два", "тот", "сколько", "понимаю", "снова", "жизни", "нравится", "людей", "помочь", "видел", "люблю", "хочет", "место", "знать", "прости", "отлично", "похоже", "парень", "домой", "всем", "деньги", "иди", "времени", "дома", "именно", "доктор", "думал", "говорил", "делаешь", "будем", "прямо", "стоит", "поговорить", "найти", "разве", "слушай", "своей", "лишь", "ага", "можете", "простите", "хотела", "сам", "тем", "будешь", "прошу", "три", "деле", "хотите", "говорить", "давайте", "совсем", "знал", "знает", "какой", "моего", "скажи", "дом", "дела", "вами", "свои", "говорит", "несколько", "должно", "про", "ваш", "происходит", "жаль", "туда", "действительно", "папа", "завтра", "оно", "черт", "одна", "перед", "наш", "уверен", "отсюда", "нужна", "самом", "тех", "нужен", "свой", "мою", "кого", "верно", "работу", "каждый", "твоей", "будут", "хватит", "понял", "нее", "уж", "имя", "против", "пор", "чём", "раньше", "говорю", "более", "надеюсь", "итак", "при", "ваша", "вообще", "пошли", "мать", "нельзя", "наверное", "нами", "твои", "могли", "дай", "ради", "всю", "ребята", "ко", "хотя", "понимаешь", "идти", "этих", "откуда", "такая", "ясно", "другой", "извините", "вижу", "видеть", "над", "могут", "равно", "мисс", "скоро", "будто", "зовут", "виду", "наши", "думала", "послушай", "между", "своего", "вопрос", "этому", "почти", "года", "человека", "которая", "подожди", "руки", "нормально", "такие", "возьми", "минут", "извини", "вещи", "могла", "смотри", "хоть", "работа", "пару", "сын", "ваше", "дня", "пора", "неё", "жить", "видишь", "достаточно", "господи", "быстро", "твою", "весь", "убить", "ночь", "говоришь", "собой", "скажу", "готов", "слышал", "какая", "посмотри", "первый", "самое", "видела", "пусть", "месте", "нашли", "сказали", "плохо", "смогу", "ваши", "отца", "детей", "знаем", "рад", "прав", "никаких", "имею", "миссис", "иногда", "смерти", "своих", "пойду", "брат", "вроде", "рядом", "мир", "произошло", "которую", "сделала", "говорила", "знала", "мое", "одного", "таким", "помощь", "такого", "кем", "насчет", "вчера", "случае", "увидеть", "нашей", "говорят", "правильно", "убил", "одно", "пойти", "друга", "сама", "долго", "работать", "дверь", "делает", "женщина", "важно", "кроме", "будь", "собираюсь", "вашей", "нужны", "здорово", "номер", "проблема", "проблемы", "денег", "чёрт", "хороший", "твоего", "одну", "дальше", "вернуться", "давно", "последний", "ночи", "узнать", "уверена", "машину", "права", "пять", "моих", "также", "тому", "вечером", "дети", "опять", "серьезно", "работает", "своим", "сначала", "две", "одной", "моим", "те", "жена", "думаете", "помнишь", "глаза", "ними", "чувак", "ночью", "чувствую", "взять", "сразу", "утром", "часть", "придется", "стать", "идея", "дорогая", "прекрасно", "слова", "сделали", "видели", "наша", "сердце", "помню", "парня", "момент", "утро", "здравствуйте", "стал", "скорее", "ох", "большой", "часов", "год", "друзья", "сильно", "говори", "смысле", "которой", "уйти", "которого", "капитан", "работы", "любовь", "дочь", "новый", "боюсь", "имеет", "стой", "дней", "той", "голову", "ах", "столько", "понятно", "дать", "девушка", "довольно", "доме", "вечер", "оба", "пойдем", "увидимся", "шанс", "хорошая", "прежде", "сделаю", "какого", "быстрее", "понять", "рассказать", "вашего", "бог", "интересно", "затем", "умер", "обо", "никого", "парни", "самый", "твое", "вон", "пришел", "чтоб", "поверить", "слово", "будете", "нашел", "милая", "странно", "какие", "ой", "та", "однажды", "сможешь", "получить", "обычно", "ума", "полагаю", "алло", "посмотреть", "иначе", "наших", "тело", "хотели", "свое", "пришли", "моё", "другие", "выглядит", "подумал", "лицо", "приятно", "мам", "говорите", "обратно", "нашего", "телефон", "мире", "честь", "господин", "доброе", "план", "другом", "час", "джон", "пути", "делал", "типа", "посмотрим", "насколько", "пытался", "правду", "решил", "поздно", "нем", "работе", "любит", "хотят", "кому", "сестра", "места", "скажешь", "следующий", "других", "получил", "кстати", "говорили", "пришла", "безопасности", "рада", "город", "внимание", "кофе", "которое", "вся", "семья", "конец", "позже", "дал", "думать", "спать", "вернулся", "остаться", "некоторые", "кровь", "оружие", "пришлось", "хуже", "дорогой", "полиция", "сможем", "понимаете", "четыре", "которых", "ужасно", "ждать", "способ", "делаю", "готовы", "совершенно", "смотреть", "вернусь", "большое", "единственный", "вперед", "часа", "муж", "идет", "таких", "ребенка", "машина", "стороны", "смог", "сына", "играть", "сами", "верю", "честно", "нашла", "звучит", "угодно", "руку", "начала", "перевод", "какое", "взял", "станет", "пытаюсь", "внутри", "знали", "новости", "добрый", "подождите", "скажите", "ребенок", "вашу", "мальчик", "осталось", "делаете", "году", "мере", "поняла", "отношения", "далеко", "вокруг", "хотим", "слышала", "двух", "приятель", "никому", "мужчина", "неделю", "вернуть", "смерть", "сих", "ту", "сможет", "дайте", "двое", "видите", "долларов", "крови", "решение", "путь", "следует", "неужели", "около", "готова", "семьи", "идем", "смотрите", "круто", "история", "вдруг", "спросить", "твоих", "второй", "вина", "джек", "женщины", "нашу", "заткнись", "минуту", "собираешься", "твоим", "шоу", "прощения", "больно", "машины", "пап", "трудно", "постоянно", "поможет", "проблем", "например", "дерьмо", "полиции", "начать", "знают", "лучший", "добро", "спасти", "рождения", "оставить", "чарли", "любишь", "конце", "забыл", "месяцев", "часто", "мило", "комнате", "нему", "матери", "милый", "полностью", "школе", "леди", "серьёзно", "убили", "случай", "джо", "убийство", "послушайте", "посмотрите", "пошел", "никакого", "сделаем", "говоря", "неплохо", "использовать", "прошлой", "иду", "узнал", "прекрати", "чуть", "держи", "невозможно", "господа", "слушайте", "наше", "машине", "сэм", "свет", "образом", "иметь", "другое", "другого", "шесть", "людям", "погоди", "имени", "детка", "недели", "меньше", "легко", "крайней", "девочка", "придётся", "мало", "ненавижу", "последние", "насчёт", "выглядишь", "сообщение", "думает", "друзей", "обещаю", "агент", "вместо", "последнее", "самого", "настолько", "ответ", "детектив", "понятия", "родители", "показать", "поехали", "стало", "мэм", "своими", "всей", "очевидно", "помогите", "маленький", "школу", "пожаловать", "твоё", "либо", "забрать", "прошло", "особенно", "имеешь", "истории", "эм", "вопросы", "большая", "минутку", "пол", "остановить", "чему", "свидания", "обязательно", "городе", "убийца", "сделай", "ваших", "любви", "спокойной", "своё", "мадам", "идите", "выйти", "делают", "немедленно", "делай", "возможность", "человеком", "бывает", "ужин", "моем", "купить", "позвонить", "наконец", "стала", "любой", "клянусь", "смешно", "абсолютно", "всему", "переводчики", "забудь", "секунду", "выбор", "тысяч", "потерял", "майкл", "волнуйся", "ноги", "таком", "настоящий", "означает", "встретиться", "известно", "работаю", "замечательно", "любом", "оставь", "связи", "боль", "выпить", "представить", "убийства", "малыш", "умерла", "воды", "окей", "речь", "хорошие", "поводу", "перестань", "увидел", "повезло", "президент", "мужик", "которым", "прошлом", "дам", "десять", "умереть", "поговорим", "отцом", "искать", "тихо", "оставил", "пистолет", "начал", "сложно", "города", "неделе", "хотелось", "принять", "историю", "босс", "держать", "пойдём", "подумала", "фильм", "слышишь", "рано", "удачи", "еду", "словно", "причина", "пришёл", "компании", "спокойно", "работал", "подумать", "вести", "вещь", "брата", "конца", "получится", "блин", "право", "ввиду", "бога", "подарок", "комнату", "мира", "успокойся", "позволить", "моему", "идёт", "самая", "рассказал", "курсе", "намного", "мистера", "женщин", "тяжело", "ух", "предложение", "одним", "счет", "улице", "другим", "уходи", "майк", "среди", "помоги", "получилось", "месяц", "проверить", "генри", "голос", "позвольте", "стороне", "вероятно", "случится", "уверены", "мужа", "питер", "провести", "людьми", "неважно", "нашёл", "доктора", "месяца", "игра", "идём", "нём", "джордж", "познакомиться", "возьму", "слышали", "пошла", "корабль", "чувствуешь", "позволь", "сторону", "игры", "согласен", "письмо", "вниз", "молодец", "наверняка", "утра", "вашим", "нечего", "встречи", "вид", "никакой", "связь", "список", "такую", "весело", "сидеть", "гораздо", "собирался", "впервые", "находится", "объяснить", "полицию", "решили", "семью", "свидание", "отличная", "остальные", "прийти", "руках", "фбр", "чувство", "котором", "решила", "понадобится", "сынок", "найду", "фрэнк", "школы", "чувства", "дядя", "стали", "ушла", "первым", "поверь", "расскажи", "хочется", "девушки", "сон", "имел", "каким", "парнем", "многие", "части", "ехать", "считаю", "никуда", "голове", "старый", "оттуда", "называется", "вопросов", "фото", "пройти", "заниматься", "другу", "вернулась", "пара", "никак", "девочки", "благодарю", "своем", "недавно", "приехал", "глаз", "могло", "становится", "пыталась", "является", "брось", "богу", "нашим", "помощи", "волосы", "невероятно", "одном", "ушел", "джейн", "тела", "недель", "собирается", "защитить", "всеми", "существует", "жив", "первая", "позвоню", "благодаря", "вперёд", "навсегда", "помните", "земле", "делу", "вполне", "пытается", "будущее", "семь", "своему", "ок", "идиот", "слава", "стоило", "удалось", "делаем", "команда", "главное", "огонь", "дэнни", "замуж", "начали", "мужчины", "силы", "семье", "шеф", "суд", "слышу", "тюрьме", "попробовать", "друзьями", "алекс", "вашем", "новая", "маленькая", "черта", "придет", "страшно", "услышать", "новые", "общем", "звонил", "купил", "понравится", "близко", "самой", "смысл", "хорошее", "любил", "сара", "единственная", "делали", "макс", "мэри", "жду", "получается", "хорошего", "эми", "дамы", "жену", "гарри", "неправильно", "стоять", "плевать", "ключ", "верить", "лично", "слышать", "взяли", "поздравляю", "пить", "заставить", "получили", "рот", "делала", "преступления", "двери", "землю", "разумеется", "очередь", "первой", "разговор", "видимо", "звонок", "джеймс", "менее", "нового", "получила", "хм", "подальше", "сможете", "похож", "состоянии", "необходимо", "адвокат", "касается", "секунд", "стоп", "дали", "оставаться", "сделает", "ходить", "помощью", "хватает", "изменить", "король", "народ", "новую", "девушку", "живет", "секс", "сделаешь", "думали", "нашем", "попасть", "каждого", "другую", "просил", "пошёл", "войны", "случайно", "игру", "мертв", "держись", "забыла", "цель", "минуты", "месье", "выше", "однако", "женщину", "раза", "мысли", "выход", "платье", "вовсе", "пришло", "женой", "ребёнка", "сожалею", "твоем", "осторожно", "смогла", "этими", "стану", "маме", "парней", "нравятся", "покое", "поехать", "садись", "миллионов", "отличный", "ребёнок", "дочери", "дороги", "ого", "ха", "нечто", "первое", "выяснить", "ник", "информацию", "офис", "записи", "лучшее", "течение", "вечеринку", "убью", "годы", "забыть", "правила", "сожалению", "слов", "джимми", "дни", "дала", "жизнью", "совет", "занят", "попробуй", "подруга", "расскажу", "целый", "красивая", "попросил", "вышел", "удар", "вещей", "адрес", "дэвид", "оставьте", "сержант", "увидишь", "виноват", "разница", "открыть", "написал", "ждет", "новое", "счастлив", "вау", "выбора", "продолжай", "задницу", "покажу", "единственное", "доверять", "встреча", "убивать", "концов", "обоих", "будьте", "останется", "тюрьму", "наверно", "ищу", "момента", "обед", "лица", "видео", "стойте", "взяла", "подождать", "считает", "вечно", "покажи", "бен", "книгу", "многое", "земли", "дел", "какую", "поскольку", "узнала", "сильнее", "жены", "встречу", "весьма", "блядь", "поняли", "родителей", "оу", "лейтенант", "глупо", "узнает", "думают", "сезон", "снаружи", "голова", "мамой", "заняться", "кино", "вечера", "свете", "выйдет", "восемь", "найдем", "помогу", "больницу", "больнице", "магазин", "тони", "заметил", "договорились", "слушать", "бизнес", "примерно", "уехать", "мамы", "позвонил", "выходит", "маму", "документы", "попал", "шаг", "отпусти", "смотрю", "здравствуй", "понравилось", "смогли", "правы", "большие", "рассказала", "идут", "готово", "плохой", "офицер", "узнали", "скажет", "сюрприз", "внимания", "вышло", "дорогу", "считаешь", "фотографии", "вода", "делом", "каком", "полный", "следующей", "доказать", "захочешь", "книги", "война", "планы", "мысль", "веришь", "видно", "скажем", "большинство", "ребят", "продолжать", "ранее", "жертвы", "ближе", "качестве", "двигаться", "написано", "чувствовать", "хорош", "любить", "величество", "головы", "дороге", "попросить", "времена", "подумай", "забавно", "главный", "внизу", "каждую", "остался", "вставай", "мнение", "твоему", "часы", "вряд", "постой", "сомневаюсь", "отдай", "вечеринка", "ошибка", "приехали", "бросил", "вернется", "профессор", "любят", "ключи", "подходит", "беги", "ничто", "поле", "вышла", "открой", "воду", "сексом", "музыка", "побери", "бабушка", "собираемся", "несмотря", "госпожа", "стране", "рэй", "отдать", "трубку", "сил", "кончено", "другая", "комната", "ричард", "сердца", "опасности", "сша", "закончить", "детьми", "врач", "живу", "имеете", "команды", "пожалуй", "роль", "порядок", "группа", "встретимся", "кольцо", "самые", "позвони", "всём", "вверх", "разговаривать", "джим", "закон", "мужчин", "шутишь", "играет", "хорошим", "новой", "начнем", "ухожу", "член", "такси", "серия", "днк", "получше", "убила", "настоящая", "молодой", "эмили", "показания", "одному", "шутка", "уходить", "снять", "недостаточно", "каких", "кейт", "одни", "разобраться", "язык", "едем", "директор", "сто", "энди", "учитывая", "спросил", "днем", "первого", "джей", "наверху", "говорим", "счастлива", "помог", "отцу", "приходится", "определенно", "сигнал", "закончится", "помогает", "группы", "моём", "едва", "легче", "ответить", "спустя", "принести", "секрет", "приказ", "де", "опасно", "позволю", "билли", "бросить", "телефону", "самых", "эдди", "получишь", "господь", "внутрь", "компания", "прекрасный", "томми", "такими", "пойдет", "женщиной", "работаешь", "большую", "волнует", "рук", "память", "старик", "избавиться", "квартиру", "закончили", "информация", "встречаться", "удовольствием", "спас", "мозг", "читать", "ким", "чертовски", "стол", "джонни", "ублюдок", "дон", "тысячи", "боб", "ложь", "ёто", "потеряла", "взглянуть", "писать", "мен", "увидела", "передать", "войти", "везде", "бобби", "кое", "солнце", "устал", "сделку", "настоящее", "потеряли", "мм", "класс", "смотрел", "держите", "закончил", "марк", "джерри", "потрясающе", "обещал", "убедиться", "скажете", "факт", "уничтожить", "страны", "учитель", "полно", "начинается", "бежать", "операции", "сукин", "ошибку", "украл", "данные", "двоих", "света", "запах", "придурок", "найди", "лучшая", "вернулись", "убирайся", "боишься", "окно", "убийстве", "ситуации", "костюм", "казалось", "доказательства", "обсудить", "жил", "принимать", "море", "оставила", "судя", "штука", "ситуация", "возможности", "следы", "генерал", "рождество", "платить", "пытались", "забрал", "эрик", "самым", "великолепно", "песню", "билл", "помогать", "новость", "силу", "жертва", "баксов", "другими", "обожаю", "достать", "вовремя", "появился", "кларк", "тише", "одежду", "приходит", "расследование", "зато", "девушкой", "яйца", "зависит", "принадлежит", "согласно", "предложить", "уровень", "любила", "вашему", "собака", "знак", "чисто", "срочно", "начало", "вне", "клуб", "искал", "собираетесь", "души", "расслабься", "супер", "ждал", "неправда", "доступ", "куча", "туалет", "знакомы", "офисе", "сука", "слегка", "ждут", "песня", "наверх", "небольшой", "анна", "красиво", "запись", "причины", "работала", "состояние", "белый", "зайти", "дважды", "думай", "центр", "дружище", "исправить", "джейк", "использовал", "идешь", "желание", "книга", "многих", "разные", "полковник", "оказался", "идеи", "добраться", "нос", "возьмите", "матерью", "суда", "каково", "сила", "уходите", "рука", "повсюду", "лучшие", "сделано", "взгляд", "наркотики", "бери", "судья", "чушь", "плохая", "система", "практически", "выходные", "лили", "суде", "еда", "док", "узнаю", "нож", "написать", "собиралась", "чай", "глазах", "остальное", "брак", "представляешь", "остальных", "мимо", "поеду", "потерять", "старые", "звук", "частью", "приехала", "даст", "спит", "пытаешься", "выглядеть", "беременна", "увижу", "спал", "вкус", "крис", "поезд", "пиво", "уехал", "устроить", "радио", "обе", "команду", "безумие", "решить", "солдат", "ме", "мальчика", "короля", "проще", "особо", "ребенком", "дедушка", "мертва", "церкви", "результаты", "имена", "беспокойся", "неприятности", "камеры", "отправить", "брайан", "здание", "шон", "возле", "защищать", "плохие", "работают", "называть", "третий", "способен", "удивительно", "смысла", "долг", "боли", "клэр", "первую", "стыдно", "случиться", "сестры", "называют", "райан", "счёт", "слушаю", "мартин", "возвращаться", "выбрал", "черту", "инспектор", "земля", "оказалось", "сходить", "головой", "плюс", "оружия", "музыку", "явно", "сказано", "назвал", "стрелять", "своём", "столь", "ушли", "последняя", "лицом", "решать", "остались", "заплатить", "разу", "жене", "даю", "центре", "началось", "президента", "сообщить", "кучу", "звали", "принял", "придёт", "рода", "справиться", "поцелуй", "сбежал", "еды", "встречались", "прошла", "команде", "оставлю", "ищем", "согласна", "останусь", "тест", "прошлое", "смотришь", "код", "двумя", "шучу", "человеку", "выбраться", "следовало", "продать", "которому", "звонила", "поставить", "клиент", "здоровье", "прочь", "приду", "держу", "поговорю", "похожа", "рассказывать", "играл", "стив", "заставил", "встретил", "самолет", "кости", "сбежать", "прекратить", "уйду", "принесу", "власти", "ушёл", "остается", "постели", "вернись", "впереди", "захочет", "реально", "двадцать", "квартире", "маленькой", "важное", "ешь", "бар", "жива", "дает", "завтрак", "любовью", "зря", "полицейский", "принес", "мария", "страшного", "устала", "прекратите", "убери", "нравишься", "заходи", "энни", "сработает", "старая", "скучаю", "заявление", "плохого", "поймать", "ответственность", "прощай", "девять", "осталась", "наедине", "выбрать", "обвинения", "ммм", "компанию", "поедем", "цветы", "имела", "ждёт", "камеру", "новых", "преступление", "трех", "кусок", "пропал", "посмотрю", "медленно", "душу", "получит", "рады", "значения", "забрали", "пойдешь", "сохранить", "привести", "видит", "информации", "войну", "письма", "бумаги", "холодно", "руками", "томас", "упал", "моими", "отношение", "карл", "ма", "операция", "судьба", "любимый", "задать", "папочка", "внезапно", "временем", "представляю", "церковь", "решения", "чувствовал", "чудесно", "специально", "маленькие", "дурак", "ад", "мальчики", "начинает", "компьютер", "станешь", "продолжайте", "роберт", "урок", "кровью", "глазами", "занимается", "линии", "люк", "брать", "давать", "вновь", "трое", "девушек", "чё", "услышал", "вызвать", "работали", "позвонила", "бороться", "остановись", "вариант", "послал", "назвать", "просила", "ход", "положение", "вернемся", "уходим", "уилл", "связано", "каждой", "звонит", "роман", "миру", "беспокоит", "кэтрин", "номера", "комнаты", "прекрасная", "победить", "правительство", "ищет", "систему", "попросила", "операцию", "ногу", "поступил", "прошлый", "живёт", "герой", "воздух", "живут", "читал", "адвоката", "поступить", "поможешь", "адам", "люси", "чудо", "разных", "школа", "курс", "отель", "задание", "приехать", "умру", "телефона", "считать", "ценю", "мечты", "родился", "работой", "вспомнить", "виде", "похожи", "слышите", "уходит", "понимает", "угу", "кровати", "умоляю", "срок", "действовать", "мужем", "извиниться", "пахнет", "дух", "лучших", "отдел", "будущем", "большим", "беспокоиться", "узнаем", "интервью", "скотт", "сыном", "предлагаю", "убит", "болит", "каждое", "встретились", "итоге", "мяч", "закрой", "умею", "справлюсь", "убедить", "остановиться", "возвращайся", "цели", "форме", "сидит", "королева", "дождь", "отдал", "бывший", "едет", "танцевать", "пива", "причин", "обязан", "проклятье", "колледж", "мозга", "оставайся", "системы", "карты", "просить", "садитесь", "хорошей", "душ", "смогут", "камень", "волнуйтесь", "страну", "звонить", "проводить", "ура", "мёртв", "смотрит", "детям", "мужчиной", "труп", "вино", "армии", "убивал", "вкусно", "заставляет", "любое", "которыми", "твоём", "малышка", "эбби", "правило", "кровать", "кабинет", "чарльз", "баре", "действия", "ситуацию", "убрать", "жениться", "ходил", "джона", "исчез", "келли", "погиб", "зрения", "счастье", "желаю", "давление", "душе", "взгляни", "основном", "прошел", "душа", "свадьбу", "тюрьмы", "отдохнуть", "фунтов", "встать", "произойдет", "дженни", "миллион", "святого", "глубоко", "сзади", "святой", "подобного", "предложил", "пит", "значение", "отеле", "позади", "идеально", "занимаюсь", "занимался", "нескольких", "подобное", "мозги", "несчастный", "рассказывал", "считаете", "выходи", "полной", "свадьбы", "мамочка", "страх", "появится", "банк", "носить", "отпечатки", "ничем", "чак", "возрасте", "горжусь", "выиграл", "принесла", "встрече", "нибудь", "приходить", "следить", "лео", "ног", "лекарство", "лучшим", "тип", "умирает", "признать", "воспоминания", "имеют", "защиты", "билет", "выпьем", "работаем", "купила", "выиграть", "трогай", "магазине", "красный", "петь", "название", "вытащить", "сестру", "отвечать", "отпустите", "кевин", "контролировать", "чёрта", "власть", "вторая", "волноваться", "бросила", "спрашиваю", "секса", "данный", "красивый", "джентльмены", "суть", "уши", "оставили", "начинаю", "сотни", "связаться", "окна", "доброй", "майор", "держаться", "цру", "штаны", "занята", "отвали", "цвет", "получу", "сидел", "случается", "хозяин", "учиться", "некоторых", "прошли", "погодите", "некоторое", "братом", "считают", "новым", "показалось", "целую", "поблагодарить", "количество", "лекарства", "сумасшедший", "расскажите", "ожидал", "элис", "умрет", "грейс", "слухи", "участок", "улицу", "классно", "животных", "изменилось", "странный", "передай", "ди", "надеялся", "собственной", "гости", "дэн", "контроль", "грудь", "братья", "миль", "улики", "огромное", "замок", "данных", "дому", "районе", "сядь", "наоборот", "богом", "элли", "создать", "закончилось", "отвечает", "побыть", "поесть", "умеешь", "лесу", "самому", "алан", "отправил", "деньгами", "принеси", "таблетки", "ресторан", "нашему", "поверьте", "включая", "живо", "мужчину", "придумал", "шериф", "хрена", "ханна", "собирались", "половину", "ён", "забыли", "сделайте", "удовольствие", "стараюсь", "проходит", "спала", "автобус", "настоящие", "узнаешь", "спроси", "лучшего", "придумать", "вечеринке", "пользу", "появилась", "списке", "лежит", "живой", "счастливы", "понимать", "плохое", "любого", "зубы", "кухне", "попытаться", "расскажешь", "буквально", "клиентов", "ван", "копы", "великий", "пяти", "прием", "скучно", "приходил", "песни", "девчонка", "рукой", "попала", "джош", "проект", "бой", "естественно", "стивен", "увидите", "процесс", "делайте", "вызов", "ниже", "рейчел", "перерыв", "дерьма", "принцесса", "само", "врн", "ненадолго", "радостью", "ответил", "убьет", "тед", "короче", "провел", "сесть", "вечеринки", "попробуем", "теб", "вернётся", "разберусь", "умный", "поймали", "ак", "кошмар", "днём", "дорога", "общего", "жертв", "ведет", "очки", "барри", "чикаго", "найдём", "игре", "официально", "попробую", "энн", "женат", "совпадение", "начальник", "убивает", "терпеть", "счастью", "гей", "множество", "убьют", "болезнь", "свидетель", "тему", "элизабет", "службы", "положи", "пригласить", "бояться", "точки", "голоса", "дин", "собрать", "памяти", "хороша", "думаем", "пригласил", "классе", "проверь", "парню", "убийцы", "вину", "харви", "больницы", "смертью", "всякий", "принц", "бойся", "надеяться", "поднять", "обнаружили", "перестать", "отойди", "покинуть", "чувствует", "нелегко", "ими", "оказаться", "жила", "избежать", "старший", "представляет", "столе", "ошибки", "половина", "смей", "заботиться", "лаборатории", "любим", "успокойтесь", "имеем", "последней", "вызывает", "важнее", "первые", "убийцу", "полегче", "женщине", "жили", "позволил", "груди", "праздник", "умеет", "присоединиться", "черный", "опыт", "бред", "болен", "су", "источник", "собираются", "любимая", "занимаешься", "картер", "эмма", "побольше", "закрыть", "ангел", "тренер", "откройте", "ветер", "остров", "первом", "семьей", "интересует", "беру", "уехала", "виновата", "кэти", "морган", "ищешь", "контракт", "получите", "телевизор", "любите", "попали", "местах", "ненавидит", "целью", "дольше", "полчаса", "согласны", "войне", "осторожнее", "замужем", "звонки", "причине", "папой", "пойдёт", "роли", "спишь", "управлять", "собаку", "бля", "представь", "глава", "постель", "правде", "шум", "придут", "ударил", "схожу", "провели", "начинать", "внимательно", "пятницу", "проходите", "кафе", "отказаться", "поговори", "предупредить", "свободу", "переживай", "начнём", "полная", "руке", "улицы", "виски", "странное", "фил", "артур", "карту", "знаком", "словами", "оказывается", "звоню", "уолтер", "энергии", "познакомились", "ларри", "бежим", "сквозь", "шлюха", "ордер", "капитана", "согласился", "мертвы", "класса", "написала", "париж", "страна", "умирать", "зад", "счета", "сильный", "ерунда", "дерево", "одолжение", "домом", "колени", "выжить", "ждала", "грузовик", "заплатил", "путешествие", "узнают", "чек", "билеты", "достал", "спину", "останешься", "надолго", "рак", "помощник", "парк", "стены", "сработало", "ощущение", "показал", "полу", "находиться", "девочек", "робин", "карен", "пёп", "любую", "зная", "сообщения", "именем", "квартира", "анализ", "другому", "совершил", "оливер", "лошадь", "ответы", "готовить", "субботу", "дышать", "зла", "мэгги", "выгляжу", "разрешение", "девчонки", "хрень", "секундочку", "перезвоню", "миллиона", "одиночку", "займусь", "увидит", "боится", "одновременно", "использовали", "спрашивал", "лиза", "врать", "отказался", "цвета", "жертву", "теми", "метров", "горло", "дворе", "пропала", "дитя", "пошло", "небольшая", "станции", "чувствовала", "бедный", "статус", "поведение", "начинай", "ванной", "кабинете", "немножко", "извинения", "здания", "удастся", "виделись", "пытаемся", "отпустить", "спросила", "выходить", "извиняюсь", "свадьба", "джесси", "марта", "проверю", "контролем", "отвезти", "доверяю", "найдешь", "сражаться", "звезда", "найдут", "заберу", "лагерь", "ходит", "посреди", "звони", "браво", "мишель", "скорость", "использует", "заслуживает", "заметила", "спиной", "прям", "возвращается", "положить", "воскресенье", "чертов", "мэтт", "ть", "камера", "впечатление", "оказалась", "корабля", "мясо", "обсуждать", "фильма", "разговаривал", "штата", "результат", "крайне", "держит", "доказательств", "вселенной", "признаться", "необходимости", "детали", "группу", "грустно", "штук", "ком", "эндрю", "меч", "убей", "занять", "одежда", "бомба", "чувствуете", "кейси", "поймал", "ящик", "работаете", "клубе", "тоби", "забудьте", "живых", "алиби", "пройдет", "проблему", "свободен", "подойди", "каждая", "детстве", "считал", "налево", "помни", "девушке", "напоминает", "дают", "увидели", "фильме", "постараюсь", "потребуется", "сестрой", "отношениях", "отношений", "доктором", "джин", "надежда", "приедет", "личное", "обычный", "изменился", "ужас", "салли", "мэр", "условия", "ай", "иисус", "научиться", "играю", "разрешения", "нашими", "связаны", "пациент", "обвинение", "жди", "старше", "начну", "старой", "пропустил", "палец", "позабочусь", "прошлого", "сумку", "боялся", "красивые", "простить", "найдите", "франции", "секреты", "верите", "америке", "ужасный", "драться", "создал", "гостей", "колледже", "нигде", "заметили", "молли", "позаботиться", "терять", "рисковать", "отдела", "след", "золото", "волос", "простой", "доктору", "отстой", "будущего", "ровно", "собрались", "совета", "штуку", "водой", "саймон", "спрашивать", "приняли", "пытаются", "воспользоваться", "требует", "марти", "живешь", "играешь", "клиента", "позвонили", "стоял", "отпуск", "аминь", "движение", "особенного", "каждом", "заняты", "наплевать", "мечта", "надеть", "зал", "арестовали", "виктор", "шансы", "минимум", "оружием", "неловко", "захотел", "джейсон", "начинаем", "понедельник", "сне", "вернешься", "риск", "сучка", "попытка", "скучать", "софи", "каждым", "огромный", "помогла", "второе", "встретила", "провела", "сомнения", "подумали", "скорей", "мастер", "пальцы", "небо", "открыл", "съесть", "сериале", "займет", "добиться", "сперва", "заходите", "ла", "послушать", "двигайся", "большого", "норме", "личность", "товарищ", "донна", "поставил", "приходи", "быстрей", "следующем", "заслужил", "мест", "лес", "горы", "собаки", "джереми", "гений", "занимались", "встречался", "джонс", "твоими", "проверил", "привело", "врача", "людях", "сверху", "опоздал", "мистером", "парке", "мо", "поиграть", "нил", "несомненно", "дашь", "вышли", "управление", "разум", "хороших", "прибыли", "плакать", "получает", "украсть", "стоят", "собрался", "лондон", "стене", "рш", "джейми", "заново", "напротив", "искали", "программу", "желания", "полное", "девочку", "болезни", "планете", "покончить", "близки", "рик", "взгляните", "охрана", "лице", "сделка", "армия", "выстрел", "ужасное", "крутой", "выйду", "круг", "поехал", "стену", "поделать", "счастливой", "хэнк", "росс", "вещах", "зале", "требуется", "нравилось", "зло", "украли", "верит", "отправиться", "наружу", "последнюю", "устройство", "лето", "уме", "хан", "поисках", "отчет", "встретить", "закончила", "отойдите", "хелен", "вскоре", "дочерью", "ответь", "враг", "ищут", "исследования", "оказались", "пола", "сцену", "умерли", "используют", "отдам", "наблюдать", "мсье", "закончим", "силой", "пытаясь", "подружка", "справишься", "ждали", "бесплатно", "поиски", "попрошу", "форму", "открывай", "живым", "неожиданно", "своя", "бывают", "появились", "мистеру", "собственный", "писал", "пожар", "обнаружил", "следов", "продал", "командир", "планеты", "представление", "говорится", "важный", "псих", "тим", "бо", "борту", "свидетелей", "полном", "выглядят", "уильям", "контакт", "ранен", "смотрели", "позвоните", "хрен", "снимать", "субтитры", "стэн", "ходят", "жарко", "цена", "терри", "хмм", "сети", "животное", "искала", "плачу", "постарайся", "бутылку", "пенни", "надоело", "объясню", "футбол", "похороны", "управления", "тупой", "агента", "приходят", "второго", "останься", "пальцев", "упала", "обмен", "миром", "продолжим", "безусловно", "торт", "уйди", "выхода", "блять", "поработать", "взрыв", "отвратительно", "волнуюсь", "клуба", "участие", "счастья", "получим", "квартиры", "папы", "красавица", "участвовать", "америки", "вырос", "недалеко", "добавить", "отправили", "дэниел", "тетя", "платят", "элисон", "пьян", "общаться", "сбежала", "кайл", "удобно", "коп", "дл", "лицу", "вспомнил", "рождества", "фу", "ходила", "принято", "наблюдения", "голоден", "подозреваемый", "джексон", "выбрала", "группе", "смотрела", "дождаться", "направо", "столом", "нога", "дорогуша", "сыну", "куплю", "просит", "каждому", "занятия", "выбирать", "папе", "нападение", "англии", "вернёмся", "произойти", "хранить", "чаще", "тратить", "возраста", "восторге", "обязаны", "некуда", "объясняет", "молоко", "служба", "корабле", "напал", "сыграть", "помогли", "степени", "лечение", "остаётся", "продолжить", "париже", "осторожен", "настоящим", "закона", "границы", "кэролайн", "радость", "беспокоюсь", "луис", "глупости", "превосходно", "заставила", "благодарен", "собак", "уберите", "хорошенько", "выбрали", "приняла", "входите", "последнего", "пойдемте", "преступник", "устраивает", "теле", "самую", "женаты", "пирог", "бросай", "карта", "постойте", "лорд", "джеки", "расстались", "носит", "плана", "верни", "сок", "установить", "пациентов", "родителями", "книге", "мари", "надежды", "модель", "общества", "следующее", "мусор", "сплю", "единственным", "эд", "доказательство", "беспокойтесь", "ходили", "держитесь", "уходишь", "нанял", "большее", "мак", "напали", "призрак", "связан", "свадьбе", "уверяю", "последним", "посмотрел", "далее", "цену", "заказ", "патрик", "маленькую", "играли", "определить", "повторяю", "продавать", "точка", "дружок", "процентов", "пишет", "джефф", "родителям", "оставайтесь", "газеты", "дар", "новостей", "приступ", "словам", "ворота", "штат", "здании", "число", "автомобиль", "ти", "сердцем", "принимаю", "секунды", "папу", "понравился", "разговаривали", "дыхание", "помнить", "замечательный", "возьмем", "пример", "пользоваться", "проверьте", "борт", "ужасная", "принёс", "роза", "смотрят", "идёшь", "оставим", "причиной", "штуки", "звонили", "сними", "настроение", "положении", "судить", "ею", "водитель", "собрание", "угол", "названием", "привел", "отстань", "предпочитаю", "странные", "подарки", "звезды", "концерт", "отвечай", "разговоры", "убирайтесь", "кан", "четверг", "камер", "защиту", "доставить", "задача", "шею", "прислал", "живы", "острове", "сумасшедшая", "фургон", "арестовать", "ложись", "солнца", "счастливого", "хорошую", "силах", "одиночестве", "контроля", "каков", "трёх", "нравлюсь", "шансов", "верну", "магазина", "увидеться", "поля", "маленьким", "пары", "сан", "лучшей", "живот", "туфли", "роуз", "образ", "вирус", "дьявол", "талант", "наказание", "владелец", "видим", "отличное", "пугает", "погибли", "даёт", "творится", "договор", "очереди", "безопасность", "сознание", "сошел", "самоубийство", "свободны", "увидим", "причину", "способности", "пытаться", "заплачу", "вины", "века", "миллионы", "кричать", "системе", "высочество", "президентом", "женился", "события", "доверие", "роджер", "зомби", "следовать", "обеда", "джесс", "сделаете", "относится", "ребёнком", "стиле", "виновен", "изо", "джулия", "скрывать", "фамилия", "прекрасна", "банка", "фотографию", "правил", "успел", "дверью", "пальто", "ответа", "эпизод", "тридцать", "выглядел", "делами", "защита", "сделают", "счастливым", "лестнице", "оставлять", "воде", "провожу", "повод", "спросите", "послать", "столик", "найдет", "полгода", "летом", "месяце", "вера", "началась", "ми", "ошибся", "хлеб", "пари", "чжин", "устроил", "шанса", "программа", "должность", "выглядите", "танец", "подняться", "завести", "духе", "пули", "расстроен", "ждем", "лондоне", "появляется", "приятного", "ел", "исключением", "расти", "пациента", "покупать", "глупая", "положил", "захотите", "дорого", "прокурор", "раны", "народа", "ребекка", "исчезла", "подумайте", "опасность", "почувствовал", "злишься", "нехорошо", "роде", "нуждается", "младший", "дадим", "сестре", "пропустить", "спрашиваешь", "стреляй", "событий", "редко", "базе", "свободе", "скорую", "пуля", "минуточку", "освободить", "приглашение", "слушаешь", "выйдешь", "кэрол", "точку", "журнал", "наркотиков", "вход", "теория", "глупый", "тома", "умираю", "стрелял", "навестить", "безопасно", "настоящего", "прибыл", "этаж", "уволили", "службу", "самолёт", "услугу", "определённо", "забуду", "молчать", "шутки", "подожду", "оливия", "проверим", "картину", "пей", "пост", "рой", "смех", "ногами", "поддерживать", "бить", "вел", "полицейские", "членов", "страха", "оскар", "покажите", "разрушить", "заметить", "лоис", "обещание", "поддержки", "начале", "следи", "разговора", "собственную", "странным", "кусочек", "одежды", "держал", "будучи", "позволит", "приготовить", "понравилась", "лгать", "обсудим", "суп", "обоим", "встречалась", "общество", "тысячу", "пойдёшь", "умрёт", "боялась", "маргарет", "принимает", "воздуха", "победа", "маленьких", "старого", "район", "подряд", "поедешь", "спрошу", "неа", "приём", "неделя", "снял", "успех", "возможное", "собственного", "личности", "находятся", "чья", "перестал", "дыши", "подойти", "годами", "целая", "территории", "уроки", "любили", "машин", "хватило", "сцене", "углу", "странная", "друзьям", "смит", "кармане", "сьюзан", "спасла", "смеяться", "эрика", "попробуйте", "милорд", "станут", "эйприл", "сценарий", "доволен", "фактически", "сути", "директора", "майка", "съел", "пулю", "газ", "маленького", "хо", "безумно", "слева", "деньгах", "надеялась", "принесли", "звать", "высоко", "сеть", "изменится", "эшли", "вторник", "вынужден", "едешь", "заднице", "ем", "тени", "задницы", "позволяет", "зак", "показывает", "поцеловать", "прошлым", "закончу", "точнее", "солдаты", "настоящей", "заработать", "береги", "расследования", "фред", "большего", "отличие", "веди", "действует", "замолчи", "речи", "играют", "возражаете", "этаже", "хватало", "фрэнки", "вреда", "делам", "средства", "представляете", "поспать", "зеркало", "тедди", "расстроена", "верил", "читала", "почувствовать", "свободы", "нравиться", "поверил", "толку", "бюро", "проснулся", "отеля", "фотография", "следующая", "образец", "правительства", "области", "последствия", "услышала", "меняет", "десяти", "бомбу", "позволите", "навредить", "поступила", "шевелись", "поближе", "долгое", "половиной", "правды", "пакет", "пойми", "движения", "переговоры", "программы", "подвале", "поступать", "офиса", "победил", "задница", "армию", "лиз", "грант", "умная", "небольшое", "урод", "захочу", "кэрри", "классный", "справедливо", "дне", "новом", "фильмы", "ибо", "стоишь", "щрн", "чжу", "передайте", "просили", "сильная", "поддержку", "проблемой", "концу", "протяжении", "больна", "джули", "подать", "слышно", "стиль", "обращаться", "согласилась", "следующие", "искусство", "аварии", "отличные", "копов", "счастливо", "отвезу", "карьеру", "дура", "се", "старых", "машиной", "пригласили", "остановите", "рассказывала", "занимаетесь", "юн", "улик", "интернете", "ужасные", "слушает", "вдвоем", "продолжает", "лжи", "живем", "правилам", "хуй", "больших", "признание", "делах", "маркус", "попрощаться", "отправился", "вызвал", "предстоит", "лесли", "обещала", "переехать", "звонков", "прекрасное", "остановились", "сделки", "опусти", "статью", "уровне", "полную", "забывай", "служить", "поблизости", "жертвой", "танцы", "университет", "заставили", "научился", "сошла", "скрыть", "приходите", "рай", "давал", "врачи", "угроза", "горе", "невеста", "лодку", "ээ", "заранее", "ум", "пью", "становятся", "белого", "учителя", "печально", "сенатор", "красавчик", "идею", "мадемуазель", "подтвердить", "скажут", "самим", "изменил", "прошёл", "видят", "яд", "отследить", "напарник", "детства", "пойму", "факты", "заканчивается", "начинают", "родилась", "выпил", "период", "ресторане", "купили", "ведешь", "уважения", "подарил", "левой", "проверили", "существо", "любопытно", "вашингтон", "почту", "любые", "чудовище", "непросто", "замечательная", "выпей", "помнит", "тайлер", "смотря", "построить", "пережить", "направлении", "ненавидишь", "меры", "вред", "тема", "зашел", "интерес", "красота", "справа", "кожа", "способны", "барни", "настроении", "назвали", "брюс", "убийств", "главным", "придешь", "начнется", "подписать", "приходилось", "майкла", "менеджер", "подруги", "елена", "лучшему", "сломал", "веду", "остановился", "жопу", "округе", "сознания", "ножом", "встречается", "главная", "товар", "уровня", "кожи", "приеду", "сегодняшнего", "пил", "выражение", "летать", "научил", "сижу", "рэйчел", "такова", "получать", "джека", "тошнит", "обсуждали", "фредди", "бывшая", "аэропорт", "позиции", "лорен", "повторять", "прочитать", "бонни", "проваливай", "найдете", "результате", "считается", "вправду", "станем", "белые", "прикрытием", "рыба", "форма", "записку", "поделиться", "сью", "ааа", "относительно", "остановитесь", "имели", "остальным", "расслабиться", "учился", "винить", "женщинами", "ведут", "соседи", "мешок", "засранец", "восстановить", "сеньор", "городу", "лабораторию", "сволочь", "спасли", "классная", "помогут", "лошади", "приму", "наркотиками", "охраны", "прокурора", "банке", "подойдет", "издеваешься", "выходите", "парнями", "останови", "пораньше", "помогал", "че", "фигня", "представьте", "умирают", "лу", "забрала", "убьёт", "америку", "гость", "монстр", "линда", "мин", "изменилась", "помешает", "сосед", "попытался", "острова", "громко", "сад", "правильный", "судьбу", "добры", "отомстить", "адвокатом", "народу", "менять", "занималась", "наиболее", "расскажет", "бум", "проснись", "нахуй", "счастливый", "вернутся", "интересное", "каждые", "стакан", "важная", "уйдет", "хлоя", "чёрный", "масло", "русские", "врагов", "коробку", "линию", "существуют", "взрыва", "министр", "обратиться", "отменить", "скорости", "сложнее", "жалко", "передо", "лукас", "нету", "миссия", "винсент", "шла", "спенсер", "аманда", "размер", "окажется", "падает", "джоуи", "сообщили", "шел", "ограбление", "лежать", "поймешь", "прелесть", "больной", "проиграл", "повторить", "изменения", "привезли", "личные", "поехала", "справимся", "испортил", "бет", "нечестно", "закончилась", "свидетеля", "санта", "вашими", "картины", "зол", "курить", "поездка", "хожу", "отсутствие", "доброго", "убивают", "спрашивает", "узнаете", "проверка", "боятся", "чан", "плане", "гордон", "бетти", "купер", "шести", "огня", "мотив", "поговорил", "занимаются", "полицейского", "назвала", "реки", "чжон", "брату", "сумму", "пишу", "мальчиков", "ставки", "материал", "лодке", "вали", "желает", "прочим", "перестаньте", "привела", "напомнить", "учить", "местечко", "застрял", "трогать", "рид", "луи", "бросили", "творишь", "север", "показаться", "заполучить", "вероятность", "рикки", "ведьма", "нэнси", "вор", "высокий", "ест", "метро", "героем", "передам", "братьев", "пацан", "встречаюсь", "открою", "взамен", "встречаемся", "кот", "лора", "последних", "способна", "члены", "угрозу", "совершить", "америка", "следующего", "рыбу", "джессика", "пешком", "известный", "службе", "мужу", "выжил", "ответила", "пригласила", "разок", "действий", "реальность", "чей", "вторую", "вес", "дорогие", "ошибаешься", "сиди", "камере", "разницы", "пляже", "послание", "хи", "казино", "езжай", "благодарения", "нравился", "джоан", "первых", "итан", "подобные", "мешать", "уезжаю", "дерек", "ночам", "мечтал", "мороженое", "туалете", "стою", "миллер", "побыстрее", "автор", "запомни", "рон", "нарушение", "свинья", "партнер", "хён", "встречал", "обязана", "разговариваю", "уехали", "происходило", "бедная", "тётя", "мальчиком", "базу", "добра", "отдала", "луна", "соглашение", "способом", "встал", "губы", "канал", "изменит", "шутите", "закрыто", "сдать", "огромная", "подними", "поможете", "ездить", "научить", "печенье", "колледжа", "брал", "саду", "гэри", "поддержать", "мнению", "джонсон", "тейлор", "заменить", "какова", "поспорить", "обычная", "входит", "сыр", "согласиться", "участке", "случая", "успеха", "взрослый", "бесполезно", "одри", "стреляли", "троих", "девочкой", "лидер", "гиббс", "осторожней", "угадай", "помогло", "сидишь", "бомбы", "забери", "беспокойство", "отряд", "ожидала", "умрешь", "ведёт", "получаю", "позволила", "скорой", "снег", "звонка", "снимай", "энергию", "времен", "животные", "ева", "рассказали", "отправила", "телом", "стоить", "развод", "предполагаю", "хороши", "чёрту", "лив", "арест", "искренне", "играем", "кристина", "вещами", "пусти", "использовала", "возвращайтесь", "организации", "крышу", "рубашку", "удержать", "конкретно", "аду", "километров", "залог", "бей", "обстоятельства", "являются", "брака", "выходных", "крошка", "врага", "воздухе", "показывают", "возвращаюсь", "поиск", "пытаетесь", "приближается", "ботинки", "полицейских", "шоссе", "похитили", "рассказывай", "искусства", "состоит", "выступление", "личный", "бизнеса", "спорить", "считаем", "джастин", "священник", "хвост", "деревне", "меняется", "украла", "ждешь", "снимки", "начинаешь", "признаю", "специальный", "берегу", "дадут", "присаживайтесь", "сиськи", "касл", "сообщил", "кит", "злой", "перейти", "визит", "победу", "привлечь", "натворил", "борьбе", "важна", "уважение", "судьбы", "задавать", "свобода", "болтать", "интернет", "микки", "нина", "одиноко", "музыки", "включить", "рейс", "осторожны", "сорок", "говард", "заднем", "попозже", "любая", "потратил", "комиссар", "джордан", "свободна", "местом", "арестованы", "спальне", "натали", "подери", "правой", "трус", "понимал", "шли", "дед", "убежище", "убежать", "чая", "браун", "какими", "радости", "позор", "вызову", "придти", "молодая", "характер", "продолжается", "лошадей", "температура", "кухню", "жестоко", "впечатляет", "агенты", "подругой", "зои", "попросили", "горит", "предположить", "тодд", "херня", "художник", "тревога", "старался", "номере", "стрит", "приходила", "нести", "плачет", "угадаю", "опасен", "ищете", "путем", "сторона", "ждите", "причинить", "проходи", "красивое", "стюарт", "приказы", "жутко", "мост", "плану", "уволить", "запрещено", "тост", "пэм", "неизвестно", "спине", "испугался", "рэнди", "идиоты", "подпись", "набор", "энтони", "удивлен", "штатов", "убийцей", "влюблен", "камни", "враги", "партии", "стола", "принесите", "обувь", "подходящее", "границу", "подумаю", "объект", "братан", "сэмми", "кенни", "правдой", "кровотечение", "берет", "разговаривает", "луиза", "порой", "неудобно", "понимают", "входи", "реакция", "самостоятельно", "чувств", "картина", "автобусе", "большей", "заказать", "сел", "приказал", "вопросом", "удача", "сэма", "влюбился", "ногах", "охрану", "поживаете", "беда", "поторопись", "отце", "притворяться", "возвращения", "тень", "советую", "недолго", "верится", "зашла", "попался", "слышит", "справится", "важные", "возвращением", "предложения", "планету", "серии", "николь", "выходной", "кресло", "поездки", "нормальный", "долю", "тина", "эдвард", "умнее", "магия", "двигатель", "звоните", "вечность", "привык", "невиновен", "рори", "кузен", "отношению", "начнут", "потише", "винс", "парочку", "останемся", "звуки", "мешает", "глупость", "собственность", "карлос", "таков", "потери", "понимаем", "лиам", "оборудование", "заказал", "маленькое", "книг", "гнев", "смеется", "помимо", "слушал", "поверишь", "парочка", "приведет", "бут", "главного", "желаете", "красивой", "платит", "офицера", "чаю", "белье", "сосредоточиться", "берегись", "пустой", "мудак", "кристин", "отделение", "университете", "милые", "вернул", "четверо", "тепло", "прямой", "глубже", "линдси", "эффект", "пульс", "трудом", "пускай", "пятьдесят", "ночной", "грубо", "опухоль", "четырех", "паркер", "выполнять", "проводит", "линия", "обид", "кончится", "оуэн", "берите", "кричит", "темноте", "устроим", "спасать", "майами", "пиццу", "беспокоить", "покой", "малыша", "сходи", "марко", "босса", "грей", "занимаемся", "солнышко", "леонард", "бегать", "дневник", "моменты", "испортить", "неприятно", "домик", "мэй", "стекло", "прими", "влюблена", "ян", "ужина", "объяснение", "эээ", "мю", "допустить", "крыше", "тхэ", "ожидать", "детектива", "провёл", "крик", "называли", "играла", "выразить", "успокоиться", "джорджа", "надежду", "всяких", "использую", "сильным", "градусов", "морской", "марш", "починить", "уилсон", "замке", "крепко", "послали", "заплатили", "спокойствие", "скучал", "согласились", "такому", "собственные", "событие", "дама", "используй", "дженна", "извиняться", "предал", "нанять", "соль", "сидела", "би", "теории", "стул", "месть", "ошибкой", "терпение", "целых", "вида", "обязанности", "поздравления", "выхожу", "днях", "сна", "выясним", "приятный", "медсестра", "капли", "здоров", "карла", "прекрасные", "отделе", "чёртов", "дочка", "небе", "шее", "диана", "исчезнуть", "барт", "райли", "остаток", "птица", "встань", "клетки", "чжун", "лиззи", "ставить", "программе", "новостях", "пропали", "разговаривала", "разговоров", "выиграли", "ноль", "плачь", "эмоции", "пространство", "увидят", "заодно", "возражаешь", "сменить", "выполнить", "используя", "считай", "ударить", "вывести", "пальцем", "хейли", "веру", "эх", "законы", "сомнений", "клиенты", "усилия", "посадить", "сотрудников", "позвать", "врачу", "ходишь", "трейси", "горячая", "природы", "эдриан", "утверждает", "почувствовала", "показывать", "английский", "исследование", "знай", "золотой", "костюме", "чо", "благодарна", "сойти", "тщательно", "просим", "идеальный", "полезно", "умно", "студии", "погода", "км", "поставь", "командой", "средств", "объяснять", "тв", "диване", "жених", "кнопку", "ванну", "председатель", "обстоятельствах", "пойдут", "следующим", "рим", "нетерпением", "телефоне", "изнутри", "воняет", "минутка", "позволишь", "юг", "страсть", "нью", "взрослые", "течении", "задумал", "настоящую", "моника", "трусы", "следил", "иск", "предыдущих", "опаздываю", "присядь", "джеймса", "передал", "покинул", "втором", "эфире", "разрешите", "питера", "наоми", "списка", "рассчитывать", "коем", "эксперт", "произойдёт", "дэйв", "личной", "центра", "ставлю", "прочитал", "рынок", "принца", "лагере", "вызвали", "позицию", "семьёй", "агентов", "реальности", "поворот", "отказалась", "дышит", "бегите", "личного", "расходы", "игрок", "лодка", "меган", "театр", "полон", "предупреждение", "бывшей", "опыта", "океан", "сердцу", "смириться", "знакомо", "судно", "блэр", "приговор", "уважаю", "секретарь", "единственной", "условиях", "языке", "робби", "открыто", "заставило", "молодых", "паспорт", "экзамен", "гордиться", "шампанское", "движется", "раскрыть", "фирмы", "ошибок", "используем", "возраст", "жен", "меню", "чести", "американцы", "пострадал", "несправедливо", "найдется", "белых", "грег", "южной", "болван", "лемон", "тишина", "филипп", "пределами", "надень", "заслуживаешь", "бедняжка", "напишу", "доверяешь", "тюрьма", "угрозы", "пробовал", "никки", "коул", "небеса", "справился", "даг", "трюк", "приносит", "войска", "страдать", "плохих", "поговорили", "вела", "вошел", "бабушки", "бассейн", "шарлотта", "конечном", "руль", "венди", "стефан", "проснулась", "всякие", "приготовила", "водить", "денни", "удивлена", "планета", "насилия", "бегом", "марка", "бросьте", "груз", "показали", "сняли", "записать", "смс", "эл", "диск", "местные", "помогаю", "силе", "прятаться", "сегодняшний", "глянь", "предлагаешь", "присутствие", "членом", "худшее", "грязные", "ын", "редактор", "советник", "полицией", "временно", "начнет", "салат", "ненавидеть", "называешь", "пойдёмте", "пропустила", "старую", "наполовину", "летит", "строить", "подробности", "кей", "ричи", "беде", "крики", "духа", "захотела", "миледи", "делается", "числа", "помешать", "переехал", "молчание", "длинный", "горячий", "закону", "феликс", "воли", "долгий", "ищите", "пушку", "сравнению", "рынке", "подозреваемого", "напугал", "чемодан", "американский", "нападения", "захватить", "спасение", "спрашивала", "жизней", "купи", "борьбы", "начиная", "пароль", "шкафу", "многим", "военные", "германии", "выросла", "судьи", "исчезли", "гас", "грех", "обычные", "выглядела", "уходят", "сны", "спятил", "арестован", "ухо", "блюдо", "симпатичный", "молока", "дьявола", "разберемся", "нахожу", "сдаться", "лори", "привели", "тяжелый", "грязи", "важен", "насилие", "повесить", "спасения", "университета", "обещали", "подобных", "граф", "поступок", "способность", "поднимайся", "молод", "чересчур", "потеря", "футов", "уезжать", "обеих", "сдал", "женщинам", "мяса", "боги", "хей", "смеешь", "удара", "процессе", "красная", "досье", "предупреждаю", "пройдёт", "велел", "сотрудничать", "достану", "моря", "ублюдки", "битва", "сигареты", "читаю", "нужды", "темно", "дрю", "переведено", "версия", "идемте", "объявление", "поймет", "кольца", "дворец", "преступников", "тайна", "стреляйте", "гомер", "джонатан", "поезда", "причинам", "поднимите", "тайны", "познакомился", "вытащил", "заставит", "прислали", "боя", "сердечный", "игр", "опоздала", "присяжных", "наделал", "северной", "нервы", "позволили", "поживаешь", "бывало", "файлы", "первыми", "слабость", "чудесный", "мировой", "возвращение", "поставили", "называет", "просьба", "собрал", "установили", "особенный", "подозреваемых", "хранилище", "формы", "преследовать", "средство", "синий", "полтора", "попытки", "старым", "спуститься", "мгновение", "джина", "выстрелил", "допрос", "примеру", "повторится", "телефоны", "японии", "голубой", "идей", "мальчишка", "всяком", "алкоголь", "удовольствия", "устроили", "наручники", "коннор", "подкрепление", "приз", "клаус", "рана", "убита", "признался", "уеду", "боитесь", "политика", "показала", "восхитительно", "числе", "технически", "уладить", "прогуляться", "бал", "джен", "получаешь", "йо", "вставать", "отправлю", "отдыха", "пункт", "выступать", "убраться", "дэвис", "брошу", "описать", "поможем", "холли", "третьего", "спали", "эйвери", "повидаться", "влияние", "доказывает", "победы", "мнения", "среду", "присесть", "прекрасной", "родной", "эли", "очков", "альбом", "белая", "парой", "случаях", "ка", "очередной", "приготовил", "обеспечить", "произошла", "ловушка", "написали", "третья", "корабли", "победитель", "мэра", "грязь", "грязный", "рабочий", "неприятностей", "лана", "александр", "принимал", "особенное", "поезде", "коллега", "здрасьте", "военный", "солгал", "слову", "варианты", "мэтью", "спрятать", "позвонит", "минута", "вмешиваться", "предложили", "агентом", "верят", "браке", "барбара", "символ", "забудем", "точности", "ада", "главной", "единого", "лечения", "намерен", "монро", "возвращаемся", "ненавидят", "уйдешь", "угрожал", "осмотреть", "признаков", "поужинать", "назови", "деревья", "создание", "правый", "отвести", "отныне", "середине", "возьмём", "блага", "королевы", "ответьте", "ронни", "чтож", "воле", "центов", "мести", "кира", "совести", "мередит", "пуаро", "сильные", "успеть", "носом", "разбил", "газете", "деревню", "дженнифер", "рики", "эллиот", "кампании", "лжец", "поженились", "приветствую", "деревни", "зайду", "си", "человеке", "трогайте", "врата", "сходим", "нервничаю", "объясни", "принимаешь", "идеей", "случаев", "спи", "встречаешься", "положите", "хорошем", "сексуально", "считала", "существа", "следующую", "называй", "жителей", "часами", "ответственности", "порно", "готовит", "кэт", "полночь", "служил", "дрянь", "выйдем", "двор", "указывает", "руби", "мобильный", "дадите", "красотка", "убираться", "цифры", "большом", "ношу", "разговариваешь", "безопасное", "привез", "вернёшься", "уважением", "отдайте", "документов", "ам", "выиграла", "застрелил", "старина", "сити", "размера", "собирать", "гм", "бросать", "галстук", "зашли", "сли", "компанией", "скорая", "кинг", "молчи", "жители", "решит", "коллеги", "едят", "одежде", "верь", "кладбище", "собственно", "целое", "аэропорту", "плавать", "действие", "дерева", "старика", "подходи", "калифорнии", "грехи", "услуги", "чемпион", "покажет", "иван", "улицах", "ошибаюсь", "вынести", "альберт", "допустим", "сторон", "добрые", "бывшего", "бизнесе", "переехала", "повреждения", "найдёшь", "незаконно", "тупая", "сидели", "виктория", "таки", "занятие", "глядя", "примет", "выглядело", "спок", "доступа", "бою", "расстоянии", "улица", "соврал", "держишь", "языком", "упоминал", "мертвых", "сид", "кошка", "майя", "создали", "организовать", "преимущество", "забирай", "россии", "гарольд", "губернатор", "добр", "лезь", "дерьмом", "держат", "снимок", "сцены", "режиссер", "образование", "просишь", "больница", "превратить", "писатель", "ели", "птицы", "чистый", "собралась", "дяди", "толпа", "сэндвич", "связался", "подписал", "награду", "необязательно", "перестала", "миссии", "открыта", "чрезвычайно", "склад", "грин", "прощайте", "читаешь", "ловушку", "скучала", "невесты", "спрятаться", "заклинание", "роз", "национальной", "сладкий", "дно", "оператор", "учил", "глупостей", "смена", "общий", "войдите", "живёшь", "рост", "идете", "льюис", "рецепт", "дилан", "остальными", "выключи", "нелепо", "погибла", "человечества", "бокал", "господина", "евро", "ребенку", "максимум", "спрашивай", "местный", "случалось", "катастрофа", "целом", "чистая", "кожу", "рози", "игрушки", "алисия", "ланч", "зуб", "элейн", "детях", "собственное", "неплохая", "клара", "банки", "измениться", "аллергия", "норман", "свидетели", "очнись", "двойной", "сообщу", "стар", "ездил", "поменять", "огромные", "путешествия", "шляпу", "поездку", "залезай", "плохим", "неудачник", "шоколад", "рут", "эрл", "джеффри", "тварь", "предатель", "наличными", "иисусе", "словом", "дю", "шампанского", "мер", "свидетелем", "сутки", "начался", "стояла", "старое", "сведения", "демон", "понадобятся", "пирс", "гулять", "отдых", "фантастика", "чон", "подарить", "услышали", "разделить", "пушки", "ехал", "группой", "причем", "заставляй", "мэтти", "поддержка", "бара", "леса", "союз", "надпись", "углом", "бумажник", "попало", "нравилась", "волосами", "веселье", "местных", "городской", "месту", "лечь", "донни", "страдания", "карьера", "настало", "поскорее", "коробке", "милой", "юмора", "кризис", "присяжные", "черная", "гордость", "повезет", "едой", "ручку", "проклятие", "проводил", "независимо", "позвал", "коктейль", "отчёт", "территорию", "похитил", "сигнала", "хер", "едут", "придумала", "шелдон", "представлял", "видеться", "энергия", "могилу", "особый", "непременно", "обучение", "наслаждайся", "технологии", "медведь", "пистолета", "тайне", "европе", "замешан", "сумка", "называю", "заботится", "обмануть", "дошло", "добрался", "облажался", "получают", "шерифа", "шуток", "рака", "чьи", "заболел", "уснуть", "предложила", "называл", "неплохой", "убиты", "пытайся", "злиться", "наука", "отношении", "военных", "тесты", "ожидания", "глубине", "начинайте", "коробки", "соседей", "благодарность", "передумал", "кругом", "заслужила", "достичь", "серьезные", "шоке", "оставляет", "иисуса", "мечтала", "пустая", "шейн", "убийством", "бил", "окончена", "справедливости", "присматривать", "предмет", "изменились", "злюсь", "повернись", "потрясающий", "самолете", "свидании", "основания", "банды", "влюбилась", "округа", "отставку", "электричество", "вызовите", "предотвратить", "ущерб", "джентльмен", "пожениться", "ошиблись", "остаюсь", "зоне", "расписание", "выпустить", "запад", "яйцо", "ин", "фиби", "отвечаю", "белом", "лекс", "русский", "реке", "связана", "пляж", "профессора", "отрицать", "считали", "ужином", "вдоль", "изменила", "сейф", "продюсер", "убежал", "здоровья", "обещай", "тайну", "дурака", "некоторым", "уважать", "двигайтесь", "оправдание", "фонд", "занятий", "обнаружила", "поймают", "закончился", "объясните", "напуган", "врачом", "ценой", "потеряю", "модели", "семи", "маршалл", "бабуля", "зови", "янг", "целиком", "угрозой", "кормить", "выборы", "ящике", "общее", "сайт", "соус", "опоздали", "плечо", "подругу", "перенести", "планировал", "ненавидел", "цветок", "моложе", "кара", "прожить", "травмы", "координаты", "окончательно", "вздыхает", "образцы", "входа", "благодарить", "свободно", "убийц", "договориться", "покажем", "фрэнка", "чувствах", "предоставить", "лучшем", "симптомы", "мужчине", "ходи", "подготовить", "открытие", "заснуть", "рассказ", "скорого", "писала", "уезжает", "оставишь", "близок", "копию", "вошла", "костюмы", "детский", "приведи", "арти", "выпивку", "магии", "дана", "попытаюсь", "пан", "станете", "волк", "снимите", "пойди", "интересный", "подход", "джулиан", "займёт", "остановит", "эллен", "познакомить", "матч", "труда", "интересах", "мэнни", "веры", "дэвида", "пишут", "коробка", "отпраздновать", "приготовлю", "приводит", "чжи", "травма", "великого", "чашку", "всякое", "борьба", "вслух", "молодые", "заглянуть", "впрочем", "предупреждал", "верните", "чист", "положено", "вспомнила", "зоны", "гостиной", "живете", "конкурс", "пак", "пенсию", "находимся", "продажи", "хотеть", "беспорядок", "шар", "помогают", "показаний", "обвинить", "вчерашнего", "ооо", "небольшую", "нейт", "отвечу", "акции", "чхве", "заключается", "гараже", "выяснили", "громче", "уйдем", "страдает", "цены", "диван", "ряд", "пропало", "вселенная", "сахара", "отличается", "важным", "многого", "привёл", "каковы", "захотелось", "капитаном", "гольф", "стресс", "выбросить", "владеет", "вариантов", "совесть", "неудивительно", "сообщите", "представления", "рабочих", "акт", "требую", "шин", "примите", "птиц", "проверила", "займемся", "молодцы", "банда", "протестую", "члена", "убедись", "базы", "описание", "эфир", "потрясающая", "тереза", "схватил", "макги", "оплатить", "хаос", "знания", "полицейским", "испытание", "лифт", "поймут", "открыли", "перчатки", "переживать", "прикрытие", "приходили", "должности", "лететь", "следит", "сошли", "переживаю", "честным", "интересы", "поискать", "направляется", "анализы", "решено", "создания", "понадобилось", "угрожает", "остаются", "зеленый", "зарплату", "думая", "родственники", "нора", "застрелили", "дебби", "мною", "одинаковые", "получал", "закрыты", "проникнуть", "лежал", "успешно", "мыслей", "захотят", "брук", "сбежали", "мужики", "трудности", "зверь", "спросили", "грани", "эксперимент", "осторожна", "называем", "ярости", "аварию", "органы", "выйди", "копа", "департамент", "альфа", "закончились", "обычное", "королем", "ходу", "подходите", "андре", "цветов", "фанат", "ела", "следуйте", "ждём", "преследует", "лучшую", "французский", "милость", "какому", "открывать", "наступит", "любимое", "костей", "лгал", "кретин", "вернули", "проходил", "фирма", "выслушать", "пиздец", "сцена", "скандал", "удалить", "быстрый", "вели", "долгая", "сжечь", "эмм", "легенда", "полным", "дик", "поболтать", "песен", "номером", "повтори", "понадобиться", "глория", "орудие", "займись", "удачу", "намерения", "хаус", "кармен", "озеро", "вошли", "увы", "телевизору", "копия", "семейный", "волю", "рыбы", "подвал", "улыбка", "красные", "круче", "скотти", "видом", "материалы", "выяснил", "хреново", "перекусить", "колин", "коммандер", "немало", "надеемся", "уезжаешь", "мотор", "тео", "придумали", "поговорите", "звездой", "спят", "одолжить", "спаси", "гектор", "репутацию", "бензин", "сериях", "братишка", "молодым", "звонят", "закрыли", "сильное", "представлять", "согласится", "напугана", "атаку", "городом", "информацией", "воля", "пятно", "статья", "долгу", "ники", "следите", "чертова", "илай", "поставлю", "аккуратно", "куски", "почте", "пас", "чертям", "раздражает", "рок", "голодна", "токио", "мелкий", "плачешь", "продолжаться", "честное", "выпускной", "гору", "строго", "пиджак", "обыск", "милым", "сидни", "идиотом", "сошёл", "пилот", "жалость", "харрис", "инструменты", "свежий", "скоростью", "врал", "записал", "съездить", "проходить", "ненависть", "домов", "напиток", "чертовы", "тремя", "снято", "пообещал", "посмотрела", "перевести", "свалить", "кеннеди", "смотрим", "протокол", "лондона", "сводит", "разумно", "собственных", "аарон", "восток", "холодильник", "рукам", "поверит", "приступим", "полдень", "рта", "уважении", "запомнить", "переспать", "пианино", "попроси", "врешь", "родила", "дата", "стена", "крыши", "крыса", "хватай", "начались", "массаж", "сумки", "слух", "ощущения", "долги", "вернитесь", "небес", "доверься", "рулем", "бессмысленно", "сентября", "давали", "даешь", "век", "нечем", "советы", "подвезти", "стэнли", "дыру", "фотографий", "послала", "напугать", "появилось", "закрыт", "преступника", "неба", "бывал", "империи", "пыль", "связать", "молиться", "зону", "испугалась", "защите", "карте", "врем", "сидите", "финн", "неподалеку", "заходил", "знакома", "предпочел", "христа", "очистить", "пропустили", "длинная", "сир", "преступлений", "извращенец", "добрались", "заключить", "закончишь", "вдвоём", "обществе", "достала", "двенадцать", "поцеловал", "одинок", "фрэнсис", "признаки", "валентина", "месяцы", "умрут", "антонио", "облегчение", "открывается", "йен", "средней", "важны", "газету", "фильмов", "положила", "волны", "годится", "покончено", "поверхности", "грязная", "собраться", "стерва", "ткани", "берут", "открыла", "носишь", "девчонку", "специалист", "секретов", "найдёт", "аж", "родом", "трагедия", "рене", "смешной", "десерт", "остановка", "меняются", "дафни", "изабель", "дозвониться", "версию", "авеню", "тысяча", "фишер", "статьи", "лед", "рассел", "забота", "застряла", "отказ", "пятнадцать", "учителем", "сильной", "заставлю", "задания", "синди", "лидия", "победили", "значок", "ремонт", "голода", "заходит", "единственные", "помогаешь", "бутылки", "напитки", "наслаждаться", "сексе", "устали", "спрятал", "метод", "гвен", "рождеством", "красоты", "бишоп", "поднял", "поедет", "козел", "мэдисон", "записей", "велосипед", "брэд", "ногой", "суждено", "задержать", "шпион", "постарайтесь", "гейл", "поверила", "смешного", "подумаешь", "одет", "наняли", "навыки", "пальца", "вёл", "звонишь", "лодки", "шок", "растет", "черные", "кэмерон", "объяснил", "повышение", "дейзи", "позаботься", "курт", "мужской", "рабочие", "ожидает", "выступить", "ферме", "рис", "продолжаем", "бена", "относиться", "собеседование", "виню", "флаг", "убьешь", "ступай", "змея", "паре", "охотник", "заработал", "управляет", "природа", "охранник", "ника", "аренду", "убейте", "стараться", "поступки", "оставалось", "возьмешь", "симпатичная", "поступили", "кость", "интересная", "читает", "политики", "довольны", "бесит", "выходил", "читали", "позову", "сядьте", "агентство", "попытается", "чужие", "мужчинами", "крыша", "берег", "золота", "стейси", "мардж", "доллар", "реку", "тара", "перезвони", "пишешь", "сообщений", "рту", "проекта", "курок", "рассказывает", "охота", "выпила", "взрослых", "похищение", "небольшие", "спорим", "появиться", "ра", "вампир", "вылезай", "позволяй", "ошиблась", "файл", "вилли", "серьезное", "догадаться", "преподобный", "тянет", "сумке", "мертвым", "живём", "академии", "напрасно", "худший", "милашка", "открыт", "побережье", "природе", "джи", "недоразумение", "сахар", "смены", "детективы", "тур", "изображение", "уничтожил", "бейли", "телефонный", "ошибаетесь", "синьор", "генерала", "платья", "сочувствую", "прочесть", "маску", "джулс", "направление", "успехи", "сидят", "обуви", "взялся", "инструкции", "человеческой", "светлость", "браслет", "сей", "портрет", "обман", "зашёл", "поражение", "составить", "китти", "еврей", "огромную", "училась", "ищи", "нормальной", "потратить", "выпью", "италии", "братец", "сотен", "перестали", "джейкоб", "пар", "авария", "духи", "логан", "станцию", "софия", "похоронах", "наблюдал", "проведу", "построил", "обращай", "спешить", "мебель", "новичок", "зона", "подходящий", "виноваты", "краю", "слезы", "логично", "саша", "эван", "приезжает", "кругу", "уволен", "уедем", "думайте", "флот", "музей", "ле", "космос", "отправились", "пригодится", "холодильнике", "честен", "привезти", "вопроса", "атаки", "беспокоится", "случайность", "режим", "газа", "митчелл", "плакала", "съела", "шутку", "красной", "красива", "многом", "защищает", "покоя", "лагеря", "хирург", "глупые", "церемонии", "база", "сериал", "тсс", "проверять", "габи", "королевой", "расстаться", "решает", "берешь", "газетах", "немцы", "пресса", "ударила", "кусочки", "простая", "оценки", "третьей", "впустую", "пропустите", "комплимент", "тон", "роберта", "заслуживаю", "брюки", "убедил", "необычно", "вспомни", "героя", "считая", "святая", "сценария", "закройте", "аппарат", "приведу", "лорел", "дуайт", "используешь", "аа", "соседка", "эль", "коридоре", "парне", "кен", "спрашивали", "играете", "вспоминать", "верный", "сойдет", "застряли", "каникулы", "слепой", "шёл", "возвращаются", "воспоминаний", "смену", "хозяйка", "череп", "себастьян", "носил", "кредит", "деда", "посидеть", "жалею", "небесах", "запрос", "пусто", "библиотеке", "красного", "правосудия", "скрывает", "пообедать", "страсти", "соня", "достали", "акцент", "возможностей", "уолт", "верила", "наблюдение", "комитет", "кухня", "верх", "познакомилась", "холмс", "охоту", "одинаково", "проходят", "кент", "сокровище", "обидеть", "действительности", "проводили", "совершила", "йюй", "большими", "взорвать", "свободное", "великой", "здравствует", "перевели", "леон", "доверяет", "стрелок", "чужой", "видение", "схватить", "студентов", "известен", "мелочь", "копии", "тупица", "привыкла", "останутся", "дружба", "душой", "молодого", "носят", "договаривались", "отметить", "клиентом", "захочется", "всерьез", "физически", "выключить", "льда", "сделаны", "отойти", "благослови", "упустил", "постепенно", "али", "приготовиться", "начнётся", "посол", "репутация", "ожерелье", "исчезнет", "вики", "девушками", "запустить", "проехали", "уверенность", "стук", "прячется", "роста", "подобно", "карьеры", "полотенце", "разрушил", "шрам", "ненависти", "заткнитесь", "заплатит", "крест", "идиотка", "старшей", "методы", "трата", "продукты", "печень", "исключительно", "рубашка", "божий", "произвести", "принесет", "крутая", "существование", "ветра", "чжэ", "вампиров", "виновным", "предупредил", "фон", "зацени", "посадили", "отдавать", "славы", "дым", "люка", "миллиардов", "проверку", "разрешил", "узнай", "королю", "пабло", "сделан", "хорошими", "заставлять", "откровенно", "мотоцикл", "устрою", "научилась", "доверия", "сладкая", "поет", "плоть", "уоррен", "умрем", "обещаешь", "завидую", "следят", "пьер", "сыграем", "путём", "актриса", "гадость", "кота", "джинни", "успели", "смеются", "полуночи", "становишься", "отдали", "учится", "уезжаем", "заинтересован", "носа", "подойдёт", "приют", "гараж", "простое", "плоти", "пошутил", "эмбер", "стихи", "надел", "линкольн", "славно", "чудеса", "держали", "прощу", "романтично", "поход", "чертову", "парням", "спрашиваете", "станция", "выходят", "присаживайся", "растут", "мужика", "поешь", "зарабатывать", "бардак", "пустыне", "закрыта", "кататься", "стен", "живее", "удачно", "пенис", "успокоить", "невинных", "участвовал", "режиссёр", "бак", "дату", "прямом", "основе", "третьем", "сезона", "июля", "цене", "забывать", "сложный", "уэйн", "позвонишь", "любимой", "играй", "годом", "теряем", "крылья", "помогала", "привыкнуть", "любимые", "нахожусь", "конфеты", "флота", "друге", "ближайшее", "вине", "правосудие", "бойтесь", "неправ", "напиши", "кайфом", "подозрения", "хлеба", "сказав", "перемены", "свечи", "подождем", "пила", "обороны", "сми", "куртку", "представитель", "умница", "принадлежат", "помещение", "устраивать", "нарушил", "предчувствие", "старалась", "красное", "горячо", "кролик", "сумма", "предположим", "шелби", "умеют", "готовлю", "руди", "матушка", "половины", "просят", "родственников", "продолжал", "закончена", "подготовиться", "бумага", "подойдите", "науки", "дэниэл", "производство", "обнаружить", "кокаин", "снов", "обманул", "напрямую", "пустите", "тайно", "оставляю", "среднего", "учеников", "курица", "получат", "уходил", "поступают", "отложить", "ошибался", "храм", "девчонок", "степень", "отпущу", "элен", "поженимся", "днями", "нахрен", "мерлин", "выслушай", "сигарету", "уйдёт", "поразительно", "отключить", "придумаем", "рита", "забавный", "шторм", "майки", "редакция", "водителя", "дороже", "щас", "внести", "проклят", "рэймонд", "график", "фрейзер", "испортила", "битвы", "документ", "прибыль", "землей", "поделаешь", "разговариваем", "переехали", "выпустите", "честный", "пицца", "найден", "игнорировать", "корова", "поймите", "одних", "избегать", "некогда", "школьный", "выборов", "сломать", "жалеть", "миранда", "глубокий", "богов", "побег", "писем", "юная", "заболела", "марго", "зависимости", "робот", "аппетита", "вашингтоне", "благодарности", "лме", "почитать", "оказать", "развода", "шевелитесь", "отвечаешь", "синдром", "поговорила", "хозяина", "текст", "отчаянно", "бумагу", "почерк", "шмидт", "учили", "поддерживаю", "резко", "проверял", "спорт", "начальника", "придёшь", "покончил", "джозеф", "идёмте", "совпадает", "дерьме", "сэнди", "веселиться", "ау", "держится", "стряслось", "джуди", "спальню", "джилл", "африке", "колесо", "прыгай", "терапии", "заметит", "справедливость", "бутылка", "увеличить", "останетесь", "отпечатков", "дракона", "значило", "симпсон", "ведёшь", "шкаф", "подошел", "сном", "пистолетом", "великим", "пациенты", "запомнил", "победит", "реджи", "фокус", "называете", "маленьком", "мартина", "ленни", "эрин", "страшный", "продали", "кристи", "крейн", "гора", "поколения", "пообещай", "адреса", "торопись", "мечтать", "огда", "присутствии", "великолепен", "путешествовать", "поставила", "уильямс", "вопросу", "проиграли", "луну", "состоится", "успела", "данном", "лжет", "планировали", "декстер", "вдох", "теряет", "проблемами", "китай", "лесбиянка", "розы", "алиса", "холодный", "несет", "открыты", "участка", "милях", "приятное", "шума", "давления", "сложная", "тяжелая", "длинные", "офицеры", "выбираться", "обычной", "соответствует", "мерзавец", "боссом", "предлагает", "выпустили", "спектакль", "одеяло", "остановил", "карьере", "совершили", "таблеток", "ловушке", "довольна", "богатый", "нарочно", "кэм", "великолепна", "сдаюсь", "отказываюсь", "кончилось", "села", "ричарда", "озера", "даниэль", "детки", "воображение", "заполнить", "нанести", "заместитель", "фамилию", "вру", "оставит", "солгала", "прояснить", "откажусь", "светит", "парковке", "горах", "качества", "опасный", "желудок", "племянник", "ноге", "великая", "состояния", "личная", "побежал", "ручки", "грозит", "мая", "выкинуть", "слышь", "рану", "лучшими", "проходили", "самих", "покончим", "усилий", "самолета", "выбирай", "остановится", "выяснилось", "сет", "личную", "индии", "ловить", "спеть", "проведем", "нуждаюсь", "ближайшие", "согласие", "правильное", "передачу", "всякой", "рюй", "забочусь", "вылечить", "любимых", "кирк", "лови", "пейдж", "выпуск", "алек", "услышит", "любому", "ракеты", "лекарств", "отправимся", "рекорд", "пожалеешь", "кончай", "чип", "давала", "ужинать", "секрете", "упомянул", "носу", "поверю", "тащи", "маршал", "мона", "диагноз", "наслаждайтесь", "ромео", "филип", "хобби", "шляпа", "хэй", "дождя", "приветик", "подстрелили", "позволим", "врачей", "копом", "казаться", "кристофер", "подставил", "стадии", "начни", "тупик", "ужасной", "разрыв", "себ", "главе", "превратился", "американцев", "человечество", "ребятки", "позаботится", "гони", "клетке", "вторжение", "отказывается", "приведите", "ствол", "опознать", "дем", "голосом", "иль", "слушание", "появятся", "обвинений", "соболезнования", "бежит", "напасть", "пес", "ванесса", "бекки", "парка", "свитер", "встаньте", "передачи", "пёс", "шутить", "включи", "умрёшь", "прыгать", "носки", "крысы", "слушаюсь", "занимает", "ванную", "купим", "сексуальный", "кэсси", "милое", "крепче", "бежал", "учились", "лемъ", "вирджиния", "плакал", "забирать", "эстер", "вызвала", "зовите", "заключение", "продажу", "партия", "третье", "молода", "данным", "медовый", "проводим", "чувствуют", "император", "поведения", "площади", "беспокоишься", "зубов", "глазам", "минди", "взломать", "позднее", "блейк", "создавать", "прогресс", "лестницы", "отказались", "основной", "лев", "упустили", "луны", "оценить", "рисовать", "персонал", "торопиться", "огромной", "короткий", "дорог", "гляди", "печать", "ставит", "кандидат", "редактируется", "ждёшь", "ресторана", "трупы", "дыра", "клинику", "фр", "минус", "обожает", "опустите", "спор", "папаша", "клетку", "беременности", "лаборатория", "трубы", "присутствовать", "объявить", "окончания", "читай", "шикарно", "остатки", "буквы", "сведению", "разума", "выгнали", "детской", "отправь", "устроила", "компьютера", "вторым", "сексуальная", "ллойд", "зубами", "кроули", "сяду", "реклама", "сделана", "масла", "свободный", "ручка", "сомневаться", "взаимно", "отпустили", "управляющий", "находился", "нормальным", "спорю", "парижа", "выросли", "подходят", "становиться", "резюме", "смеешься", "словах", "присмотреть", "бенни", "смелости", "съешь", "бок", "влияет", "милли", "пойдете", "гриффин", "допоздна", "штате", "подружки", "звезд", "медицинской", "напряжение", "бросает", "пасибо", "офицеров", "св", "отпечаток", "герр", "частный", "пи", "кресле", "род", "повеселиться", "спина", "семей", "появляются", "давить", "богат", "увидев", "ноа", "зовет", "коме", "счастливая", "говнюк", "куинн", "прихожу", "юрист", "нисколько", "уилла", "окончен", "приказу", "соглашусь", "лин", "шестой", "арчи", "заявил", "награда", "любезно", "представляла", "переодеться", "адвокаты", "найдёте", "рекламу", "клинике", "дурацкий", "коленях", "работник", "разошлись", "пожить", "версии", "вынуждены", "скучаешь", "обойти", "компьютере", "рассмотреть", "миссию", "партию", "последнем", "багаж", "терпится", "делиться", "пьяный", "теряю", "забираю", "потеряешь", "работников", "риз", "кричал", "мышь", "сказки", "убежала", "находишь", "полна", "синьора", "пятый", "старших", "заявления", "уэйд", "прикрыть", "идеальное", "журналист", "результатов", "силами", "справилась", "подал", "семейные", "расследовании", "необычное", "размером", "живи", "признаюсь", "отчасти", "мили", "проклятый", "женится", "сумасшедшие", "выбросил", "случаи", "отвлечь", "спасите", "установил", "показатели", "мелочи", "распоряжении", "пережил", "случился", "детство", "снимаю", "преступники", "суду", "жар", "американских", "добрым", "джой", "знакомый", "задуматься", "сотню", "разбираться", "испытания", "ставку", "отведу", "товарищи", "заложников", "забывайте", "песок", "боба", "вик", "традиция", "вершине", "идеальная", "заплатишь", "заботился", "работай", "выпивка", "высокая", "догадался", "шерлок", "уговорить", "трогал", "пользы", "прямиком", "алкоголя", "сработать", "приезжай", "сохранять", "видения", "понравиться", "заходить", "значить", "одержим", "стояли", "белой", "восьми", "военной", "поедим", "насрать", "находит", "казни", "герои", "найдено", "наказания", "темы", "отдыхать", "сеньора", "разбираюсь", "притормози", "шелли", "приготовьтесь", "подозреваю", "обойтись", "океана", "тренировки", "правильным", "негодяй", "фиона", "мелани", "королеву", "попытку", "выбери", "сотовый", "собственном", "взрослая", "нормальные", "дойл", "платил", "бойд", "наказать", "площадке", "труднее", "сбил", "домашний", "госпиталь", "чистой", "получаем", "мерфи", "департамента", "просите", "еле", "якобы", "назовите", "холл", "гостинице", "рисунок", "страховка", "расскажете", "сотрудник", "решим", "деб", "край", "приходишь", "духом", "хранит", "преданность", "спрашивают", "закрыл", "животе", "заседание", "проход", "наличные", "злится", "комитета", "шлем", "отпустил", "продвигается", "славу", "изменили", "ухода", "сопротивление", "мечту", "ублюдка", "обязанность", "американец", "организация", "инструмент", "родная", "приблизительно", "защищал", "местам", "мусора", "признателен", "почта", "охотиться", "магию", "просыпайся", "пищу", "перестанешь", "надежде", "чепуха", "гениально", "принимают", "дональд", "бабушкой", "собакой", "устройства", "отказать", "десятки", "запасной", "настоящих", "стефани", "обедать", "поезжай", "ожидали", "стоун", "означать", "благо", "вызывают", "приглашения", "слуга", "поддерживает", "новенький", "ученик", "добился", "большинства", "достань", "ферму", "президенту", "налоги", "ворот", "томаса", "реальный", "калеб", "изучить", "выстрелы", "покер", "адвокату", "держала", "отчаянии", "белое", "автомобиля", "невесту", "важного", "лайла", "белым", "везет", "майлз", "несчастью", "жалкий", "счастливчик", "воу", "прислала", "голосов", "выдать", "встретился", "судебный", "обедом", "финч", "проверки", "подойду", "сары", "найдётся", "позови", "придурки", "требуют", "находитесь", "врет", "бабушке", "подарила", "поздороваться", "новому", "выступления", "великолепный", "помолчи", "адама", "сиденье", "харпер", "джанет", "исключение", "лезть", "прессе", "маршрут", "посетителей", "нельсон", "комиссии", "молитвы", "близких", "счету", "слежу", "экран", "встречала", "дверей", "волновался", "ритм", "сделало", "воспользовался", "девочке", "кэлли", "пришлю", "мн", "ангела", "пассажиров", "депрессии", "волнуешься", "ответов", "четко", "магазинам", "наряд", "воздухом", "поймаем", "непонятно", "подтверждение", "клёво", "славный", "бедняга", "жениха", "важных", "любитель", "складе", "шагом", "руководство", "полезен", "карман", "франков", "улыбаться", "простит", "продолжают", "яблоко", "романа", "выбираю", "прочитала", "нашло", "построили", "вайолет", "сексуальные", "поймёшь", "умеете", "способы", "положу", "чудесная", "схватили", "фирме", "праздновать", "явился", "рассказываешь", "соединенных", "персонаж", "изучать", "всякого", "американской", "сыром", "вертолет", "броуди", "сайте", "процедура", "гроб", "чистого", "положиться", "андреа", "сексуальной", "ноутбук", "пьет", "дождусь", "открытым", "убило", "уроков", "аэропорта", "хью", "кэл", "йоу", "языка", "передумала", "бегу", "дамочка", "потеряем", "проявить", "легкие", "тардис", "добровольно", "возьмет", "сниму", "драку", "форд", "черного", "глазом", "кошки", "поколение", "понимала", "делая", "собственная", "крутые", "готовиться", "пили", "сопротивляться", "констебль", "вивиан", "штаты", "продолжаешь", "отдохни", "фантазии", "микрофон", "иной", "клэй", "прекрасную", "настал", "конни", "теряешь", "жаловаться", "боевой", "дядю", "голосовать", "противостоять", "планирует", "уведите", "заслужили", "незачем", "прощаю", "го", "моста", "значительно", "назначил", "бш", "добрая", "историей", "личных", "волновалась", "драка", "пальцами", "предпочла", "бегах", "блондинка", "поверили", "мэдди", "кай", "отведи", "разбить", "произнести", "свести", "проверяю", "историй", "порядка", "начнешь", "гари", "олли", "оставался", "прекрасным", "печени", "библии", "трэвис", "поищу", "субтитров", "оо", "яиц", "злая", "толстый", "легких", "мертвый", "безопаснее", "орошо", "бри", "энджи", "следили", "исследований", "птичка", "работ", "пропуск", "отнести", "справляешься", "вступить", "миг", "двум", "нормальная", "разочарован", "продолжаю", "свидетельство", "цепи", "серийный", "замка", "трахнуть", "ёй", "съем", "выходим", "нм", "заставляют", "заехать", "противном", "приедешь", "настаиваю", "простого", "падения", "ребятами", "маленькими", "имея", "лифте", "адвокатов", "лечить", "следуй", "выиграю", "выживет", "дополнительные", "постараться", "преодолеть", "свиньи", "страницы", "хилл", "велик", "река", "традиции", "расстояние", "джоном", "рискнуть", "предположение", "журнала", "поиска", "царь", "уайт", "грэм", "охотится", "разрешить", "лист", "утрам", "случаем", "совещание", "услугам", "поправится", "вытащи", "дракон", "возражаю", "битве", "колено", "удостоверение", "гитлер", "композитор", "крепкий", "атака", "шона", "открытия", "старом", "вспоминаю", "разберёмся", "расслабьтесь", "попытайся", "мик", "попадает", "впрямь", "испании", "изначально", "освобождения", "посетить", "обвинять", "происходят", "палмер", "жюри", "зайди", "причинил", "взгляда", "ку", "прикольно", "рей", "величества", "девочками", "бинго", "марии", "пределы", "подонок", "высокие", "висит", "чокнутый", "устроит", "ушло", "убивала", "переспал", "спускайся", "решением", "копать", "учительница", "близнецы", "прах", "зрелище", "рекламы", "министерство", "обморок", "органов", "трудный", "требования", "доусон", "четверть", "помощника", "ареста", "завтрашнего", "половине", "конверт", "времён", "полли", "соответствии", "соревнование", "усердно", "четвертый", "нервничать", "ри", "похуже", "продают", "ремень", "курсы", "местонахождение", "открывает", "говно", "трой", "плечи", "флоррик", "оставляй", "ответили", "достанется", "чьей", "долгие", "кораблей", "насквозь", "обратном", "исполнилось", "выстрела", "использование", "приедут", "условии", "шеи", "убивали", "кошмары", "состав", "дядей", "теста", "соберись", "странного", "достиг", "священника", "останки", "штатах", "макса", "покупает", "ударили", "июня", "лука", "признай", "теорию", "собственными", "цирк", "обнять", "велосипеде", "высоте", "мэнди", "поют", "вскрытие", "дозу", "собрали", "отличным", "музыке", "игроков", "любовник", "хуя", "ехали", "соседству", "пламя", "доллара", "пожертвовать", "повидать", "покупки", "необходимое", "проблемах", "уважаемый", "берёт", "черных", "подумают", "основании", "собственности", "домашнее", "операционной", "стиви", "поссорились", "фирму", "следа", "погнали", "интересуют", "знакомству", "кейн", "мелкие", "передача", "благодарим", "гонки", "тэд", "клер", "услышишь", "противника", "кэри", "директором", "верим", "кучка", "николас", "проводишь", "ограбления", "врагом", "багажнике", "фостер", "шефа", "взгляды", "малый", "забавная", "исчезает", "развития", "няня", "клево", "серьезный", "уход", "обидно", "область", "пожелаешь", "пушка", "лежат", "пространства", "хон", "кабинета", "кону", "диего", "отто", "марио", "сломался", "охранять", "профессионал", "округ", "назначена", "чувствовали", "гарантирую", "вдвое", "целыми", "вытащу", "обещания", "заговор", "выходишь", "аллен", "покажется", "задержали", "монстра", "уволил", "учусь", "поторопиться", "обдумать", "замену", "смирно", "дружбу", "вуди", "грейсон", "снизу", "строя", "остановимся", "духов", "заявить", "руководитель", "клятву", "пофиг", "началом", "ввести", "альфред", "несешь", "давненько", "проследить", "ви", "довериться", "познакомься", "завод", "евреев", "стереть", "скотина", "властью", "особое", "поцеловала", "кристиан", "билла", "цел", "напоминать", "желаешь", "доставили", "поверите", "срочное", "отпуске", "позовите", "великие", "любимого", "провал", "маслом", "абсолютный", "автоматическая", "автоматически", "автопуша", "авторизации", "авторизовал", "авторизуется", "авторству", "автору", "агентам", "агенту", "адаптер", "адаптере", "адресуется", "аккаунтом", "активации", "активен", "активна", "активного", "актуальное", "актуальные", "архив", "архива", "архиве", "аудит", "базовый", "байт", "бандл", "бандла", "бандлы", "батарея", "безопасных", "библиотеки", "битая", "блок", "боковая", "бота", "браузер", "браузера", "браузере", "браузерное", "будущие", "будущим", "будят", "буфер", "быстрая", "бэклог", "бюджет", "бюджета", "введите", "введён", "ввод", "вводится", "вводить", "вводу", "веб", "вебе", "вебхуков", "версией", "версий", "версиях", "весят", "ветка", "ветке", "ветку", "вкл", "вкладка", "вкладке", "вкладки", "вкладку", "вкладок", "вкладываются", "включает", "включайте", "включать", "включена", "включено", "включён", "включённых", "влево", "вложения", "вложениями", "внесены", "внешней", "внешние", "внутренние", "возврата", "возрастанию", "возьмётся", "воркфлоу", "восстановление", "впишите", "вправо", "временный", "вручную", "вставить", "вставьте", "встраивание", "встроенную", "встроенные", "встроенный", "вступило", "входы", "выберите", "выборе", "выбран", "выбранные", "выведены", "вывод", "вывода", "выводит", "выгружается", "выгружайте", "выгружать", "выгружен", "выгружено", "выгрузите", "выгрузить", "выгрузка", "выгрузке", "выгрузки", "выгрузятся", "выдачи", "выделил", "выделите", "вызова", "вызовов", "вызовом", "вызовы", "вызывать", "выкл", "выключатель", "выключать", "выключен", "выключена", "выключение", "выключения", "выключенной", "выключенные", "выключенными", "выключенных", "выключено", "выключил", "выключите", "выполнен", "выполнена", "выполнение", "выполнению", "выполнения", "выполнено", "выполните", "выполняется", "выполняться", "выпуска", "выпущен", "вырезает", "высота", "выставляется", "галочку", "гарантию", "гарнитура", "гаснуть", "генерацию", "генерация", "гибернация", "готовая", "готовится", "готовые", "готовый", "групп", "группировать", "датчики", "двоичный", "действуй", "дереве", "деревом", "держатся", "дефисы", "диагностика", "диагностику", "диалог", "диалога", "диалогах", "диалоге", "диалоги", "диалогов", "диапазон", "диапазоны", "длина", "длительной", "длительности", "длительность", "добавлено", "добавляет", "добавляется", "добавьте", "доверенных", "доверяете", "догрузить", "дождались", "дождитесь", "домашняя", "допилите", "дописала", "дополнительный", "дорогими", "доска", "доске", "доски", "доску", "достигнут", "доступен", "доступна", "доступно", "доступны", "доступные", "доступных", "дублей", "дубли", "дубль", "журналы", "заблокирована", "заблокировано", "заблокированы", "завершена", "завершения", "завершено", "завершился", "завершить", "завершён", "завершённого", "зависимостей", "зависимость", "зависимостям", "зависимостями", "зависимостях", "загляните", "заголовка", "заголовком", "заголовок", "загружает", "загружаются", "загружен", "загружена", "загруженное", "загруженном", "загружено", "загрузилось", "загрузился", "загрузите", "загрузить", "загрузка", "загрузки", "загрузчика", "задайте", "задан", "задано", "задач", "задачам", "задаче", "задачи", "задачу", "задаёт", "задаётся", "задержка", "закоммитить", "закрепить", "закрывает", "закрытие", "залогинен", "залогиненный", "заменит", "заменяет", "заменён", "занимают", "заняло", "занято", "занятости", "записан", "заполните", "запрашивайте", "запрещает", "запрещают", "запроса", "запросах", "запросить", "запросов", "запуск", "запуска", "запускает", "запускайте", "запускалась", "запуске", "запуски", "запусков", "запуском", "запустите", "запущен", "запущенные", "запятую", "заработает", "заработают", "зарегистрировать", "заряде", "засыпания", "засыпать", "зафиксирован", "звёзд", "звёзды", "идентификатор", "идентификатора", "идентификатором", "идентификаторы", "иерархия", "известные", "изложи", "изменена", "изменение", "изменений", "изменению", "изменены", "изменён", "изображений", "изображения", "именами", "импортировать", "индекс", "индекса", "индексе", "инспекция", "инструкций", "инструкция", "инструмента", "инструментов", "интерфейс", "интерфейса", "интерфейсе", "инъекция", "используется", "истекает", "источнику", "истёк", "исходник", "исходящем", "итог", "картинки", "карточка", "карточку", "каталог", "каталога", "каталоге", "категории", "категория", "качество", "клик", "кнопка", "кнопки", "кода", "кодинг", "колонке", "команд", "командной", "комментарий", "коммит", "коммита", "коммитами", "композиции", "композицию", "композиция", "компонент", "консоли", "консоль", "конструктор", "контекст", "контекста", "конфиг", "конфига", "конфигурации", "конфликт", "конфликтов", "конфликтует", "конфликтующие", "конфликты", "копировать", "копирует", "копируется", "корзины", "корпоративные", "корректное", "критерии", "крупные", "крышки", "куки", "кэш", "кэша", "лету", "лимит", "лишних", "локальная", "локально", "локальное", "локальной", "локальные", "локальный", "манифест", "маркет", "маркета", "машинами", "международный", "мес", "минимальный", "многошаговые", "моделей", "моделью", "моделями", "моноширинный", "наблюдений", "набросать", "навстречу", "нажатием", "нажмите", "названию", "назначение", "назначить", "найдена", "найдены", "наличие", "написан", "написанное", "напишите", "напоминание", "направит", "направить", "направлять", "наследовать", "настроек", "настроить", "настройка", "настройками", "настройках", "настройки", "настройку", "настройте", "находок", "начат", "начните", "небезопасно", "неверная", "неверное", "неверные", "неверный", "неверных", "недопустимом", "недоступен", "недоступна", "недоступно", "недоступны", "незавершённая", "неизвестен", "неизвестное", "неизвестному", "неизвестный", "необязательным", "непересекающиеся", "неподдерживаемая", "неподтверждённые", "несовпадения", "несохранённые", "неуказанные", "нижней", "нижнем", "нижнюю", "низком", "обзор", "обмена", "обновился", "обновите", "обновить", "обновлена", "обновление", "обновлений", "обновления", "обновлениями", "обновлено", "обновляется", "обновлён", "обновлённые", "обработано", "обратного", "обратным", "обращении", "обращению", "обрезан", "обрезано", "обход", "общей", "общие", "объявленный", "объявленными", "объявлены", "объясняй", "обычного", "обычном", "ограничение", "ограничения", "одинаковыми", "ожидание", "окне", "окном", "окну", "окружения", "опережение", "описанию", "описания", "опишите", "оплаченный", "опознания", "определение", "определяет", "определён", "опросом", "опубликуйте", "опускаются", "опыты", "оригинал", "оригинала", "основного", "основным", "оставлено", "оставлены", "оставшиеся", "останавливается", "остановлена", "остановлено", "отброшены", "ответвить", "отвечено", "отдаются", "отдельная", "отдельно", "отдельному", "отдельный", "отдельными", "отзыв", "откат", "откатить", "отклонить", "отклонён", "отключился", "открепить", "откроется", "открываются", "открытии", "открытый", "отмена", "отменена", "отменено", "отменяющий", "отменён", "отметьте", "отмечено", "относительный", "отображаемое", "отображения", "отправка", "отправке", "отправлено", "отправляется", "отправлять", "отправьте", "отрисовка", "отсортирован", "отсортировать", "отставание", "офисных", "официального", "официальные", "официальный", "офлайн", "оформление", "охват", "оценка", "оценке", "оценку", "очерёдность", "пакета", "пакетов", "пакеты", "панели", "панель", "панелью", "папка", "папкам", "папке", "папки", "папкой", "папку", "папок", "параллели", "параллельных", "параметров", "параметры", "паролей", "патч", "патча", "патчем", "пауза", "паузе", "переданы", "переедут", "перезапишет", "перезапуск", "перезапуска", "перезапустите", "перезапустить", "переименовано", "переименовать", "переключателями", "переключитесь", "переключить", "перекрытие", "перекрыть", "переменная", "переменной", "перемотка", "перенос", "переноса", "переопределений", "переопределения", "переопределено", "переопределить", "переопределяет", "переписке", "переписку", "переподключаемся", "переподключиться", "пересмотреть", "переставить", "переставлять", "перестановок", "перетащите", "переустановит", "переустановите", "перечисляет", "песочница", "песочнице", "песочницей", "песочницу", "песочницы", "пикселей", "пикселях", "пишется", "плагин", "плагина", "плагинами", "плагинов", "плагином", "плагину", "плагины", "планирование", "платформа", "платформы", "поведением", "повреждена", "повреждено", "повреждён", "повтор", "повтора", "повторите", "повторная", "повторов", "повтором", "повторяющиеся", "повторён", "повышенных", "подборки", "поддерживается", "поддерживают", "поддерживаются", "поддержкой", "подключает", "подключить", "подключиться", "подключён", "поднят", "подписке", "подписки", "подписок", "подсессиями", "подсказки", "подставляет", "подтверждает", "подтверждаете", "подтверждений", "подтверждения", "подтверждено", "подтверждённые", "подходящих", "подходящую", "поздний", "поисков", "поисковый", "показана", "показано", "показаны", "показывается", "полноценный", "полными", "положительное", "полосы", "пользовался", "пользователей", "пользователя", "пользователям", "помечает", "помещается", "понедельникам", "попаданий", "попадания", "попадают", "поправили", "попросите", "порт", "портов", "порядком", "порядку", "постоянному", "постоянный", "потерянных", "поток", "потомков", "появлении", "пояс", "правами", "правилами", "правится", "править", "правка", "правку", "правом", "правьте", "предел", "предела", "пределах", "предложенный", "предпросмотр", "предпросмотра", "предупреждений", "предупреждения", "предыдущий", "прежние", "прежний", "прервана", "прервано", "прервать", "прерывая", "пресет", "пресета", "пресете", "пресетов", "пресету", "пресеты", "приватный", "привязки", "приложении", "приложения", "приложите", "применена", "применение", "применено", "применены", "применить", "применяется", "принудительного", "приоритет", "приостановить", "пристыковано", "пришлите", "приёмки", "пробуждение", "провайдер", "провайдера", "провайдеров", "провайдером", "провайдеру", "проверен", "проверенные", "проверено", "проверке", "проверкой", "проводник", "продолжат", "продолжаются", "продолжением", "продолжения", "продолжилось", "проектов", "пройдена", "прокрутить", "прокси", "промпт", "промпте", "пропущено", "просматриваемый", "просмотр", "просмотрщики", "простаивает", "профиле", "профилем", "профиль", "профиля", "процесса", "процессов", "прочитает", "прочитайте", "прочитано", "публичный", "пустое", "пустым", "работающие", "работающих", "работающую", "работоспособность", "рабочая", "рабочей", "рабочем", "рабочим", "рабочую", "равной", "разбиваются", "разбор", "разбора", "разбудят", "развернуть", "разворачивании", "разворачивать", "раздаёт", "раздел", "разделы", "раздельно", "различия", "разового", "разовые", "разовый", "разработка", "разрешает", "разрешений", "разрешены", "разрешённая", "разрешённые", "рамках", "ранний", "рантайма", "рантайме", "раскладка", "расписаний", "расписанию", "расписания", "располагались", "расположение", "рассмотрения", "рассуждений", "рассуждения", "расход", "расхода", "расходоваться", "расходом", "расходуется", "расхождений", "расхождения", "расширяются", "реальное", "реальной", "ревизия", "регистре", "регистрируются", "редакторе", "реже", "режима", "режиме", "резервная", "результата", "рекомендации", "рекомендаций", "рекомендация", "рекомендованный", "рекомендуем", "рекомендуемые", "рендеринга", "репозиторием", "репозитория", "решаете", "риска", "риски", "родительская", "ручной", "сайтов", "сбоку", "сборке", "сборочные", "сбоя", "сбрасывается", "сбросить", "свежая", "свернуть", "сверх", "светлая", "связывание", "сервере", "серверная", "серверный", "серверы", "сервис", "сервиса", "сессией", "сессии", "сессий", "сессию", "сессия", "сессиям", "сжат", "сжатие", "сжатия", "сжато", "сжимает", "символов", "системном", "системный", "скачает", "скачано", "скачать", "скачивает", "скачивание", "скилл", "скилла", "скиллов", "скиллы", "скопирован", "скопирована", "скопировано", "скопировать", "скопируйте", "скрипты", "скрыты", "скрытые", "слои", "слоя", "слушают", "сменяются", "смещение", "собирает", "советуем", "советуют", "совместимости", "совместимость", "совпадать", "совпадений", "совпадения", "содержимого", "содержимое", "содержимому", "содержит", "соединению", "сожмите", "создайте", "создана", "созданные", "создано", "создаём", "сойдётся", "сообщать", "сообщении", "сообщества", "сообщество", "сортировать", "сортировка", "сортировки", "сохранение", "сохранено", "сохранит", "сохраняется", "сохранятся", "сохранён", "сохранённый", "списком", "списку", "спящие", "спящий", "срабатывает", "среднее", "среднем", "ссылается", "ссылка", "ссылке", "ссылки", "ссылку", "ставьте", "стадированием", "стандартный", "статистика", "статистики", "статическая", "стек", "стороннего", "сторонние", "сторонний", "страниц", "страница", "странице", "страницу", "строк", "строке", "строки", "строкой", "строку", "строчной", "строчные", "структуры", "субагент", "субагента", "субагентов", "субагенты", "суффиксом", "существующих", "схемы", "счёту", "таблицей", "таймаут", "тариф", "тарификации", "текстовых", "текущая", "текущего", "текущее", "текущей", "текущем", "текущий", "теме", "темой", "терминал", "терминала", "терминале", "терминалов", "терминалу", "терминалы", "термины", "теряется", "тестов", "тестового", "тестовый", "ток", "токен", "токена", "токенов", "траектории", "траектория", "трогаются", "тяжёлые", "тяните", "тёмная", "уберёт", "убирает", "убыванию", "уведомление", "уведомления", "удалась", "удаление", "удаления", "удалено", "удалены", "удалите", "удался", "удаляет", "удалён", "удобнее", "удовлетворено", "удовлетворяет", "укажите", "указана", "указано", "указывайте", "укладывается", "уменьшите", "умолчанию", "уникальным", "упоминание", "упоминания", "упомянутая", "управляются", "уровней", "условие", "условию", "успешные", "устанавливая", "установка", "установке", "установки", "установкой", "установлен", "установлена", "установленные", "установленный", "установленных", "установлено", "устаревший", "устарел", "утвердить", "уточнение", "уточнения", "уточните", "участник", "участника", "участников", "учти", "учтите", "учётные", "учётных", "фаз", "фазы", "файла", "файлам", "файлах", "файлов", "файловые", "файлу", "фиксированный", "фильтр", "фильтры", "флажку", "фоновая", "фоновой", "фоновые", "фоновых", "формат", "формате", "формулировка", "функции", "хеш", "хода", "ходов", "ходы", "хост", "хоста", "хосте", "хостовую", "хосту", "хранится", "цепочка", "цикл", "цитатой", "часовой", "частично", "чат", "черновик", "чини", "числом", "чтение", "чтения", "чувствительные", "шага", "шагам", "шаги", "шагов", "ширина", "ширины", "шлюз", "шлюза", "шрифт", "шрифта", "эвристике", "экономно", "экспорт", "элементов", "эндпоинт", "эндпоинта", "эффективность", "явной", "явные", "ядра", "ёмкости", "ёмкость"]), new Set())
|
|
774
|
+
const layoutFixCandidate = layout.candidate
|
|
775
|
+
const learnWords = layout.learnWords
|
|
669
776
|
|
|
670
777
|
// Отвечаем на real input: input / input_event, слушаем на document.
|
|
671
778
|
// Читаем value у поля, где курсор (textarea/input), не трогая contenteditable.
|
|
@@ -946,7 +1053,7 @@ window.__ModuleLoader__.load({
|
|
|
946
1053
|
React.createElement('div', { className: 'rl-hint' }, t('altL')),
|
|
947
1054
|
React.createElement('div', { className: 'rl-actions' },
|
|
948
1055
|
React.createElement('a', {
|
|
949
|
-
href: makeIssueUrl(),
|
|
1056
|
+
href: makeIssueUrl({}, '0.1.32'),
|
|
950
1057
|
target: '_blank',
|
|
951
1058
|
rel: 'noopener noreferrer',
|
|
952
1059
|
className: 'rl-link'
|