forked from tashfeenahmed/freellmapi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathru.json
More file actions
844 lines (844 loc) · 61.1 KB
/
Copy pathru.json
File metadata and controls
844 lines (844 loc) · 61.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
{
"nav": {
"models": "Модели",
"playground": "Детская площадка",
"keys": "Ключи",
"analytics": "Аналитика",
"premium": "Премиум",
"upgrade": "Обновление",
"settings": "Настройки",
"signOut": "Выйти",
"openMenu": "Открыть меню навигации",
"switchLight": "Переключиться на светлую тему",
"switchDark": "Переключиться на темную тему",
"switchToChinese": "Переключиться на китайский",
"switchToEnglish": "Переключиться на английский",
"modelsMenu": "Просмотр типов моделей",
"agents": "Агенты"
},
"auth": {
"createYourAccount": "Создайте свою учетную запись",
"signIn": "Войти",
"email": "электронная почта",
"password": "Пароль",
"emailPlaceholder": "you@example.com",
"passwordPlaceholderSetup": "минимум 8 символов",
"passwordPlaceholderLogin": "ваш пароль",
"setupDescription": "Установите адрес электронной почты и пароль, которые будут защищать эту панель мониторинга.",
"loginDescription": "Войдите в систему, чтобы управлять своими ключами, маршрутизацией и аналитикой.",
"createAccount": "Создать учетную запись",
"creating": "Создание…",
"signingIn": "Вход в систему…",
"loading": "Загрузка…",
"newPasswordAutoComplete": "новый пароль",
"currentPasswordAutoComplete": "текущий пароль",
"serverUnreachableBefore": "Не могу связаться с сервером. Убедитесь, что серверная часть работает (",
"serverUnreachableAfter": ").",
"setupCode": "Код установки",
"setupCodePlaceholder": "код из логов сервера",
"setupCodeHint": "Для настройки с другого устройства требуется одноразовый код, печатаемый в журналах сервера при запуске.",
"changePassword": "Сменить пароль",
"changeEmail": "Сменить e-mail",
"forgotPassword": "Забыли пароль?",
"currentPassword": "Текущий пароль",
"newPassword": "Новый пароль",
"newEmail": "Новый e-mail",
"resetCode": "Код сброса",
"resetCodePlaceholder": "код из логов сервера",
"resetCodeHint": "Код сброса пароля смотрите в логах сервера.",
"forgotPasswordDescription": "Нажмите ниже, чтобы создать код сброса. Код появится в логах сервера — введите его здесь, чтобы задать новый пароль.",
"requestResetCode": "Отправить код",
"requestingResetCode": "Отправка…",
"resetPassword": "Сбросить пароль",
"resettingPassword": "Сброс…",
"changingPassword": "Изменение…",
"changingEmail": "Изменение…",
"backToLogin": "Назад ко входу",
"passwordChanged": "Пароль успешно изменён.",
"emailChanged": "E-mail успешно изменён.",
"passwordReset": "Пароль сброшен. Войдите заново."
},
"common": {
"save": "Сохранить",
"saving": "Сохранение…",
"cancel": "Отмена",
"discard": "Отбросить",
"delete": "Удалить",
"confirm": "Подтвердить",
"copy": "Копировать",
"copied": "Скопировано",
"copyFailed": "Не удалось скопировать — выделите текст и скопируйте вручную",
"show": "Показать",
"hide": "Скрыть",
"apply": "Применить",
"applied": "Прикладной",
"applying": "Применение…",
"active": "Активный",
"inactive": "Неактивный",
"never": "никогда",
"loading": "Загрузка…",
"error": "Ошибка",
"noData": "Данных пока нет",
"unsavedChanges": "Несохраненные изменения",
"saveChanges": "Сохранить изменения",
"remove": "Удалить",
"unknownError": "Неизвестная ошибка",
"model": "Модель",
"provider": "Поставщик",
"success": "Успех",
"failures": "Неудачи",
"dismiss": "Уволить",
"status": "Статус"
},
"settings": {
"title": "Настройки",
"language": "Язык",
"theme": "Тема",
"themeSystem": "Система",
"themeLight": "Светлая",
"themeDark": "Тёмная",
"searchLanguage": "Поиск языков…",
"noLanguages": "Языки не найдены",
"sections": "Разделы настроек",
"sectionGeneral": "Общие",
"sectionCompression": "Сжатие",
"sectionAdvanced": "Дополнительно",
"sectionPreview": "Предпросмотр",
"generalDescription": "Язык и внешний вид этой панели.",
"advancedDescription": "Пороги и предохранители конвейера сжатия.",
"compressionTitle": "Сжатие промптов",
"compressionDescription": "Уменьшает размер запросов перед маршрутизацией, сохраняя код, ошибки, пути, числа и определения инструментов.",
"compressionHelp": "Переписывает каждый запрос перед отправкой поставщику, чтобы он занимал меньше токенов. Код, ошибки, пути к файлам и числа защищены, а любая переработка, которая их повреждает, отбрасывается.",
"compressionMode": "Режим",
"compressionModeHelp": "«Выключено» отправляет запросы без изменений. «Без потерь» удаляет только дублирующийся и лишний текст. «Стандартное» дополнительно сокращает вывод инструментов. «Агрессивное» также сжимает более ранние реплики.",
"compressionOff": "Выключено",
"compressionLossless": "Без потерь",
"compressionStandard": "Стандартное",
"compressionAggressive": "Агрессивное",
"compressionLossy": "С потерями",
"compressionEngines": "Движки",
"compressionEnginesHelp": "Каждый движок — это один шаг переработки. Режим определяет, какие движки работают; отключённый здесь движок не используется ни в одном режиме.",
"engineDedup": "Повторяющиеся блоки",
"engineDedupHelp": "Заменяет блок текста, который уже встречался в диалоге, короткой ссылкой на него.",
"engineLite": "Очистка пробелов",
"engineLiteHelp": "Убирает пробелы в конце строк, схлопывает повторяющиеся пустые строки и удаляет дублирующиеся системные сообщения.",
"engineReadLifecycle": "Устаревшие чтения файлов",
"engineReadLifecycleHelp": "Заменяет раннее чтение файла пометкой, если тот же файл позже был прочитан или изменён снова.",
"engineToolfilter": "Фильтр вывода инструментов",
"engineToolfilterHelp": "Сокращает вывод команд и инструментов: сборок, тестов, установок. Строки с ошибками и трассировками стека сохраняются всегда.",
"engineJsoncompact": "Таблицы JSON",
"engineJsoncompactHelp": "Перекодирует длинные массивы JSON с одинаковым набором полей в компактную таблицу. Обратимо, поэтому ничего не теряется.",
"engineRelevance": "Фильтр релевантности",
"engineRelevanceHelp": "Удаляет предложения, наименее связанные с последним сообщением, когда сообщение превышает свой лимит размера.",
"engineAging": "Более ранние реплики",
"engineAgingHelp": "Сжимает все реплики, кроме нескольких последних, в краткую сводку, сохраняющую пути, ошибки и решения.",
"engineHardBudget": "Потолок токенов",
"engineHardBudgetHelp": "Удаляет наименее ценные строки, пока запрос не уложится в целевое число токенов.",
"compressionAutoTrigger": "Автозапуск при превышении оценочного числа токенов",
"compressionAutoTriggerHelp": "Запросы с оценкой выше указанного числа токенов автоматически переключаются на «Агрессивное». Оставьте пустым, чтобы отключить.",
"compressionPrefixFreeze": "Замораживать повторяющиеся префиксы промптов",
"compressionPrefixFreezeHelp": "Оставляет системный промпт без изменений, когда тот же текст встретился три раза, чтобы кеширование промптов на стороне поставщика продолжало работать.",
"compressionTrustProjectFilters": "Доверять файлам фильтров проекта",
"compressionTrustProjectFiltersHelp": "Дополнительно загружает фильтры вывода инструментов из рабочего каталога. По умолчанию выключено, поскольку репозиторий мог бы так скрывать вывод от модели.",
"compressionStats": "Экономия размера",
"compressionEstimatedTokensSaved": "Оценочная экономия токенов",
"compressionPreview": "Живой предпросмотр",
"compressionPreviewDescription": "Пропустите тело запроса через конвейер, чтобы увидеть, что получит поставщик.",
"compressionPreviewPlaceholder": "Вставьте JSON запроса или обычный текст",
"compressionRunPreview": "Запустить предпросмотр",
"updatesTitle": "Обновления",
"checkForUpdates": "Проверьте наличие обновлений",
"lastChecked": "Последняя проверка: {when}",
"currentVersion": "Текущая сборка:",
"updateAvailable": "Доступно обновление",
"changelog": "Что изменилось",
"upToDate": "Установлена актуальная версия",
"buildAhead": "Эта сборка опережает официальную ветку main.",
"buildDiverged": "История этой сборки разошлась с официальной веткой main.",
"buildUnknown": "Эту пользовательскую сборку невозможно сравнить с официальной веткой main.",
"notGitInstall": "Эта установка не содержит сведений о коммите.",
"checkFailed": "Не удалось проверить наличие обновлений.",
"contactsGithub": "Проверка запускается вручную и обращается к GitHub.",
"openReleases": "Открыть релизы на GitHub",
"restartAfterUpdate": "Перезапустите FreeLLMAPI после завершения сборки."
},
"models": {
"title": "Модели",
"chatModelsTab": "Модели чата",
"fusionTab": "Фьюжн",
"embeddingsTab": "Вложения",
"imageTab": "Изображение",
"audioTab": "Аудио",
"imageDesc": "Модели преобразования текста в изображение.",
"audioDesc": "Модели преобразования текста в речь и речи в текст.",
"mediaHint": "Создать через",
"mediaEmpty": "Моделей пока нет. Они синхронизируются из каталога.",
"ttsHeading": "Преобразование текста в речь",
"sttHeading": "Речь в текст",
"sttHint": "Расшифровать через",
"sttEmpty": "Моделей преобразования речи в текст пока нет. Они синхронизируются из каталога.",
"newBadge": "Новый",
"monthlyTokenBudget": "Ежемесячный бюджет токенов",
"remaining": "оставшееся",
"used": "использованный",
"of": "из",
"showAllModels": "Показать все модели {count}",
"showLess": "Показать меньше",
"vision": "Видение",
"visionTitle": "Принимает ввод изображения",
"tools": "Инструменты",
"toolsTitle": "Выполняет структурированные вызовы инструментов, поэтому он имеет право на запросы с инструментами.",
"retired": "Снят",
"penalty": "−{value} штраф",
"obs": "{count} обс",
"tokPerMonth": "{count} ток/мес",
"rpmLimit": "{count} об/мин",
"rpdLimit": "{count} рпд",
"noKey": "нет ключа",
"dragToReorder": "Перетащите, чтобы изменить порядок",
"dragToReorderGroup": "Перетащите, чтобы изменить порядок модели",
"providerCount": "Поставщики {count}",
"servedBy": "Обслуживает {providers}",
"viewProviders": "Посмотреть поставщиков",
"backToModels": "Вернуться к моделям",
"providersHeading": "Провайдеры, обслуживающие эту модель",
"codeSnippetHeading": "Используйте эту модель",
"modelNotFound": "Эта модель недоступна или для нее не настроены поставщики.",
"providerIdsHeading": "Идентификаторы моделей поставщиков",
"providerIdsHint": "Отправьте идентификатор единой модели для переключения при отказе для каждого поставщика или идентификатор конкретного поставщика, чтобы закрепить одного поставщика.",
"copyModelName": "Скопировать название модели",
"settingsHeading": "Настройки провайдера",
"settingsHint": "Локальные изменения в моделях каталога сохраняются при синхронизации каталога. Удаленные модели из каталога остаются удаленными, пока вы не добавите их снова через конфигурацию.",
"catalogModel": "каталог",
"customModel": "обычай",
"localOverride": "локальное переопределение",
"displayName": "Отображаемое имя",
"sizeLabel": "Уровень возможностей",
"sizeLabelHint": "Frontier/Large/Medium/Small задают ось интеллекта. Модели без распознанного уровня получают 0.",
"sizeLabelNone": "Нет (без оценки)",
"contextWindow": "Контекст",
"inFallback": "В цепочке",
"saveModelSettings": "Сохранить настройки модели",
"aggregateBudget": "{count}/мес.",
"aggregateBudgetTitle": "Общее количество бесплатных токенов в месяц у провайдеров этой модели",
"rateRpm": "{count} RPM",
"rateRpd": "{count} RPD",
"rateTitle": "Ограничено по ставке — нет фиксированного ежемесячного бюджета токенов",
"splitOut": "Не объединять эту копию",
"splitOutHint": "Сделайте копию этого провайдера отдельной записью вместо того, чтобы объединять ее в единую модель. Вы можете объединить его обратно с собственной страницы копии.",
"splitUndo": "Объединить обратно",
"splitUndoHint": "Эта копия хранится отдельно от унифицированной модели. Объедините его обратно, чтобы снова выполнить отработку отказа для всех своих поставщиков.",
"splitBadge": "хранится отдельно",
"noData": "нет данных",
"noDataTitle": "Запросов пока не зафиксировано — надежность и скорость у этого провайдера немеряны.",
"bestOfN": "лучшее из {count}",
"perProviderScores": "Оценки каждого поставщика: {list}",
"columnModel": "Модель",
"columnOn": "Вкл.",
"noModelsBefore": "Нет доступных моделей. Добавьте ключи API на",
"keysPageLink": "Страница ключей",
"noModelsAfter": "сначала.",
"hiddenNoKeys": "Скрытый (без ключей): {platforms}",
"searchPlaceholder": "Поиск моделей или поставщиков…",
"clearSearch": "Очистить поиск",
"ctxAny": "Любой контекст",
"ctxBadge": "{size} ctx",
"ctxTitle": "Контекстное окно",
"copyModelId": "Скопировать идентификатор модели",
"showingCount": "{shown} моделей {total}",
"clearFilters": "Очистить фильтры",
"noMatches": "Ни одна модель не соответствует вашим фильтрам.",
"noModelsTitle": "Ни одна модель не настроена",
"intelligenceRank": "Интеллект",
"speedRank": "Скорость",
"rankHint": "Ранг в каталоге — 1 лучший.",
"limitRpm": "RPM",
"limitRpd": "RPD",
"limitTpm": "TPM",
"limitTpd": "TPD",
"limitHint": "Оставьте пустым, чтобы не было ограничения.",
"usageThisMonth": "Расход за месяц",
"usageEmpty": "В этом месяце запросов пока нет.",
"usageRequestsMonth": "{count} запр. за месяц"
},
"strategies": {
"explore": "Исследовать неизмеренные модели",
"exploreHint": "Дает моделям без данных о надежности/скорости 10% шанс быть опробованными, чтобы они накапливали выборку.",
"title": "Стратегия маршрутизации",
"description": "Выберите стратегию маршрутизации. В ручном режиме вы перетаскиваете, чтобы установить порядок; другие стратегии основаны на реальном счете и учитывают надежность, скорость и интеллект.",
"weightsSummary": "надежность {reliability}% · скорость {speed}% · интеллект {intelligence}%",
"guardrails": "Ограждения",
"guardrailsTooltip": "Постоянное ограничение: свободный запас по квоте × штраф за ограничение скорости в реальном времени. Значение ниже 1,0 означает, что модель задерживается.",
"scoreTooltip": "Итоговая оценка маршрутизации = средневзвешенное значение трех осей, умноженное на ограждения. Сначала более высокие маршруты.",
"modeManualHint": "Ручной режим: запросы следуют в указанном ниже порядке сверху вниз. Перетащите, чтобы изменить порядок.",
"modeScoreHint": "Обновление результатов на основе живого трафика. Ниже приведен порядок маршрутизации запросов прямо сейчас.",
"manual": "Руководство",
"manualBlurb": "Маршрут в том порядке, который вы указали ниже. Перетащите маркеры, чтобы изменить порядок. Нет очков; цепочка прослеживается сверху вниз.",
"balanced": "Сбалансированный",
"balancedBlurb": "Надежность лидирует (50%), при этом скорость и интеллект имеют одинаковый вес (по 25%). Разумный универсальный вариант по умолчанию.",
"smartest": "Самый умный",
"smartestBlurb": "Отдавайте предпочтение наиболее способной модели, которая все еще работает. Интеллект 55%, надежность 35%, скорость 10%.",
"fastest": "Самый быстрый",
"fastestBlurb": "Отдавайте предпочтение самой быстрой модели, которая еще работает. Скорость 55%, надежность 35%, интеллект 10%.",
"reliable": "Самый надежный",
"reliableBlurb": "Максимизируйте уровень успеха прежде всего. Надежность 70%, скорость и интеллект по 15%.",
"custom": "Пользовательский",
"customBlurb": "Установите свой собственный баланс надежности, скорости и интеллекта с помощью ползунков. Тот же движок, что и пресеты, только ваши веса.",
"adjust": "Отрегулировать",
"customWeights": "Пользовательские веса",
"customWeightsHelp": "Слайдеры независимы; акции автоматически балансируются до 100%.",
"weightReliability": "Надежность",
"weightSpeed": "Скорость",
"weightIntelligence": "Интеллект",
"weightRequired": "Хотя бы один вес должен быть больше нуля.",
"scoreColumn": "Оценка"
},
"penaltyInspector": {
"title": "Давление маршрутизатора",
"subtitle": "Штрафы, время восстановления и неудачи за последнюю {minutes} минуту.",
"rowCount": "{count} активен",
"offChain": "вне цепи",
"penaltyValue": "Штраф {value}",
"factor": "оценка x{factor}",
"noCooldown": "Нет времени восстановления",
"cooldownChip": "{key} - {time}",
"errorsHeading": "{count} недавние ошибки",
"noRecentErrors": "Нет недавних ошибок",
"noKey": "нет ключа",
"reasons": {
"penalty": "оштрафованный",
"cooldown": "время восстановления",
"recent_errors": "неудачный"
}
},
"keys": {
"pageTitle": "Ключи",
"pageDescription": "Учетные данные поставщика и единый ключ API, с помощью которого подключаются ваши приложения.",
"tabProviders": "Провайдеры",
"checklistSummary": "Настроено {configured} из {total} провайдеров",
"checklistKeyless": "ключ не нужен",
"tabQuotaSignals": "Сигналы квоты",
"tabApiKey": "Единый ключ API",
"tabAnthropic": "Anthropic",
"unifiedKey": "Ваш единый ключ API",
"regenerate": "Регенерировать",
"showKey": "Показать",
"hideKey": "Скрыть",
"copyKey": "Копировать",
"copyFullKey": "Скопировать ключ целиком",
"copiedKey": "Скопировано",
"baseUrl": "База URL",
"endpointChat": "Чат",
"endpointResponses": "Ответы",
"endpointEmbeddings": "Вложения",
"endpointEmbeddingsHint": "model: \"auto\" или семейство на вкладке «Внедрения».",
"endpointMessages": "Сообщения",
"endpointMessagesHint": "Совместимость с Anthropic (Claude)",
"anthropicTitle": "Модели Claude (Anthropic)",
"anthropicDesc": "Направьте клиент SDK Claude или Anthropic на этот сервер. Клиенты Anthropic отправляют названия моделей Claude — сопоставьте каждое из них с автоматическим (маршрутизатор выбирает бесплатную модель) или закрепите конкретную модель.",
"anthropicBaseUrl": "База URL",
"anthropicAuth": "Заголовок аутентификации",
"anthropicAuto": "Авто — роутер выбирает лучшую модель",
"anthropicSave": "Сохранить сопоставление",
"anthropicSaved": "Сохранено",
"anthropicNote": "Клиенты Anthropic сохраняют встроенные названия моделей Claude; приведенное выше сопоставление определяет, как каждый из них направляется в ваш пул.",
"familyDefault": "По умолчанию",
"familyOpus": "Опус",
"familySonnet": "Сонет",
"familyHaiku": "Хайку",
"selectPlatform": "Выберите провайдера",
"addKey": "Добавить ключ",
"keyAdded": "Ключ добавлен",
"endpointKeysShareModels": "Ключи одной точки доступа используют одни и те же модели.",
"export": "Экспорт",
"exportAll": "Все ключи",
"exportHealthy": "Только здоровый",
"exportKeys": "Экспорт ключей API",
"exportFormat": "Формат",
"exportHealthyOnly": "Только исправные ключи",
"exportHealthyOnlyDesc": "Исключить ключи, которые в настоящее время не проходят проверку работоспособности",
"exportWillExport": "Будет экспортировать",
"exportKey": "ключ",
"exportKeys plural": "ключи",
"exporting": "Экспорт…",
"exportDownload": "Скачать",
"exportSuccess": "Экспортированные ключи {count}.",
"adding": "Добавление…",
"selectProvider": "Выберите провайдера…",
"accountId": "Идентификатор аккаунта",
"label": "Этикетка",
"noKeyNeeded": "(ключ не нужен)",
"outboundProxy": "Исходящий прокси",
"outboundProxyDescription": "Направляйте исходящие запросы LLM через прокси. Поддерживает SOCKS5, HTTP и HTTPS.",
"proxyUrl": "Прокси URL",
"saveProxy": "Сохранить",
"savingProxy": "Сохранение…",
"proxyLoadFailed": "Не удалось загрузить настройки прокси.",
"addCustom": "Добавьте пользовательскую модель, совместимую с OpenAI.",
"addCustomDescription": "Направьте чат, встраивание, изображения или аудиомодели на любую конечную точку, совместимую с OpenAI. Ключ API не является обязательным для локальных серверов.",
"customType": "Тип",
"customTypeChat": "Чат",
"customTypeEmbedding": "Встраивание",
"customTypeImage": "Изображение",
"customTypeAudio": "Аудио",
"customBaseUrl": "База URL",
"customModels": "Модели",
"customModel": "Модель",
"customDisplayName": "Отображаемое имя",
"customDisplayNamePerModel": "для каждой модели",
"customDisplayNameOptional": "необязательно",
"customFamily": "Семья",
"customFamilyPlaceholder": "по умолчанию используется идентификатор модели",
"customApiKey": "Ключ API",
"customCapabilities": "Возможности",
"addModel": "Добавить модель",
"modelAdded": "Модель добавлена",
"addModels": "Добавить модели {count}",
"addEmbeddingModel": "Добавить встраивание",
"addImageModel": "Добавить модель изображения",
"addAudioModel": "Добавить аудиомодель",
"addingCustom": "Добавление…",
"discoverModels": "Получить модели",
"probeNow": "Протестировать конечную точку",
"probeSuccess": "{model} протестирован за {latency} мс",
"probeFailed": "Не удалось выполнить тест: {reason}",
"discoverTitle": "Модели на этой точке доступа",
"discoverHint": "Выберите модели для регистрации. Уже добавленные остаются заблокированными.",
"discoverEmpty": "Эта точка доступа не вернула ни одной модели.",
"discoverAlreadyAdded": "Добавлено",
"discoverSelectAll": "Выбрать все",
"modelsAdded": "Добавлено моделей: {count}",
"getApiKey": "Получите ключ API",
"deleteKeyConfirm": "Удалить этот ключ? Это невозможно отменить.",
"checkAll": "Проверить все",
"checking": "Проверка…",
"editLabel": "Изменить ярлык",
"saveLabel": "Сохранить ярлык",
"unifiedKeyDescBefore": "Используйте это как свой OpenAI",
"unifiedKeyDescAfter": "; он аутентифицирует запросы к этому прокси.",
"serverUnreachableBefore": "Не могу связаться с сервером",
"serverUnreachableAfter": ". Убедитесь, что серверная часть работает. npm run dev запускает оба, и журналы сервера печатаются под префиксом сервера.",
"paneProviderKey": "Ключ провайдера",
"paneImportFile": "Импортировать файл",
"paneCustomEndpoint": "Пользовательская конечная точка",
"platform": "Платформа",
"apiToken": "токен API",
"noKeyNeededPlaceholder": "Ключ API не требуется.",
"bearerTokenPlaceholder": "Токен на предъявителя",
"pasteKeyPlaceholder": "вставьте сюда ключ",
"pasteSeveral": "Вставить несколько",
"keylessHint": "Ключ API не требуется: уровень бесплатного пользования этого провайдера является анонимным (ограничение скорости для каждого IP-адреса).",
"enable": "Включить",
"noProviderKeys": "Ключей провайдера пока нет. Добавьте один выше, чтобы начать маршрутизацию.",
"filterPlaceholder": "Фильтровать поставщиков или ключи",
"filterAll": "Все",
"filterHealthy": "Здоровый",
"filterIssues": "Проблемы",
"filterDisabled": "Отключено",
"noFilterMatch": "Ни один поставщик не соответствует вашим фильтрам.",
"providerCountSummary": "Поставщики {providers} · Ключи {keys}",
"summaryHealthy": "{count} здоров",
"summaryIssueOne": "Проблема {count}",
"summaryIssueOther": "Проблемы с {count}",
"providerActions": "Действия провайдера",
"routeViaProxy": "Маршрут через прокси",
"checkNow": "Проверьте сейчас",
"proxyEnvHintBefore": "Также настраивается через",
"proxyEnvHintAfter": "переменная среды (имеет приоритет). Оставьте пустым, чтобы отключить. Примеры:",
"importKeys": "Импортировать ключи поставщика",
"importKeysDescription": "Загрузите .env, JSON, JSONC, CSV, Markdown или текстовые файлы.",
"importFiles": "Файлы",
"importFileCount": "{count} выбрано",
"previewFiles": "Предварительный просмотр",
"previewing": "Предварительный просмотр…",
"selected": "Выбрано",
"provider": "Поставщик",
"keyName": "Имя ключа",
"keyValue": "Ключевое значение",
"chooseProvider": "Выберите провайдера",
"noPreviewKeys": "В этих файлах ключи не найдены.",
"skippedItems": "Пропущено:",
"moreItems": "+{count} ещё",
"importSelected": "Импортировать {count}",
"importing": "Импорт…",
"noImportSelection": "Выберите хотя бы одну строку с поставщиком.",
"duplicate": "Дублировать",
"duplicatesFound": "Обнаружены дубликаты {count} — они уже существуют и будут пропущены.",
"importResult": "Импортирован {imported}; не удалось {failed}.",
"importModelCount": "+{count} моделей",
"importResultWithModels": "Импортирован {imported}; зарегистрировано {models} моделей; не удалось {failed}.",
"confirmRemove": "Подтвердить?",
"quotaSignalsTitle": "Сигналы квоты",
"quotaSignalsEmptyTitle": "Наблюдений за квотами пока нет",
"quotaSignalsEmptyDesc": "Это заполняется после того, как поставщики возвращают заголовки ограничения скорости, ошибки квоты или сигналы проверки.",
"quotaKeyRef": "ключ #{id}",
"quotaPoolRef": "пул {pool}",
"quotaLimit": "Лимит",
"quotaRemaining": "Осталось",
"quotaReset": "Сброс",
"quotaObserved": "Наблюдается",
"tabAgents": "Агенты",
"familyGeminiPro": "Gemini Pro",
"familyGeminiFlash": "Gemini Flash",
"familyGeminiFlashLite": "Gemini Flash-Lite",
"geminiTitle": "Сопоставление моделей Gemini",
"geminiDesc": "Сопоставьте имена Gemini Pro, Flash и Flash-Lite с Auto или конкретной моделью каталога.",
"compatibilityTitle": "Совместимость с агентами",
"compatibilityDesc": "Управляйте дополнительными уровнями совместимости и обнаружением моделей Claude Code.",
"ollamaMode": "Эмуляция Ollama",
"ollamaModeHint": "Открытый loopback никогда не принимает неаутентифицированный трафик из LAN.",
"ollamaOff": "Выкл.",
"ollamaLoopback": "Открыт на loopback",
"ollamaKeyRequired": "Требуется API-ключ",
"claudeAliases": "Алиасы обнаружения Claude Code",
"claudeAliasesHint": "Публикуйте алиасы claude/<model>, чтобы селектор моделей шлюза мог отобразить каталог.",
"urlTokensTitle": "Отзываемые URL-токены",
"urlTokensDesc": "Только для клиентов без заголовков. URL-токены могут попасть в историю и логи, поэтому отзывайте их, когда они больше не нужны.",
"urlTokenLabel": "Метка токена",
"createUrlToken": "Создать токен",
"urlTokenOnce": "Скопируйте этот токен сейчас. Он больше не будет показан.",
"revoked": "Отозван",
"revoke": "Отозвать",
"modelScope": "Область моделей",
"modelScopeDesc": "Ограничьте этот ключ определёнными ID моделей. Для любых других моделей маршрутизатор пропускает этот ключ.",
"modelScopeAdd": "Введите ID модели и нажмите Enter",
"modelScopeEmpty": "Область не задана — ключ обслуживает все модели своего провайдера.",
"modelScopeClear": "Очистить область",
"modelScopeBadgeOne": "ограничен · 1 модель",
"modelScopeBadgeOther": "ограничен · {count} моделей",
"cpTitle": "Профили клиентов",
"cpDesc": "Отдельные API-ключи для каждого клиента, каждый со своим системным промптом, который сервер применяет всегда.",
"cpEmpty": "Профилей клиентов пока нет.",
"cpNameLabel": "Название",
"cpNamePlaceholder": "напр., Бот поддержки",
"cpPromptLabel": "Системный промпт (необязательно)",
"cpPromptPlaceholder": "Инструкции, которые сервер добавляет перед каждым запросом с этим ключом.",
"cpCreate": "Создать профиль",
"cpRotate": "Сменить ключ",
"cpKeyOnce": "Скопируйте этот ключ сейчас — он больше не будет показан.",
"cpEnabledAria": "Профиль включён"
},
"status": {
"healthy": "здоровый",
"rateLimited": "ограниченный по скорости",
"invalid": "недействительный",
"error": "ошибка",
"unchecked": "непроверенный"
},
"analytics": {
"title": "Аналитика",
"description": "Объем запроса, задержка, использование токена и сбои.",
"range24h": "24 часа",
"range7d": "7д",
"range30d": "30 дней",
"range90d": "90д",
"requests": "Запросы",
"successRate": "Уровень успеха",
"inputTokens": "Входные токены",
"outputTokens": "Выходные токены",
"avgLatency": "Средняя задержка",
"p95Latency": "Задержка P95",
"avgTtft": "Среднее значение TTFT",
"estSavings": "Оценка. сбережения",
"requestsByProvider": "Запросы от провайдера",
"avgLatencyByProvider": "Средняя задержка по поставщикам",
"ttftByProvider": "Время получения первого токена от провайдера",
"ttftEmpty": "Еще нет времени для записи первого токена.",
"requestsOverTime": "Запросы с течением времени",
"tokensOverTime": "Токены с течением времени",
"byModel": "По модели",
"byPlatform": "По платформе",
"errors": "Ошибки",
"errorDistribution": "Распределение ошибок",
"pinnedRequests": "Закрепленные запросы",
"pinnedHonored": "заслуженный",
"fallbackAttempts": "Попытки отката",
"savingsHint": "Фактически вы сэкономили ${actual} за последний {range}. Именно столько стоили бы те же токены для платных API, по цене за модель. Показанное число отображает ваш темп от последнего {span} данных до полных 30 дней.",
"savingsHintExact": "Фактически вы сэкономили ${actual} за последний {range}. Именно столько стоили бы те же токены для платных API, по цене за модель. Показанное число — это ваш реальный итог за 30 дней.",
"requestsHintPinned": "{pinned} из этих запросов закрепил конкретную модель по названию. {honored} обслуживались закрепленной моделью; {failed} переключился на другой. Остальные были маршрутизированы автоматически.",
"requestsHintAuto": "Все запросы за этот период были маршрутизированы автоматически; ни один клиент не закрепил конкретную модель по имени.",
"requestsHintTypes": "Чат {chat} и запросы на встраивание {embedding}.",
"rangeLabel24h": "24 часа",
"rangeLabel7d": "7 дней",
"rangeLabel30d": "30 дней",
"rangeLabel90d": "90 дней",
"spanDays": "{count} дней",
"spanHours": "{count} часов",
"latencyMs": "Задержка (мс)",
"latency": "Задержка",
"pinned": "Закреплено",
"inTokens": "В токенах",
"outTokens": "Выходные токены",
"saved": "Сохранено",
"message": "Сообщение",
"time": "Время",
"perModelBreakdown": "Разбивка по моделям",
"usageByKey": "Использование по ключу",
"keyColumn": "Ключ",
"keyLabelFallback": "Ключ #{id}",
"errorsByProvider": "Ошибки по провайдеру",
"recentErrors": "Недавние ошибки",
"noErrors": "Нет ошибок",
"recentCalls": "Последние звонки",
"clientIp": "IP-адрес клиента",
"clientAgent": "Клиентское приложение",
"requestedModelHint": "Запрошен {model}, обслуживается резервным способом.",
"attempts": "Попытки",
"filterAll": "Все",
"filterCanceled": "Отменённые",
"providerBreakdown": "Разбивка по провайдерам",
"tokensPerSec": "Ток/с",
"allProviders": "Все провайдеры",
"requestDetailTitle": "Запрос #{id}",
"failoverLadder": "Лестница аварийного переключения",
"failoverLadderHint": "Каждый переход, который этот запрос проходил через резервную цепочку, по порядку.",
"noAttemptTrace": "Для этого запроса не было записано трассировки попыток.",
"keyOrdinal": "ключ #{n}",
"attemptTimingHint": "Начальное смещение от начала запроса · продолжительность попытки",
"requestedModel": "Запрошенная модель",
"ttft": "TTFT",
"requestsByAgent": "Запросы по агентам"
},
"playground": {
"title": "Детская площадка",
"description": "Отправьте завершение чата через роутер и посмотрите, какой провайдер его обслуживает.",
"autoModel": "Авто (резервная цепочка)",
"fusionModel": "Fusion (многомодельный синтез)",
"selectModel": "Выберите модель",
"searchModels": "Поиск моделей…",
"noModelsFound": "Модели не найдены",
"send": "Отправить",
"sending": "Отправка…",
"clear": "Очистить",
"inputPlaceholder": "Введите сообщение… (⏎ для отправки, ⇧⏎ для перевода строки)",
"emptyTitle": "Отправьте сообщение, чтобы начать.",
"emptyDescription": "Использование {model}. Переключайте модели в селекторе выше.",
"noModels": "Моделей пока нет. Добавьте ключ API на странице «Ключи», чтобы заполнить этот список.",
"copyReply": "Копировать ответ",
"fallback": "запасной вариант",
"fallbacks": "запасные варианты",
"fusionPanel": "Панель",
"fusionJudge": "Судья",
"fusionTrace": "Ответы модели {count}",
"fusionFailed": "нет ответа",
"fusionJudgeSynth": "синтезировал окончательный ответ",
"errorPrefix": "Ошибка:",
"systemPromptLabel": "Системная подсказка",
"systemPromptPlaceholder": "Необязательно. Отправляется как системное сообщение перед вашим чатом.",
"errorTitle": "Запрос не выполнен",
"attach": "Прикрепить файлы",
"attachTooMany": "К одному сообщению можно прикрепить не более {count} файлов.",
"attachTooLarge": "Файл {name} слишком большой. Лимит — {max}.",
"attachUnsupported": "{name} не поддерживается. Прикрепите изображения (PNG, JPEG, WebP, GIF) или текстовые файлы (TXT, MD, CSV, JSON, LOG).",
"attachFailed": "Не удалось прочитать {name}.",
"noVisionBadge": "Без изображений",
"visionWarning": "{model} не принимает изображения. Выберите модель с поддержкой изображений или «Авто»."
},
"embeddings": {
"title": "Модели",
"description": "Встраивания передаются только внутри семейства: та же модель, обслуживаемая другим поставщиком. Векторы от разных моделей несовместимы, поэтому роутер никогда не подменяет вам модели.",
"defaultBadge": "По умолчанию · авто",
"makeDefault": "Сделать по умолчанию",
"moveUp": "Вверх",
"moveDown": "Двигаться вниз",
"usageToday": "{count} требуется сегодня",
"usageMonth": "{count} ток в этом месяце",
"autoDescription": "model: \"auto\" на POST /v1/embeddings направляет к семейству по умолчанию. Присвоение имени семейству (или идентификатору модели поставщика) закрепляет это семейство; провайдеры внутри него пробуются по порядку.",
"unsavedChanges": "Несохраненные изменения",
"saveChanges": "Сохранить изменения",
"savingChanges": "Сохранение…",
"tokMax": "{tokens} ток макс.",
"emptyTitle": "Встраиваемых моделей пока нет.",
"emptyDesc": "Семейства встраивания появляются здесь после добавления ключа поставщика, поддерживающего встраивание.",
"dragToReorder": "Перетащите, чтобы изменить порядок поставщиков"
},
"fusion": {
"title": "Фьюжн",
"description": "Группа моделей отвечает параллельно, затем судья синтезирует один более сильный ответ. Используйте его, вызвав API с моделью «fusion».",
"panelSource": "Источник панели",
"panelSourceHelp": "Откуда берутся модели панелей, когда в запросе не указана своя.",
"mode": {
"auto": "Авто (резервная цепочка)",
"autoHelp": "Выберите разнообразный набор моделей из своей резервной цепочки, ранжированный вашей активной стратегией маршрутизации.",
"explicit": "Откровенная панель",
"explicitHelp": "Всегда используйте конкретные модели, которые вы выбираете ниже."
},
"panelModels": "Панельные модели",
"selectedCount": "{count} из {max} выбрано",
"noModels": "Ни одна модель еще не подключена. Добавьте ключ API, затем включите модели в резервную цепочку.",
"panelSize": "Размер панели",
"panelSizeHelp": "Сколько разнообразных моделей выбирать автоматически (1–{max}).",
"judge": "Модель судьи",
"judgeHelp": "Модель, которая синтезирует ответы панели в один. Auto использует вашу доступную модель с самым высоким рейтингом.",
"judgeAuto": "Авто (доступен в топе)",
"strategy": "Стратегия",
"strategySynthesize": "Синтезируйте — объедините панель в один ответ",
"strategyBestOf": "Best of — верните самый сильный ответ (без оценки судьи)",
"strategySynthesizeShort": "Синтезировать",
"strategyBestOfShort": "Лучшее из",
"exposePanel": "Отобразить детали панели",
"exposePanelHelp": "Прикрепите ответ каждой модели и метаданные судьи в поле x_fusion в ответе.",
"howToUse": "Как использовать",
"howToUseHelp": "Отправьте обычный запрос в чат с моделью «fusion». Эти настройки установлены по умолчанию; любой запрос может переопределить их с помощью поля «fusion».",
"unsavedChanges": "Несохраненные изменения",
"save": "Сохранить"
},
"premium": {
"title": "Премиум",
"description": "Живой каталог моделей на каждом устройстве.",
"loading": "Загрузка…",
"checkForUpdates": "Проверьте наличие обновлений",
"syncing": "Синхронизация…",
"catalogFeed": "Лента каталога",
"liveFeed": "Прямая трансляция",
"monthlySnapshot": "Ежемесячный снимок",
"lastChecked": "Последняя проверка: {when}",
"liveDescription": "Новые бесплатные модели, изменения квот и исправления особенностей появляются здесь в течение нескольких часов после отправки. Приложение проверяет автоматически два раза в день; нечего делать.",
"snapshotDescription": "Уровень бесплатного пользования: каталог обновляется на основе ежемесячного снимка, который проверяется автоматически два раза в день. Премиум переключает это на прямую трансляцию, обновляемую каждые 2-3 дня.",
"lastSyncProblem": "Последняя проблема с синхронизацией: {error}",
"license": "Лицензия",
"planAnnual": "Премиум годовой",
"planLifetime": "Премиум на всю жизнь",
"expired": "Срок действия истек",
"inactive": "Неактивный",
"lifetimeNote": "Пожизненная лицензия: срок действия никогда не истекает.",
"renewsOn": "Обновление на {date}.",
"willNotRenew": "Не будет продлеваться. Премиум до {date}, затем эта установка возвращается к бесплатному ежемесячному каталогу.",
"keyInactive": "Этот ключ больше не активен. Приложение продолжает работать над бесплатным ежемесячным каталогом.",
"manageSubscription": "Управление подпиской",
"openingPortal": "Открытие…",
"removeKey": "Удалить ключ с этого устройства",
"manageHint": "Управление подпиской открывает платежный портал Stripe: отмените, обновите карту или загрузите счета. Удаление ключа только деактивирует это устройство; ваша покупка нетронута.",
"licenseKey": "Лицензионный ключ",
"licenseKeyPlaceholder": "fla_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"activate": "Активировать",
"activating": "Активация…",
"keyHint": "Ваш ключ находится в электронном письме о покупке и на странице после оформления заказа. Потеряли?",
"recoverKey": "Восстановить его на сайте",
"upsellTitle": "Начните жить за 19 долларов в год",
"upsellDescription": "Новые бесплатные модели сразу после их появления, а не 30 дней спустя. Один ключ для каждого устройства. Отменить в любое время; маршрутизатор остается бесплатным навсегда.",
"goPremium": "Перейти Премиум",
"bundled": "в комплекте",
"planGeneric": "Премиум"
},
"languages": {
"en": "English",
"zh-CN": "中文 (简体)",
"es": "Español",
"fr": "Français",
"pt-BR": "Português (Brasil)",
"it": "Italiano",
"hi": "हिन्दी",
"ar": "العربية",
"bn": "বাংলা",
"ru": "Русский",
"ur": "اردو",
"id": "Bahasa Indonesia",
"de": "Deutsch",
"ja": "日本語",
"sw": "Kiswahili",
"mr": "मराठी",
"te": "తెలుగు",
"tr": "Türkçe",
"ta": "தமிழ்",
"vi": "Tiếng Việt",
"ko": "한국어",
"fa": "فارسی",
"th": "ไทย",
"gu": "ગુજરાતી",
"pl": "Polski",
"uk": "Українська",
"kn": "ಕನ್ನಡ",
"ml": "മലയാളം",
"or": "ଓଡ଼ିଆ",
"my": "မြန်မာဘာသာ",
"pa": "ਪੰਜਾਬੀ",
"ro": "Română",
"nl": "Nederlands",
"ms": "Bahasa Melayu",
"tl": "Filipino",
"ha": "Hausa",
"yo": "Yorùbá",
"ig": "Igbo",
"am": "አማርኛ",
"uz": "Oʻzbekcha",
"az": "Azərbaycanca",
"si": "සිංහල",
"ne": "नेपाली",
"km": "ខ្មែរ",
"el": "Ελληνικά",
"cs": "Čeština",
"hu": "Magyar",
"sv": "Svenska",
"he": "עברית",
"da": "Dansk",
"fi": "Suomi",
"no": "Norsk",
"sk": "Slovenčina",
"bg": "Български",
"hr": "Hrvatski",
"sr": "Српски",
"lt": "Lietuvių",
"zh-TW": "中文 (繁體)",
"pt-PT": "Português (Portugal)",
"ka": "ქართული"
},
"errors": {
"boundaryTitle": "Что-то пошло не так",
"boundaryDescription": "На панели мониторинга возникла непредвиденная ошибка. Ваши данные в безопасности. Попробуйте еще раз или вернитесь на страницу моделей.",
"tryAgain": "Попробуйте еще раз",
"goHome": "Вернуться к моделям"
},
"notFound": {
"title": "Страница не найдена",
"description": "Эта страница не существует или могла быть перемещена."
},
"setup": {
"title": "Начало работы",
"subtitle": "Три шага для маршрутизации вашего первого запроса.",
"progress": "{done} из {total}",
"step1Title": "Добавить ключ провайдера",
"step1Desc": "Подключите хотя бы одну учетную запись провайдера. Бесплатные ключи работают.",
"step1Cta": "Добавить ключи",
"step2Title": "Отправить тестовый запрос",
"step2Desc": "Выберите любую модель на игровой площадке и поздоровайтесь.",
"step2Cta": "Открытая игровая площадка",
"step3Title": "Подключите свое приложение",
"step3Desc": "Используйте свой единый ключ API с любым OpenAI-совместимым клиентом.",
"copyKey": "Скопируйте ключ API",
"copyUrl": "Копировать базу URL",
"copiedKey": "Ключ API скопирован в буфер обмена.",
"copiedUrl": "База URL скопирована в буфер обмена."
},
"palette": {
"title": "Палитра команд",
"placeholder": "Поиск по страницам, моделям, действиям…",
"empty": "Нет результатов",
"groupPages": "Страницы",
"groupActions": "Действия",
"groupModels": "Модели",
"toggleTheme": "Переключить темный режим"
},
"validation": {
"required": "Требуется",
"url": "Введите действительный URL, начиная с http:// или https://.",
"email": "Введите действительный адрес электронной почты",
"passwordMin": "Минимум символов {min}."
},
"agents": {
"title": "Агенты программирования",
"description": "Подключайте инструменты программирования к единому шлюзу бесплатных моделей с генерируемой конфигурацией, безопасной для резервных копий.",
"apiKey": "API-ключ",
"quickstartTitle": "Быстрый старт",
"quickstart": "Самый быстрый путь: настройте Claude Code по актуальному каталогу.",
"currentKey": "Текущий единый ключ:",
"seenRecently": "Замечен недавно",
"setupLabel": "Автоматическая настройка",
"setupHint": "Сам записывает файл конфигурации этого инструмента с указанием на этот шлюз.",
"setupGuideHint": "Выводит шаги настройки этого инструмента; файлы не записываются.",
"manualLabel": "Ручное подключение",
"manualHint": "Базовый URL и ключ для ввода в настройках самого инструмента.",
"endpoint": "Эндпоинт",
"documentation": "Документация"
}
}