diff --git a/i18n/locales/uk_UA.json b/i18n/locales/uk_UA.json new file mode 100644 index 0000000..d57a63a --- /dev/null +++ b/i18n/locales/uk_UA.json @@ -0,0 +1,7407 @@ +{ + "you": "Ви", + "select": "Вибрати", + "selectAll": "Вибрати все", + "selected": "Вибрано", + "conversations": "Розмови", + "copyToClipboard": "Скопіювати в буфер обміну", + "copyJsonToClipboard": "Скопіювати JSON у буфер обміну", + "toCopyMarkdownDirectly": "щоб скопіювати markdown напряму", + "clickToCopyMarkdownDirectly": "Клацніть, щоб скопіювати markdown напряму", + "toShowMoreOptions": "щоб показати більше опцій", + "longPressOrAltClickForMoreOptions": "Довге натискання або {key}+клац — більше опцій", + "rightClickForMoreOptions": "Клац правою — більше опцій", + "onMessage": "на повідомленні", + "selectModel": "Вибрати модель | Вибрати моделі", + "manageModels": "Керувати моделями", + "required": "Обов'язково", + "optional": "Необов'язково", + "systemPrompt": "Системний промт", + "systemPromptAttachMode": "Режим додавання системного промта", + "userPrompt": "Промт користувача", + "delete": "Видалити {item}", + "deleteWithConfirm": "Видалити...", + "removeWithConfirm": "Прибрати...", + "deleteAll": "Видалити все", + "deleteItems": "Видалити елементи", + "create": "Створити", + "edit": "Редагувати", + "editNote": "Редагувати нотатку...", + "addNote": "Додати нотатку...", + "viewDetails": "Переглянути деталі...", + "expandTextarea": "Розгорнути редактор", + "collapseTextarea": "Згорнути редактор", + "enable": "Увімкнути", + "disable": "Вимкнути", + "save": "Зберегти", + "saved": "Збережено", + "cancel": "Скасувати", + "close": "Закрити", + "bookmarked": "У закладках", + "pinned": "Закріплені", + "update": "Оновити", + "apply": "Застосувати", + "reset": "Скинути", + "icon": "Іконка", + "clear": "Очистити", + "apiKey": "API-ключ", + "models": "Моделі", + "available": "Доступні: {itemType}", + "unavailable": "Недоступно", + "detected": "Виявлено", + "continue": "Продовжити", + "undetected": "Не виявлено", + "welcome": "Ласкаво просимо!", + "plan": "План", + "allChangesSaved": "Усі зміни збережено", + "toolbar": "Панель інструментів", + "bookmark": "Закладка | Закладки", + "later": "Пізніше", + "waitingMessage": { + "waiting": "Очікування :: Секундочку :: Хвилинку :: Одну мить :: Терпіння — це чеснота :: Майже готово :: Завантажуємо крутизну", + "fetchingWebResults": "Шукаю в мережі :: Гортаю інтернет :: Дивлюся онлайн :: Прочісую вебпростір :: Раджуся з оракулом :: Ввічливо питаю в інтернету :: Пірнаю в кіберпростір :: Копаю мережу", + "queryingKnowledgeStack": "Запит до стека знань :: Шукаю у ваших знаннях :: Переглядаю ваші документи :: Досліджую вашу базу знань :: Гортаю вашу мудрість :: Раджуся з вашою цифровою бібліотекою :: Скануємо ваші архіви :: Копаю ваші нотатки", + "preparingTools": "Готую інструменти :: Готую інструментарій :: Налаштовую інструменти :: Завантажую інструменти :: Гострю знаряддя :: Збираю набір інструментів :: Прогріваю двигуни :: Готую робочий простір", + "connectingToModel": "Модель творить магію ✨ :: ШІ думає :: Обробляю ваш запит :: Працюю над цим :: Рахую числа :: Нейрони працюють :: Глибоко міркую :: Обчислюю геніальність :: Вмикаю режим мозку :: Прикликаю інтелект", + "processingContext": "Обробляю контекст :: Осмислюю контекст :: Аналізую контекст :: Читаю ситуацію :: З'єдную крапки :: Осягаю загальну картину :: Складаю все докупи :: Розбираюся, що до чого", + "streaming": "Передаю потоком :: Надсилаю відповідь :: Доставляю відповідь :: Транслюю :: Спускаю результати :: Пливе до вас :: Уже в дорозі :: Заходить гаряченьким", + "scrubbingPIIData": "Вичищаю персональні дані :: Захищаю вашу приватність :: Прибираю особисту інформацію :: Знеособлюю дані :: Бережу таємниці :: Режим приватності увімкнено :: Ховаю чутливі місця :: Переходжу в інкогніто", + "synthesizingQuery": "Формую запит для кращих результатів :: Оптимізую ваше питання :: Покращую запит :: Уточнюю пошукові слова :: Шліфую ваш запит :: Тонко налаштовую питання :: Створюю ідеальний запит :: Роблю ваші слова яскравішими", + "fetchingLiveContexts": "Отримую живі контексти :: Збираю дані в реальному часі :: Витягую свіжі відомості :: Синхронізуюся з живими джерелами :: Підключаюся до потоку даних :: Збираю актуальні дані :: Оновлюю стрічки контексту :: Збираю живі оновлення :: Ловлю пульс" + }, + "progress": { + "initializing": "Ініціалізація..." + }, + "add": "Додати", + "easyAccess": { + "title": "Швидкий доступ", + "quickActions": "Швидкі дії", + "shortcuts": "Швидкий доступ", + "addToEasyAccess": "Додати до швидкого доступу", + "removeFromEasyAccess": "Прибрати зі швидкого доступу", + "resetToDefaults": "Скинути до типових", + "noItems": "Ярликів поки немає" + }, + "actionBar": { + "expandGroup": "Розгорнути {group}", + "collapseGroup": "Згорнути {group}", + "pinActionsHint": "Подвійний клац — закріпити", + "unpinActionsHint": "Подвійний клац — відкріпити", + "toggleActions": "Перемкнути дії", + "showExtraAddOns": "Показати додаткові розширення", + "hideExtraAddOns": "Сховати додаткові розширення", + "activeInThisSplit": "Активно в цьому спліті", + "groups": { + "model": "Модель і промти", + "data": "Дані та знання", + "tools": "Інструменти та персони" + } + }, + "unauthorized": "Немає авторизації", + "valid": "Дійсний", + "invalid": "Недійсний", + "done": "Готово!", + "confirm": "Підтвердити", + "shareWithSyncedSplits": "Поширити на синхронізовані спліти", + "source": "Джерело | Джерела", + "groundingSources": "Джерела обґрунтування", + "manage": "Керувати", + "chat": "Чат | Чати", + "advancedOptions": "Розширені опції", + "duplicate": "Дублювати", + "manageItem": "Керувати: {item}", + "success": "Успішно!", + "notes": "Нотатки", + "viewNotes": "Переглянути нотатки", + "error": "Помилка!", + "warning": "Попередження", + "authorized": "Авторизовано", + "notAuthorized": "Не авторизовано", + "authorize": "Авторизувати", + "reauthorize": "Авторизувати повторно", + "deauthorize": "Скасувати авторизацію", + "failedToDelete": "Не вдалося видалити", + "failedToSave": "Не вдалося зберегти", + "failedToUpdate": "Не вдалося оновити", + "updatedSuccess": "оновлено.", + "applyAndShareWithSyncedSplits": "Застосувати й поширити на синхронізовані спліти", + "clickToEdit": "Клацніть, щоб редагувати", + "clickToAddSystemPrompt": "Клацніть, щоб додати системний промт", + "pause": "Пауза", + "resume": "Продовжити", + "retry": "Повторити", + "stop": "Зупинити", + "run": "Запуск | Запуски", + "rerun": "Перезапустити", + "remove": "Прибрати", + "skip": "Пропустити", + "unskip": "Скасувати пропуск", + "startImporting": "Почати імпорт", + "new": "Новий", + "entry": "Запис | Записи", + "import": "Імпорт", + "connect": "Підключити", + "disconnect": "Відключити", + "reconnect": "Перепідключити", + "selectTargetFolder": "Виберіть цільову теку", + "createNewFolderForImport": "Створити нову теку для імпортованих елементів", + "newFolderName": "Назва нової теки", + "remote": "Віддалений", + "local": "Локальний", + "strength": "Сильна сторона | Сильні сторони", + "provider": "Провайдер", + "capability": "{count} можливість | {count} можливостей", + "preset": "Пресет | Пресети", + "saveAsPreset": "Зберегти як пресет", + "append": "Додати в кінець", + "prepend": "Додати на початок", + "replace": "Замінити", + "description": "Опис", + "mode": "Режим", + "addOns": "Розширення", + "user": "Користувач", + "assistant": "Асистент", + "assistantMessage": "Повідомлення асистента", + "connectionInfo": "Інформація про підключення", + "export": "Експорт", + "exportOptions": "Опції експорту", + "chooseFile": "Вибрати файл", + "purpose": "Призначення", + "download": "Завантажити", + "downloads": "Завантаження", + "downloadAsJson": "Завантажити як JSON", + "install": "Встановити", + "installed": "Встановлено", + "modified": "Змінено", + "created": "Створено", + "minimize": "Згорнути", + "status": "Статус", + "type": "Тип", + "yes": "Так", + "fileSize": "Розмір файлу", + "size": "Розмір", + "likes": "Вподобання | Вподобання", + "cancelled": "Скасовано", + "parameterSize": "Кількість параметрів", + "quantization": "Квантизація", + "quantizationLevel": "Рівень квантизації", + "contextSize": "Розмір контексту", + "defaultToModelMax": "Типово — максимум моделі", + "llamaCppContextSizeDescription": "Максимальна кількість токенів, яку модель обробляє за раз. Встановіть 0, щоб використати максимум моделі. Більші значення збільшують споживання пам'яті. Це значення зберігається глобально для кожної моделі в LLaMa.cpp. Контекст ділиться порівну між одночасними запитами, кількість яких задано в налаштуваннях служби LLaMa.cpp.", + "truncationStrategy": { + "truncateMiddle": "Обрізати середину", + "truncateOld": "Обрізати старі", + "none": "Немає" + }, + "truncationStrategyDescription": "Що робити з повідомленнями, коли наближається ліміт контексту.", + "storage": "Сховище", + "params": "Параметри", + "arch": "Архітектура", + "filter": "Фільтр", + "treeControls": { + "title": "Сортування та відображення", + "searchPlaceholder": "Пошук...", + "clear": "Скинути", + "foldersFirst": "Спочатку теки", + "itemsFirst": "Спочатку елементи", + "sort": { + "none": "Немає", + "name": "Назва", + "title": "Заголовок", + "created": "Створено", + "updated": "Оновлено", + "lastUsed": "Востаннє використано", + "ascending": "За зростанням", + "descending": "За спаданням" + }, + "visibility": { + "label": "Видимість", + "empty": { + "show": "Показувати порожні теки", + "hide": "Ховати порожні теки" + }, + "counts": { + "show": "Показувати кількість елементів", + "hide": "Ховати кількість елементів" + }, + "recents": { + "show": "Показувати нещодавні", + "hide": "Ховати нещодавні" + }, + "archive": { + "show": "Показувати архівовані", + "hide": "Ховати архівовані" + } + } + }, + "noSearchResults": "За цим запитом не знайдено: {item}", + "loading": "Завантаження", + "invite": "Запросити", + "refresh": "Оновити", + "email": "Email", + "role": "Роль", + "admin": "Адміністратор", + "owner": "Власник", + "inActive": "Неактивний", + "argument": "Аргумент|Аргументи", + "abort": "Перервати", + "send": "Надіслати", + "remindMeLater": "Нагадати пізніше", + "text": "Текст", + "folders": "Теки", + "folder": "Тека | Теки", + "title": "Заголовок", + "search": { + "label": "Пошук", + "scope": { + "active": "Активні", + "archived": "Архівовані", + "all": "Усі" + } + }, + "fuzzySearch": { + "enabled": "Нечіткий пошук увімкнено", + "disabled": "Нечіткий пошук вимкнено", + "enabledHint": "Нечіткий пошук увімкнено. Клацніть, щоб перемкнути", + "disabledHint": "Нечіткий пошук вимкнено. Клацніть, щоб перемкнути" + }, + "none": "Немає", + "change": "Змінити", + "expandAllProjects": "Розгорнути всі проєкти", + "collapseAllProjects": "Згорнути всі проєкти", + "expandAllFolders": "Розгорнути всі теки", + "collapseAllFolders": "Згорнути всі теки", + "expand": "Розгорнути", + "collapse": "Згорнути", + "clone": { + "title": "Клонувати {item}", + "successMessage": { + "detail": "{item} — клоновано" + }, + "errorMessage": { + "detail": "Не вдалося клонувати {item}" + } + }, + "notesPurposePlaceholder": "Додайте нотатки, щоб пам'ятати призначення цього елемента ({item}); їх також бачитимуть моделі — це дасть їм більше деталей про те, як користуватися цим елементом (необов'язково)", + "endpointTestResults": "Результати перевірки ендпоінта", + "testConnection": "Перевірити підключення", + "emptyPlaceholder": "Нічого не знайдено: {item}", + "selectItem": "Вибрати: {item}", + "selectedItemLabel": "{count} {title}", + "feature": "Функція|Функції", + "raw": "Сирий", + "rawOutput": "Сирий вивід", + "property": "Властивість|Властивості", + "configure": "Налаштувати", + "customInstructions": "Власні інструкції", + "context": "Контекст | Контексти", + "path": "Шлях | Шляхи", + "project": { + "title": "Проєкт | Проєкти", + "createRootProject": "Новий проєкт у корені", + "projectName": "Назва проєкту", + "projectDescription": "Опис проєкту", + "defaultModel": "Типова модель", + "customInstructions": "Власні інструкції", + "addChildProject": "Додати дочірній проєкт", + "promoteToRoot": { + "title": "Перемістити теку в корінь", + "errorMessage": { + "detail": "Не вдалося перемістити проєкт у корінь." + }, + "successMessage": { + "detail": "Проєкт успішно переміщено в корінь." + } + }, + "deleteProject": "Видалити проєкт", + "setDefaultForNewConversations": "Зробити типовим проєктом", + "unsetDefaultForNewConversations": "Скасувати типовий проєкт", + "orphanageProjectName": "Різне", + "includeProjectContext": "Включати контекст проєкту", + "deleteConfirmation": { + "header": "Видалити проєкт", + "message": "Справді видалити {projectName} і всі його розмови?", + "rejectLabel": "Скасувати", + "acceptLabel": "Видалити", + "successMessage": { + "detail": "Проєкт видалено" + } + }, + "deleteAllConversations": { + "title": "Видалити всі розмови", + "description": "Справді видалити всі розмови в {projectName}? Цю дію не можна скасувати.", + "successMessage": { + "detail": "Видалено {count} розмову | Видалено розмов: {count}", + "empty": "Немає розмов для видалення" + }, + "errorMessage": { + "detail": "Не вдалося видалити розмови" + } + }, + "archiveAllConversations": { + "title": "Архівувати всі розмови", + "description": "Архівувати всі розмови в {projectName}? Вони перемістяться в Архів, і їх можна буде відновити пізніше.", + "confirmLabel": "Архівувати всі", + "successMessage": { + "detail": "Заархівовано {count} розмову | Заархівовано розмов: {count}" + }, + "errorMessage": { + "detail": "Не вдалося заархівувати розмови" + } + }, + "projectForm": { + "addFiles": "Додати файли", + "editProject": "Редагувати проєкт", + "createNewProject": "Новий проєкт", + "dragAndDropFiles": "Перетягніть файли, які будуть додані до кожної розмови в цьому проєкті.", + "successMessage": { + "createDetail": "Проєкт створено", + "createDetailHidden": "Проєкт створено! Зараз він прихований, бо порожній. Натисніть кнопку нижче, щоб показати його одразу, або він з'явиться сам, коли ви додасте першу розмову.", + "updateDetail": "Проєкт оновлено" + }, + "errorMessage": { + "createDetail": "Не вдалося створити проєкт", + "updateDetail": "Не вдалося оновити проєкт" + } + }, + "emptyProjectVisibilityToast": { + "showButton": "Показати порожні проєкти", + "enabled": "Порожні проєкти тепер видимі" + }, + "startNewToGetStarted": "Почніть нову розмову, щоб узятися до справи", + "importConversation": { + "pointsToConsider": { + "title": "На що звернути увагу", + "importFormats": "Імпортуйте файли коректно експортованих розмов у форматі JSON або запаковані файли .mstyconv.", + "jsonAttachments": "У форматі JSON вкладення не буде імпортовано, якщо їх ще немає в застосунку.", + "zipAttachments": "У форматі ZIP вкладення з архіву буде імпортовано й прив'язано до розмови." + }, + "title": "Імпортувати розмову", + "invalidConversationFile": "Некоректний файл розмови. Виберіть коректний файл JSON або ZIP.", + "description": "Виберіть файл розмови для імпорту в {projectName}. Підтримувані формати: JSON, ZIP.", + "successMessage": { + "detail": "Розмову успішно імпортовано" + }, + "errorMessage": { + "detail": "Не вдалося імпортувати розмову" + } + } + }, + "selectedModel": "Вибрана модель", + "endpoint": "Ендпоінт", + "authToken": "Токен авторизації", + "before": "До", + "after": "Після", + "method": "Метод", + "httpMethod": "HTTP-метод", + "get": "Get", + "post": "Post", + "presetAlreadyExistsMessage": "Пресет із такою назвою вже існує.", + "duplicatePresetOverwriteMessage": "Пресет із такою назвою вже існує. Якщо збережете, наявний пресет буде перезаписано.", + "noPropsAvailable": "Немає доступних: {propsName}. Додайте власний.", + "localAI": "Локальний ШІ", + "branch": { + "clickToLabel": "Клацніть, щоб додати мітку", + "labelPlaceholder": "Мітка гілки (макс. 30 символів)", + "labelBranch": "Позначити гілку...", + "labelDialogTitle": "Мітка гілки", + "noLabel": "Без мітки", + "clickForOptions": "Клацніть для інших опцій", + "timeline": { + "title": "Оглядач гілок", + "viewAll": "Оглядач гілок...", + "branchNumber": "Гілка {n}", + "current": "Поточна", + "branches": "Гілки", + "compare": "Порівняти" + }, + "diff": { + "title": "Порівняти гілки", + "compare": "Порівняти гілки", + "exitCompare": "Вийти з режиму порівняння", + "selectFirst": "Виберіть першу гілку для порівняння", + "selectSecond": "Виберіть другу гілку для порівняння", + "selected": "Вибрано", + "identical": "Вміст ідентичний", + "leftBranch": "Перша гілка", + "rightBranch": "Друга гілка", + "selectBranch": "Виберіть гілку", + "selectBranchesToCompare": "Виберіть вище дві гілки, щоб порівняти їхній вміст", + "switchToBranch": "Перейти до {name}", + "viewDiff": "Різниця", + "viewSideBySide": "Поруч" + } + }, + "conversation": { + "title": "Розмова | Розмови", + "conversationTitle": "Назва розмови", + "contextShieldErrorMessage": { + "summary": "Не вдалося згенерувати підсумок контексту.", + "detail": "Деталі — у Налаштування > Сповіщення." + }, + "sendErrorMessage": { + "summary": "Не вдалося надіслати повідомлення.", + "detail": "Деталі — у Налаштування > Сповіщення." + }, + "contextSizeError": { + "summary": "Повідомлення перевищує ліміт контексту", + "detail": "Ваше повідомлення разом із результатами пошуку та контекстом завелике для цієї моделі. Спробуйте: збільшити розмір контексту в параметрах моделі, зменшити кількість результатів пошуку, очистити історію розмови, узяти модель із більшим контекстом (16k+) або скоротити системні інструкції." + }, + "deleteConversation": "Видалити розмову", + "addNewConversation": "Додати нову розмову", + "newConversation": "Нова розмова", + "treeControls": { + "title": "Сортування та відображення", + "projectSort": { + "none": "Немає", + "name": "Назва", + "created": "Створено", + "ascending": "За зростанням", + "descending": "За спаданням", + "projectsFirst": "Спочатку проєкти" + }, + "conversationSort": { + "none": "Немає", + "title": "Заголовок", + "created": "Створено", + "lastActivity": "Остання активність", + "ascending": "За зростанням", + "descending": "За спаданням" + }, + "priority": { + "none": "Без пріоритету", + "pinned": "Спочатку закріплені", + "bookmarked": "Спочатку з закладками" + }, + "visibility": { + "label": "Видимість", + "recents": { + "show": "Показувати нещодавні та закріплені", + "hide": "Ховати нещодавні та закріплені" + }, + "archive": { + "show": "Показувати архів", + "hide": "Ховати архів" + }, + "empty": { + "show": "Показувати порожні проєкти", + "hide": "Ховати порожні проєкти" + }, + "counts": { + "show": "Показувати кількість розмов", + "hide": "Ховати кількість розмов" + } + }, + "clear": "Скинути" + }, + "promptPlaceHolder": { + "normal": { + "focused": "Натисніть {trigger} для швидких команд АБО просто почніть друкувати...", + "unfocused": "Натисніть /, щоб перейти сюди й почати друкувати" + } + }, + "deleteConfirmation": { + "header": "Видалити розмову", + "message": "Справді видалити вибрану розмову й усі її спліти чату? | Справді видалити вибрані розмови й усі їхні спліти чату?", + "rejectLabel": "Скасувати", + "acceptLabel": "Видалити", + "successMessage": { + "detail": "Розмову видалено" + }, + "errorMessage": { + "detail": "Не вдалося видалити розмову" + } + }, + "convertToChat": { + "title": "Перетворити на чат", + "successMessage": { + "detail": "Розмову перетворено на чат" + }, + "errorMessage": { + "detail": "Не вдалося перетворити розмову на чат" + } + }, + "convertToForgeCanvas": { + "title": "Перетворити на Forge Canvas", + "successMessage": { + "detail": "Розмову перетворено на Forge Canvas" + }, + "errorMessage": { + "detail": "Не вдалося перетворити розмову на Forge Canvas" + } + }, + "cloneAncestorsSuccess": { + "detail": "Повідомлення успішно клоновано в новий спліт" + }, + "cloneAncestorsError": { + "detail": "Не вдалося клонувати повідомлення в новий спліт" + }, + "cloneAncestorsToNewConversationSuccess": { + "detail": "Повідомлення успішно клоновано в нову розмову" + }, + "cloneAncestorsToNewConversationError": { + "detail": "Не вдалося клонувати повідомлення в нову розмову" + }, + "archive": { + "groupLabel": "Архів", + "orphanProject": "Осиротіла розмова", + "bannerMessage": "Цю розмову заархівовано. Розархівуйте її, щоб продовжити обговорення.", + "bannerHint": "Надсилання нового повідомлення автоматично розархівує розмову.", + "unarchiveAction": "Розархівувати", + "autoUnarchivedToast": "Розмову розархівовано автоматично.", + "archivedToast": "Заархівовано {count} розмову | Заархівовано розмов: {count}", + "unarchivedToast": "Відновлено {count} розмову | Відновлено розмов: {count}", + "archiveSingle": "Архівувати", + "unarchiveSingle": "Розархівувати", + "unload": "Вивантажити архівовані елементи", + "unloaded": "Архівовані елементи вивантажено", + "error": "Не вдалося оновити статус архівації. Спробуйте ще раз.", + "archiveMultiple": "Архівувати {item}", + "success": "Заархівовано {count} розмову | Заархівовано розмов: {count}" + }, + "conversationNotFound": "Розмову не знайдено", + "conversationStreaming": { + "title": "Потокова передача", + "detail": "Зараз розмова отримує відповідь потоком. Зачекайте, доки вона завершиться, перш ніж клонувати." + } + }, + "conversationActions": { + "exportConversation": { + "title": "Експортувати розмову", + "json": { + "title": "Як JSON", + "errorMessage": "Не вдалося експортувати розмову як JSON", + "successMessage": "Розмову успішно експортовано як JSON", + "warningMessage": "Експорт у JSON містить {size} вбудованих даних вкладень. Для розмов із великою кількістю медіа радимо .mstyconv." + }, + "zip": { + "title": "Як ZIP", + "errorMessage": "Не вдалося експортувати розмову як ZIP", + "successMessage": "Розмову успішно експортовано як ZIP" + }, + "successMessage": "Розмови успішно експортовано як JSON" + }, + "trackInTree": "Стежити в дереві розмов", + "showAllSplits": "Показати всі спліти", + "saveSplitsAs": "Зберегти спліти як", + "newSingleSplitChat": "Новий чат з одним сплітом", + "splitPreset": "Пресет сплітів | Пресети сплітів", + "splitPresetForm": { + "saveTitle": "Зберегти спліти як пресет", + "editTitle": "Редагувати пресет сплітів {presetName}", + "presetName": "Назва пресета", + "presetOptions": "Опції пресета", + "presetOptionsPlaceholder": "Виберіть опції пресета", + "savePreset": "Зберегти пресет", + "successMessage": { + "saveDetail": "Пресет сплітів додано", + "editDetail": "Пресет сплітів оновлено" + }, + "errorMessage": { + "saveDetail": "Не вдалося зберегти пресет сплітів" + } + }, + "deleteSplitPresetConfirmation": { + "header": "Видалити пресет сплітів", + "message": "Справді видалити {splitPresetName}? ", + "successMessage": { + "detail": "Пресет сплітів видалено" + } + }, + "compactMode": "Компактний режим", + "enableCompactMode": "Увімкнути компактний режим", + "disableCompactMode": "Вимкнути компактний режим", + "modernLayout": "Сучасне компонування", + "enableModernLayout": "Увімкнути сучасне компонування", + "disableModernLayout": "Вимкнути сучасне компонування", + "toggleAlwaysOnTop": "Поверх усіх вікон", + "splitWidths": { + "title": "Ширина сплітів", + "slim": "Вузька", + "balanced": "Збалансована", + "roomy": "Простора", + "spacious": "Дуже простора", + "full": "На всю ширину" + } + }, + "responseConfiguration": { + "title": "Конфігурація відповіді", + "selectPresetPlaceholder": "Виберіть пресет...", + "saveAsPreset": "Зберегти як пресет", + "commonSettings": { + "title": "Загальні налаштування" + }, + "advancedParameters": { + "title": "Розширені параметри", + "description": "JSON-об'єкт із розширеними параметрами моделі", + "placeholder": "" + }, + "providerOptions": { + "title": "Опції провайдера", + "description": "Налаштування, специфічні для провайдера", + "placeholder": "" + }, + "thinkingConfig": { + "title": "Конфігурація мислення", + "description": "Налаштування розширеного мислення", + "notice": "Провайдер може проігнорувати або частково врахувати налаштування мислення" + }, + "promptCaching": { + "label": "Кешування промта", + "helper": "Кешувати повторюваний контекст, щоб зменшити вартість і затримку. Щоб це працювало, потрібна мінімальна кількість токенів.", + "ttl": { + "default": "Типово (5 хв)", + "5m": "5 хвилин", + "1h": "1 година" + } + }, + "customParameters": { + "title": "Власні параметри", + "helper": "Провайдер може проігнорувати їх або врахувати частково", + "keyPlaceholder": "custom_param", + "valuePlaceholder": "значення", + "deleteConfirm": { + "title": "Видалити параметр", + "message": "Видалити власний параметр «{param}»?" + }, + "errors": { + "missingKey": "Потрібен ключ параметра.", + "reserved": "Цей ключ зарезервовано для вбудованих параметрів.", + "duplicate": "Параметр із таким ключем уже існує." + } + }, + "json": { + "invalid": "Некоректний JSON" + }, + "tooltips": { + "constraintMode": "Режим обмежень увімкнено", + "freeformMode": "Вільний режим увімкнено — без обмежень мін/макс" + }, + "expandOtherOptions": "Розгорнути інші опції", + "collapseOtherOptions": "Згорнути інші опції", + "parameters": { + "temperature": { + "label": "Температура", + "helper": "Керує випадковістю (0 — зосереджено, 2 — креативно)" + }, + "topP": { + "label": "Top P", + "helper": "Частка ймовірності, яку залишати під час nucleus-семплінгу" + }, + "topK": { + "label": "Top K", + "helper": "Обмежити вибір токенів топ-K токенами" + }, + "maxOutputTokens": { + "label": "Максимум вихідних токенів", + "helper": "Максимум токенів у відповідях", + "helperWithLimit": "Максимум токенів у відповідях (ліміт {0})" + }, + "contextMessageLimit": { + "label": "Ліміт нещодавніх повідомлень", + "helper": "Моделі як контекст надсилаються лише найновіші повідомлення в межах цього ліміту. Старіші не потрапляють у запит." + }, + "numCtx": { + "label": "Розмір вікна контексту", + "helper": "Максимум токенів, які приймаються в промті", + "helperWithLimit": "Максимум токенів, які приймаються в промті (ліміт {0})", + "llamaCppHint": "Встановіть 0, щоб використати максимальний контекст моделі" + }, + "presencePenalty": { + "label": "Штраф за присутність", + "helper": "Штрафує нові токени залежно від того, чи вони вже траплялися в тексті" + }, + "frequencyPenalty": { + "label": "Штраф за частоту", + "helper": "Штрафує токени за частотою появи в тексті" + }, + "repeatPenalty": { + "label": "Штраф за повтори", + "helper": "Знеохочує повторення фраз" + }, + "repeatLastN": { + "label": "Останні N для повторів", + "helper": "Вікно контексту, до якого застосовується штраф за повтори" + }, + "minP": { + "label": "Min P", + "helper": "Мінімальна сукупна ймовірність для вибору токена" + }, + "mirostat": { + "label": "Mirostat", + "helper": "Динамічно стабілізує перплексію", + "options": { + "off": "Вимкнено", + "v1": "Mirostat 1.0", + "v2": "Mirostat 2.0" + } + }, + "mirostatTau": { + "label": "Mirostat Tau", + "helper": "Цільовий рівень несподіванки (менше — безпечніше)" + }, + "mirostatEta": { + "label": "Mirostat Eta", + "helper": "Швидкість навчання для коригування Mirostat" + }, + "numGpu": { + "label": "Шари на GPU", + "helper": "Кількість шарів, які перенести на GPU" + }, + "numThread": { + "label": "Потоки", + "helper": "Кількість потоків CPU для генерації" + } + } + }, + "modelParams": { + "params": "Параметри", + "title": "Параметри моделі", + "advancedParams": "Розширені параметри", + "providerOptions": "Опції провайдера", + "maxTokens": "Максимум вихідних токенів (застаріле)", + "maxOutputTokens": "Максимум вихідних токенів", + "temperature": "Температура", + "topP": "Top P", + "presencePenalty": "Штраф за присутність", + "frequencyPenalty": "Штраф за частоту", + "numCtx": "Розмір вікна контексту", + "numGpu": "Кількість шарів на GPU", + "selectPlaceholder": "Виберіть або вставте параметр", + "selectPresetPlaceholder": "Виберіть пресет", + "saveAsPreset": "Зберегти як пресет", + "addParameter": "Додати новий параметр", + "extraParams": "Додаткові параметри", + "applyAndSaveAsDefault": "Застосувати й зберегти як типове для моделі", + "savePresetForm": { + "title": "Зберегти параметри як пресет", + "errorMessage": { + "detail": "Не вдалося зберегти пресет параметрів." + }, + "successMessage": { + "detail": "Пресет параметрів збережено." + } + }, + "deletePresetConfirm": { + "title": "Видалити пресет", + "message": "Справді видалити {presetName}?", + "errorMessage": { + "detail": "Не вдалося видалити пресет параметрів." + }, + "successMessage": { + "detail": "Пресет параметрів видалено." + } + }, + "thinkingEffort": { + "label": "Глибина мислення", + "minimal": "Думати мінімально", + "light": "Думати поверхово", + "moderate": "Думати помірно", + "deep": "Думати глибоко", + "veryDeep": "Думати дуже глибоко", + "max": "Думати на максимум", + "default": "Типово", + "none": "Немає", + "dynamic": "Динамічно", + "exclude": "Виключити" + }, + "thinkingDisplay": { + "label": "Показ мислення", + "notice": "Визначає, чи повертати міркування у відповіді", + "default": "Типово", + "summarized": "Стисло", + "omitted": "Не показувати" + } + }, + "chatSplitActions": { + "title": "Опції спліта", + "addSplitChat": "Додати спліт чату", + "hideSplit": "Сховати спліт", + "copySplitToNewConversation": "Копіювати спліт у нову розмову", + "moveSplitToNewConversation": "Перемістити спліт у нову розмову", + "deleteSplit": "Видалити спліт", + "removeSplit": "Прибрати спліт", + "copySessionId": "Копіювати ID сесії", + "sessionIdCopied": "ID сесії скопійовано в буфер обміну", + "reloadFromAgent": "Перезавантажити з агента", + "reloadConfirmation": { + "header": "Перезавантажити з агента", + "message": "Справді перезавантажити цей спліт з агента? Поточний стан буде відкинуто, а дані отримано наново.", + "acceptLabel": "Перезавантажити" + }, + "splitRemoved": "Спліт прибрано", + "splitReset": "Спліт скинуто", + "copySplitToNewConversationSuccess": { + "detail": "Спліт скопійовано в нову розмову" + }, + "moveSplitToNewConversationSuccess": { + "detail": "Спліт переміщено в нову розмову" + }, + "copySplitToNewConversationError": { + "detail": "Не вдалося скопіювати спліт у нову розмову" + }, + "moveSplitToNewConversationError": { + "detail": "Не вдалося перемістити спліт у нову розмову" + }, + "exportOrCopyChat": { + "exportChat": "Експортувати чат", + "copyChat": "Копіювати чат", + "activeBranchAsJson": "Активну гілку як JSON", + "activeBranchAsMarkdown": "Активну гілку як Markdown", + "allBranchesAsJson": "Усі гілки як JSON", + "successMessage": "Чат успішно {action} у форматі {format}", + "action": { + "export": "експортовано", + "copy": "скопійовано" + } + }, + "showAllHiddenMessages": { + "title": "Показати всі приховані повідомлення", + "successMessage": { + "detail": "Усі приховані повідомлення тепер видимі" + } + }, + "deleteConfirmation": { + "header": "Видалити спліт", + "message": "Справді видалити цей спліт?", + "rejectLabel": "Скасувати", + "acceptLabel": "Видалити" + } + }, + "message": { + "title": "Повідомлення|Повідомлення", + "currentMessageAndDescendants": "Повідомлення та нащадки", + "sendOnEnter": "Надсилати по Enter", + "sendModifier": { + "label": "Модифікатор надсилання", + "none": "Лише Enter", + "shift": "Shift", + "alt": "Alt", + "ctrl": "Ctrl", + "meta": "Meta" + }, + "resendUserMessage": "Надіслати повідомлення користувача ще раз", + "sendAsAssistantMessage": "Надіслати як повідомлення асистента", + "sendAsAssistantMessageHelp": "Надсилання повідомлення від імені «Асистента» дає змогу формувати розмову, самостійно додаючи відповіді ШІ. ШІ продовжить так, ніби це повідомлення написав він. Зручно, щоб дати контекст або скерувати відповіді.", + "sentAsAssistantBadge": "Надіслано як повідомлення асистента", + "manuallyEdited": "Відредаговано вручну", + "stopGeneration": "Зупинити", + "renderingActions": { + "bookmark": "Додати повідомлення в закладки | Додати повідомлення в закладки", + "removeBookmark": "Прибрати закладку | Прибрати закладки", + "deleteMessage": "Видалити повідомлення | Видалити повідомлення", + "removeMessage": "Прибрати повідомлення", + "regenerateAssistantMessage": "Перегенерувати відповідь асистента як нову гілку", + "continueGeneration": "Продовжити генерацію", + "useAsPromptInNewSplit": "Використати як промт у новому спліті", + "foldUp": "Згорнути повідомлення вище", + "unfold": "Розгорнути повідомлення вище", + "addToUserPersonaMemory": "Додати в пам'ять персони користувача", + "cloneAncestorsToNewSplit": "Клонувати з попередніми в новий спліт", + "cloneAncestorsToNewConversation": "Клонувати з попередніми в нову розмову", + "extraActions": "Додаткові дії" + }, + "noModelSelectedErrorMessage": { + "detail": "Модель не вибрано. Виберіть модель, щоб надіслати повідомлення" + }, + "currentMessageDeleteConfirmation": { + "header": "Видалити повідомлення", + "message": "Справді видалити це повідомлення?" + }, + "currentMessageAndDescendantsDeleteConfirmation": { + "header": "Видалити повідомлення та його нащадків", + "message": "Справді видалити це повідомлення й усіх його нащадків?" + } + }, + "slashCommands": { + "title": "Швидкі команди", + "noMatches": "Немає відповідних команд", + "hint": "Введіть \\ і команду або її псевдонім", + "executed": { + "regenerate": "Перегенеровую повідомлення...", + "shield": "Щит контексту застосовано", + "compress": "Стискаю за допомогою щита...", + "bookmark": "Повідомлення додано в закладки", + "copy": "Скопійовано в буфер обміну", + "continue": "Продовжую генерацію...", + "resend": "Надсилаю повідомлення ще раз..." + } + }, + "urlEndpoint": "URL ендпоінта", + "giveUniqueNamePlaceholder": "Дайте унікальну назву", + "duplicateName": "Назва «{item}» дублюється або некоректна. Введіть унікальну назву.", + "manageData": { + "firstBackupReminder": "Ви ще не робили резервну копію даних. Експортувати дані для бекапу?", + "scheduledBackupReminder": "Від останнього бекапу минуло 24 години. Експортувати дані для бекапу?", + "nonPersistentStorage": "Браузер може очистити сховище за браком місця. Радимо регулярно робити резервні копії даних.", + "exportData": "Експортувати дані", + "clearData": "Очистити дані", + "restoreData": "Відновити дані", + "dragAndDropExportedData": "Перетягніть сюди резервну копію, з якої відновити дані.", + "restoreDataWarning": "Відновлення з файлу резервної копії замінить усі наявні дані. Радимо спершу експортувати бекап.", + "exportErrorMessage": { + "detail": "Не вдалося експортувати дані" + }, + "backupData": "Резервна копія даних", + "exportSuccessMessage": { + "detail": "Дані експортовано" + }, + "clearErrorMessage": { + "detail": "Не вдалося очистити дані" + }, + "clearSuccessMessage": { + "detail": "Дані очищено" + }, + "confirmationActionPlaceholder": "Введіть тут «{string}»", + "proceedWithConfirmationAction": "Введіть нижче «{string}», щоб продовжити", + "invalidConfirmationString": { + "summary": "Попередження", + "detail": "Некоректне підтвердження. Введіть «{string}», щоб продовжити." + }, + "clearDataConfirmation": { + "header": "Очистити дані", + "message": "Справді очистити всі дані? Цю дію не можна скасувати.", + "rejectLabel": "Скасувати", + "acceptLabel": "Очистити" + }, + "restoreDataConfirmation": { + "fileNotSelectedWarning": { + "summary": "Попередження", + "message": "Виберіть файл, з якого відновлювати" + }, + "header": "Відновити дані", + "message": "Справді відновити всі дані? Ця дія замінить усі наявні дані, і її не можна скасувати. Радимо спершу експортувати бекап.", + "rejectLabel": "Скасувати", + "acceptLabel": "Відновити" + }, + "importDataSuccessMessage": { + "detail": "Дані імпортовано" + }, + "importDataErrorMessage": { + "detail": "Не вдалося імпортувати дані" + } + }, + "setupItem": { + "label": "Налаштувати {item}", + "success": "{item} — налаштування завершено", + "failure": "Не вдалося налаштувати {item}" + }, + "onboard": { + "greeting": "Вітаємо в Msty Studio!", + "getStarted": "Щоб почати, потрібен щонайменше один провайдер моделей.", + "intentTitle": "Що привело вас у Msty Studio?", + "intentSubtitle": "Ми налаштуємо все під ваш робочий процес.", + "noAccountNeeded": "Обліковий запис не потрібен.", + "learnMoreAboutStudio": "Сайт Msty AI", + "readTheDocs": "Документація", + "backgroundSetupToast": { + "summary": "Налаштування триватиме у фоні", + "detail": "Завантаження двигуна й моделі поставлено в чергу. Стежити за прогресом можна в Model Hub або в Налаштуваннях." + }, + "recommendedAIModelTitle": "Рекомендований ШІ", + "recommendedAIModelSubtitle": "Типово — локально, з опційними хмарними провайдерами, якщо ви їх підключите.", + "localAIBadge": "@:localAI · Працює на вашій машині", + "cloudAIAPIKeyBadge": "Або підключіть провайдера ШІ", + "cloudAIAPIKeyPrefix": "Або підключіть", + "cloudAIAPIKeyProvider": "провайдера ШІ", + "onlineProvidersDocsLink": "Уперше маєте справу з API-ключами? Перегляньте документацію з налаштування провайдерів.", + "startChattingWithPersona": "Почати спілкування з цією персоною", + "startChattingWithAnyPersona": "Почати спілкування з персоною", + "skipPersonasForNow": "Поки пропустити", + "desktop": { + "greeting": "Вітаємо в Msty!", + "getStarted": "З чого хочете почати?", + "customLocation": { + "title": "Уже маєте моделі Ollama/Msty?", + "titleMLX": "Уже маєте моделі MLX?", + "titleLlamaCpp": "Уже маєте моделі LLaMA.cpp?", + "description": "Ви можете напряму використати наявні моделі Ollama чи Msty або вказати власне розташування. Зверніть увагу: для запуску цих моделей однаково використовуватиметься наша служба.", + "descriptionMLX": "Якщо моделей MLX у вас ще немає, можна вказати власне розташування, де їх зберігати.", + "descriptionMLXWithSwama": "Ми знайшли моделі MLX у вашому кеші Hugging Face Hub! Можете використати їх напряму або вказати власне розташування.", + "descriptionLlamaCpp": "Вкажіть власне розташування, де зберігати ваші моделі GGUF для LLaMA.cpp.", + "noLocationSet": "Розташування не задано", + "setYourOwn": "Задати власне", + "notAvailableForMLX": "Власні розташування моделей недоступні для MLX", + "placeholder": "Введіть власний шлях до моделей" + }, + "setupLocalAI": { + "description": "Для початку буде завантажено {modelName}. Ви можете вибрати іншу модель.", + "pros": { + "item1": "Використовуйте моделі DeepSeek R1, Meta Llama4, Microsoft Phi4, IBM Granite, Google Gemma тощо", + "item2": "Працюйте офлайн і тримайте свої дані приватними", + "item3": "Моделі можна завантажувати й використовувати безкоштовно", + "item4": "Встановлюйте й використовуйте спеціалізовані моделі" + }, + "cons": { + "item1": "Потребує додаткового місця на диску та пам'яті" + }, + "successMessage": { + "summary": "Готово!", + "detail": "Тепер ви можете спілкуватися зі своїми моделями приватно й безпечно." + }, + "errorMessage": { + "summary": "Помилка налаштування @:localAIService", + "detail": "Не вдалося налаштувати @:localAIService{'.'} Перегляньте логи, щоб дізнатися деталі. {errorMessage}", + "epermDetail": "Під час налаштування Local AI виникла проблема з правами доступу. Можна перезапустити застосунок від імені адміністратора (не рекомендовано) або встановити його лише для одного користувача (рекомендовано).", + "abortDetail": "{errorMessage} Якщо помилка повторюється, спробуйте встановити Local AI з архівних файлів. Дивіться https://docs.msty.studio/getting-started/onboarding" + } + }, + "setupMLX": { + "errorMessage": { + "summary": "Помилка налаштування служби MLX", + "detail": "Не вдалося налаштувати службу MLX. Перегляньте логи, щоб дізнатися деталі. {errorMessage}" + }, + "description": "Для початку буде завантажено {modelName}. MLX — це фреймворк Apple, оптимізований під Apple Silicon.", + "experimentalInfo": "MLX наразі в експериментальному режимі. Можливі обмеження й шорсткості. Повідомляйте команду про будь-які проблеми.", + "pros": { + "item1": "Оптимізовано під Apple Silicon (M1, M2, M3, M4)", + "item2": "Ефективне використання пам'яті завдяки уніфікованій архітектурі пам'яті", + "item3": "Підтримує моделі MLX, SafeTensors і GGUF", + "item4": "Нативна продуктивність на macOS" + }, + "cons": { + "item1": "Доступно лише на Mac з Apple Silicon", + "item2": "Менший вибір моделей порівняно з Ollama" + }, + "successMessage": { + "summary": "Налаштування MLX завершено!", + "detail": "Тепер ви можете використовувати моделі MLX з оптимальною продуктивністю на вашому Mac." + }, + "progress": { + "checkingCompatibility": "Перевіряю сумісність системи...", + "downloadingBinary": "Завантажую сервер MLX...", + "startingService": "Запускаю службу MLX...", + "settingUp": "Налаштовую MLX...", + "downloadProgress": "Завантаження моделі: {progress}%" + } + }, + "setupLlamaCpp": { + "experimentalInfo": "Підтримка LLaMA.cpp експериментальна й активно розробляється", + "errorMessage": { + "summary": "Помилка налаштування служби LLaMA.cpp", + "detail": "Не вдалося налаштувати службу LLaMA.cpp. Перегляньте логи, щоб дізнатися деталі. {errorMessage}" + }, + "description": "Для початку буде завантажено {modelName}. LLaMA.cpp забезпечує ефективний кросплатформний інференс.", + "pros": { + "item1": "Працює на Windows, macOS і Linux", + "item2": "Підтримує прискорення і на CPU, і на GPU", + "item3": "Ефективне використання пам'яті та швидкий інференс", + "item4": "Сумісний із форматом моделей GGUF" + }, + "cons": { + "item1": "Потребує десктопного застосунку", + "item2": "Продуктивність залежить від конфігурації обладнання" + }, + "successMessage": { + "summary": "Налаштування LLaMA.cpp завершено!", + "detail": "Тепер ви можете ефективно використовувати моделі LLaMA.cpp у своїй системі." + }, + "progress": { + "checkingCompatibility": "Перевіряю сумісність системи...", + "downloadingBinary": "Завантажую сервер LLaMA.cpp...", + "startingService": "Запускаю службу LLaMA.cpp...", + "settingUp": "Налаштовую LLaMA.cpp...", + "downloadProgress": "Завантаження: {progress}%" + } + }, + "addRemoteModelsProvider": { + "description": "Для більшості онлайн-провайдерів потрібен API-ключ із сайту провайдера. {findYourKey}", + "findYourKey": "Знайти свій API-ключ", + "pros": { + "item1": "Використовуйте OpenAI, Azure, Claude Sonnet, Google Gemini, Perplexity, віддалений Ollama, віддалений Msty тощо", + "item2": "Починайте без завантаження моделей", + "item3": "Деякі постачальники дають додаткові можливості — генерацію зображень, вебпошук тощо" + }, + "cons": { + "item1": "Для спілкування потрібне підключення до інтернету", + "item2": "Постачальник може стягувати плату" + } + } + }, + "modelsAvailableCount": "Доступна {count} модель | Доступно моделей: {count}", + "modelsAddedCount": "Додано {count} модель | Додано моделей: {count}", + "forgetThisProvider": "Забути цього провайдера", + "submitAndContinue": "Поїхали!", + "getSidecar": "Немає локального ШІ? Візьміть @:remoteToolsConnector.title — налаштування в один клік", + "completedWithProvider": { + "summary": "Готово!", + "detail": "Тепер ви можете спілкуватися з однією з моделей від {providerName}." + }, + "continueSetup": "Продовжити налаштування {service}" + }, + "login": { + "enterEmail": "Введіть свій email", + "errorMessage": "Некоректний email або щось пішло не так. Спробуйте ще раз.", + "successMessage": "Посилання для входу надіслано на { email }", + "ssoButton": "Увійти через Microsoft Entra ID" + }, + "modelHub": { + "title": "Model Hub", + "activeDownloads": "{count} активне завантаження | Активних завантажень: {count}", + "languageModelsProviders": { + "title": "Провайдери моделей", + "subtitle": "Доступ до моделей із хмари або віддалених серверів.", + "autoFetchModels": "Список моделей отримується автоматично", + "addLanguageModelsProvider": "Додати провайдера", + "prosAndCons": { + "pros": [ + "Використовуйте OpenAI GPT, Azure, Claude Sonnet, Google Gemini, Perplexity, віддалений Msty, віддалений Ollama тощо.", + "Швидкий старт", + "Не потрібно нічого завантажувати" + ], + "cons": [ + "Для спілкування потрібне підключення до інтернету", + "Постачальник може стягувати плату" + ] + }, + "deleteConfirmation": { + "header": "Видалити провайдера", + "message": "Справді видалити {providerName}?", + "successMessage": { + "detail": "Провайдера видалено" + }, + "errorMessage": { + "summary": "Помилка", + "detail": "Не вдалося видалити провайдера" + } + }, + "syncProviderWithWorkspaceForm": { + "titleNew": "Скопіювати в іншу робочу область", + "titleUpdate": "Скопіювати/синхронізувати в інші робочі області", + "descriptionNew": "Скопіювати цього провайдера в одну або кілька робочих областей.", + "descriptionUpdate": "Синхронізувати цього провайдера з однією або кількома робочими областями. Якщо його вже копіювали раніше — його буде оновлено; якщо ні — додано.", + "selectWorkspaces": "Виберіть робочі області", + "availableWorkspaces": "Доступні робочі області" + }, + "providerForm": { + "addTitle": "Додати провайдера", + "updateTitle": "Оновити провайдера", + "newHeader": "Новий провайдер моделей", + "editHeader": "Редагувати провайдера моделей", + "modelsProvider": "Провайдер", + "modelId": "ID моделі", + "modelName": "Назва моделі", + "providerName": "Назва провайдера", + "providerUrl": "URL провайдера", + "providerToken": "Токен провайдера", + "saveProvider": "Зберегти провайдера", + "selectProvider": "Виберіть провайдера", + "namePlaceholder": "Дайте назву (необов'язково)", + "selectModels": "Виберіть моделі", + "availableModels": "Доступні моделі", + "addCustomModel": "Додати власну модель", + "inferenceEndpoint": "Ендпоінт інференсу (має починатися з http:// або https://)", + "baseURL": "Базовий URL", + "resourceName": "Назва ресурсу (ігнорується, якщо задано базовий URL)", + "apiVersion": "Версія API", + "region": "Регіон AWS", + "accessKeyId": "Access Key ID", + "secretAccessKey": "Secret Access Key", + "sessionToken": "Session Token (необов'язково)", + "notAllModelsCompatible": "Не всі моделі перевірено з Msty, і застосунок може підтримувати не всі моделі, доступні у провайдера.", + "enterAndManuallyFetchModels": "Натисніть «Отримати моделі», щоб завантажити доступні моделі від провайдера (може знадобитися API-ключ), або додайте модель вручну нижче.", + "enterAzureCustomDeploymentModel": "Msty Studio не може отримати назви розгортань Azure OpenAI. Додайте власну модель, вказавши назву свого розгортання в Azure.", + "enterAndFetchModelsEndpoint": "Введіть ендпоінт провайдера, щоб спробувати отримати всі доступні моделі від {providerName}, або додайте власну модель вручну.", + "enterAndFetchModelsLmStudio": "Введіть ендпоінт LM Studio — зазвичай http://localhost:1234/v1 — щоб отримати доступні моделі, або додайте власну модель вручну.", + "enterAndFetchModels": "Введіть свій API-ключ, щоб спробувати отримати всі доступні моделі від {providerName}, або додайте власну модель вручну.", + "fetchModels": "Отримати моделі", + "connectionFailed": "Не вдалося підключитися до ендпоінта провайдера. Перевірте URL, з'ясуйте, чи використовується HTTP або HTTPS, і переконайтеся, що провайдер працює.", + "endpointNotFound": "Ендпоінт провайдера не знайдено. Перевірте URL і переконайтеся, що він містить правильний шлях API — наприклад, /v1.", + "httpsConnectionFailed": "Не вдалося підключитися до ендпоінта провайдера через HTTPS. Перевірте URL і з'ясуйте, чи використовується HTTP або HTTPS.", + "modelsFilter": { + "all": "Усі моделі", + "selected": "Вибрані", + "unselected": "Невибрані" + }, + "purposeFilter": { + "all": "Усі призначення" + }, + "searchInModels": "Пошук моделей...", + "lmsCorsNote": "Щоб працювати з Msty, у LM Studio має бути ввімкнено CORS", + "lmsAuthNote": "Якщо в LM Studio увімкнено автентифікацію API, для отримання моделей потрібні і ендпоінт, і API-ключ. Якщо автентифікацію вимкнено — достатньо лише ендпоінта.", + "openAICompatibleNote": "Більшість OpenAI-сумісних ендпоінтів потребують шляху /v1, наприклад https://example.com/v1. Якщо виникають проблеми — спробуйте додати /v1 до ендпоінта.", + "successMessage": { + "addDetail": "Провайдера моделей {providerName} додано", + "updateDetail": "Провайдера моделей {providerName} оновлено" + }, + "errorMessage": { + "addDetail": "Не вдалося додати провайдера", + "updateDetail": "Не вдалося оновити провайдера" + }, + "bedrockLongTermCredsWarning": "Використовувати довгострокові облікові дані для Amazon Bedrock не рекомендовано.", + "awsRegionExample": "напр. us-east-1" + }, + "toggleVisibility": { + "errorMessage": { + "detail": "Не вдалося оновити видимість провайдера" + }, + "successMessage": { + "detail": "{provider} тепер {visibility}" + } + }, + "modelsCount": "Кількість моделей", + "showInSelector": "Показувати у виборі моделей", + "availableModels": "Доступні моделі", + "noModels": "Для цього провайдера немає доступних моделей", + "modelUpdated": "Модель успішно оновлено", + "modelUpdateError": "Не вдалося оновити модель", + "manageProviders": "Керувати", + "addNewProvider": "Додати", + "columns": { + "name": "Назва", + "provider": "Провайдер", + "key": "Ключ" + }, + "readOnly": "[Лише читання]", + "logo": { + "readOnlyHint": "Для провайдерів у режимі «лише читання» редагування логотипа вимкнено.", + "changeModelLogoHint": "Клацніть, щоб змінити логотип моделі.", + "readFileFailed": "Не вдалося прочитати файл", + "providerImageOnly": "Для логотипів провайдерів підтримуються лише файли зображень.", + "providerImageTooLarge": "Логотип провайдера має бути не більшим за 1 МБ.", + "providerUpdated": "Логотип провайдера оновлено.", + "providerUpdateFailed": "Не вдалося оновити логотип провайдера. Спробуйте ще раз.", + "providerReset": "Логотип провайдера скинуто до типового.", + "providerResetFailed": "Не вдалося скинути логотип провайдера. Спробуйте ще раз.", + "modelImageOnly": "Для логотипів моделей підтримуються лише файли зображень.", + "modelImageTooLarge": "Логотип моделі має бути не більшим за 1 МБ.", + "modelUpdated": "Логотип моделі оновлено.", + "modelUpdateFailed": "Не вдалося оновити логотип моделі. Спробуйте ще раз.", + "modelReset": "Логотип моделі скинуто до типового.", + "modelResetFailed": "Не вдалося скинути логотип моделі. Спробуйте ще раз.", + "resetToProviderLogo": "Скинути до логотипа провайдера", + "resetToDefaultLogo": "Скинути до типового логотипа", + "changeProviderLogo": "Змінити логотип провайдера", + "click": "Клац", + "altClick": "Alt+клац", + "applyToProviderAndModels": "застосувати до провайдера + моделей", + "applyToProviderOnly": "застосувати лише до провайдера" + }, + "cloudCatalog": { + "enterpriseOnly": "Лише для Enterprise", + "shared": "Поширено в Cloud Catalog", + "shareFailed": "Не вдалося поширити в хмару", + "sharedFromCloudCatalog": "Поширено з Cloud Catalog", + "cloneAndShare": "Клонувати й поширити в хмару" + } + }, + "sidecarLocalAIProxyEndpoint": { + "title": "Проксі-ендпоінт @:localAI для @:remoteToolsConnector.title", + "description": "Переконайтеся, що @:remoteToolsConnector.title працює й доступний за вказаним URL через тунель. Скопіюйте й вставте повну інформацію про тунельне з'єднання з токеном і URL." + }, + "mstyRemoteEndpoint": { + "description": "Переконайтеся, що Msty Desktop запущено з увімкненими віддаленими підключеннями.", + "learnMore": "Дізнатися, як увімкнути віддалені підключення" + }, + "mstyLocalEndpoint": { + "description": "Ця служба працює, доки запущено сам застосунок. Можливо, доведеться оновити номер порту, якщо порт Local AI змінився. В інших випадках краще залишити як є." + }, + "ollamaRemoteEndpoint": { + "description": "Якщо ви використовуєте власний Ollama, переконайтеся, що він запущений і доступний за вказаним URL. Під час запуску служби Ollama потрібно додати https://msty.studio до дозволених джерел (allowed origins).", + "placeholder": "напр. http://localhost:11434 або https://ollama.com" + }, + "mlxEndpoint": { + "description": "Цей провайдер використовується для запуску моделей MLX на Mac з Apple Silicon. Ендпоінт автоматично коригується, щоб відповідати вашій локальній конфігурації MLX. За потреби його можна тимчасово змінити." + }, + "llamacppEndpoint": { + "description": "Цей провайдер використовується для запуску моделей LLaMA.cpp. Найімовірніше, типовий ендпоінт міняти не доведеться. Якщо все ж міняєте — переконайтеся, що служба LLaMA.cpp запущена й доступна за вказаним URL." + }, + "installProgress": { + "phases": { + "queued": "У черзі", + "settingUpService": "Налаштування служби", + "installingService": "Встановлення служби", + "resolving": "Визначення", + "resolvingFiles": "Визначення файлів", + "preparing": "Підготовка", + "downloading": "Завантаження", + "verifying": "Перевірка", + "importing": "Імпорт", + "activating": "Активація", + "startingService": "Запуск служби", + "cancelling": "Скасування", + "cancelled": "Скасовано", + "failed": "Помилка", + "done": "Готово", + "ready": "Готово до роботи", + "error": "Помилка", + "finalizing": "Завершення" + }, + "phasesEllipsis": { + "queued": "У черзі…", + "settingUp": "Налаштування…", + "resolving": "Визначення…", + "preparing": "Підготовка…", + "downloading": "Завантаження…", + "verifying": "Перевірка…", + "importing": "Імпорт…", + "activating": "Активація…", + "starting": "Запуск…", + "cancelling": "Скасування…", + "installing": "Встановлення…" + }, + "eta": { + "seconds": "лишилось {count} с", + "minutes": "лишилось {count} хв", + "hours": "лишилось {count} год" + }, + "fileProgress": "Файл {current}/{total}", + "bytesProgress": "{downloaded} з {total}", + "downloadingFile": "Завантаження: {file}", + "settingUp": "Налаштування {engine}", + "preparingEngineSetup": "Підготовка до налаштування двигуна…", + "installingEngine": "Встановлення двигуна… {progress}%" + }, + "localModels": { + "title": "Локальні моделі", + "noCompatibleProviders": "Немає сумісних провайдерів для керування локальними моделями. Додайте щонайменше одного провайдера типу Msty Remote або Ollama Remote, щоб користуватися локальними моделями.", + "noEngineInstalled": "Жодного локального ШІ-двигуна не встановлено. Відкрийте налаштування, щоб налаштувати Local AI, LLaMA.cpp або MLX.", + "activeDownloads": "{count} активне завантаження | Активних завантажень: {count}", + "engines": { + "ollama": "Ollama", + "llamaCpp": "LLaMA.cpp", + "llamacpp": "LLaMA.cpp", + "mlx": "MLX" + }, + "filters": { + "all": "Усі", + "recommended": "Рекомендовані", + "recommendedHint": "Рекомендовано: {engine}", + "ollama": "Ollama", + "llamaCpp": "LLaMA.cpp", + "mlx": "MLX", + "gguf": "GGUF", + "mlxSafetensors": "MLX" + }, + "setupNotice": { + "single": "{engine} встановлюється під час першого використання", + "multiple": "Потрібні двигуни встановлюються під час першого використання" + }, + "engineSetup": { + "installed": "Двигун встановлено", + "downloadingModel": "Починається завантаження моделі…", + "downloadPending": "Встановлення двигуна завершено, невдовзі почнеться завантаження моделі" + }, + "modelInstalled": { + "summary": "Модель встановлено", + "detail": "{modelLabel} встановлено в {engine}" + }, + "featured": { + "title": "Обрані" + }, + "installed": { + "title": "Встановлені", + "empty": "Моделей ще не встановлено. Перегляньте обрані моделі або скористайтеся пошуком у бібліотеці.", + "emptyFiltered": "Жодна встановлена модель не відповідає пошуку чи фільтрам.", + "clearFilters": "Очистити фільтри", + "selectModel": "Виберіть модель, щоб побачити деталі" + }, + "modelDetail": { + "purpose": { + "label": "Призначення моделі" + }, + "chatTemplate": { + "label": "Шаблон чату", + "description": "Шаблон чату Jinja2 для форматування повідомлень. Залиште порожнім, щоб використати вбудований шаблон моделі.", + "placeholder": "Вставте або введіть шаблон чату Jinja2…" + } + }, + "customOllamaModelPlaceholder": "Або встановіть модель за тегом, напр. {example}", + "alreadyInstalledErrorMessage": { + "summary": "Уже встановлено", + "detail": "Модель {modelName} уже встановлено" + }, + "abortInstalling": { + "title": "Перервати встановлення {modelName}", + "successMessage": { + "detail": "Встановлення {modelName} перервано" + } + }, + "deleteConfirmation": { + "header": "Прибрати модель", + "message": "Справді прибрати {modelName}?", + "successMessage": { + "detail": "Модель прибрано" + }, + "errorMessage": { + "detail": "Не вдалося прибрати модель" + } + }, + "modelInstall": { + "successMessage": { + "detail": "Модель {modelName} готова до роботи" + }, + "errorMessage": { + "detail": "Не вдалося встановити модель {modelName}", + "newerVersion": "{modelName} потребує новішої версії Local AI. Оновіться до останньої версії: Налаштування > Local AI > Версія служби > ... > Примусово оновити службу Local AI" + } + }, + "serviceStartError": { + "summary": "Не вдалося запустити Local AI" + }, + "browseModels": "Огляд моделей", + "ollamaModels": { + "title": "Бібліотека Ollama" + }, + "modelSearch": { + "title": "Пошук", + "searchPlaceholder": "Шукайте за назвою, автором або вставте URL репозиторію Hugging Face", + "searchPlaceholderAlt": "Знайдіть моделі за назвою, автором чи URL. Або почніть з однієї з родин моделей нижче.", + "searching": "Шукаю моделі...", + "customTagInstallHint": "Схоже на тег моделі — його можна встановити напряму через Ollama.", + "noInstallableFiles": "Не знайдено файлів моделі, придатних для встановлення", + "downloadOptions": "Варіанти завантаження", + "selectTag": "Виберіть тег для встановлення", + "installWithOllama": "Встановити через Ollama", + "viewOnHuggingFace": "Переглянути на Hugging Face", + "readme": "README", + "loadingReadme": "Завантаження..." + }, + "ggufImport": { + "tabTitle": "Імпорт", + "noEngineTitle": "Імпортувати модель", + "noEngineDescription": "Виберіть файл GGUF або теку safetensors, щоб імпортувати модель.", + "selectFile": "Вибрати файл або теку", + "modelFiles": "Файли моделі", + "selectDialogTitle": "Виберіть файл або теку моделі", + "selectFailed": "Не вдалося відкрити вибір файлів", + "importFailed": "Не вдалося імпортувати модель", + "importSuccess": "Модель імпортовано", + "engineDetectedGguf": "Налаштовую двигун для імпорту цієї моделі.", + "engineDetectedMlx": "Налаштовую двигун MLX для імпорту цієї моделі.", + "engineDetectedSafetensors": "Налаштовую двигун для імпорту цієї моделі.", + "title": "Імпорт моделі GGUF", + "description": "Виберіть у файловій системі файл моделі GGUF для імпорту в {providerLabel}.", + "activeImports": "Активні імпорти", + "noFileSelected": "Файл не вибрано", + "selectGgufFilePrompt": "Натисніть кнопку нижче, щоб вибрати файл GGUF", + "dragDropOrClick": "Перетягніть сюди файл GGUF або натисніть кнопку нижче", + "dropFileHere": "Перетягніть файл сюди", + "releaseToUpload": "Відпустіть, щоб вибрати файл", + "selectGgufFile": "Вибрати файл GGUF", + "chooseDifferentFile": "Вибрати інший файл", + "importModel": "Імпортувати модель", + "modelName": "Назва моделі", + "modelNamePlaceholder": "напр. my-custom-model", + "modelNameDescription": "Під цією назвою ви звертатиметеся до моделі в розмовах.", + "removeFile": "Прибрати файл", + "dismissJob": "Приховати", + "useSymlink": "Використати символьне посилання (економить місце на диску)", + "symlinkDescription": "Створює символьне посилання замість копіювання файлу. Доступно лише для локальних серверів.", + "process": { + "calculatingDigest": "Обчислення хешу файлу", + "uploadingFile": "Завантаження файлу", + "creatingSymlink": "Створення символьного посилання", + "creatingModel": "Створення моделі" + }, + "success": "Модель {modelName} успішно імпортовано", + "labels": { + "name": "Назва", + "file": "Файл", + "status": "Статус", + "error": "Помилка" + }, + "status": { + "uploading": "Завантаження", + "creating": "Створення моделі", + "completed": "Завершено", + "error": "Помилка", + "cancelled": "Скасовано" + }, + "errors": { + "invalidFile": "Виберіть коректний файл GGUF" + } + }, + "safetensorsImport": { + "tabTitle": "Імпорт Safetensors", + "title": "Імпорт моделі Safetensors", + "description": "Виберіть теку з вагами моделі у форматі safetensors для імпорту в {providerLabel}. Підтримувані архітектури: Gemma, Llama, Mistral і Phi.", + "activeImports": "Активні імпорти", + "noDirectorySelected": "Теку не вибрано", + "selectDirectoryHint": "Тека має містити файли safetensors і config.json", + "selectDirectoryTitle": "Виберіть теку Safetensors", + "selectDirectory": "Вибрати теку", + "chooseDifferentDirectory": "Вибрати іншу теку", + "importModel": "Імпортувати модель", + "modelName": "Назва моделі", + "modelNamePlaceholder": "напр. my-custom-model", + "modelNameDescription": "Під цією назвою ви звертатиметеся до моделі в розмовах.", + "removeDirectory": "Прибрати теку", + "process": { + "scanningDirectory": "Сканування теки", + "processingFile": "Обробка файлу {current} з {total}", + "creatingModel": "Створення моделі з safetensors" + }, + "success": "Модель {modelName} успішно імпортовано", + "labels": { + "name": "Назва", + "directory": "Тека", + "status": "Статус", + "error": "Помилка" + }, + "status": { + "uploading": "Завантаження файлів", + "creating": "Створення моделі", + "completed": "Завершено", + "error": "Помилка", + "cancelled": "Скасовано" + }, + "filesSelected": "файлів вибрано", + "importSuccess": "Модель імпортовано", + "errors": { + "desktopOnly": "Імпорт safetensors доступний лише в десктопному застосунку", + "selectFailed": "Не вдалося вибрати теку", + "noValidFiles": "У вибраній теці не знайдено коректних файлів safetensors", + "importFailed": "Не вдалося імпортувати модель" + } + }, + "huggingfaceModels": { + "title": "Моделі Hugging Face", + "searchPlaceholder": "Шукайте за автором, назвою моделі або вставте URL репозиторію Hugging Face", + "searchPlaceholderAlt": "Знайдіть моделі за назвою, автором чи URL. Або почніть з однієї з родин моделей нижче.", + "searching": "Шукаю моделі..." + } + }, + "ollamaRegistry": { + "title": "Віддалені моделі", + "open": "Керувати віддаленими моделями", + "searchPlaceholder": "Пошук моделей...", + "activePulls": "Активні завантаження", + "cancelPull": "Скасувати завантаження", + "pulls": "завантажень: {count}", + "noModelsFound": "Моделей не знайдено", + "customTagPlaceholder": "або введіть власний тег (напр. mymodel:latest)", + "alreadyDownloading": "Уже завантажується", + "pullStarted": "Завантаження почалося", + "pullFailed": "Помилка завантаження: {message}", + "pullSuccess": "Модель успішно встановлено", + "cancelFailed": "Не вдалося скасувати: {message}", + "pullCancelled": "Завантаження скасовано", + "deleteRemoteTag": { + "title": "Видалити віддалений тег", + "message": "Видалити {model} з {provider}?", + "failed": "Не вдалося видалити {model}: {message}", + "success": "{model} видалено з {provider}." + } + }, + "llamacppModels": { + "title": "Моделі LLaMA.cpp", + "activeDownloads": "{count} активне завантаження LLaMA.cpp | Активних завантажень LLaMA.cpp: {count}", + "alreadyInstalledErrorMessage": { + "summary": "Уже встановлено", + "detail": "Модель LLaMA.cpp {modelName} уже встановлено" + }, + "installSuccessMessage": { + "summary": "Модель готова", + "detail": "Модель LLaMA.cpp {modelName} готова до роботи" + }, + "installErrorMessage": { + "summary": "Помилка встановлення", + "detail": "Не вдалося встановити модель LLaMA.cpp {modelName}" + }, + "modelInstall": { + "successMessage": { + "detail": "Модель LLaMA.cpp {modelName} встановлено" + }, + "errorMessage": { + "detail": "Не вдалося встановити модель LLaMA.cpp {modelName}" + }, + "abortedMessage": { + "detail": "Завантаження моделі LLaMA.cpp {modelName} перервано" + } + }, + "abortInstallErrorMessage": { + "detail": "Не вдалося скасувати завантаження моделі LLaMA.cpp" + }, + "abortInstallSuccessMessage": { + "detail": "Завантаження моделі LLaMA.cpp {modelName} скасовано" + }, + "uninstallErrorMessage": { + "summary": "Помилка видалення", + "detail": "Не вдалося видалити модель LLaMA.cpp {modelName}" + }, + "uninstallSuccessMessage": { + "summary": "Модель прибрано", + "detail": "Модель LLaMA.cpp {modelName} видалено" + }, + "uninstallConfirmationMessage": { + "summary": "Видалити модель LLaMA.cpp", + "detail": "Справді видалити {modelName}?" + }, + "llamacppFeaturedModels": { + "title": "Обрані моделі LLaMA.cpp" + }, + "llamacppInstalledModels": { + "title": "Встановлені моделі LLaMA.cpp" + }, + "llamacppCommunityModels": { + "title": "Моделі спільноти LLaMA.cpp", + "description": "Переглядайте, шукайте та встановлюйте моделі GGUF просто з Hugging Face у вашу локальну теку моделей LLaMA.cpp.", + "searchTitle": "Пошук моделей спільноти LLaMA.cpp", + "searchPlaceholder": "Пошук моделей LLaMA.cpp на Hugging Face", + "searchPlaceholderAlt": "Знайдіть сумісні з LLaMA.cpp моделі GGUF або виберіть одну з обраних родин моделей нижче.", + "searching": "Шукаю моделі LLaMA.cpp..." + } + }, + "mlxModels": { + "title": "Моделі MLX", + "notAppleSilicon": "Моделі MLX підтримуються лише на Mac з Apple Silicon (M1, M2, M3, M4 тощо). Ваш пристрій несумісний.", + "noCompatibleProviders": "Немає доступних сумісних провайдерів MLX. Додайте щонайменше одного провайдера MLX, щоб користуватися моделями MLX.", + "activeDownloads": "{count} активне завантаження MLX | Активних завантажень MLX: {count}", + "learnMore": "Дізнатися більше про MLX", + "featured": { + "title": "Обрані моделі MLX" + }, + "installed": { + "title": "Встановлені моделі MLX" + }, + "alreadyInstalledErrorMessage": { + "summary": "Уже встановлено", + "detail": "Модель MLX {modelName} уже встановлено" + }, + "deleteConfirmation": { + "header": "Видалити модель MLX", + "message": "Справді видалити {modelName}?", + "successMessage": { + "detail": "Модель MLX прибрано" + }, + "errorMessage": { + "detail": "Не вдалося видалити модель MLX" + } + }, + "modelInstall": { + "successMessage": { + "detail": "Модель MLX {modelName} готова до роботи" + }, + "errorMessage": { + "detail": "Не вдалося встановити модель MLX {modelName}" + }, + "abortedMessage": { + "detail": "Завантаження моделі MLX {modelName} перервано" + } + }, + "mlxCommunityModels": { + "title": "Моделі спільноти MLX", + "searchTitle": "Пошук моделей спільноти MLX", + "searchPlaceholder": "Пошук моделей MLX у HuggingFace mlx-community", + "searchPlaceholderAlt": "Знайдіть оптимізовані під MLX моделі на HuggingFace. Або почніть з однієї з родин моделей нижче.", + "searching": "Шукаю моделі MLX..." + } + } + }, + "stickyPrompt": { + "title": "Закріплений промт", + "disableStickyPrompt": "Вимкнути закріплений промт", + "editDialog": { + "title": "Редагувати закріплений промт", + "description": "Коли промт закріплено, він додається на початок кожного нового повідомлення, а попередні ігноруються. Так розмова тримається одного активного контексту. Системний промт завжди входить у контекст." + } + }, + "contextShield": { + "title": "Щит контексту", + "enableContextShield": "Увімкнути щит контексту", + "enableContextShieldWithSplitsSync": "Увімкнути щит контексту. Утримуйте Option/Alt, щоб застосувати щит контексту до всіх синхронізованих сплітів.", + "removeContextShield": "Прибрати щит контексту", + "removeContextShieldWithSplitsSync": "Вимкнути щит контексту. Утримуйте Option/Alt, щоб прибрати щит контексту з усіх синхронізованих сплітів.", + "breakContext": "Розірвати контекст", + "customContext": "Власний контекст", + "generateContextSummary": "Згенерувати підсумок контексту", + "contextSummary": "Підсумок контексту", + "editContextSummary": "Редагувати підсумок контексту", + "regenerateContextSummary": "Перегенерувати підсумок контексту", + "clearContextSummary": "Очистити підсумок контексту", + "summaryDescriptionInfoHeader": "Цей підсумок згенеровано з контексту розмов вище й додається до контексту під час генерації нових повідомлень нижче цього щита.", + "contextShieldWithSummary": "Щит контексту з підсумком" + }, + "data": "Дані", + "advancedConfigurations": "Розширені конфігурації", + "applicationInfo": { + "title": "Інформація про застосунок", + "appVersion": { + "title": "Версія застосунку", + "description": "Наявність оновлень перевіряється періодично, і ви отримаєте сповіщення, коли вийде нове. Можна також перевірити оновлення вручну й встановити їх.", + "checkForUpdates": "Перевірити оновлення", + "enableAutoUpdates": "Увімкнути автооновлення", + "disableAutoUpdates": "Вимкнути автооновлення", + "updateTrackTitle": "Канал оновлень", + "updateTrackDescription": "Виберіть, чи ця інсталяція залишається на 2.x, чи отримує оновлення раннього доступу Msty 3.0. Канал 3.0 автоматично отримає стабільну 3.0, щойно вона вийде.", + "updateTrackLegacy2": "Стабільні оновлення 2.x", + "updateTrackV3": "Ранній доступ 3.0 (бета)", + "viewChangelog": "Переглянути список змін", + "checkingForUpdates": "Перевіряю оновлення...", + "errorCheckingUpdates": "Не вдалося перевірити оновлення. Спробуйте ще раз.", + "packagedBuildsOnly": "Перевірка оновлень доступна лише у зібраних версіях застосунку.", + "autoUpdatesEnabled": "Автооновлення увімкнено", + "autoUpdatesDisabled": "Автооновлення вимкнено", + "updateAvailable": "Доступне нове оновлення.", + "updateAvailableMessage": "Доступна нова версія {version}. Завантажити й встановити її зараз?", + "downloadAndInstall": "Завантажити й встановити", + "updateAlreadyDownloading": "Оновлення вже завантажується.", + "updateDownloaded": "Оновлення завантажено.", + "updateReadyToInstall": "Оновлення до версії {version} завантажено й готове до встановлення.", + "restartNow": "Перезапустити зараз", + "updateDownloading": "Завантажую оновлення...", + "noUpdatesAvailable": "У вас уже найновіша версія." + }, + "modelsInfo": { + "title": "Інформація про моделі", + "description": "Оновіть локальні метадані моделей. Ця інформація містить відомості про кожну модель, але не самі файли моделей. Стосується і локально збережених, і онлайн-моделей.", + "fetchLatest": "Отримати найновішу інформацію про моделі", + "updated": "Інформацію про моделі успішно оновлено", + "errorUpdating": "Не вдалося оновити інформацію про моделі" + }, + "appSettings": { + "title": "Налаштування застосунку", + "description": "Скидання налаштувань застосунку до типових може допомогти усунути проблеми. Буде відновлено типові користувацькі параметри — як-от вигляд і шлях до моделей, — але жодні дані не буде видалено, зокрема чати й завантажені чи імпортовані моделі.", + "resetApp": "Скинути налаштування застосунку", + "resetConfirm": { + "header": "Скинути налаштування застосунку", + "message": "Справді скинути всі налаштування застосунку до типових? Типові параметри буде відновлено, але ваші дані не буде видалено." + }, + "resetSuccess": "Налаштування застосунку успішно скинуто", + "resetError": "Не вдалося скинути налаштування застосунку" + }, + "dataPaths": { + "title": "Шляхи до даних", + "description": "Усі дані — моделі, розмови, налаштування й логи — зберігаються локально на вашому пристрої. Змінюйте вміст цих тек, лише якщо знаєтеся на файловій структурі застосунку.", + "appData": "Дані застосунку", + "appLogs": "Логи застосунку", + "openInFinder": "Відкрити у Finder" + }, + "helpAndDiscussions": { + "title": "Допомога та обговорення", + "description": "Приєднуйтеся до нашої спільноти в Discord, щоб отримати підтримку, поділитися відгуком і бути в курсі новин.", + "sayHi": "Привітатися!", + "viewDocs": "Переглянути документацію" + } + }, + "logViewer": { + "title": "Переглядач логів", + "description": "Переглядайте й аналізуйте логи застосунку в реальному часі. Використовуйте фільтри й пошук, щоб швидше розбиратися з проблемами.", + "searchPlaceholder": "Пошук у логах...", + "refresh": "Оновити логи", + "autoRefreshOn": "Зупинити автооновлення", + "autoRefreshOff": "Увімкнути автооновлення", + "pause": "Зупинити автопрокрутку", + "resume": "Відновити автопрокрутку", + "copy": "Скопіювати логи в буфер обміну", + "download": "Завантажити логи", + "clearTemporarily": "Очистити показ логів", + "clearPermanently": "Очистити файл логів", + "showAllLogs": "Показати всі логи", + "clearPermanentlyConfirmation": { + "header": "Очистити файл логів", + "message": "Справді очистити файл логів? Усі записи буде видалено назавжди." + }, + "loading": "Завантажую логи...", + "noLogs": "Логів немає", + "noMatchingLogs": "Жоден лог не відповідає поточним фільтрам", + "totalLines": "{count} рядок усього | Усього рядків: {count}", + "filteredLines": "{count} відфільтрований рядок | Відфільтрованих рядків: {count}", + "copiedToClipboard": "Логи скопійовано в буфер обміну", + "downloaded": "Логи успішно завантажено", + "clearedPermanently": "Файл логів успішно очищено", + "errorLoading": "Не вдалося завантажити логи", + "errorCopying": "Не вдалося скопіювати логи", + "errorDownloading": "Не вдалося завантажити логи", + "errorClearing": "Не вдалося очистити логи", + "levels": { + "all": "Усі рівні", + "error": "Помилка", + "warn": "Попередження", + "info": "Інформація", + "debug": "Налагодження" + } + }, + "notifications": { + "title": "Сповіщення", + "description": "Переглядайте сповіщення застосунку — помилки, попередження та інформаційні події — і керуйте ними.", + "searchPlaceholder": "Пошук сповіщень...", + "searchingAllLogs": "Шукаю всі сповіщення в базі даних", + "refresh": "Оновити сповіщення", + "autoRefreshOn": "Автооновлення увімкнено", + "autoRefreshOff": "Увімкнути автооновлення", + "copy": "Скопіювати все в буфер обміну", + "copyLog": "Скопіювати сповіщення", + "download": "Завантажити сповіщення", + "clearPermanently": "Очистити всі сповіщення", + "clearPermanentlyConfirmation": { + "header": "Очистити сповіщення", + "message": "Справді назавжди видалити всі сповіщення? Цю дію не можна скасувати." + }, + "loading": "Завантажую сповіщення...", + "loadingMore": "Завантажую ще...", + "endOfList": "Кінець списку", + "noLogs": "Сповіщень немає", + "totalLogs": "{count} сповіщення | Сповіщень: {count}", + "displayedLogs": "Показано {count}", + "copiedToClipboard": "Сповіщення скопійовано в буфер обміну", + "downloaded": "Сповіщення успішно завантажено", + "clearedPermanently": "Сповіщення успішно очищено", + "deleted": "Сповіщення успішно видалено", + "errorLoading": "Не вдалося завантажити сповіщення", + "errorCopying": "Не вдалося скопіювати сповіщення", + "errorDownloading": "Не вдалося завантажити сповіщення", + "errorClearing": "Не вдалося очистити сповіщення", + "errorDeleting": "Не вдалося видалити сповіщення", + "purge": { + "label": "Очистити сповіщення", + "olderThan1Day": "Старші за 1 день", + "olderThan7Days": "Старші за 7 днів", + "olderThan15Days": "Старші за 15 днів", + "olderThan30Days": "Старші за 30 днів", + "all": "Усі", + "confirmHeader": "Очистити сповіщення", + "confirmMessageDays": "Справді видалити сповіщення, старші за {days} днів? Цю дію не можна скасувати.", + "purge": "Очистити", + "purged": "Сповіщення успішно очищено", + "errorPurging": "Не вдалося очистити сповіщення" + }, + "levels": { + "all": "Усі рівні", + "error": "Помилки", + "warn": "Попередження", + "info": "Інформація" + } + }, + "sidebar": { + "expandGroup": "Розгорнути {group}", + "collapseGroup": "Згорнути {group}", + "showExtraItems": "Показати додаткові елементи", + "hideExtraItems": "Сховати додаткові елементи", + "groups": { + "modelsPrompts": "Моделі та промти", + "personasTools": "Персони та інструменти", + "knowledgeInsights": "Знання та висновки", + "system": "Система" + }, + "appUpdater": { + "version": "Версія {version}", + "restartToApply": "Перезапустіть, щоб застосувати оновлення", + "restart": "Перезапустити зараз", + "downloading": "Завантажую оновлення...", + "viewChangelog": "Переглянути список змін", + "openingChangelog": "Відкриваю список змін...", + "errorHint": "Помилка оновлення — клацніть для деталей", + "readyHint": "Оновлення готове — перезапустіть, щоб застосувати", + "downloadingHint": "Завантажую оновлення... {percent}%", + "errorDialog": { + "header": "Помилка оновлення", + "message": "Під час оновлення сталася помилка: {error}", + "downloadManually": "Завантажити вручну" + } + } + }, + "showInNativeFileManager": { + "mac": "Показати у Finder", + "win": "Показати у Провіднику", + "lin": "Показати у файловому менеджері" + }, + "settings": { + "title": "Налаштування", + "general": "Загальні", + "defaultPrompts": "Типові промти", + "prompts": { + "description": "Ці промти визначають, як генеруються заголовки, будуються пошукові запити, добуваються знання та підсумовується контекст. Зміни зберігаються в глобальних налаштуваннях цього пристрою (головна база даних) і діють в усіх робочих областях (не окремо для кожної).", + "availablePrompts": "Доступні промти", + "promptCategories": "Категорії промтів", + "customized": "Змінено", + "customizedCount": "змінено: {count}", + "modified": "Змінено", + "usingCustom": "Використовується власний", + "usingDefault": "Використовується типовий", + "clickToEdit": "Клацніть, щоб редагувати промт", + "variables": "Змінні", + "lastModified": "Востаннє змінено", + "selectPrompt": "Виберіть промт для налаштування", + "clearContent": "Очистити вміст", + "resetToDefault": "Скинути до типового", + "insertFromLibrary": "Вставити з бібліотеки", + "saveChanges": "Зберегти зміни", + "discardChanges": "Відкинути зміни", + "groups": { + "general": "Загальні промти", + "attachmentStudio": "Context Studio", + "knowledgeStack": "Стек знань", + "realTimeData": "Дані в реальному часі", + "liveContext": "Живий контекст", + "contextShield": "Контекст і щит", + "personasAndCrew": "Персони та команда" + }, + "categories": { + "generation": "Генерація контенту", + "search": "Пошук і синтез", + "analysis": "Аналіз і видобування" + } + }, + "licenseAndAccess": "Ліцензія та доступ", + "fontSize": "Розмір шрифту", + "defaultRTD": { + "sectionTitle": "Пошук даних у реальному часі", + "title": "Типовий провайдер RTD", + "description": "Виберіть провайдера пошуку даних у реальному часі, який використовуватиметься для нових розмов.", + "saved": "{provider} встановлено типовим провайдером RTD", + "saveError": "Не вдалося зберегти типового провайдера RTD", + "noProvidersAvailable": "Немає доступних провайдерів RTD", + "configureLabel": "Налаштувати розширені опції для", + "configSaved": "Конфігурацію для {provider} збережено", + "mode": { + "title": "Типовий режим RTD", + "description": "Задайте типовий режим RTD для нових розмов.", + "pushHint": "Нові розмови типово використовуватимуть режим push.", + "pullHint": "Нові розмови типово використовуватимуть режим pull.", + "pullGuardHint": "Режим pull потребує плану Aurum.", + "saveError": "Не вдалося зберегти типовий режим RTD" + } + }, + "teams": "Команди", + "appearance": "Вигляд", + "conversation": { + "title": "Розмови", + "autoArchive": { + "title": "Автоархівування неактивних розмов", + "description": "Автоматично переміщувати неактивні розмови в Архів через вибрану кількість днів. Щоб увімкнути, скористайтеся перемикачем «Увімкнути автоархівування». «Архівувати зараз» виконує разове очищення за поточним порогом днів.", + "enableLabel": "Увімкнути автоархівування", + "disableLabel": "Вимкнути автоархівування", + "enableHint": "Заархівовані розмови залишаються доступними в розділі «Архів».", + "daysLabel": "Архівувати через", + "suffix": "день | днів", + "disabledHint": "Увімкнути або вимкнути можна в меню", + "runNowLabel": "Архівувати зараз", + "runNowDisabled": "Щоб запустити, увімкніть автоархівування й задайте кількість днів > 0", + "runNowResult": "Заархівовано {count} розмову | Заархівовано розмов: {count}", + "daysSaved": "Автоархівування — через {days} день | Автоархівування — через {days} днів", + "enabledToast": "Автоархівування увімкнено", + "disabledToast": "Автоархівування вимкнено" + }, + "showSystemPromptInEmptyState": { + "title": "Показувати системний промт у порожньому чаті", + "description": "Показувати системний промт у заглушці порожнього чату. Якщо вимкнено, системний промт буде доступний лише через кнопку на панелі дій.", + "enabledToast": "Системний промт показуватиметься в порожньому чаті", + "disabledToast": "Системний промт приховано в порожньому чаті" + }, + "useModernMessageLayout": { + "title": "Сучасне компонування повідомлень", + "description": "Використовувати сучасне компонування: повідомлення користувача праворуч, відповіді асистента ліворуч. Вимкніть, щоб повернути класичний вигляд з аватарами.", + "enabledToast": "Сучасне компонування повідомлень увімкнено", + "disabledToast": "Класичне компонування повідомлень увімкнено" + }, + "expertMode": { + "title": "Експертний режим", + "description": "Увімкнути додаткові експертні опції чату", + "enabledToast": "Експертний режим увімкнено", + "disabledToast": "Експертний режим вимкнено" + } + }, + "setupService": "Налаштувати {service}", + "workspaceLock": { + "title": "Блокування робочої області та шифрування секретів", + "description": "Заблокуйте робочу область парольною фразою, щоб чутливі налаштування й API-ключі лишалися прихованими до розблокування. Розблоковуйте раз на сесію, змінюйте фразу будь-коли або вимкніть захист, якщо передумаєте.", + "experimentalInfo": "Шифрування на основі парольної фрази — експериментальне. Перед увімкненням зробіть резервну копію своїх секретів.", + "status": "Статус:", + "locked": "Заблоковано", + "unlocked": "Розблоковано", + "lock": "Заблокувати", + "unlock": "Розблокувати", + "protectedSection": "Робочу область захищено. Розблокуйте парольною фразою.", + "unprotected": "Без захисту", + "unprotectedToast": "Блокування робочої області не налаштовано. Спершу задайте парольну фразу.", + "unlockTitle": "Введіть парольну фразу", + "cancel": "Скасувати", + "toastUnlocked": "Робочу область розблоковано на цю сесію", + "toastLocked": "Робочу область заблоковано", + "disable": "Вимкнути шифрування", + "disableHelp": "Введіть парольну фразу, щоб розшифрувати дані й вимкнути шифрування.", + "disableProtection": "Вимкнути захист", + "disableProtectionHelp": "Введіть парольну фразу, щоб вимкнути захист робочої області. Це зніме шифрування з ваших збережених секретів і API-ключів.", + "disableProtectionConfirmMessage": "Справді вимкнути захист робочої області? Усі зашифровані секрети та API-ключі у вашій базі даних буде остаточно розшифровано.", + "enableProtection": "Увімкнути захист", + "setPassphrase": "Задати парольну фразу", + "setPassphraseWarning": "Важливо: збережіть парольну фразу в надійному місці. Відновити забуту фразу неможливо, а без неї ви втратите доступ до зашифрованих даних робочої області.", + "changePassphrase": "Змінити парольну фразу", + "changePassphraseWarning": "Важливо: збережіть нову парольну фразу в надійному місці. Відновити забуту фразу неможливо, а без неї ви втратите доступ до зашифрованих даних робочої області.", + "updatePassphrase": "Оновити парольну фразу", + "passphrase": "Парольна фраза", + "passphraseCurrent": "Поточна парольна фраза", + "passphraseNew": "Нова парольна фраза", + "passphraseConfirm": "Підтвердьте парольну фразу", + "errorMinLength": "Парольна фраза має містити щонайменше 8 символів", + "errorMismatch": "Парольні фрази не збігаються", + "errorInvalid": "Некоректне значення", + "setupSuccess": "Парольну фразу налаштовано", + "setupFailed": "Не вдалося налаштувати парольну фразу", + "rotateSuccess": "Парольну фразу оновлено", + "rotateFailed": "Не вдалося оновити парольну фразу", + "disableConfirmMessage": "Розшифрувати збережені секрети й зняти захист робочої області?", + "disableSuccess": "Шифрування вимкнено", + "disableFailed": "Не вдалося вимкнути шифрування", + "incorrectPassphrase": "Неправильна парольна фраза", + "lockedWithName": "{workspaceName} заблоковано", + "switchBackTitle": "Не вдається розблокувати цю робочу область?", + "switchBackDescription": "Поверніться до {workspaceName}, щоб продовжити роботу.", + "switchBackAction": "Повернутися до {workspaceName}", + "switchBackError": "Не вдалося перемкнути робочі області. Спробуйте ще раз." + }, + "dataBackup": { + "title": "Експортувати дані", + "description": "Натисніть кнопку нижче, щоб експортувати копію своїх даних для резервної копії або перенесення на інший пристрій. Експорт містить розмови, промти, моделі, налаштування та інші дані застосунку з усіх робочих областей." + }, + "dataBackupReminderInterval": { + "title": "Інтервал нагадувань про резервне копіювання даних", + "description": "Як часто нагадувати вам робити резервну копію даних." + }, + "dangerZone": { + "title": "Небезпечна зона", + "description": "Дії в цьому розділі незворотні й можуть призвести до втрати даних. Радимо спершу експортувати копію своїх даних.", + "clearData": { + "title": "Очистити дані", + "description": "Назавжди видалити всі дані застосунку — розмови, промти, моделі, налаштування та іншу пов'язану інформацію з усіх робочих областей." + }, + "restoreData": { + "title": "Відновити дані з резервної копії", + "description": "Імпортуйте раніше експортований zip-файл даних, щоб відновити розмови, промти, моделі, налаштування та інші дані застосунку в усіх робочих областях. Ця дія перезапише всі наявні дані." + } + }, + "dataMigrate": { + "action": "Мігрувати", + "title": "Міграція з Msty App 1.x до Studio", + "itemsToMigrate": { + "label": "Крок 2: виберіть, що мігрувати", + "action": "Вибрати елементи" + }, + "pointsToRemember": { + "activeWorkspace": "Ви можете імпортувати промти з бібліотеки, віддалених провайдерів моделей, розмови та вкладення в поточну робочу область. Якщо потрібно імпортувати в іншу — спершу перейдіть до неї.", + "remoteModelProviders": "Під час міграції віддалених провайдерів моделей API-ключі НЕ переносяться — їх доведеться ввести знову. Деякі застарілі моделі можуть не підтримуватися в Studio.", + "attachmentsMigration": "Якщо мігруєте вкладення, спершу запакуйте теку вкладень у zip. Вкладення можна мігрувати окремо після бази даних або разом із нею." + }, + "databaseMigration": { + "title": "Міграція бази даних", + "label": "Крок 1: виберіть файл бази даних Msty App 1.x", + "action": "Перетягніть сюди файл бази даних Msty", + "hint": "Файли бази даних Msty App 1.x зазвичай називаються `msty.db`" + }, + "attachmentsMigration": { + "title": "Міграція вкладень", + "migrate": "Мігрувати окремо", + "label": "Крок 3: додайте запаковану теку вкладень", + "success": "Вкладення успішно мігровано", + "error": "Не вдалося мігрувати вкладення", + "action": "Перетягніть сюди запаковану теку вкладень", + "hint": "Запакуйте всю теку вкладень із Msty App 1.x. Після вибору можна мігрувати окремо, якщо додаєте її вже після міграції бази даних." + }, + "missingDataWarning": { + "description": "Виберіть файл бази даних і щонайменше одну таблицю для міграції", + "title": "Бракує даних" + }, + "description": "Перенесіть свої дані з Msty App 1.x у Studio. Імпортовані дані не перезаписують наявні.", + "successMessage": "Успішно мігровано: {item}", + "errorMessage": "Не вдалося мігрувати: {item}", + "migrationInProgress": "Триває міграція...", + "migrationComplete": "Міграцію завершено: {item}", + "migrationFail": "Міграція не вдалася: {item}", + "migratingItem": "Мігрую {item}...", + "migrationError": { + "title": "Помилка міграції", + "action": "Переглянути деталі", + "message": "Повідомлення", + "cause": "Причина" + } + }, + "colorPreference": "Колірна схема", + "accentColor": "Акцент інтерфейсу", + "dark": "Темна", + "light": "Світла", + "default": "Типове | Типові", + "system": "Системна", + "baseColor": "Базовий колір", + "interfaceMood": "Настрій інтерфейсу", + "emerald": "Смарагдовий", + "lime": "Лаймовий", + "green": "Зелений", + "red": "Червоний", + "orange": "Помаранчевий", + "amber": "Бурштиновий", + "yellow": "Жовтий", + "teal": "Бірюзовий", + "cyan": "Блакитно-зелений", + "sky": "Небесний", + "blue": "Синій", + "indigo": "Індиго", + "violet": "Фіалковий", + "purple": "Пурпуровий", + "fuchsia": "Фуксія", + "pink": "Рожевий", + "rose": "Трояндовий", + "slate": "Сланцевий", + "gray": "Сірий", + "zinc": "Цинковий", + "neutral": "Нейтральний", + "stone": "Кам'яний", + "mist": "Імла", + "dusk": "Сутінки", + "sage": "Шавлія", + "ocean": "Океан", + "sandy": "Пісковий", + "linen": "Льон", + "ember": "Жарина", + "terracotta": "Теракота", + "sepia": "Сепія", + "parchment": "Пергамент", + "lighter": "Світліше", + "accentColorNames": { + "verdant": "Зелень", + "citron": "Цитрон", + "clover": "Конюшина", + "signal": "Сигнал", + "cinder": "Попіл", + "honey": "Мед", + "solar": "Сонце", + "tide": "Приплив", + "glacier": "Льодовик", + "lagoon": "Лагуна", + "harbor": "Гавань", + "nocturne": "Ноктюрн", + "iris": "Ірис", + "velvet": "Оксамит", + "voltage": "Напруга", + "blush": "Рум'янець", + "bloom": "Цвіт", + "storm": "Шторм", + "alloy": "Сплав", + "graphite": "Графіт", + "quarry": "Кар'єр", + "haze": "Серпанок", + "afterglow": "Заграва", + "canopy": "Крона", + "tidal": "Приплив", + "canvas": "Полотно", + "hearth": "Вогнище", + "kiln": "Горно", + "scribe": "Писар" + }, + "interfaceMoodNames": { + "storm": "Шторм", + "ash": "Попіл", + "alloy": "Сплав", + "carbon": "Вуглець", + "quarry": "Кар'єр", + "mist": "Імла", + "dusk": "Сутінки", + "sage": "Шавлія", + "ocean": "Океан", + "cloud": "Хмара", + "frost": "Іній", + "drift": "Наносний", + "linen": "Льон", + "parchment": "Пергамент", + "ember": "Жарина", + "terracotta": "Теракота", + "sepia": "Сепія" + }, + "interfaceMoodDescriptions": { + "storm": "Синьо-сіра ніч", + "ash": "Зрівноважений вугільний", + "alloy": "М'який індустріальний темний", + "carbon": "Класичні відтінки сірого", + "quarry": "Землистий мінеральний темний", + "mist": "Легкий синій серпанок", + "dusk": "Димчастий індиго-сірий", + "sage": "Приглушений ботанічний сірий", + "ocean": "Сланець кольору морського скла", + "cloud": "Піднятий холодний дим", + "frost": "Легка графітова імла", + "drift": "Запилений теплий нейтральний", + "linen": "Теплий папір із глибшим чорнилом", + "parchment": "Тепле сяйво слонової кістки", + "ember": "Мідь і еспресо", + "terracotta": "Глина й сутінки", + "sepia": "Чорнило й пергамент" + }, + "appearanceView": { + "title": "Вигляд сторінки налаштувань", + "description": "Виберіть, скільки деталей попереднього перегляду показувати на цій сторінці налаштувань.", + "compact": "Компактний", + "compactHint": "Списки й перемикачі для швидкого перегляду", + "studio": "Studio", + "studioHint": "Багатші картки попереднього перегляду для візуального вибору" + }, + "appearanceScopes": { + "both": "Обидві", + "light": "Світла", + "dark": "Темна", + "applyToBoth": "Застосувати до обох", + "appliesToMode": "Застосовується до режиму:", + "bothHint": "Застосовується і до світлої, і до темної.", + "scopedHint": "Застосовується лише до теми «{theme}».", + "inheritedHint": "Тема «{theme}» використовує спільний вибір.", + "previewHint": "Перемкніть колірну схему, щоб побачити результат." + }, + "colorPreferenceDescriptions": { + "light": "Завжди світлі поверхні", + "dark": "Завжди темні поверхні", + "system": "Слідувати налаштуванню пристрою" + }, + "modeDescriptions": { + "normal": "Збалансована поведінка робочої області", + "focus": "Менше візуальних відволікань", + "zen": "Мінімум інтерфейсу для глибшої концентрації" + }, + "codeTheme": "Тема коду", + "rtlSupport": { + "title": "Підтримка RTL", + "sectionDescription": "Увімкніть компонування справа наліво для мов на кшталт арабської, івриту та перської. Уся робоча область оновлюється миттєво.", + "toggleLabel": "Увімкнути компонування RTL", + "enabledHint": "Компонування справа наліво активне в усьому застосунку.", + "disabledHint": "Зараз застосунок використовує компонування зліва направо." + }, + "miniMap": { + "title": "Мінікарта", + "description": "Увімкнути вбудований навігатор повідомлень «мінікарта» з попереднім переглядом гілок. Якщо вимкнено, використовується простіший навігатор «вгору/вниз».", + "enabled": "Увімкнено", + "disabled": "Вимкнено", + "enabledHint": "Вбудована мінікарта з попереднім переглядом гілок", + "disabledHint": "Лише навігація вгору/вниз", + "navigator": { + "title": "Мінікарта", + "open": "Відкрити мінікарту", + "hide": "Сховати мінікарту", + "jumpToTop": "Перейти вгору", + "jumpToBottom": "Перейти вниз", + "previousSection": "Попередній розділ", + "nextSection": "Наступний розділ", + "browseConversation": "Огляд розмови", + "hideContents": "Сховати вміст мінікарти", + "atTop": "Угорі", + "atBottom": "Унизу", + "resumeAutoScroll": "Відновити автопрокрутку", + "entries": "{count} запис | Записів: {count}", + "emptyExcerpt": "Вмісту немає" + }, + "scrollJumpButton": { + "goToTop": "Угору", + "goToBottom": "Униз" + } + }, + "branchBreadcrumbs": { + "title": "Навігація гілками", + "description": "Показувати компактну панель навігації вгорі розмов, коли є гілки." + }, + "spellcheck": { + "title": "Перевірка орфографії", + "description": "Увімкніть або вимкніть перевірку орфографії в полях введення тексту. Вимкнення може стати в пригоді, коли ви працюєте кількома мовами або з технічним текстом. Налаштування перевірки орфографії вашої операційної системи можуть мати вищий пріоритет. Щоб зміни повністю набули чинності, перезапустіть застосунок." + }, + "language": { + "sectionTitle": "Мова та локалізація", + "sectionDescription": "Перемикайтеся між мовами інтерфейсу, вмикайте режим розробника або імпортуйте тимчасовий файл локалі. Якщо хочете долучитися до перекладу, завітайте на https://github.com/cloudstack-llc/msty-studio-i18n", + "localeLabel": "Мова", + "downloadTemplate": "Завантажити шаблон", + "downloadBuiltInLocale": "Завантажити JSON-файл цієї вбудованої локалі.", + "downloadCustomLocale": "Завантажити поточну власну локаль, яку ви імпортували.", + "downloadDeveloperTemplate": "Завантажити порожній шаблон на основі базової локалі.", + "importLocale": "Імпортувати локаль", + "importLocaleHint": "Імпортовані локалі діють лише до перезапуску або оновлення застосунку.", + "importSuccessSummary": "Локаль імпортовано", + "importSuccessDetail": "Тепер використовується {code}. Перегляньте інтерфейс, щоб перевірити переклади.", + "importError": "Не вдалося імпортувати цей файл локалі. Переконайтеся, що це коректний JSON на основі шаблону.", + "developerMode": { + "label": "Режим розробника" + }, + "clearCache": "Очистити кеш", + "cacheClearedSummary": "Кеш очищено", + "cacheClearedDetail": "Видалено {count} кешований мовний файл. | Видалено кешованих мовних файлів: {count}.", + "cacheEmptySummary": "Кеш і так порожній" + }, + "security": { + "title": "Безпека", + "subtitle": "Налаштування безпеки застосунку" + }, + "webSecurity": { + "title": "Вимкнути вебзахист", + "description": "Це може допомогти розв'язати деякі проблеми з CORS. Однак так робити не рекомендовано — застосунок наражається на ризики безпеки. Вимикайте, лише якщо розумієте, що робите. Щоб налаштування набуло чинності, перезапустіть застосунок.", + "applyAndRestart": "Застосувати й перезапустити" + }, + "fontStyle": { + "title": "Стиль шрифту", + "galaxyFarAway": "Galaxy Far Away", + "everythingEverywhere": "Everything Everywhere", + "homeAlone": "Home Alone", + "lordOfTheLoops": "Lord of the Loops" + }, + "renderingModules": { + "title": "Модулі рендерингу", + "selectPlaceholder": "Виберіть модулі рендерингу", + "coreHint": "Markdown потрібен для всіх інших модулів." + }, + "remoteToolsConnector": { + "description": "Дозволити вебверсії Msty Studio підключатися до цього пристрою, щоб запускати віддалені інструменти й отримувати доступ до локальних моделей. Для віддалених підключень ця служба має бути запущена.", + "allowRemoteToolsConnection": "Увімкнути службу", + "connectionToken": { + "title": "Токен підключення", + "rememberToken": "Запам'ятати токен", + "placeholder": "Введіть надійний токен підключення", + "description": "Цей токен автентифікує з'єднання між Msty Studio і цим застосунком під час віддаленого підключення. Ви можете згенерувати його заново будь-коли, щоб анулювати попередній. Використовуйте надійний токен і тримайте його в таємниці.", + "successMessage": { + "detail": "Віддалену службу активовано" + }, + "errorMessage": { + "summary": "Помилка увімкнення конектора", + "detail": "Не вдалося увімкнути віддалену службу. Деталі — у логах" + }, + "errorState": { + "title": "Стан підключення", + "failed": "Помилка", + "tunnelingSummary": "Тунелювання не вдалося", + "serviceSummary": "Віддалена служба не запустилася" + }, + "copyConnectionInfo": "Скопіювати локальний URL", + "copyTunnelConnectionInfo": "Скопіювати URL тунелю", + "stopSuccessMessage": { + "detail": "Віддалену службу вимкнено" + } + }, + "enableTunneling": "Увімкнути тунелювання (експериментально)" + }, + "copyLocalURL": "Скопіювати локальний URL", + "localAI": { + "notInstalled": { + "description": "Налаштуйте @:localAIService, щоб запускати ШІ-моделі локально на своєму пристрої." + }, + "modelsLocation": { + "title": "Розташування моделей", + "description": "Налаштуйте, де зберігаються ваші моделі Local AI." + }, + "existingModels": { + "title": "Використати наявні моделі", + "description": "Використовуйте моделі, які вже маєте, без повторного завантаження." + }, + "serviceConfigurations": { + "title": "Налаштування служби", + "description": "Ці налаштування застосовуються до @:localAIService під час запуску. Після збереження змін @:localAIService автоматично перезапуститься.", + "configurePortNumber": { + "title": "Налаштувати номер порту", + "description": "Номер порту для @:localAIService{'.'} Залиште порожнім, щоб використати типовий." + }, + "maximumParallelChats": { + "title": "Максимум паралельних чатів", + "description": "Максимальна кількість одночасних сесій чату (у режимі сплітів)." + }, + "maximumLoadedModels": { + "title": "Максимум завантажених моделей", + "description": "Максимальна кількість LLM, завантажених одночасно. Більше моделей у пам'яті пришвидшує перші відповіді, але споживає більше системних ресурсів." + }, + "enableNetworkAccess": { + "title": "Увімкнути доступ із мережі", + "description": "Дозволити іншим пристроям у вашій мережі звертатися до @:localAIService за IP-адресою цього пристрою." + }, + "allowedNetworkOrigins": { + "title": "Дозволені мережеві джерела", + "description": "Перелічіть тут дозволені джерела через кому. Кожен запис має починатися з http:// або https://. Використайте *, щоб дозволити всі джерела.", + "placeholder": "напр. https://msty.studio, http://localhost:3000, *" + }, + "allowMstyStudioAccess": { + "title": "Дозволити доступ із Msty Studio", + "description": "Дозволити підключення з вебверсії Msty Studio до цього застосунку, щоб вона мала доступ до @:localAIService{'.'}" + }, + "captureServiceLogs": { + "title": "Записувати логи служби", + "description": "Увімкнути логування, щоб збирати дані служби для налагодження. Використовуйте лише за потреби." + }, + "advancedConfiguration": { + "description": "Введіть коректний JSON, щоб задати змінні середовища для @:localAIService{'.'}" + }, + "unsavedChanges": { + "message": "У налаштуваннях @:localAIService є незбережені зміни. Після збереження @:localAIService перезапуститься з новими налаштуваннями.", + "saveChanges": "Зберегти зміни й перезапустити службу", + "successMessage": { + "detail": "Налаштування @:localAIService збережено, службу перезапущено" + }, + "errorMessage": { + "detail": "Не вдалося зберегти налаштування @:localAIService{'.'} Деталі — у логах." + } + } + }, + "modelConfigurations": { + "title": "Налаштування моделі", + "description": "Ці налаштування застосовуються до всіх моделей під час сесій чату.", + "keepAliveTimeout": { + "title": "Час утримання моделі в пам'яті", + "description": "Час (у хвилинах), після якого невикористовувана модель вивантажується з пам'яті." + }, + "advancedConfiguration": { + "description": "Введіть коректний JSON, щоб передавати моделям додаткові параметри під час сесій чату." + }, + "unsavedChanges": { + "message": "У налаштуваннях моделі є незбережені зміни. Обов'язково збережіть їх перед початком нової сесії чату.", + "successMessage": { + "detail": "Налаштування моделі збережено" + }, + "errorMessage": { + "detail": "Не вдалося зберегти налаштування моделі. Деталі — у логах." + } + } + }, + "openSettings": "Відкрити налаштування Local AI", + "manageModels": { + "title": "Керувати моделями Local AI", + "description": "Переглядайте, встановлюйте моделі ШІ для локального інференсу й керуйте ними.", + "openModelHub": "Відкрити локальні моделі" + } + }, + "vibeCliProxy": { + "shortTitle": "Vibe CLI Proxy", + "title": "Vibe CLI Proxy", + "subtitle": "Єдиний проксі для ШІ-помічників з кодування. Підключайтеся до Claude Code, ChatGPT, Gemini, Kimi через один локальний ендпоінт.", + "install": { + "copy": "Встановлює бінарник CLIProxyAPI, щоб підключати ШІ-помічників з кодування (Claude Code, ChatGPT, Gemini, Kimi) через локальний проксі з автентифікацією OAuth.", + "button": "Встановити Vibe CLI Proxy" + }, + "health": { + "description": "Запустити або зупинити службу Vibe CLI Proxy." + }, + "endpoint": { + "title": "Ендпоінт служби", + "description": "Використовуйте цей ендпоінт для OpenAI-сумісних запитів, що йдуть через Vibe CLI Proxy.", + "network": "Мережевий хост: {host}", + "copied": "Ендпоінт скопійовано" + }, + "version": { + "title": "Версія", + "description": "Встановлена версія CLIProxyAPI.", + "current": "Поточна версія", + "reinstall": "Перевстановити", + "unknown": "Не встановлено" + }, + "configs": { + "title": "Налаштування служби", + "description": "Налаштуйте порт, теку автентифікації та доступ із мережі для проксі.", + "port": "Порт", + "retries": "Повторні спроби", + "authDir": "Тека автентифікації", + "enableNetworkAccess": "Увімкнути доступ із мережі", + "enableNetworkAccessHelp": "Дозволити іншим пристроям у мережі звертатися до проксі.", + "captureLogs": "Записувати логи служби", + "captureLogsHelp": "Зберігати логи проксі для діагностики (може збільшити використання диска).", + "enableRemoteManagement": "Увімкнути віддалене керування", + "enableRemoteManagementHelp": "Відкриває ендпоінти керування; потрібен секретний ключ.", + "managementKey": "Секретний ключ керування", + "updated": "Налаштування Vibe CLI Proxy оновлено", + "failed": "Не вдалося оновити налаштування Vibe CLI Proxy", + "portDescription": "Локальний порт, на якому служба проксі приймає запити.", + "retriesDescription": "Кількість повторних спроб для невдалих запитів до вищого рівня.", + "authDirDescription": "Тека, де зберігаються токени автентифікації.", + "managementKeyDescription": "Секретний ключ, потрібний для операцій віддаленого керування." + }, + "authPath": { + "title": "Тека автентифікації", + "description": "Шлях, де Vibe CLI Proxy зберігає OAuth-токени підключених провайдерів. Керується автоматично; не редагується." + }, + "authStatus": { + "title": "Автентифікація", + "description": "Безпечно прив'яжіть свої ШІ-акаунти, щоб Vibe CLI Proxy міг звертатися до їхніх API від вашого імені. Під час підключення відкриється вікно браузера відповідного провайдера, де ви завершите вхід.", + "connecting": "Відкриваю браузер для OAuth…", + "browser": "Завершіть автентифікацію у браузері й поверніться сюди.", + "failed": "Не вдалося розпочати процес OAuth", + "deviceCodeTitle": "Авторизація пристрою", + "deviceCodeInstructions": "Завершіть автентифікацію у відкритому браузері. Залежно від провайдера, може знадобитися ввести код нижче.", + "copyCode": "Скопіювати код", + "codeCopied": "Код скопійовано в буфер обміну", + "openProvider": "Відкрити {provider}", + "openVerificationPage": "Відкрити сторінку підтвердження", + "openGitHub": "Відкрити GitHub" + }, + "setup": { + "disclaimerTitle": "Важливе зауваження", + "disclaimer": "Vibe CLI Proxy працює локально й маршрутизує запити до сторонніх ШІ-сервісів. Ви самі відповідаєте за використання кожного підключеного провайдера відповідно до його умов і політик. Продовжуйте, лише якщо розумієте ризики. Msty не несе відповідальності за дії провайдерів щодо акаунтів, обмеження чи порушення умов обслуговування.", + "acknowledgment": "Я розумію й беру на себе відповідальність за дотримання умов підключених ШІ-провайдерів." + } + }, + "agentMode": { + "adapters": { + "title": "Адаптери", + "description": "Використовувати найновіші адаптери Agent Client Protocol для підтримуваних CLI агентів. Оновлення діють для нових сесій.", + "checkUpdates": "Перевірити оновлення", + "terminateTitle": "Завершити активні сесії?", + "terminateMessage": "Оновлення адаптерів потребує завершення однієї чи кількох активних сесій режиму агента, зокрема фонових. Усі відповіді, що зараз генеруються, буде зупинено.", + "terminateAndContinue": "Завершити й продовжити", + "updateSuccessDetail": "Для нових сесій використовуватимуться найновіші адаптери: {agents}", + "updatePartialDetail": "Не вдалося оновити: {agents}", + "updateSkippedDetail": "Немає доступного керованого оновлення адаптера для: {agents}. Поточну конфігурацію збережено.", + "updateError": "Не вдалося оновити адаптери агентів" + }, + "skills": { + "title": "Скіли", + "badge": "Скіли агентів", + "subtitlePrefix": "Розширюйте можливості агентів багаторазовими скілами. Скіли відповідають відкритому формату", + "subtitleLink": "Agent Skills", + "subtitleSuffix": ".", + "studio": { + "title": "Skills Studio", + "description": "Окремий простір для створення, перевірки та встановлення скілів.", + "open": "Відкрити Skills Studio", + "heading": "Майстерня скілів (лише Aurum)", + "body": "Створюйте чіткіші чернетки SKILL.md, переглядайте вміст пакета й використовуйте Skills AI, щоб відточити активацію та структуру перед збереженням.", + "snapshot": "Знімок Studio" + }, + "installed": { + "title": "Встановлені скіли", + "description": "Скіли, доступні вашим агентам. Агенти самі знаходять їх у своїй теці скілів.", + "createCustom": "Створити власний", + "refresh": "Оновити", + "empty": "Скілів не встановлено. Створіть власний або встановіть зі Skill Hub.", + "deleteConfirmHeader": "Видалити скіл", + "deleteConfirmMessage": "Видалити «{name}»? Файли скіла буде вилучено з диска.", + "deletedSummary": "Видалено", + "deletedDetail": "Скіл «{name}» прибрано", + "deleteTooltip": "Видалити (Shift+клац — без підтвердження)", + "detailHeader": "Деталі скіла", + "enabled": "Увімкнено", + "contentLoadError": "Не вдалося завантажити вміст скіла.", + "pathLabel": "Шлях:", + "filesLabel": "файлів: {count}", + "filesEmpty": "Файлів не знайдено.", + "filesViewAll": "Переглянути всі файли ({count})", + "filesHiddenSuffix": "ще", + "filesDialogHeader": "Файли — {name}" + }, + "hub": { + "title": "Skill Hub", + "description": "Переглядайте й встановлюйте скіли з репозиторіїв GitHub.", + "addRepo": "Додати репозиторій", + "addRepoHint": "Вставте репозиторій GitHub у форматі owner/repo або повний URL.", + "add": "Додати", + "remove": "Прибрати", + "install": "Встановити", + "repoPlaceholder": "owner/repo або URL GitHub", + "repoInputRequired": "Введіть репозиторій", + "invalidRepoFormat": "Некоректний формат репозиторію GitHub", + "repoAlreadyAdded": "Репозиторій уже додано", + "repoNotFound": "Репозиторій не знайдено або він недоступний", + "repoNoSkills": "У репозиторії немає скілів, які можна знайти", + "addRepoFailed": "Не вдалося додати репозиторій", + "addedSummary": "Додано", + "addedDetail": "Репозиторій успішно додано", + "removeConfirmHeader": "Прибрати репозиторій", + "removeConfirmMessage": "Прибрати «{label}» з ваших джерел скілів?", + "removedSummary": "Прибрано", + "removedDetail": "Репозиторій «{label}» прибрано", + "installedSummary": "Встановлено", + "installedDetail": "Скіл «{name}» встановлено", + "installFailed": "Не вдалося встановити скіл", + "repoAvailability": "{available} / {total} доступно", + "removeTooltip": "Прибрати репозиторій", + "filesHintMultiple": "Містить скрипти, шаблони або довідкові матеріали", + "filesHintSingle": "Лише SKILL.md", + "filesSingle": "{count} файл", + "filesMultiple": "файлів: {count}", + "filesViewAll": "Переглянути всі файли ({count})", + "filesHiddenSuffix": "ще", + "filesDialogHeader": "Файли — {name}", + "emptyRepo": "Усі скіли з цього репозиторію вже встановлено.", + "detailHeader": "Деталі скіла", + "bulkInstall": { + "statusInstalling": "Встановлення скілів", + "statusStopping": "Зупинка встановлення скілів", + "stopButtonIdle": "Зупинити встановлення", + "stopButtonStopping": "Зупиняю…", + "stoppedSummary": "Встановлення зупинено", + "progressPreparing": "Готую чергу встановлення…", + "progressStopping": "Зупинюся після поточного елемента. Лишилось: {remaining}.", + "progressRunning": "{completed} з {total} завершено · лишилось {remaining}", + "installedSegment": "встановлено {count} {label}", + "failedSegment": "{count} з помилкою", + "skippedSegment": "{count} пропущено", + "skillSingular": "скіл", + "skillPlural": "скілів" + } + }, + "form": { + "header": "Створити власний скіл", + "editHeader": "Редагувати скіл", + "skillId": "ID скіла", + "skillIdPlaceholder": "my-skill-name", + "skillIdLockedHint": "Після створення ID скіла змінити не можна.", + "description": "Опис", + "descriptionPlaceholder": "Що робить цей скіл і коли його застосовувати", + "instructionsPlaceholder": "# Мій скіл\n\n## Інструкції\n1. Крок перший...\n2. Крок другий...", + "create": "Створити скіл", + "nameErrorMax": "Максимум 64 символи", + "nameErrorFormat": "Лише малі літери, цифри й дефіси", + "nameErrorEdgeHyphen": "Не може починатися або закінчуватися дефісом", + "nameErrorConsecutiveHyphen": "Без кількох дефісів поспіль", + "nameErrorDuplicate": "Скіл із таким ID уже існує", + "descriptionErrorMax": "Максимум 1024 символи", + "createdSummary": "Створено", + "createdDetail": "Скіл «{name}» створено", + "createFailed": "Не вдалося створити скіл", + "updatedSummary": "Оновлено", + "updatedDetail": "Скіл «{name}» оновлено", + "updateFailed": "Не вдалося оновити скіл" + } + }, + "preferredEditor": { + "title": "Бажаний редактор", + "subtitle": "Виберіть, у якому редакторі відкривати файли за кліком на згадці файлу", + "fileManager": "Файловий менеджер (типово)", + "noEditors": "У цій системі не виявлено підтримуваних редакторів" + }, + "vimMode": { + "title": "Режим Vim", + "subtitle": "Увімкнути базові гарячі клавіші в стилі vim у полі промта агента. Підтримується лише частина рухів і операторів." + }, + "persistToolCalls": { + "title": "Зберігати виклики інструментів", + "subtitle": "Зберігати події таймлайну викликів інструментів у базі даних для режиму агента. Якщо вимкнено, виклики видно лише під час активної сесії, а після перезавантаження вони зникають." + }, + "turnDiffSummary": { + "title": "Підсумок змін за хід", + "subtitle": "Показувати підсумок змін у файлах за кожен хід із вбудованими коментарями до рядків у режимі агента" + }, + "localProviders": { + "title": "Локальні провайдери", + "description": "Підключайте локальні сервери інференсу як бекенди режиму агента. Кожен увімкнений провайдер з'являється як окремий агент у списку вибору.", + "claudeCodeRequired": "Локальні провайдери потребують встановленого Claude Code CLI. Зазвичай вони не найкращий вибір для роботи з CLI агентів і потребують потужних великих моделей.", + "noProviders": "Локальних провайдерів не виявлено. Запустіть локальну службу на кшталт Ollama або додайте сумісного провайдера в Model Hub." + } + }, + "mlx": { + "notInstalled": { + "description": "Налаштуйте @:mlxService, щоб запускати оптимізовані ШІ-моделі на вашому Mac з Apple Silicon." + }, + "modelsLocation": { + "title": "Розташування моделей", + "description": "Налаштуйте, де зберігаються ваші моделі MLX." + }, + "existingModels": { + "title": "Використати наявні моделі", + "description": "Використовуйте моделі, які вже маєте, без повторного завантаження." + }, + "openSettings": "Відкрити налаштування MLX", + "manageModels": { + "title": "Керувати моделями MLX", + "description": "Переглядайте, встановлюйте оптимізовані під Apple Silicon моделі MLX і керуйте ними.", + "openModelHub": "Відкрити локальні моделі" + }, + "compatibility": { + "title": "Сумісність системи", + "description": "Перевірте, чи сумісна ваша система з MLX.", + "checkAgain": "Перевірити ще раз", + "status": { + "notChecked": "Не перевірено", + "compatible": "Сумісна", + "notCompatible": "Несумісна" + }, + "requirements": { + "title": "Вимоги MLX:", + "appleSilicon": "Mac з Apple Silicon (M1, M2, M3, M4)", + "macOS13": "macOS 13.0 або новіша", + "unifiedMemory": "Уніфікована архітектура пам'яті" + } + } + }, + "llamacpp": { + "notInstalled": { + "description": "Налаштуйте @:llamacppService, щоб ефективно запускати ШІ-моделі на Windows, macOS і Linux." + }, + "modelsLocation": { + "title": "Розташування моделей", + "description": "Налаштуйте, де зберігаються ваші моделі LLaMA.cpp." + }, + "existingModels": { + "title": "Використати наявні моделі", + "description": "Використовуйте моделі, які вже маєте, без повторного завантаження." + }, + "openSettings": "Відкрити налаштування LLaMA.cpp", + "manageModels": { + "title": "Керувати моделями LLaMA.cpp", + "description": "Переглядайте, встановлюйте моделі LLaMA.cpp для кросплатформного інференсу й керуйте ними.", + "openModelHub": "Відкрити локальні моделі" + }, + "compatibility": { + "title": "Сумісність системи", + "description": "Перевірте, чи сумісна ваша система з LLaMA.cpp.", + "checkAgain": "Перевірити ще раз", + "status": { + "notChecked": "Не перевірено", + "compatible": "Сумісна", + "notCompatible": "Несумісна", + "requiresDesktop": "LLaMA.cpp потребує десктопного застосунку" + }, + "systemInfo": { + "title": "Інформація про систему", + "platform": "Платформа", + "architecture": "Архітектура", + "memory": "Доступна пам'ять", + "gpu": "GPU" + }, + "requirements": { + "title": "Вимоги LLaMA.cpp:", + "desktop": "Десктопний застосунок (Windows, macOS або Linux)", + "memory": "Щонайменше 4 ГБ RAM (рекомендовано 8 ГБ+)", + "storage": "Достатньо місця для моделей (залежить від розміру моделі)", + "gpu": "Необов'язково: GPU для прискорення (CUDA, Metal, OpenCL)" + } + }, + "serviceConfigurations": { + "threads": { + "title": "Потоки CPU", + "description": "Кількість потоків CPU для інференсу. Встановіть -1 для автовизначення за вашою системою (відповідає прапорцю --threads)." + }, + "concurrentRequests": { + "title": "Одночасні запити", + "description": "Кількість чатів, які можуть виконуватися одночасно для однієї моделі (відповідає прапорцю --parallel). За parallel=2 кожен чат отримує половину розміру контексту.", + "inputLabel": "Одночасні запити" + }, + "advancedConfiguration": { + "description": "Введіть коректний JSON, щоб задати змінні середовища для процесу llama-server. Ці змінні мають нижчий пріоритет, ніж аргументи CLI, задані в налаштуваннях служби та моделі." + } + }, + "modelConfigurations": { + "title": "Налаштування моделі", + "description": "Ці налаштування застосовуються до всіх моделей під час сесій чату.", + "keepAliveTimeout": { + "title": "Час утримання моделі в пам'яті", + "description": "Час (у хвилинах), після якого невикористовувана модель вивантажується з пам'яті." + }, + "unsavedChanges": { + "message": "У налаштуваннях моделі є незбережені зміни. Обов'язково збережіть їх перед початком нової сесії чату.", + "successMessage": { + "detail": "Налаштування моделі збережено" + }, + "errorMessage": { + "detail": "Не вдалося зберегти налаштування моделі. Деталі — у логах." + } + } + } + } + }, + "mlx": "MLX", + "mlxService": "Служба MLX", + "llamacpp": "LLaMA.cpp", + "llamacppService": "Служба LLaMA.cpp", + "settingsAndConfigs": "Налаштування й конфігурації", + "prompts": "Промти", + "apiKeys": "API-ключі", + "workspaces": { + "createNewWorkspace": "Створити робочу область", + "switchWorkspace": "Перемкнути робочу область", + "switchToCustomWorkspace": "Перейти до робочої області {workspaceName}", + "hideWorkspaceTray": "Сховати панель робочих областей", + "showWorkspaceTray": "Показати панель робочих областей", + "switchAction": { + "successMessage": { + "summary": "Робочу область перемкнено!", + "detail": "{workspaceName} тепер активна робоча область" + } + }, + "deleteWorkspace": "Видалити робочу область", + "workspaceIsActive": "Робоча область {workspaceName} активна", + "currentActiveWorkspace": "Ваша поточна активна робоча область: {workspaceName}", + "workspaceForm": { + "newTitle": "Нова робоча область", + "editTitle": "Редагувати робочу область", + "workspaceName": "Назва робочої області", + "whatToCopy": "Що скопіювати з робочої області {activeWorkspace}?", + "copyDisabledForLockedWorkspace": "Копіювання елементів вимкнено, бо для активної робочої області задано парольну фразу.", + "createAndSwitch": "Створити й перейти", + "createOnly": "Створити й залишитися", + "duplicateWorkspaceName": "Робоча область із такою назвою вже існує", + "invalidWorkspaceName": "Некоректна або вже наявна назва робочої області", + "updateSuccessMessage": { + "detail": "Робочу область оновлено" + }, + "updateErrorMessage": { + "detail": "Не вдалося оновити робочу область" + }, + "createAndSwitchSuccessMessage": { + "detail": "Робочу область створено, перехід виконано" + }, + "createSuccessMessage": { + "detail": "Робочу область створено" + }, + "createErrorMessage": { + "detail": "Не вдалося створити робочу область" + } + }, + "deleteConfirmation": { + "header": "Видалити робочу область", + "message": "Справді видалити {workspaceName}? Усі дані, пов'язані з цією робочою областю, буде видалено. Цю дію не можна скасувати.", + "downloadWorkspaceData": "Завантажити дані робочої області", + "successMessage": { + "detail": "Робочу область {workspaceName} видалено" + }, + "errorMessage": { + "detail": "Не вдалося видалити робочу область" + } + }, + "exportWorkspace": { + "title": "Експортувати робочу область", + "successMessage": { + "detail": "Дані робочої області {workspaceName} експортовано у {fileName}" + }, + "errorMessage": { + "detail": "Не вдалося експортувати робочу область {workspaceName}" + } + }, + "importWorkspace": { + "title": "Імпортувати робочу область", + "dragAndDropMessage": "Перетягніть сюди zip-файл робочої області Msty, щоб імпортувати його й створити нову робочу область. Якщо назва збігається з наявною, імпортовану буде перейменовано. Пізніше назву можна змінити.", + "successMessage": { + "detail": "Робочу область {workspaceName} імпортовано" + }, + "errorMessage": { + "detail": "Не вдалося імпортувати робочу область" + }, + "switchToWorkspace": "Перейти до робочої області" + } + }, + "attachments": { + "title": "Вкладення", + "documents": "Документи", + "images": "Зображення", + "videos": "Відео", + "webpages": "Вебсторінки", + "youTubeLinks": "Посилання на YouTube", + "dropThem": "Кидайте сюди!", + "selectAll": "Вибрати все", + "deselectAll": "Зняти вибір з усього", + "dragAnDropHere": "Перетягніть сюди {attachmentType}", + "addNew": "Додати нові вкладення", + "addDocumentTypes": "Додайте {documentTypes}, а також деякі інші файли з кодом", + "addImageTypes": "Додайте зображення .png, .jpg або .jpeg", + "captureScreenshot": { + "title": "Зробити знімок екрана", + "unsupported": "Знімки екрана недоступні в цьому середовищі.", + "failed": "Не вдалося зробити знімок екрана", + "enableAction": "Увімкнути знімки екрана", + "enableSuccess": "Знімки екрана увімкнено для цього застосунку на цьому пристрої.", + "enableFailed": "Не вдалося увімкнути знімки екрана.", + "permissionHelp": "Дозвольте Msty Studio у розділі «Запис екрана та системного звуку» в Системних налаштуваннях → Конфіденційність і безпека, потім перезапустіть Msty Studio, якщо macOS про це попросить, і спробуйте ще раз.", + "enableConfirm": { + "header": "Увімкнути знімки екрана", + "message": "Msty зараз ініціалізує знімки екрана, і ваша операційна система може запитати дозвіл на запис екрана. Продовжити?" + }, + "captureInteractiveRegion": "Інтерактивний знімок області", + "captureQuickRegion": "Швидкий знімок області", + "captureDisplayMenu": "Зняти екран", + "captureDisplay": "Зняти {displayName}", + "displayFallback": "Зняти основний екран", + "refreshDisplays": "Оновити список екранів", + "captureWindowMenu": "Зняти вікно", + "captureWindow": "Зняти вікно: {windowName}", + "windowFallback": "Зняти перше доступне вікно", + "refreshWindows": "Оновити список вікон" + }, + "dragAndDropOrBrowseMore": "Перетягніть або виберіть ще", + "commaSeparatedUrls": "або вставте URL через кому", + "manageTooltip": "Клацніть, щоб керувати доданими: {attachmentType}", + "modelMayNotSupportImages": "Вибрана модель може не підтримувати вкладені зображення.", + "clickToInstallVisionCapabilities": "Клацніть, щоб встановити можливості зору.", + "checkingVisionCapabilities": "Перевіряю можливості зору...", + "installingVision": "Встановлюю можливості зору...", + "documentsAttachedCount": "Додано {count} документ | Додано документів: {count}", + "imagesAttachedCount": "Додано {count} зображення | Додано зображень: {count}", + "webpagesAttachedCount": "Додано {count} вебсторінку | Додано вебсторінок: {count}", + "webpageLinks": "посилання на вебсторінку | посилання на вебсторінки", + "holdKeyToShareWithSyncedSplits": "Утримуйте {key}, щоб поширити на синхронізовані спліти", + "youTubeLinksAttachedCount": "Додано {count} посилання на YouTube | Додано посилань на YouTube: {count}", + "youTubeTranscriptDeprecationWarning": "@:knowledgeStack.buckets.youTubeLinks.deprecationWarning", + "dynamicMode": { + "title": "Динамічний режим", + "description": "Додавайте теки в динамічному режимі pull, щоб інструменти спершу шукали в метаданих, а потім за потреби читали конкретні файли.", + "allAttachments": "Усі вкладення", + "filterPlaceholder": "Швидкий фільтр тек...", + "loadingFolders": "Завантажую теки...", + "noFolders": "Тек не знайдено." + }, + "dropFiles": { + "errorMessage": { + "detail": "Не вдалося додати файли" + } + }, + "dropWebpages": { + "errorMessage": { + "detail": "Не вдалося додати вебсторінки" + } + }, + "dropYouTubeLinks": { + "errorMessage": { + "detail": "Не вдалося імпортувати дані посилань на YouTube. {errorMessage}" + } + }, + "detachAll": { + "title": "Від'єднати все", + "confirm": { + "header": "Від'єднати все", + "message": "Справді від'єднати всі {attachmentType}? Ці {attachmentType} більше не будуть доступні в розмові в жодному спліті.", + "acceptLabel": "Видалити" + }, + "maxResult": { + "title": "Максимум результатів" + }, + "successMessage": { + "detail": "Вкладення від'єднано" + } + } + }, + "jinaAPI": { + "manageJinaAPIKeys": "Керувати ключами", + "jinaApiKeyRequired": "Щоб користуватися цією функцією, потрібен дійсний API-ключ Jina. Безкоштовно отримати його можна за посиланням:", + "willUseJina": { + "description": "Зараз у вас додано ключів Jina API: {count}. Можна додати більше — Msty випадково вибере дійсний ключ для запиту." + }, + "jinaAPIKeyForm": { + "newTitle": "Новий API-ключ Jina", + "editTitle": "Редагувати API-ключ Jina", + "availableKeys": "Доступні ключі", + "reVerifyKey": "Ключ: {status}. Клацніть, щоб перевірити ще раз", + "verifyKeyAndAdd": "Перевірити ключ і додати", + "newDescription": "Додайте новий API-ключ Jina для роботи з ендпоінтами Jina Reader і Search. Можна додати кілька ключів і перевірити їх на дійсність. Під час запиту Msty випадково вибере один із дійсних ключів.", + "keyIsGood": { + "summary": "Усе гаразд!", + "detail": "Ключ виглядає дійсним і готовий до роботи" + }, + "successMessage": { + "detail": "API-ключ Jina додано" + }, + "errorMessage": { + "summary": "Помилка{status}!", + "detail": "Не вдалося додати API-ключ Jina. Перевірте ключ і переконайтеся, що він дійсний." + } + }, + "tokenBudget": { + "title": "Бюджет токенів", + "description": "Максимальна кількість токенів для запитів до Jina API. Це допомагає контролювати вартість і довжину відповіді." + } + }, + "rtd": { + "title": "Дані в реальному часі", + "enableRTD": "Клацніть, щоб перемкнути RTD; подвійний клац — налаштувати", + "contexts": "Контексти даних у реальному часі", + "removeSource": { + "successMessage": { + "detail": "Джерело прибрано" + }, + "errorMessage": { + "detail": "Не вдалося прибрати джерело" + } + }, + "updateSource": { + "errorMessage": { + "detail": "Не вдалося оновити джерело" + } + }, + "searchProvider": "Провайдер пошуку", + "jina": "Jina", + "useRemoteConnector": "Використати віддалену службу", + "noSources": "Немає доступних джерел", + "settings": { + "maxResult": { + "title": "Максимум результатів" + }, + "saveAsDefaultProvider": { + "title": "Зберегти {providerName} як типового провайдера пошуку", + "successMessage": { + "summary": "Хай буде {providerName}!", + "detail": "{providerName} тепер типовий провайдер пошуку" + } + }, + "autoWithFallback": "Авто з резервним варіантом", + "google": "Google", + "brave": "Brave", + "ecosia": "Ecosia", + "customSearchQuery": { + "title": "Власний пошуковий запит", + "placeholder": "Цей запит використовуватиметься для пошуку. Залиште порожнім, щоб як запит використовувався промт" + }, + "limitByDomain": { + "title": "Обмежити доменом", + "placeholder": "напр. reddit.com чи gov або (site:reddit.com OR site:gov)", + "commaDelimitedPlaceholder": "Введіть домени через кому, напр. reddit.com,wikipedia.com" + }, + "extraOperators": { + "title": "Додаткові оператори" + }, + "dateRange": { + "title": "Діапазон дат пошуку", + "placeholder": "Після дати — до дати" + }, + "successMessage": { + "detail": "Дані в реальному часі увімкнено" + }, + "types": { + "api": "API", + "rtc": "@:remoteToolsConnector.title" + } + }, + "useJinaLabel": "Використати Jina", + "google": { + "useLabel": "Використати Google", + "apiKey": { + "placeholder": "API-ключ Google" + }, + "cseIdLabel": "ID користувацької пошукової системи", + "cseIdPlaceholder": "ID користувацької пошукової системи Google" + }, + "brave": { + "useLabel": "Використати Brave", + "resultFilter": "Фільтрувати результати", + "apiKey": { + "placeholder": "API-ключ Brave" + } + }, + "searXng": { + "title": "SearXNG", + "engines": { + "title": "Рушії", + "placeholder": "Список рушіїв через кому, напр. google, brave тощо." + }, + "extraParams": { + "title": "Додаткові параметри", + "placeholder": "Додайте додаткові параметри. Це має бути коректний JSON-об'єкт." + }, + "notice": "На вашому сервері SearXNG має бути увімкнено JSON, а сам сервер має працювати через HTTPS. Обхідний шлях для HTTP в деяких браузерах описано в нашій документації: https://docs.msty.studio", + "useLabel": "Використати SearXNG" + }, + "tavily": { + "title": "Tavily", + "useLabel": "Використати Tavily", + "searchTopic": { + "title": "Тема пошуку", + "placeholder": "Категорія пошуку", + "general": "Загальна", + "news": "Новини", + "finance": "Фінанси" + }, + "apiKey": { + "placeholder": "Введіть API-ключ Tavily" + }, + "searchDepth": { + "title": "Глибина пошуку", + "placeholder": "Глибина пошуку", + "advanced": "Розширена", + "basic": "Базова" + }, + "timeRange": { + "title": "Часовий діапазон", + "placeholder": "Часовий проміжок назад від поточної дати" + } + }, + "exa": { + "title": "Exa", + "useLabel": "Використати Exa", + "apiKey": { + "placeholder": "Введіть API-ключ Exa" + } + }, + "ollama": { + "title": "Ollama", + "useLabel": "Використати Ollama", + "apiKey": { + "placeholder": "Введіть API-ключ Ollama" + } + }, + "disableRTD": { + "label": "Вимкнути дані в реальному часі", + "successMessage": { + "detail": "Дані в реальному часі вимкнено" + }, + "errorMessage": { + "detail": "Не вдалося вимкнути дані в реальному часі" + } + } + }, + "remoteToolsConnector": { + "title": "Віддалена служба", + "connectionRequired": "Щоб користуватися цією функцією, потрібно підключитися до Віддаленої служби.", + "experimentalInfo": "RTD — експериментальна функція й може працювати не так, як очікується.", + "isConnectedTooltip": "Віддалена служба — підключено", + "isDisconnectedTooltip": "Віддалена служба — не підключено", + "connectNow": "Підключитися до Віддаленої служби", + "connectFirst": "Спершу підключіться до Віддаленої служби", + "reconnectNow": "Перепідключитися до Віддаленої служби", + "disconnectNow": "Відключити зараз", + "checkHealth": "Перевірити стан підключення", + "connectionDetails": "Редагувати параметри підключення", + "noPermissionPolicy": "У вас немає дозволу на доступ до цієї функції", + "connect": { + "form": { + "title": "Підключитися до Віддаленої служби", + "saveAndConnect": "Зберегти й підключитися", + "rememberConnectionInfo": "Запам'ятати інформацію про підключення" + }, + "import": { + "title": "Імпортувати інформацію про підключення", + "dragAndDropMessage": "Перетягніть сюди файл конфігурації Msty Remote Connection, щоб імпортувати його й підключитися до Віддаленої служби.", + "successMessage": { + "detail": "Інформацію про підключення імпортовано" + }, + "errorMessage": { + "detail": "Не вдалося імпортувати інформацію про підключення" + } + }, + "export": { + "title": "Експортувати збережену інформацію про підключення", + "successMessage": { + "detail": "Інформацію про підключення експортовано" + }, + "errorMessage": { + "detail": "Не вдалося експортувати інформацію про підключення" + } + }, + "successMessage": { + "summary": "Підключено!", + "detail": "Віддалену службу підключено за адресою {url}" + }, + "errorMessage": { + "detail": "Не вдалося підключитися до Віддаленої служби. Переконайтеся, що вона запущена й доступна за вказаним URL.", + "tokenMissing": "Бракує токена. Перевірте токен і спробуйте ще раз." + }, + "forgetConnectionInfo": "Забути попередню інформацію про підключення", + "forgetSuccessMessage": { + "detail": "Інформацію про підключення забуто" + }, + "toolCommandPaths": { + "title": "Шляхи до команд інструментів", + "description": "Якщо ви використовуєте набори інструментів, задайте шляхи до потрібних команд.", + "selectPlaceholder": "Виберіть або введіть команду", + "pathPlaceholder": "Введіть повний шлях до команди", + "assignPath": "Призначити шлях" + } + }, + "disconnect": { + "successMessage": { + "summary": "Відключено!", + "detail": "Відключено від Віддаленої служби" + } + } + }, + "forge": { + "forgeMode": { + "title": "Режим Forge", + "description": "Режим Forge дає вам чисте полотно й потужний редактор, щоб вільно створювати, редагувати, оформлювати й доопрацьовувати контент." + }, + "title": "Forge", + "forgeContent": "Вміст Forge", + "forgingContent": "Створюю контент", + "editRawMarkdown": "Редагувати сирий Markdown", + "editAsBranch": "Редагувати як гілку", + "disabledEditRawMarkdown": "Цей вміст уже оброблено у Forge. Редагування сирого Markdown недоступне.", + "saveChanges": { + "title": "Зберегти зміни", + "successMessage": { + "detail": "Зміни збережено" + }, + "errorMessage": { + "detail": "Не вдалося зберегти зміни" + } + }, + "placeholders": { + "writeSomething": "Напишіть щось або введіть / для опцій...", + "detailsSummary": "Введіть заголовок блоку деталей" + }, + "prompts": { + "simplify": "Спростити", + "fixSpellingAndGrammar": "Виправити орфографію та граматику", + "makeShorter": "Зробити коротшим", + "makeLonger": "Зробити довшим", + "tldr": "Коротко про головне", + "emojify": "Додати емодзі", + "changeTone": { + "title": "Змінити тон", + "academic": "Академічний", + "business": "Діловий", + "casual": "Невимушений", + "childFriendly": "Для дітей", + "conversational": "Розмовний", + "emotional": "Емоційний", + "humorous": "Гумористичний", + "informative": "Інформативний", + "inspirational": "Надихальний", + "professional": "Професійний", + "narrative": "Оповідний", + "objective": "Об'єктивний", + "persuasive": "Переконливий", + "poetic": "Поетичний" + } + }, + "clearFormatting": "Очистити форматування", + "bold": "Жирний", + "italic": "Курсив", + "underline": "Підкреслений", + "strikethrough": "Закреслений", + "code": "Код", + "codeBlock": "Блок коду", + "blockQuote": "Цитата", + "undo": "Скасувати", + "redo": "Повторити", + "texts": "Текст", + "paragraph": "Абзац", + "heading1": "Заголовок 1", + "heading2": "Заголовок 2", + "heading3": "Заголовок 3", + "lists": "Списки", + "bulletList": "Маркований список", + "numberedList": "Нумерований список", + "taskList": "Список завдань", + "whatToForgePlaceholder": "Що будемо створювати сьогодні?", + "forgeWriter": "Forge Writer", + "contentType": "Тип контенту", + "moreOptions": "Більше опцій", + "inlinePrompt": { + "placeholder": "Введіть власний промт...", + "ask": "Запитати", + "askTooltip": "Попросити модель згенерувати відповідь на основі власного промта" + }, + "forgeCanvas": "Forge Canvas", + "newForgeCanvas": "Новий Forge Canvas", + "addNewForgeCanvas": "Додати новий Forge Canvas" + }, + "agentMode": { + "title": "Режим агента", + "description": "Режим агента дає змогу працювати з ШІ-агентами для кодування через Agent Client Protocol", + "newAgentSession": "Нова сесія агента", + "selectAgent": "Виберіть агента", + "selectWorkspace": "Виберіть робочу область", + "connecting": "Підключення...", + "connected": "Підключено", + "disconnected": "Не підключено", + "agentNotInstalled": "Агента не встановлено", + "rollback": "Відкотити сюди", + "rollbackBeforeMessage": "Відкотити до стану перед цим повідомленням", + "rollbackToMessage": "Відкотити до цього повідомлення", + "modes": { + "ask": "Запитати", + "act": "Діяти", + "plan": "Планувати" + } + }, + "preview": "Попередній перегляд", + "prompt": "Промт | Промти", + "discard": "Відкинути", + "insert": "Вставити", + "regenerate": "Перегенерувати", + "rewrite": "Переписати", + "exit": "Вийти", + "customPrompt": "Власний промт", + "markdown": "Markdown", + "json": "JSON", + "html": "HTML", + "formatted": "Форматований", + "invalidJson": "Некоректний JSON", + "downloadMarkdown": "Завантажити як файл Markdown", + "downloadJson": "Завантажити як файл JSON", + "downloadHTML": "Завантажити як файл HTML", + "copyMarkdownToClipboard": "Скопіювати Markdown у буфер обміну", + "copyHTMLToClipboard": "Скопіювати HTML у буфер обміну", + "copyFormattedToClipboard": "Скопіювати текст у буфер обміну", + "copiedToClipboard": { + "summary": "Скопійовано!", + "markdownDetail": "Вміст скопійовано в буфер обміну як Markdown", + "htmlDetail": "Вміст скопійовано в буфер обміну як HTML", + "formattedDetail": "Вміст скопійовано в буфер обміну як форматований текст", + "jsonDetail": "Вміст скопійовано в буфер обміну як JSON", + "itemCopied": "{item} скопійовано в буфер обміну" + }, + "exportJsonToClipboard": "Вміст експортовано в буфер обміну як JSON", + "variable": "Змінна | Змінні", + "pinItem": { + "title": "Закріплено: {item}", + "action": "Закріпити {item}", + "successMessage": { + "detail": "{item} закріплено" + }, + "errorMessage": { + "detail": "Не вдалося закріпити {item}" + } + }, + "unpinItem": { + "action": "Відкріпити {item}", + "successMessage": { + "detail": "{item} відкріплено" + }, + "errorMessage": { + "detail": "Не вдалося відкріпити {item}" + } + }, + "setDefaultItem": { + "title": "Типове: {item}", + "action": "Зробити {item} типовим", + "successMessage": { + "detail": "{item} зроблено типовим" + }, + "errorMessage": { + "detail": "Не вдалося зробити {item} типовим" + } + }, + "unsetDefaultItem": { + "action": "Типове: {item}. Клацніть, щоб скасувати.", + "successMessage": { + "detail": "{item} більше не типове" + } + }, + "model": "Модель", + "fallbackModel": { + "selectModel": "Виберіть резервну модель", + "hint": "Використовується, коли модель не налаштовано" + }, + "modelSelector": { + "filterControls": { + "title": "Сортування та відображення", + "searchPlaceholder": "Пошук моделей...", + "clear": "Скинути", + "providerSort": { + "label": "Сортування провайдерів", + "none": "Немає", + "name": "Назва", + "createdAt": "Дата створення", + "ascending": "За зростанням", + "descending": "За спаданням", + "groupByProvider": "Групувати за провайдером" + }, + "modelSort": { + "label": "Сортування моделей", + "none": "Немає", + "name": "Назва", + "recent": "Нещодавні", + "ascending": "За зростанням", + "descending": "За спаданням" + }, + "purpose": { + "label": "Фільтр за призначенням", + "placeholder": "Усі призначення" + } + } + }, + "modelSettings": "Налаштування моделі", + "syncSplit": "Синхронізувати спліт", + "name": "Назва", + "split": "Спліт | Спліти", + "template": "Шаблон | Шаблони", + "discardChanges": "Відкинути зміни", + "applyChanges": "Застосувати зміни", + "splitPreset": { + "title": "Пресет сплітів | Пресети сплітів", + "selectPlaceholder": "Виберіть пресет", + "new": "Новий пресет", + "newSplit": "Новий спліт", + "sync": "Синхронізувати", + "updateSync": "Оновити синхронізацію", + "unsync": "Скасувати синхронізацію", + "syncEntities": { + "systemPrompt": "Системний промт", + "userPrompt": "Промт користувача", + "attachments": "Вкладення", + "rtdInfo": "Дані в реальному часі", + "liveContextInfo": "Живі контексти", + "toolsets": "Набори інструментів" + }, + "splits": { + "splitIndex": "Спліт {index}", + "delete": "Видалити пресет" + }, + "import": { + "title": "Імпортувати пресет | Імпортувати пресети", + "dragAndDropMessage": "Перетягніть сюди zip-файл пресетів Msty, щоб імпортувати їх і створити нові пресети. Якщо назви збігаються, імпортовані пресети буде перейменовано. Пізніше назви можна змінити.", + "successMessage": { + "detail": "Пресет імпортовано" + }, + "errorMessage": { + "detail": "Не вдалося імпортувати пресети" + } + }, + "export": { + "title": "Експортувати пресет | Експортувати пресети", + "selected": "Експортувати вибраний пресет | Експортувати вибрані пресети", + "successMessage": { + "detail": "Пресет сплітів експортовано у {fileName} | Пресети сплітів експортовано у {fileName}" + }, + "errorMessage": { + "detail": "Не вдалося експортувати пресет | Не вдалося експортувати пресети" + } + }, + "delete": { + "title": "Видалити пресет | Видалити пресети", + "selected": "Видалити вибраний пресет | Видалити вибрані пресети", + "deleteConfirmation": { + "header": "Видалити пресет", + "description": "Справді видалити {presetName}? | Справді видалити пресетів: {count}?" + }, + "successMessage": { + "detail": "Пресет сплітів видалено | Пресети сплітів видалено" + }, + "errorMessage": { + "detail": "Не вдалося видалити пресет сплітів | Не вдалося видалити пресети сплітів" + } + }, + "update": { + "successMessage": { + "detail": "Пресет сплітів оновлено" + }, + "errorMessage": { + "detail": "Не вдалося оновити пресет сплітів" + } + }, + "save": { + "successMessage": { + "detail": "Пресет сплітів збережено" + }, + "errorMessage": { + "detail": "Не вдалося зберегти пресет сплітів" + } + }, + "empty": { + "title": "Немає доступних пресетів сплітів.", + "description": "Почніть зі створення або імпорту нового пресета сплітів" + }, + "invalidTemplatesMessage": { + "summary": "Некоректні шаблони", + "detail": "Деякі шаблони некоректні або в них бракує обов'язкових полів. Виправте їх, перш ніж продовжити." + } + }, + "shadowPersonas": { + "title": "Тіньові персони", + "create": "Створити тіньову персону", + "editTitle": "Редагувати тіньову персону", + "assignedPersona": "Призначена персона", + "changePersona": "Змінити персону", + "changePersonaTitle": "Змінити тіньову персону", + "currentPersona": "Поточна персона", + "selectNewPersona": "Виберіть нову персону", + "waitingForCompletion": "Чекаю на завершення", + "changePersonaWarning": "Зміна персони скине контекст аналізу й може вплинути на послідовність.", + "unassigned": "Персону не призначено", + "hideSidebar": "Сховати тіньові персони", + "showSidebar": "Показати тіньові персони", + "noMonitoring": "Жоден спліт не відстежується", + "monitoringHiddenHint": "Відстежується {count} спліт (клацніть, щоб показати) | Відстежується сплітів: {count} (клацніть, щоб показати)", + "monitoringSplitsHint": "Відстежується {count} спліт | Відстежується сплітів: {count}", + "noSplitsMonitoredHint": "Жоден спліт не відстежується", + "monitoringStatus": "Відстежується {count} спліт | Відстежується сплітів: {count}", + "activate": "Активувати", + "deactivate": "Деактивувати", + "processNow": "Обробити зараз", + "processing": "Обробка...", + "createAndAssign": "Створити й призначити", + "latestInsight": "Останній висновок", + "noOutputYet": "Результатів поки немає", + "outputs": "Результати", + "viewLatest": "Переглянути останній", + "viewHistory": "Переглянути історію", + "noHistory": "Історія недоступна", + "selectVersion": "Виберіть версію", + "name": "Назва тіньової персони", + "namePlaceholder": "напр. Технічний аналітик, Монітор продуктивності", + "edit": "Редагувати тіньову персону", + "switchShadowPersona": "Перемкнути тіньову персону", + "selectShadowPersonaToSwitch": "Виберіть тіньову персону, на яку перемкнутися", + "selectShadowPersona": "Виберіть тіньову персону", + "searchShadowPersonas": "Пошук тіньових персон...", + "description": "Опис (необов'язково)", + "descriptionPlaceholder": "Опишіть, що ця тіньова персона спостерігає чи аналізує", + "selectPersona": "Виберіть персону", + "selectPersonaPlaceholder": "Виберіть персону для використання", + "selectSplits": "Виберіть спліти для відстеження", + "selectSplitsPlaceholder": "Виберіть спліти для відстеження", + "selectSplitsPlaceholderOptional": "Виберіть спліти для відстеження (можна задати пізніше)", + "splitsCanBeAssignedLater": "Спліти можна динамічно призначати й змінювати після створення", + "updateTrigger": "Тригер оновлення", + "messageInterval": "Інтервал у повідомленнях", + "timeInterval": "Часовий інтервал", + "messagesPerSplit": "Повідомлень на спліт", + "maxContext": "Максимальний контекст", + "synthesisMode": "Режим синтезу", + "outputFormat": "Формат результату", + "maxProcessingTime": "Максимальний час обробки", + "versionManagement": "Керування версіями", + "maxVersions": "Максимум версій", + "advancedSettings": "Розширені налаштування", + "includeSystemMessages": "Включати системні повідомлення", + "autoDeleteOld": "Автовидалення старих версій", + "waitingForSplits": "Чекаю на спліти", + "processingNow": "Обробляю зараз", + "empty": { + "title": "Тіньових персон немає", + "description": "Створіть тіньову персону, щоб відстежувати й аналізувати спліти ваших розмов" + }, + "unlock": "Розблокувати тіньові персони", + "experimental": "Експериментально", + "experimentalInfo": "Тіньові персони — експериментальна функція, що паралельно аналізує розмови й формує альтернативні погляди та висновки.", + "noOutput": { + "title": "Результатів поки немає", + "description": "Ця тіньова персона ще нічого не згенерувала" + }, + "saveToEnableProcessing": "Збережіть цю розмову, щоб увімкнути обробку тіньовою персоною", + "delete": { + "title": "Видалити тіньову персону", + "action": "Видалити", + "confirmMessage": "Справді видалити «{name}»? «{name}» буде видалено з усіх розмов, до яких її прикріплено. Цю дію не можна скасувати.", + "successMessage": "Тіньову персону успішно видалено", + "errorMessage": "Не вдалося видалити тіньову персону" + }, + "detach": { + "title": "Від'єднати тіньову персону", + "action": "Від'єднати", + "confirmMessage": "Від'єднати «{name}» від цієї розмови? Тіньова персона залишиться доступною для інших розмов.", + "successMessage": "Тіньову персону успішно від'єднано", + "errorMessage": "Не вдалося від'єднати тіньову персону" + }, + "switch": { + "successMessage": "Тіньову персону успішно перемкнено", + "errorMessage": "Не вдалося перемкнути тіньову персону" + }, + "editToast": { + "successMessage": "Тіньову персону успішно оновлено", + "errorMessage": "Не вдалося оновити тіньову персону" + }, + "createToast": { + "successMessage": "Тіньову персону успішно створено", + "errorMessage": "Не вдалося створити тіньову персону" + }, + "queueClearedToast": { + "summary": "Чергу очищено", + "detail": "Скасовано {cancelledCount} елемент у черзі | Скасовано елементів у черзі: {cancelledCount}" + }, + "queueUpdatedToast": { + "summary": "Чергу оновлено", + "detail": "Скасовано {cancelledCount} автоматично запущений елемент | Скасовано автоматично запущених елементів: {cancelledCount}" + }, + "queueFullToast": { + "summary": "Черга заповнена", + "detail": "Черга обробки заповнена. Зачекайте, доки завершаться поточні елементи" + }, + "alreadyProcessingToast": { + "summary": "Уже обробляється", + "detail": "Ця розмова вже обробляється" + }, + "trigger": { + "everyMessage": "Кожне повідомлення", + "everyNMessages": "Кожні {n} повідомлень", + "manual": "Лише вручну", + "timeInterval": "Часовий інтервал", + "automatic": "Автоматично" + }, + "triggerHints": { + "everyMessage": "Запускається після кожного повідомлення (найшвидше, найчастіше)", + "everyNMessages": "Запускається після {n} повідомлень (пакетно)", + "manual": "Лише коли ви натиснете «Обробити зараз»" + }, + "synthesis": { + "auto": "Авто", + "combined": "Спільний аналіз", + "perSplit": "Окремо для сплітів", + "comparative": "Порівняльний" + }, + "synthesisHints": { + "auto": "Обирає найкращий режим за сплітами й наміром", + "combined": "Один підсумок по всіх сплітах", + "perSplit": "Кожен спліт окремо й із підписом", + "comparative": "Відмінності та збіги поруч" + }, + "synthesisAutoReasons": { + "singleSplit": "Авто використає «Спільний аналіз», бо спліт лише один.", + "multipleModels": "Авто використає «Порівняльний», бо задіяно кілька моделей.", + "sameModel": "Авто використає «Окремо для сплітів», бо спліти працюють на одній моделі." + }, + "format": { + "insights": "Висновки", + "summary": "Підсумок", + "recommendations": "Рекомендації", + "analysis": "Аналіз" + }, + "monitoringSplits": "Відстежується {count} спліт | Відстежується сплітів: {count}", + "locateSplits": "Знайти спліти", + "manageSplits": "Керувати сплітами", + "addAllSplits": "Додати всі спліти", + "deselectAll": "Зняти вибір з усього", + "selectAll": "Вибрати все", + "selectedCount": "Вибрано {count} з {total}", + "streaming": "Потокова передача", + "starting": "Запуск", + "collectingContext": "Збираю контекст зі сплітів...", + "waitingForConversationCompletion": "Чекаю на завершення розмови", + "analyzingConversationSplits": "Аналізую спліти розмови...", + "analyzeResponses": "Тіньова персона проаналізує все, щойно надійдуть усі відповіді", + "toolCalls": "Виклики інструментів", + "reasoning": "Міркування", + "stopProcessing": "Зупинити обробку", + "attachExisting": "Прикріпити наявну", + "attachTitle": "Прикріпити тіньову персону", + "previousVersion": "Попередня версія", + "nextVersion": "Наступна версія", + "attach": "Прикріпити", + "selectShadowPersonaToAttach": "Виберіть тіньову персону, щоб прикріпити її до цієї розмови", + "selectShadowPersonaPlaceholder": "Виберіть тіньову персону для прикріплення", + "queuedPosition": "У черзі №{position}", + "addToQueue": "Додати в чергу", + "processingQueue": "Черга обробки", + "removeFromQueue": "Прибрати з черги", + "removedFromQueue": "Прибрано з черги", + "inQueue": "у черзі", + "clearQueue": "Очистити все", + "queueEmpty": "У черзі немає елементів", + "estimatedWait": "Орієнтовне очікування: {time}", + "queuedItems": "{count} елемент у черзі | Елементів у черзі: {count}", + "monitoring": "Відстеження та черга", + "monitoredSplits": "Відстежувані спліти" + }, + "toolbox": { + "title": "Інструментарій", + "toolsUsageWillSkip": "Віддалена служба Msty не запущена; інструменти буде пропущено.", + "tools": { + "title": "Інструмент | Інструменти", + "description": "Набір інструментів, які допоможуть вам у роботі з LLM.", + "availableTools": "Доступні інструменти", + "availableToolsets": "Доступні набори інструментів", + "authorize": "Авторизувати", + "authorization": "Авторизація", + "authorizationFailed": "Не вдалося розпочати авторизацію", + "authorizationStarted": "Процес авторизації розпочато. Завершіть його у браузері.", + "setDefaultParams": "Задати типові параметри", + "setParams": "Задати параметри", + "missingThisDependency": "Схоже, цієї залежності немає у вашому середовищі. Без неї інструмент може працювати не так, як очікується.", + "defaultParamsForm": { + "header": "Типові параметри для {toolName}", + "description": "Ці параметри використовуватимуться глобально для всіх екземплярів інструмента {toolName}. Їх можна перевизначити під час створення набору інструментів.", + "args": { + "label": "Аргументи", + "description": "Виберіть аргумент і задайте його значення. Залиште порожнім, щоб не задавати значення.", + "customArg": { + "label": "Власний аргумент", + "description": "Введіть назву нового аргумента. Кілька аргументів розділяйте комою.", + "placeholder": "напр. --arg1, someArg, -verbose" + } + }, + "env": { + "label": "Змінні середовища", + "description": "Виберіть або введіть нову змінну середовища й задайте її значення.", + "addEnv": "Додати змінну середовища", + "selectPlaceholder": "Виберіть змінну середовища", + "enterNew": "Додати нову змінну середовища" + }, + "successMessage": { + "saveDetail": "Типові параметри для {toolName} збережено." + }, + "errorMessage": { + "saveDetail": "Не вдалося зберегти типові параметри." + } + }, + "addNewTool": { + "title": "Додати інструмент", + "description": "Додайте до інструментарію власний MCP-сумісний інструмент. Після додавання його можна включити в набір, задати параметри й використовувати з моделлю.", + "namePlaceholder": "Дайте назву (типово використовується ID інструмента)", + "id": { + "label": "ID інструмента", + "placeholder": "Унікальний ідентифікатор інструмента (заповнюється автоматично, якщо його знайдено в конфігурації)" + }, + "duplicateId": "Інструмент із таким ID уже існує. Введіть унікальний ID.", + "successMessage": { + "summary": "Інструмент додано", + "detail": "Інструмент додано до інструментарію. Тепер його можна включити в набір і використовувати з моделлю." + }, + "successMessageWithToolset": { + "summary": "Інструмент додано", + "detail": "Інструмент додано до інструментарію, а також створено відповідний набір. Усе готово до роботи з моделлю." + }, + "errorMessage": { + "detail": "Не вдалося додати інструмент до інструментарію. {error}" + }, + "toolConfig": { + "label": "Конфігурація інструмента", + "placeholder": "Введіть або вставте JSON конфігурації інструмента. Приймається як пряма конфігурація, так і обгорнуті формати (toolId буде видобуто автоматично)", + "showExampleTitle": "Показати приклад конфігурації інструмента", + "explanation": "Конфігурація інструмента приймає кілька форматів, зокрема обгорнуті конфігурації з mcpServers. За можливості toolId і назву буде видобуто автоматично. Щонайменше має бути {command}. Динамічні аргументи потрібно обгортати у фігурні дужки {curly}, ось так: {argExample}. Так само динамічні змінні середовища задаються через {envVarLabel}." + }, + "autoCreateToolset": { + "label": "Автоматично створити набір із такою ж назвою" + } + }, + "editTool": { + "title": "Редагувати інструмент", + "description": "Оновіть назву, нотатки та конфігурацію інструмента.", + "successMessage": { + "detail": "Інструмент оновлено." + }, + "errorMessage": { + "detail": "Не вдалося оновити інструмент." + } + }, + "emptyPlaceholder": { + "description1": "Використовуйте зовнішні MCP-інструменти на базі Віддаленої служби Msty, щоб розширити можливості своїх моделей і покращити роботу з LLM.", + "description2": "Почніть з імпорту багатьох інструментів, що постачаються з Msty, або додайте власні.", + "description3": "Зауважте: ці інструменти не надаються, не тестуються й не підтримуються Msty. Ми лише даємо платформу для їх використання й зручний спосіб імпорту. КОРИСТУЙТЕСЯ НИМИ НА ВЛАСНИЙ РИЗИК. Msty не відповідає за проблеми, що можуть виникнути через ці інструменти. З питаннями підтримки звертайтеся до автора інструмента." + }, + "importTools": { + "title": "Імпортувати типові інструменти", + "successMessage": { + "detail": "Успішно імпортовано типових інструментів: {count}. Ви можете створювати набори й використовувати їх з моделлю." + }, + "successMessageWithToolsets": { + "detail": "Успішно імпортовано типових інструментів: {count}, автоматично створено відповідних наборів: {toolsetCount}." + }, + "errorMessage": { + "detail": "Не вдалося імпортувати типові інструменти" + } + }, + "deleteConfirmation": { + "header": "Видалити інструмент", + "description": "Справді видалити {toolName}?", + "successMessage": { + "detail": "Інструмент видалено" + }, + "errorMessage": { + "detail": "Не вдалося видалити інструмент" + } + }, + "deleteAll": { + "confirmationHeader": "Видалити всі інструменти", + "confirmationMessage": "Справді видалити всі інструменти? Цю дію не можна скасувати.", + "successMessage": "Усі інструменти успішно видалено", + "errorMessage": "Не вдалося видалити всі інструменти" + }, + "folderForm": { + "updateSuccessMessage": { + "detail": "Теку оновлено" + }, + "updateErrorMessage": { + "detail": "Не вдалося оновити теку" + }, + "createSuccessMessage": { + "detail": "Теку створено" + }, + "createErrorMessage": { + "detail": "Не вдалося створити теку" + }, + "deleteConfirmation": { + "header": "Видалити теку", + "message": "Справді видалити {folderName}? Буде видалено теку разом з її вмістом.", + "successMessage": { + "detail": "Теку видалено" + }, + "errorMessage": { + "detail": "Не вдалося видалити теку" + } + }, + "deleteItemsConfirmation": { + "header": "Видалити елементи", + "message": "Справді видалити всі елементи в {folderName}? Сама тека залишиться.", + "successMessage": { + "detail": "Елементи видалено" + }, + "errorMessage": { + "detail": "Не вдалося видалити елементи" + } + } + }, + "copiedToClipboard": "Конфігурацію інструмента скопійовано в буфер обміну", + "viewToolsUsage": { + "title": "Переглянути використання інструментів", + "noToolCalls": { + "title": "Викликів інструментів не знайдено", + "description": "Схоже, моделі були доступні інструменти, але вона не зробила жодного виклику. Можливо, інструменти їй просто не знадобилися." + } + } + }, + "toolsets": { + "title": "Набір інструментів | Набори інструментів", + "emptyPlaceholder": { + "title": "Наборів інструментів не знайдено", + "description": "Набір інструментів — це група інструментів із параметрами. Ви можете створити набір і додати до нього інструменти. Під час спілкування з моделлю можна вибрати один або кілька наборів." + }, + "addSomeTools": "Щоб почати, додайте кілька інструментів.", + "noTools": "У цьому наборі немає інструментів", + "tooltip": { + "selectedFeatures": "Увімкнені можливості", + "loading": "Завантажую деталі можливостей…", + "allFeatures": "Усі можливості", + "unavailable": "Не вдалося завантажити деталі можливостей" + }, + "addNewToolset": { + "title": "Додати набір інструментів", + "description": "Створіть новий набір, щоб згрупувати інструменти. Ви можете додавати інструменти до набору й використовувати його з моделлю. Не забудьте задати чи перевизначити параметри кожного інструмента в наборі, натиснувши кнопку {icon}.", + "setParams": { + "title": "Задати параметри для {toolName}", + "description": "Задайте параметри для інструмента {toolName}. Ви можете перевизначити типові параметри інструмента. Скористайтеся консоллю інструментів, щоб протестувати його, переглянути доступні можливості й за потреби їх обмежити." + }, + "successMessage": { + "saveDetail": "Набір збережено й додано до інструментарію. Тепер його можна використовувати з моделлю." + }, + "errorMessage": { + "saveDetail": "Не вдалося зберегти набір інструментів." + } + }, + "editToolset": { + "title": "Редагувати набір інструментів", + "description": "Змініть назву й нотатки набору. Ви також можете додавати або прибирати інструменти, коригувати параметри чи обмежувати можливості кожного інструмента, натиснувши кнопку {icon}.", + "successMessage": { + "detail": "Набір інструментів оновлено." + }, + "errorMessage": { + "detail": "Не вдалося оновити набір інструментів." + } + }, + "deleteConfirmation": { + "header": "Видалити набір інструментів", + "description": "Справді видалити {toolsetName}?", + "successMessage": { + "detail": "Набір інструментів видалено" + }, + "errorMessage": { + "detail": "Не вдалося видалити набір інструментів" + } + }, + "deleteAll": { + "confirmationHeader": "Видалити всі набори інструментів", + "confirmationMessage": "Справді видалити всі набори інструментів? Цю дію не можна скасувати.", + "successMessage": "Усі набори інструментів успішно видалено", + "errorMessage": "Не вдалося видалити всі набори інструментів" + }, + "export": { + "title": "Експортувати набори інструментів", + "description": "З міркувань безпеки чутливі значення конфігурації можна прибрати перед експортом. Виберіть, які змінні середовища й аргументи очистити для кожного інструмента.", + "envVarsToScrub": "Змінні середовища для очищення", + "argsToScrub": "Аргументи для очищення", + "scrubCustomArgs": "Очистити рядок власних аргументів", + "selectEnvVarsPlaceholder": "Виберіть змінні середовища, значення яких прибрати", + "selectArgsPlaceholder": "Виберіть аргументи, значення яких прибрати", + "noScrubbableData": "Немає даних конфігурації для очищення", + "sensitiveDataNote": "Типові чутливі значення вибрано заздалегідь заради вашої безпеки.", + "copiedToClipboard": "Конфігурацію набору інструментів скопійовано в буфер обміну", + "downloadedAsJson": "Конфігурацію набору інструментів завантажено", + "fetchError": "Не вдалося отримати дані набору інструментів для експорту" + }, + "import": { + "missingTools": "Деякі інструменти не знайдено, їх пропущено: {tools}" + }, + "noOfTools": "{count} інструмент | Інструментів: {count}", + "viewToolsAndNotes": "Переглянути інструменти й нотатки", + "console": { + "title": "Консоль інструментів", + "description": "У цій консолі можна протестувати {toolName} і побачити результат. Також можна перевірити інструмент з різними параметрами або обмежити доступні можливості. Типово увімкнено всі можливості; позначте прапорці, щоб залишити лише вибрані.", + "listTools": "Показати можливості {toolName}", + "missingRequiredArgument": "Бракує обов'язкових аргументів: {count}", + "continueWithMissingArgs": "Продовжити без цих аргументів", + "viewSourceOnGitHub": "Переглянути код на GitHub", + "allowedFeaturesLabel": "Увімкнути окремі можливості для цього інструмента", + "allowedFeaturesPlaceholder": "Шукайте або виберіть дозволені можливості", + "selectedFeaturesLabel": "Наразі увімкнені можливості", + "toolCall": { + "title": "Виклик інструмента", + "description": "Додайте потрібні властивості, щоб викликати {featureName}. За бажання можна додати й додаткові. Будьте обережні з викликом інструмента наосліп, особливо без правильних значень.", + "selectPlaceholder": "Виберіть властивість", + "enterNew": "Додати нову властивість", + "execute": "Виконати виклик інструмента" + } + }, + "manageTooltip": "Клацніть, щоб керувати використаними наборами інструментів", + "noModelSupport": "Вибрана модель може не підтримувати інструменти.", + "toolsetsUsedCount": "{count} активний набір інструментів | Активних наборів інструментів: {count}" + } + }, + "liveContexts": { + "liveContextsUsedCount": "{count} активний живий контекст | Активних живих контекстів: {count}", + "title": "Живий контекст", + "contexts": "Живі контексти", + "untitled": "Живий контекст без назви", + "selectSource": "Виберіть джерело", + "selectSourceTooltip": "Перемкніть, щоб включити або виключити це джерело з контексту", + "addNew": { + "title": "Додати живий контекст", + "description": "Створіть нове джерело живого контексту, щоб додати до розмови зовнішні дані.", + "errorMessage": { + "detail": "Не вдалося додати живий контекст" + }, + "successMessage": { + "detail": "Живий контекст додано" + } + }, + "edit": { + "title": "Редагувати живий контекст" + }, + "promptPlaceholder": "Вкажіть тут промт для режиму Push; деталі для режиму Pull опишіть у нотатках.", + "endpointDetails": "Параметри ендпоінта", + "method": "Метод", + "url": "URL", + "customHeaders": "Власні заголовки", + "hasBody": "Має тіло запиту", + "customProcessing": "Власна обробка", + "promptTemplate": "Шаблон промта", + "requestHeaders": { + "title": "Заголовки запиту", + "description": "Додайте заголовки запиту як JSON-об'єкт. Вони надсилатимуться разом із запитом до ендпоінта API.", + "placeholder": "{'{'}\n \"Authorization\": \"Bearer {'{'}apiKey:'key'{'}'}\",\n \"X-From\": \"{'{'}from?:'ISO'{'}'}\"\n{'}'}" + }, + "requestBody": { + "title": "Тіло запиту", + "description": "Додайте тіло запиту як JSON-об'єкт. Воно надсилатиметься разом із запитом до ендпоінта API.", + "placeholder": "{'{'}\n \"q\": \"{'{'}query:'term'{'}'}\",\n \"from\": \"{'{'}from?:'ISO'{'}'}\"\n{'}'}" + }, + "placeholders": { + "title": "Динамічні плейсхолдери", + "tooltip": "Синтаксис плейсхолдерів", + "label": "Плейсхолдери:" + }, + "processingFunction": { + "title": "Функція обробки", + "description": "Додайте функцію обробки, щоб перетворити дані відповіді перед використанням у розмові. Функція має повертати рядок.", + "placeholderHeader": "function process({'{'}data, placeholders{'}'}) {'{'}", + "placeholder": " // доступ до data та необов'язкових placeholders\n return JSON.stringify(data)", + "placeholderFooter": "{'}'}", + "tooltip": "Доступ через параметр placeholders", + "usePlaceholders": "Використання плейсхолдерів у коді:" + }, + "testVariables": { + "description": "Введіть тестові значення для знайдених плейсхолдерів, щоб перевірити ендпоінт." + }, + "update": { + "successMessage": { + "detail": "Живий контекст оновлено" + }, + "errorMessage": { + "detail": "Не вдалося оновити живий контекст" + } + }, + "deleteConfirmation": { + "header": "Видалити живий контекст", + "description": "Справді видалити {liveContextName}?", + "successMessage": { + "detail": "Живий контекст видалено" + }, + "errorMessage": { + "detail": "Не вдалося видалити живий контекст" + } + }, + "emptyPlaceholder": { + "title": "Живих контекстів не знайдено", + "description": "Живі контексти — це зовнішні джерела даних, які можна додати до розмови. Ви можете створити нове джерело живого контексту й використовувати його з моделлю." + }, + "deleteAll": { + "confirmationHeader": "Видалити всі живі контексти", + "confirmationMessage": "Справді видалити всі живі контексти? Цю дію не можна скасувати.", + "successMessage": "Усі живі контексти успішно видалено", + "errorMessage": "Не вдалося видалити всі живі контексти" + }, + "importOOTB": { + "title": "Імпортувати типові живі контексти", + "successMessage": "Успішно імпортовано {count} типовий живий контекст | Успішно імпортовано типових живих контекстів: {count}", + "errorMessage": "Не вдалося імпортувати типові живі контексти" + }, + "export": { + "title": "Експортувати живий контекст", + "headerScrubDescription": "З міркувань безпеки чутливі значення заголовків можна прибрати перед експортом. Виберіть, які заголовки очистити.", + "selectHeadersToScrub": "Заголовки для очищення", + "selectHeadersPlaceholder": "Виберіть заголовки, значення яких прибрати", + "sensitiveHeadersNote": "Типові чутливі заголовки вибрано заздалегідь заради вашої безпеки.", + "copiedToClipboard": "Конфігурацію живого контексту скопійовано в буфер обміну", + "downloadedAsJson": "Конфігурацію живого контексту завантажено" + }, + "modeLabel": "Режим", + "mode": { + "push": "Push", + "pull": "Pull", + "tooltip": { + "push": "Режим Push: виконується автоматично перед відповіддю моделі", + "pull": "Режим Pull: викликається моделлю за потреби" + } + } + }, + "modes": { + "mode": "Режим | Режими", + "title": "Режим", + "exitMode": "Вийти з режиму {mode}", + "zenMode": { + "title": "Дзен", + "quote": "стан спокійної уваги", + "newConversation": "Нова дзен-розмова" + }, + "vaporMode": { + "title": "Режим Vapor", + "vapor": "Vapor", + "description": "Розмови не зберігатимуться в історії й зникнуть, коли ви вимкнете режим або перейдете в інший розділ", + "willDisappearTooltip": "Це зникне, коли ви вимкнете режим Vapor або перейдете в інший розділ", + "exitVaporMode": "Вийти з режиму Vapor", + "enterVaporMode": "Увійти в режим Vapor", + "preserverChat": { + "saveConversation": "Зберегти розмову", + "successMessage": { + "detail": "Чат Vapor збережено" + }, + "errorMessage": { + "detail": "Не вдалося зберегти чат Vapor" + } + } + }, + "focusMode": { + "title": "Режим фокусу" + }, + "normalMode": { + "title": "Звичайний режим" + } + }, + "searchForm": { + "query": "Запит", + "title": "Пошук елементів", + "noResults": { + "title": "Нічого не знайдено", + "description": "Спробуйте пошукати за іншим словом" + }, + "entity": { + "conversationTextMessages": "Розмови", + "promptsLibraryPrompts": "Промт | Промти" + }, + "foundResultsCount": "Знайдено {count} результат | Знайдено результатів: {count}", + "labels": { + "title": "Пошук: {entity}", + "description": "Швидко знаходьте {entity} за ключовими словами", + "tips": { + "default": { + "description": "Типово пошук шукає всі слова (напр., {example} → знайде текст з обома словами в будь-якому порядку)", + "example": "синє авто" + }, + "partial": { + "description": "Використовуйте {operator} для часткових збігів (напр., {example})", + "operator": "*", + "example": "біг* → бігти, бігун" + }, + "or": { + "description": "Використовуйте {operator}, щоб знайти будь-яке зі слів (напр., {example})", + "operator": "OR", + "example": "яблуко OR апельсин" + }, + "exact": { + "description": "Використовуйте подвійні лапки {operator} для точних збігів (напр., {example})", + "operator": "\"\"", + "example": "\"синє авто\"" + }, + "specialCharacters": { + "description": "Використовуйте {operator}, щоб екранувати спеціальні символи (напр., {example})", + "operator": "\"\"", + "example": "\"C++\", \"node.js\"" + } + } + } + }, + "clearSearch": "Очистити пошук", + "helpfulTips": "Корисні поради", + "hideSearch": "Сховати пошук", + "bookmarkItem": { + "action": "Додати в закладки: {item}", + "jump": "Перейти до закладки: {item}", + "title": "У закладках: {item}", + "successMessage": { + "detail": "{item} додано в закладки" + }, + "errorMessage": { + "detail": "Не вдалося додати {item} в закладки" + }, + "deletedInfoMessage": { + "detail": "Елемент із закладок ({item}) видалено" + }, + "emptyState": { + "title": "Закладок немає.", + "description": "Почніть із додавання в закладки: {item}" + } + }, + "removeBookmarkedItem": { + "action": "Прибрати із закладок: {item}", + "successMessage": { + "detail": "{item} прибрано із закладок" + }, + "errorMessage": { + "detail": "Не вдалося прибрати {item} із закладок" + } + }, + "turnstile": { + "title": "Turnstile | Turnstiles", + "newTurnstile": "Новий Turnstile", + "queueEntry": "Додати в чергу", + "selectPlaceholder": "Виберіть Turnstile", + "addQueueWithAlt": "Клацніть, щоб відкрити, або Alt+клац, щоб додати в чергу", + "entriesQueued": "У черзі порожньо | {count}/{total} записів у черзі | {count}/{total} записів у черзі", + "emptyQueueMessage": "Коли промт буде готовий, натисніть «Додати», щоб поставити запис у чергу, або натисніть «Завантажити», щоб відкрити наявний Turnstile.", + "manageSavedTurnstiles": "Керувати збереженими Turnstile", + "discover": { + "bulkInstall": { + "statusInstalling": "Встановлення Turnstile", + "statusStopping": "Зупинка встановлення Turnstile", + "stopButtonIdle": "Зупинити встановлення", + "stopButtonStopping": "Зупиняю…", + "stoppedSummary": "Встановлення зупинено", + "progressPreparing": "Готую чергу встановлення…", + "progressStopping": "Зупинюся після поточного елемента. Лишилось: {remaining}.", + "progressRunning": "{completed} з {total} завершено · лишилось {remaining}", + "installedSegment": "встановлено {count} {label}", + "failedSegment": "{count} з помилкою", + "skippedSegment": "{count} пропущено", + "turnstileSingular": "turnstile", + "turnstilePlural": "turnstiles" + } + }, + "loadTurnstile": "Завантажити збережений Turnstile", + "noMatchingTurnstiles": "Жоден Turnstile не відповідає вашому пошуку", + "saveForm": { + "title": "Зберегти Turnstile як", + "successMessage": { + "detail": "Turnstile збережено." + }, + "errorMessage": { + "detail": "Не вдалося зберегти turnstile." + } + }, + "loadTurnstiles": { + "title": "Завантажити Turnstile", + "successMessage": { + "summary": "Turnstile завантажено!", + "detail": "{count} запис завантажено й поставлено в чергу. | Записів завантажено й поставлено в чергу: {count}." + }, + "errorMessage": { + "detail": "Не вдалося завантажити turnstile." + } + }, + "clearQueue": { + "title": "Очистити чергу", + "clearQueueConfirmation": { + "message": "Справді очистити чергу? Усі додані вами повідомлення буде прибрано." + } + }, + "newEntry": { + "title": "Новий запис" + }, + "addEntry": "Додати запис", + "insertEntry": "Вставити запис", + "noEntries": "Записів поки немає. Додайте перший, щоб почати.", + "invalidEntriesMessage": { + "summary": "Некоректні записи", + "detail": "Деякі записи некоректні або в них бракує обов'язкових полів. Виправте їх, перш ніж продовжити." + }, + "metaSendMissingRootNode": { + "detail": "Не вдалося виконати {metaType}. Переконайтеся, що це не перший запис у черзі." + }, + "update": { + "successMessage": { + "detail": "Turnstile оновлено." + }, + "errorMessage": { + "detail": "Не вдалося оновити turnstile. Чи задали ви промт і модель?" + } + }, + "save": { + "successMessage": { + "detail": "Turnstile збережено." + }, + "errorMessage": { + "detail": "Не вдалося зберегти turnstile. Чи задали ви промт і модель?" + } + }, + "delete": { + "selected": "Видалити вибраний Turnstile | Видалити вибрані Turnstile", + "deleteConfirmation": { + "header": "Видалити Turnstile", + "description": "Справді видалити {turnstileName}? | Справді видалити turnstiles: {count}?" + } + }, + "empty": { + "title": "Немає доступних Turnstile.", + "description": "Почніть зі створення або імпорту нового Turnstile." + }, + "new": "Новий Turnstile", + "entryIndex": "Запис {index}", + "addContinue": "Додати «Продовжити генерацію»", + "addRegenerate": "Додати «Перегенерувати»", + "addPersona": "Додати персону", + "addShield": "Додати щит контексту", + "addShieldWithSummary": "Додати щит контексту з підсумком", + "emptyPrompt": "Порожній промт...", + "import": { + "title": "Імпортувати Turnstile", + "dragAndDropMessage": "Перетягніть сюди zip-файл Turnstile від Msty, щоб імпортувати їх і створити нові. Якщо назви збігаються, імпортовані буде перейменовано. Пізніше назви можна змінити.", + "successMessage": { + "detail": "Turnstiles імпортовано" + }, + "errorMessage": { + "detail": "Не вдалося імпортувати turnstiles" + } + }, + "export": { + "title": "Експортувати Turnstile", + "selected": "Експортувати вибраний Turnstile | Експортувати вибрані Turnstile", + "successMessage": { + "detail": "Turnstile експортовано у {fileName} | Turnstile експортовано у {fileName}" + }, + "errorMessage": { + "detail": "Не вдалося експортувати Turnstile | Не вдалося експортувати Turnstile" + } + }, + "delay": "Затримка (секунди)", + "delayDescription": "Чекати стільки секунд після завершення кроку", + "delayingFor": "Затримка на {seconds} с...", + "pauseAfter": "Пауза після цього кроку", + "pauseAfterDescription": "Призупинити чергу для перевірки людиною перед продовженням", + "note": "Нотатка", + "notePlaceholder": "Додайте нотатки про цей крок...", + "label": "Мітка", + "labelPlaceholder": "напр. #extract, #classify", + "defaultModel": "Типова модель", + "defaultModelDescription": "Резервна модель для записів без указаної моделі", + "advanced": "Розширені", + "inputVariables": "Змінні", + "setVariables": "Задати змінні", + "missingRequiredVariables": "Бракує обов'язкових змінних", + "saveOutputAs": "Зберегти результат у змінну", + "saveOutputAsPlaceholder": "напр. summary, extracted_data", + "saveOutputAsHint": "Звертайтеся до цієї змінної в наступних промтах так: {'{{variableName}}'}", + "transformer": "Перетворити результат", + "transformerPattern": "Шаблон", + "onError": "У разі помилки", + "onErrorDefault": "Типова обробка помилок", + "onErrorStop": "Зупинити", + "onErrorRetry": "Повторити один раз", + "onErrorFallback": "Використати резервну модель", + "fallbackModel": "Резервна модель", + "fallbackModelCurrentModel": "(поточна модель)", + "sendAsAssistant": "Надіслати як асистент (без генерації)", + "conditional": "Умова", + "addConditional": "Додати умову", + "conditionTarget": "Перевіряти повідомлення від", + "conditionVariableName": "Назва змінної", + "conditionVariablePlaceholder": "Введіть назву змінної", + "conditionKind": "Умова", + "conditionPattern": "Шаблон", + "conditionCaseSensitive": "З урахуванням регістру", + "onPass": "Якщо істина", + "onFail": "Якщо хиба", + "gotoLabelPlaceholder": "Введіть мітку, до якої перейти", + "flow": { + "variableOutput": "Зберігає у змінну", + "variableInput": "Використовує змінну", + "branchTrue": "Якщо істина", + "branchFalse": "Якщо хиба", + "jumpTo": "Перейти до" + }, + "loopStart": "Початок циклу", + "loopEnd": "Кінець циклу", + "addLoop": "Додати цикл", + "loopId": "ID циклу", + "loopIdPlaceholder": "напр. main-loop", + "loopIdHint": "Має збігатися з ID циклу відповідного початку циклу", + "loopIdStartHint": "Унікальний ідентифікатор для пари з кінцем циклу", + "maxIterations": "Максимум ітерацій", + "hasExitCondition": "Вийти достроково, коли умову виконано", + "loopStartHint": "Кроки нижче повторюватимуться до {max} разів аж до кінця циклу", + "loopEndHint": "Повертає до відповідного початку циклу, щоб повторити тіло", + "loopIterationHint": "Використання у промтах:", + "checkpoint": "Контрольна точка", + "addCheckpoint": "Додати контрольну точку", + "checkpointHint": "Призупиняє виконання для перевірки й необов'язкового введення", + "checkpointMessage": "Повідомлення", + "checkpointMessagePlaceholder": "Необов'язкове повідомлення для контрольної точки...", + "autoContinueSeconds": "Автопродовження (секунди)", + "autoContinueHint": "Залиште порожнім, щоб чекати на дію вручну", + "promptForVariables": "Запитати змінні", + "promptForVariablesPlaceholder": "direction, feedback, userInput", + "promptForVariablesHint": "Змінні, які запитати в користувача на контрольній точці", + "checkpointPausedMessage": "Виконання призупинено на контрольній точці", + "checkpointVariables": "Зафіксовані змінні", + "checkpointProvideInput": "Ввести значення", + "checkpointEnterValue": "Введіть значення...", + "checkpointAddedVariables": "Додані змінні", + "checkpointAddVariable": "Додати змінну", + "checkpointVarNamePlaceholder": "variableName", + "checkpointVarValuePlaceholder": "Введіть значення...", + "checkpointVarSyntax": { + "text": "variableName → текстове поле", + "required": "variableName! → обов'язкове", + "number": "rating:number:1-5:3 → число з діапазоном", + "select": "choice:select:a|b|c → випадний список" + }, + "checkpointVarSyntaxHint": "Введіть назву змінної або скористайтеся синтаксисом типів:", + "checkpointNextInQueue": "Далі в черзі", + "checkpointAutoContinueIn": "Автопродовження через {seconds} с", + "checkpointContinue": "Продовжити", + "checkpointSkip": "Пропустити", + "checkpointSkipCount": "Скільки пропустити?", + "checkpointJump": "Перейти до мітки", + "checkpointJumpLabel": "Перейти до мітки", + "checkpointSelectLabel": "Виберіть мітку...", + "checkpointAbort": "Перервати", + "addTitle": "Додати Turnstile", + "createRootFolder": "Нова тека в корені", + "setDefaultFolder": "Зробити типовою текою", + "unsetDefaultFolder": "Скасувати типову теку", + "deleteConfirmation": { + "header": "Видалити Turnstile", + "message": "Справді видалити {turnstileName}? | Справді видалити turnstiles: {count}?" + }, + "messages": { + "deleteSuccess": "Turnstile видалено | Turnstile видалено: {count}" + }, + "folderForm": { + "updateSuccessMessage": { + "detail": "Теку оновлено" + }, + "updateErrorMessage": { + "detail": "Не вдалося оновити теку" + }, + "createSuccessMessage": { + "detail": "Теку створено" + }, + "createErrorMessage": { + "detail": "Не вдалося створити теку" + }, + "deleteConfirmation": { + "header": "Видалити теку", + "message": "Справді видалити {folderName} з усіма її Turnstile?", + "successMessage": { + "detail": "Теку видалено" + }, + "errorMessage": { + "detail": "Не вдалося видалити теку" + } + } + } + }, + "modelMatchmaker": { + "title": "Model Matchmaker", + "description": "Налаштуйте повзунки ваги для сильних сторін — кодування, міркування чи математики, — і Matchmaker відсортує та порекомендує найкращі моделі під ваші потреби. Результати можуть різнитися залежно від якості даних, розміру моделі та складності задачі.", + "ctaIntro": "Знайшли свою модель?", + "ctaMessage": "Протестуйте й порівняйте в Msty Studio.", + "gravity": "Вага", + "remoteOnly": "Лише віддалені", + "rankedModels": { + "title": "Ранжовані моделі", + "emptyMessage": "Моделей не знайдено. Спробуйте змінити вимоги." + }, + "strengthsLabel": { + "ca": { + "title": "Кодування", + "description": "Здатність писати код мовою програмування." + }, + "aca": { + "title": "Агентне кодування", + "description": "Здатність писати код мовою програмування в агентному режимі." + }, + "daa": { + "title": "Аналіз даних", + "description": "Здатність аналізувати дані та формувати висновки." + }, + "ifa": { + "title": "Дотримання інструкцій", + "description": "Здатність дотримуватися інструкцій і виконувати завдання." + }, + "jak": { + "title": "GOAT: майстер на всі руки", + "description": "Здатність виконувати найрізноманітніші завдання." + }, + "la": { + "title": "Мова", + "description": "Здатність розуміти й генерувати людську мову." + }, + "ma": { + "title": "Математика", + "description": "Здатність виконувати математичні обчислення." + }, + "pp": { + "title": "Перефразування", + "description": "Підтверджена здатність переписувати будь-який текст іншими словами." + }, + "ra": { + "title": "Міркування", + "description": "Критичне мислення — здатність міркувати й ухвалювати рішення." + }, + "sim": { + "title": "Спрощення", + "description": "Здатність спрощувати будь-який складний текст." + }, + "stg": { + "title": "Створення історій", + "description": "Здатність створювати історії чи оповіді." + }, + "sum": { + "title": "Підсумовування", + "description": "Здатність підсумовувати текстову й числову інформацію." + }, + "tu": { + "title": "Використання інструментів", + "description": "Здатність викликати й використовувати зовнішні інструменти." + }, + "mit": { + "title": "Максимум вхідних токенів", + "description": "Максимальна кількість токенів, які приймаються за один виклик." + }, + "mot": { + "title": "Максимум вихідних токенів", + "description": "Максимальна кількість токенів, які генеруються за один виклик." + }, + "ics": { + "title": "Економія на вхідних токенах", + "costTitle": "Вартість вхідних за мільйон токенів", + "description": "Економія коштів на обробці вхідних токенів." + }, + "ocs": { + "title": "Економія на вихідних токенах", + "costTitle": "Вартість вихідних за мільйон токенів", + "description": "Економія коштів на генерації вихідних токенів." + } + }, + "normalizedScore": "Нормалізований бал", + "resetStrengths": "Скинути сильні сторони", + "savePresetForm": { + "title": "Зберегти сильні сторони як пресет", + "errorMessage": { + "detail": "Не вдалося зберегти пресет сильних сторін." + }, + "successMessage": { + "detail": "Пресет сильних сторін збережено." + }, + "loadedMessage": { + "detail": "Пресет сильних сторін завантажено." + } + }, + "deletePresetConfirm": { + "title": "Видалити пресет", + "message": "Справді видалити {presetName}?", + "errorMessage": { + "detail": "Не вдалося видалити пресет сильних сторін." + }, + "successMessage": { + "detail": "Пресет сильних сторін видалено." + } + } + }, + "costCalculator": { + "title": "Калькулятор вартості моделей", + "description": "Обчислюйте й порівнюйте вартість ШІ-моделей від OpenAI, Anthropic, Google та інших. Оцінюйте витрати за використанням вхідних/вихідних токенів і цінами моделей. Це лише орієнтовні оцінки — фактична вартість може відрізнятися.", + "tokenInputs": "Вхідні дані про токени", + "filters": "Фільтри", + "ctaIntro": "Знайшли свою модель?", + "ctaMessage": "Протестуйте й порівняйте в Msty Studio." + }, + "vramCalculator": { + "title": "Калькулятор VRAM", + "description": "Перевірте, чи вміститься модель у VRAM вашого пристрою, перш ніж завантажувати чи запускати її. Калькулятор дає орієнтовні вимоги до VRAM за архітектурою та розміром моделі. Щоб почати, виберіть один із варіантів нижче.", + "ctaIntro": "Знайшли свою модель?", + "ctaMessage": "Протестуйте й порівняйте в Msty Studio." + }, + "contextExplorer": { + "title": "Оглядач контексту", + "description": "Дослідіть, як працюють вікна контексту LLM у різних двигунах інференсу. Візуалізуйте використання пам'яті, обмеження паралельності й те, що стається при переповненні контексту — для Ollama, vLLM, MLX і llama.cpp.", + "ctaIntro": "Готові спробувати самі?", + "ctaMessage": "Запускайте моделі локально в Msty Studio." + }, + "copyOrMoveItemToWorkspace": { + "copyTitle": "Копіювати {item} до робочих областей", + "copyOrMoveTitle": "Копіювати/перемістити {item} до робочих областей", + "selectWorkspaces": "Виберіть робочі області", + "availableWorkspaces": "Доступні робочі області", + "actionLabel": "Дія", + "inputLabel": { + "copy": "Скопіювати {item} до однієї чи кількох робочих областей.", + "copyOrMove": "Скопіювати чи перемістити {item} до однієї чи кількох робочих областей.", + "edit": "Синхронізувати цього провайдера з однією чи кількома робочими областями. Якщо його вже копіювали раніше — його буде оновлено; якщо ні — додано." + }, + "successMessage": { + "copyDetail": "{item} скопійовано до {count} робочої області | {item} скопійовано до робочих областей: {count}", + "moveDetail": "{item} переміщено до {count} робочої області | {item} переміщено до робочих областей: {count}" + }, + "errorMessage": { + "copyDetail": "Не вдалося скопіювати {item} до {count} робочої області | Не вдалося скопіювати {item} до робочих областей: {count}", + "moveDetail": "Не вдалося перемістити {item} до {count} робочої області | Не вдалося перемістити {item} до робочих областей: {count}" + }, + "partialCopyWarningMessage": { + "summary": "Скопійовано частково", + "detail": "Не вдалося скопіювати {item} до {count} робочої області | Не вдалося скопіювати {item} до робочих областей: {count}" + }, + "partialMovedWarningMessage": { + "summary": "Переміщено частково", + "detail": "Не вдалося перемістити {item} до {count} робочої області | Не вдалося перемістити {item} до робочих областей: {count}" + }, + "existingCopiesInfo": "Деякі робочі області ({workspaces}) пропущено, бо {item} у них уже є", + "skippingExistingCopies": "Наявні копії {item} буде пропущено." + }, + "assignment": "Призначення | Призначення", + "modelSquad": { + "title": "Model Squad", + "description": "Model Squad — це набір спеціалізованих ШІ-моделей, де кожна модель відповідає за конкретне завдання, як-от автоматичне створення заголовків чи генерація підсумку контексту. Коли завдання виконується, призначена модель використовується автоматично.", + "addNewAssignment": "Додати нове призначення", + "noTask": "Більше немає доступних завдань", + "tasks": { + "autoTitleGeneration": "Автоматичне створення заголовків", + "skillsStudio": "Skills Studio", + "promptsStudio": "Prompt Studio", + "personaStudio": "Persona Studio", + "attachmentsImageMetadataProcessing": "Обробка метаданих вкладених зображень", + "attachmentsDocumentMetadataProcessing": "Обробка метаданих вкладених документів", + "contextShieldSummaryGeneration": "Генерація підсумку для щита контексту", + "realTimeDataPromptSynthesis": "Синтез промта для даних у реальному часі", + "forgeContentGeneration": "Генерація контенту у Forge", + "piiScrubbing": "Очищення персональних даних", + "userPersonaMemoryExtraction": "Видобування пам'яті персони користувача", + "iconFinder": "Пошук іконок" + }, + "save": { + "successMessage": { + "detail": "Призначення збережено" + }, + "errorMessage": { + "detail": "Не вдалося зберегти призначення" + } + }, + "assignment": { + "dialog": { + "title": "Призначити модель для завдання «{task}»", + "description": "Виберіть модель, яку призначити на завдання «{task}» у ModelSquad.", + "selectModel": "Виберіть модель", + "selectModelPlaceholder": "Виберіть модель...", + "currentlyAssigned": "Наразі призначено: {model}", + "unknownModel": "Невідома модель", + "assignButton": "Призначити модель", + "changeButton": "Змінити модель", + "helpText": "Ця модель використовуватиметься автоматично під час виконання завдання «{task}»." + }, + "success": "Модель успішно призначено на завдання «{task}»!", + "errors": { + "noModelSelected": "Виберіть модель для призначення.", + "saveFailed": "Не вдалося зберегти призначення моделі. Спробуйте ще раз." + } + }, + "invalidAssignment": { + "summary": "Некоректне призначення в Model Squad", + "detail": "Модель, призначена на завдання «{task}», більше недоступна. Використовується типова модель. Оновіть призначення в Model Squad." + } + }, + "pii": { + "title": "PII (персональні дані)", + "scrubbing": { + "title": "Очищення персональних даних", + "description": "Автоматично виявляти й прибирати персональні дані з вмісту стека знань, перш ніж показувати його в розмовах.", + "info": { + "modelAssigned": "Для виявлення й прибирання персональних даних використовується {model}." + }, + "warning": { + "noModel": "У ModelSquad не призначено модель для очищення персональних даних. Доки модель не призначено, отримання даних зі стека знань не працюватиме.", + "configurationError": "Помилка конфігурації очищення персональних даних — з міркувань безпеки отримання зі стека знань перервано", + "setupError": "Помилка налаштування очищення персональних даних — отримання зі стека знань перервано" + }, + "placeholders": { + "personName": "[ІМ'Я_ОСОБИ]", + "emailAddress": "[EMAIL]", + "phoneNumber": "[НОМЕР_ТЕЛЕФОНУ]", + "address": "[АДРЕСА]", + "idNumber": "[НОМЕР_ДОКУМЕНТА]", + "creditCard": "[БАНКІВСЬКА_КАРТКА]", + "bankAccount": "[БАНКІВСЬКИЙ_РАХУНОК]", + "ipAddress": "[IP_АДРЕСА]", + "dateOfBirth": "[ДАТА_НАРОДЖЕННЯ]" + }, + "categories": { + "personalIdentifiers": "Особисті ідентифікатори", + "contactInformation": "Контактна інформація", + "financialInformation": "Фінансова інформація", + "medicalInformation": "Медична інформація", + "digitalIdentifiers": "Цифрові ідентифікатори", + "biometricData": "Біометричні дані", + "locationData": "Дані про місцеперебування" + } + } + }, + "persona": { + "title": "Персона | Персони", + "newPersona": "Нова персона", + "newPersonaConversation": "Нова розмова з персоною", + "selectToBegin": "З ким хочете поспілкуватися?", + "selectModel": "Виберіть модель", + "usingPersonaModel": "Використовується модель, налаштована для персони", + "usingFallbackModel": "Використовується модель розмови", + "noModelAvailable": "Модель не вибрано", + "modelForPersonaConversation": "Модель персони для цієї розмови", + "modelForPersonaConversationHint": "Зміни діють лише для цієї розмови з персоною.", + "resetModelToDefault": "Повернути типову модель персони", + "modelForThisConversation": "Вибір діє лише для цієї розмови", + "personaModeTitle": "Режим персони", + "personaModeDescription": "Виберіть персону, щоб почати. Кожна привносить у розмову власний голос, знання й стиль.", + "personaModeHint": "Персону можна змінити будь-коли на вкладці нижче.", + "personaModeWithPersona": "{personaName} вестиме цю розмову зі своїм унікальним поглядом і досвідом.", + "activePersona": "Активна персона", + "empty": { + "title": "Немає доступних персон.", + "description": "Почніть зі створення або імпорту нової персони. Також можна імпортувати типові персони." + }, + "contextShieldPosition": "Позиція щита контексту", + "save": { + "successMessage": { + "detail": "Персону збережено" + }, + "errorMessage": { + "detail": "Не вдалося зберегти персону" + } + }, + "update": { + "successMessage": { + "detail": "Персону оновлено" + }, + "errorMessage": { + "detail": "Не вдалося оновити персону" + } + }, + "delete": { + "selected": "Видалити вибрані персони", + "deleteConfirmation": { + "header": "Видалити персону", + "description": "Справді видалити {personaName}? | Справді видалити персон: {count}?" + }, + "successMessage": { + "detail": "Персону видалено | Персони видалено" + }, + "errorMessage": { + "detail": "Не вдалося видалити персону | Не вдалося видалити персони" + } + }, + "import": { + "title": "Імпортувати персони", + "dragAndDropMessage": "Перетягніть сюди zip-файл персон Msty, щоб імпортувати їх і створити нові. Якщо назви збігаються, імпортовані персони буде перейменовано. Пізніше назви можна змінити.", + "successMessage": { + "detail": "Персони імпортовано" + }, + "errorMessage": { + "detail": "Не вдалося імпортувати персони" + } + }, + "export": { + "title": "Експортувати персони", + "selected": "Експортувати вибрану персону | Експортувати вибрані персони", + "successMessage": { + "detail": "Персону експортовано у {fileName} | Персони експортовано у {fileName}" + }, + "errorMessage": { + "detail": "Не вдалося експортувати персону | Не вдалося експортувати персони" + } + }, + "messages": { + "deleteSuccess": "Персону видалено | Персони видалено" + }, + "deleteConfirmation": { + "header": "Видалити персону", + "message": "Справді видалити {personaName}? | Справді видалити персон: {count}?", + "errorMessage": { + "detail": "Не вдалося видалити персону | Не вдалося видалити персони" + } + }, + "addTitle": "Додати персону", + "createRootFolder": "Нова тека в корені", + "setDefaultFolder": "Зробити типовою текою", + "unsetDefaultFolder": "Скасувати типову теку", + "folderForm": { + "updateSuccessMessage": { + "detail": "Теку оновлено" + }, + "updateErrorMessage": { + "detail": "Не вдалося оновити теку" + }, + "createSuccessMessage": { + "detail": "Теку створено" + }, + "createErrorMessage": { + "detail": "Не вдалося створити теку" + }, + "deleteConfirmation": { + "header": "Видалити теку", + "message": "Справді видалити {folderName} з усіма персонами в ній?", + "successMessage": { + "detail": "Теку видалено" + }, + "errorMessage": { + "detail": "Не вдалося видалити теку" + } + } + }, + "selectPlaceholder": "Виберіть персону", + "autoResponder": { + "turnOn": "Увімкнути автовідповідач", + "turnOff": "Вимкнути автовідповідач" + }, + "additionalSettings": "Додаткові налаштування", + "additionalSettingsHint": { + "hideAndIsolateSystemPrompt": "Приховати й ізолювати системний промт: промт персони лишається прихованим і відокремленим від видимого контексту чату.", + "isolateResponse": "Ізолювати відповідь: відповіді залишаються в межах контексту цієї персони.", + "autoResponder": "Автовідповідач: дає персоні відповідати автоматично, коли увімкнено.", + "showFewShotsInConversation": "Показувати few-shot приклади в розмові: приклади видно в стрічці замість того, щоб тримати їх прихованими." + }, + "hideAndIsolateSystemPrompt": "Приховати й ізолювати системний промт", + "isolateResponse": "Ізолювати відповідь", + "autoResponderDefault": "Автовідповідач", + "showFewShotsInConversation": "Показувати few-shot приклади в розмові", + "fewShotsHint": "Few-shot промти — це приклади обмінів «користувач/асистент», які вчать персону, як відповідати. Вони покращують послідовність, влучність тону й дотримання інструкцій у типових задачах.", + "contextMessageCount": { + "title": "Кількість повідомлень контексту", + "description": "Задайте, скільки останніх повідомлень використовувати як контекст для персони." + } + }, + "crew": { + "title": "Команда | Команди", + "newCrewConversation": "Нова розмова з командою", + "personas": "Персона | Персони", + "noCrews": "Команд поки немає", + "noCrewsDescription": "Створіть команду, щоб спілкуватися з кількома персонами одночасно.", + "createCrew": "Створити команду", + "selectCrew": "Виберіть команду", + "switchCrew": "Перемкнути команду", + "expand": "Розгорнути керування", + "collapse": "Згорнути керування", + "selectAll": "Вибрати всі персони", + "deselectAll": "Зняти вибір з усіх персон", + "quickActions": "Швидко", + "crewModeTitle": "Режим команди", + "experimental": "Експериментально", + "experimentalInfo": "Режим команди експериментальний і активно розробляється. Деякі функції можуть змінитися або мати обмеження.", + "crewModeDescription": "Виберіть команду, щоб спілкуватися з кількома персонами. Кожна привносить у розмову свій погляд.", + "crewModeHint": "Ви можете вмикати й вимикати персони та змінювати команду будь-коли.", + "crewModeWithCrew": "Команда {crewName} готова. На ваші повідомлення відповідатимуть персони: {count}.", + "responseMode": { + "label": "Відповіді", + "auto": "Авто", + "autoDescription": "Усі персони відповідають автоматично на кожне повідомлення", + "manual": "Вручну", + "manualDescription": "Щоразу вибирайте, які персони відповідають" + }, + "executionMode": { + "label": "Виконання", + "sequential": "Послідовно", + "sequentialDescription": "Персони відповідають одна за одною по порядку", + "parallel": "Паралельно", + "parallelDescription": "Усі персони відповідають одночасно" + }, + "contextMode": { + "label": "Контекст", + "independent": "Незалежний", + "independentDescription": "Кожна персона бачить лише ваші повідомлення", + "contextual": "Спільний", + "contextualDescription": "Персони бачать відповіді одна одної" + }, + "behaviorSettings": "Поведінка", + "editCrew": "Редагувати команду", + "namePlaceholder": "Введіть назву команди", + "descriptionPlaceholder": "Опишіть призначення цієї команди", + "nameRequired": "Назва команди обов'язкова", + "created": "Команду створено", + "updated": "Команду оновлено", + "saveFailed": "Не вдалося зберегти команду", + "allPersonasAdded": "Усі персони додано", + "allPersonasAddedDescription": "До цієї команди додано всі доступні персони.", + "addPersona": "Додати персону", + "personasHint": "Перетягуйте персони, щоб задати звичайний порядок ходів. Пізніше можна додати ще.", + "addPersonaFailed": "Не вдалося додати персону до команди", + "selectPersonas": "Виберіть персони", + "trigger": "Тригер", + "selectFallback": "Виберіть резервну", + "usingFallbackModel": "Персон, що використовують резервну модель: {count}", + "needsFallbackModel": "Персонам потрібна модель ({count}) — виберіть резервну", + "selectFallbackModel": "Виберіть резервну модель", + "fallbackModelHint": "Ця модель використовуватиметься для персон без налаштованої моделі" + }, + "fewShotPrompts": { + "title": "Few-shot промти", + "description": "Few-shot навчання — це техніка машинного навчання, що дає змогу навчати модель на невеликій кількості даних. За допомогою few-shot промтів ви даєте моделі приклади, щоб вона краще зрозуміла контекст і давала кращі відповіді.", + "addNewShot": "Додати новий приклад" + }, + "insights": "Аналітика", + "cost": "Вартість", + "costInUSD": "Вартість у USD", + "promptTokens": "Токени промта", + "completionTokens": "Токени відповіді", + "totalTokens": "Усього токенів", + "usage": "Використання", + "tokens": "Токени", + "tokensProcessed": "Оброблено токенів", + "selectProvider": "Виберіть провайдера | Виберіть провайдерів", + "tokensProcessedForProvider": "Оброблено токенів для {provider}", + "totalUsage": "Загальне використання", + "fromTo": "Від {from} до {to}", + "crunchingTheNumbers": "Рахую числа", + "throughputForModel": { + "title": "Пропускна здатність для {model}", + "unit": { + "description": "Вимірюється в токенах за секунду" + } + }, + "latencyForModel": { + "title": "Затримка для {model}", + "unit": { + "description": "Вимірюється в секундах" + } + }, + "total": "Усього", + "min": "Мін.", + "max": "Макс.", + "avg": "Сер.", + "summary": "Підсумок", + "dates": { + "today": "Сьогодні", + "last7Days": "Останні 7 днів", + "last14Days": "Останні 14 днів", + "last30Days": "Останні 30 днів", + "last3Months": "Останні 3 місяці", + "last6Months": "Останні 6 місяців", + "last12Months": "Останні 12 місяців", + "monthToDate": "Від початку місяця", + "yearToDate": "Від початку року", + "allTime": "За весь час", + "selectDateRange": "Виберіть діапазон дат", + "month": "Місяць", + "year": "Рік", + "day": "День", + "week": "Тиждень" + }, + "insightsSummary": { + "emptyState": { + "title": "Підсумок аналітики", + "description": "Немає даних для вибраного діапазону дат і провайдерів." + } + }, + "insightsProviderTokensProcessed": { + "emptyState": { + "title": "Оброблено токенів", + "description": "Немає даних для вибраного діапазону дат і провайдера." + } + }, + "insightsProviderThroughput": { + "emptyState": { + "title": "Пропускна здатність", + "description": "Немає даних для вибраного діапазону дат, провайдера й моделі." + } + }, + "insightsProviderLatency": { + "emptyState": { + "title": "Затримка", + "description": "Немає даних для вибраного діапазону дат, провайдера й моделі." + } + }, + "hideItem": { + "action": "Сховати {item}", + "successMessage": { + "detail": "{item} сховано" + }, + "errorMessage": { + "detail": "Не вдалося сховати {item}" + }, + "unhideParent": "Показати батьківський елемент: {item}", + "hiddenParentContentTitle": "Прихований батьківський вміст. Клацніть, щоб показати." + }, + "showItem": { + "action": "Показати {item}" + }, + "licenseVerification": { + "errorMessage": "Не вдалося перевірити ліцензію. Спробуйте ще раз.", + "enterLicenseKey": "Введіть ліцензійний ключ Aurum", + "licenseTypeInfo": "Ви використовуєте ліцензію {licenseType}.", + "licenseKey": "Ліцензійний ключ", + "logout": "Вийти", + "licenseTypeInfoForAdmin": "Ви використовуєте ліцензію {licenseType} і увійшли як власник." + }, + "aurum": { + "activateLicense": "Активувати ліцензію Aurum", + "activateLicenseDescription": "Введіть ліцензійний ключ, щоб відкрити преміум-функції", + "manageLicense": "Керувати ліцензією", + "lifetimeLicense": "Aurum Lifetime", + "lifetimeLicenseDescription": "Одноразова покупка з довічним доступом до преміум-функцій", + "annualLicense": "Aurum Annual", + "annualLicenseDescription": "Річна підписка з постійними оновленнями та преміум-функціями", + "oneTimePurchase": "Одноразова покупка", + "yearlySubscription": "Річна підписка", + "enterLicenseKey": "Ліцензійний ключ", + "verifyAndActivate": "Перевірити й активувати", + "deactivateLicense": "Деактивувати ліцензію", + "licensedTo": "Ліцензія видана", + "expiresOn": "Діє до", + "expired": "Термін дії минув", + "expiresInDays": "Спливає через {days} днів", + "needLicense": "Потрібна ліцензія?", + "purchaseLicense": "Придбати на msty.ai", + "hasLicense": "Уже маєте ліцензію?", + "manageActivation": "Керувати активацією" + }, + "cloneItem": { + "action": "Клонувати {item}", + "successMessage": { + "detail": "{item} клоновано" + }, + "errorMessage": { + "detail": "Не вдалося клонувати {item}" + } + }, + "cloneItemTo": { + "action": "Клонувати в {item}", + "successMessage": { + "detail": "Успішно клоновано в новий елемент: {item} " + }, + "errorMessage": { + "detail": "Не вдалося клонувати в новий елемент: {item}" + } + }, + "importJson": { + "clipboardTitle": "Імпортувати {item} з JSON у буфері обміну", + "fileTitle": "Імпортувати {item} з файлу JSON", + "successMessage": { + "detail": "Успішно імпортовано: {count} {item}", + "detailDestination": "Успішно імпортовано: {count} {item} до {destination}" + }, + "successMessageWithToolsets": { + "detail": "Успішно імпортовано: {count} {item}, а також автоматично створено відповідні набори інструментів" + }, + "invalidConfig": { + "detail": "Некоректна конфігурація або немає що імпортувати. Переконайтеся, що JSON коректний, і спробуйте ще раз." + }, + "errorMessage": { + "detail": "Не вдалося імпортувати. Перевірте JSON і спробуйте ще раз." + }, + "partialError": { + "detail": "Не вдалося імпортувати елементів: {failed} — {items}" + }, + "dragAndDropMessage": "Перетягніть сюди файл JSON, щоб імпортувати {item}." + }, + "team": { + "label": "Команда | Команди", + "createTeam": "Створити команду", + "inviteUserLabel": "Запросити користувача", + "overview": "Огляд", + "usersLabel": "Користувачі", + "allTeamLabel": "Усі команди", + "createSuccess": "Команду {teamName} успішно створено.", + "member": "Учасник|Учасники", + "allUsers": "Усі користувачі", + "addTeamFormHeader": "Створити команду", + "updateTeamFormHeader": "Редагувати команду", + "addUsers": "Додати користувачів", + "updateUsers": "Оновити користувачів", + "addUserToTeam": "Додати користувачів до команди", + "teamNameLabel": "Назва команди", + "teamNamePlaceholder": "Введіть назву нової команди", + "addTeamDescription": "Створіть команду, щоб керувати ресурсами.", + "noUserInTeam": "До цієї команди не призначено користувачів.", + "editTeam": "Редагувати команду", + "invited": "Запрошено", + "shortDescription": "Керуйте своїми командами й користувачами.", + "empty": { + "description": "Команда потрібна для керування ресурсами. Ви можете додавати користувачів, щоб спільно працювати й ділитися доступом до ресурсів." + }, + "deleteConfirmation": { + "header": "Видалити команду", + "message": "Справді видалити", + "inputPlaceholder": "Введіть {name}, щоб підтвердити видалення.", + "rejectLabel": "Скасувати", + "acceptLabel": "Видалити" + }, + "policies": { + "title": "Політика | Політики", + "toolbox": { + "title": "Інструментарій", + "description": "Дозволити користувачеві використовувати Інструментарій" + }, + "promptsLibrary": { + "title": "Prompts Studio", + "description": "Дозволити користувачеві використовувати бібліотеку промтів" + }, + "persona": { + "title": "Persona Studio", + "description": "Дозволити користувачеві використовувати персони" + }, + "turnstile": { + "title": "Turnstile", + "description": "Дозволити користувачеві використовувати Turnstile" + }, + "expertConversationFunctions": { + "title": "Експертний режим", + "description": "Увімкнути експертні налаштування розмов для користувачів" + }, + "knowledgeStack": { + "title": "Стек знань", + "description": "Дозволити користувачеві використовувати стек знань" + }, + "remoteToolsConnector": { + "title": "Віддалена служба", + "description": "Дозволити користувачеві використовувати Віддалену службу" + }, + "rtd": { + "title": "Дані в реальному часі", + "description": "Дозволити користувачеві використовувати дані в реальному часі" + }, + "attachments": { + "title": "Вкладення", + "description": "Дозволити користувачеві використовувати вкладення" + }, + "forgeMode": { + "title": "Режим Forge", + "description": "Дозволити користувачеві використовувати режим Forge" + }, + "personaMode": { + "title": "Режим персони", + "description": "Дозволити користувачеві створювати розмови з персонами" + }, + "crewMode": { + "title": "Режим команди", + "description": "Дозволити користувачеві створювати розмови з командами" + }, + "agentMode": { + "title": "Режим агента", + "description": "Дозволити користувачеві використовувати режим агента" + }, + "insights": { + "title": "Аналітика", + "description": "Дозволити користувачеві використовувати аналітику" + }, + "platformWeb": { + "title": "Доступ до Msty Studio у вебі", + "description": "Дозволити користувачеві заходити в Msty Studio з браузера" + }, + "platformDesktop": { + "title": "Доступ до Msty Studio на десктопі", + "description": "Дозволити користувачеві заходити в Msty Studio з десктопного застосунку" + }, + "platformAccess": "Доступ до платформи", + "modelHub": { + "description": "Керуйте доступом до окремих провайдерів моделей." + } + }, + "fetch": { + "errorMessage": { + "detail": "Не вдалося завантажити список команд" + } + }, + "user": { + "noAvailableSeats": "Ви досягли межі кількості запрошених користувачів.", + "licenceAndAccess": { + "loggedInAsLabel": "Ви увійшли як", + "useSignInWithEmail": "На вказану адресу буде надіслано безпечне посилання для входу. Власники ліцензії Aurum мають спершу підтвердити свій ліцензійний ключ.", + "continueWithlicenseLabel": "продовжити з ліцензійним ключем", + "sendLoginLink": "Надіслати посилання для входу" + }, + "teamUserFormHeader": "Користувачі команди", + "invitationVerification": { + "inProgress": "Перевіряю ваш запит на доступ. Зачекайте", + "info": "Вас запросили приєднатися до облікового запису в Msty Studio. ", + "error": "Щось пішло не так — зверніться до адміністратора вашого облікового запису." + }, + "invitationInfo": "Посилання для входу буде надіслано на вказану вище адресу.", + "invitation": { + "successMessage": { + "detail": "Користувача {email} запрошено." + }, + "invalidEmail": "Некоректний email", + "errorMessageUserExist": "Такий користувач уже існує", + "errorMessage": { + "detail": "Не вдалося запросити {email}." + } + }, + "fetch": { + "errorMessage": { + "detail": "Не вдалося завантажити список користувачів" + } + }, + "delete": { + "successMessage": { + "detail": "Користувача {email} успішно видалено." + }, + "errorMessage": { + "detail": "Не вдалося видалити користувача {email}" + } + }, + "deleteConfirmation": { + "header": "Видалити користувача", + "message": "Справді видалити {email}?", + "rejectLabel": "Скасувати", + "acceptLabel": "Видалити" + }, + "assignUserToTeamLabel": "Призначити користувачів до команди {teamName}", + "assignUserToTeamSuccess": "{user} успішно призначено до команди {teamName}", + "unassignUserToTeamLabel": "Прибрати користувача з команди", + "unassignUserToTeamMessage": "Прибрати {user} з команди {teamName}", + "selectUserToAddToTeamPlaceholder": "Виберіть користувачів для додавання" + } + }, + "updateItem": { + "action": "Оновити {item}", + "editAction": "Редагувати {item}", + "successMessage": { + "detail": "{item} оновлено" + }, + "errorMessage": { + "detail": "Не вдалося оновити {item}" + } + }, + "modelPurpose": { + "text": "Текст", + "tools": "Інструменти", + "vision": "Зір", + "coding": "Кодування", + "embedding": "Ембединги", + "streaming": "Потокова передача", + "image": "Зображення", + "video": "Відео", + "thinking": "Мислення" + }, + "editModel": { + "inputLabels": { + "label": "Мітка", + "purpose": "Призначення" + } + }, + "environment": { + "selectPlaceholder": "Виберіть середовище", + "new": "Нове середовище", + "title": "Середовище | Середовища", + "empty": { + "description": "Щоб почати, додайте нові середовища." + }, + "save": { + "successMessage": { + "detail": "Середовище збережено" + }, + "errorMessage": { + "detail": "Не вдалося зберегти середовище" + } + }, + "delete": { + "title": "Видалити середовище | Видалити середовища", + "selected": "Видалити вибране середовище | Видалити вибрані середовища", + "deleteConfirmation": { + "header": "Видалити середовище", + "description": "Справді видалити {environmentName}? | Справді видалити середовищ: {count}?" + }, + "successMessage": { + "detail": "Середовище видалено | Середовища видалено" + }, + "errorMessage": { + "detail": "Не вдалося видалити середовище | Не вдалося видалити середовища" + } + }, + "backup": { + "title": "Резервна копія середовищ", + "successMessage": { + "detail": "Резервну копію середовищ створено" + }, + "errorMessage": { + "detail": "Не вдалося створити резервну копію середовищ" + } + }, + "restore": { + "title": "Відновити середовища", + "dragAndDropMessage": "Перетягніть сюди файл середовищ Msty, щоб відновити їх. Зверніть увагу: усі наявні середовища буде видалено й замінено імпортованими.", + "successMessage": { + "detail": "Середовища відновлено" + }, + "errorMessage": { + "detail": "Не вдалося відновити середовища" + } + }, + "quickSelect": { + "title": "Швидкий вибір змінної середовища", + "selectPlaceholder": "Знайдіть або виберіть змінну, щоб скопіювати її в буфер обміну" + } + }, + "makeActive": { + "title": "Зробити активним: {itemType}", + "isActive": "Активно: {itemType}", + "successMessage": { + "detail": "{itemName} тепер активний елемент ({itemType})" + }, + "errorMessage": { + "detail": "Не вдалося зробити {itemName} активним ({itemType})" + } + }, + "moveItem": { + "action": "Перемістити {item}", + "moveLocation": "Перемістити {count} {sourceType} до {item}", + "confirmation": { + "message": "Справді перемістити вибране: {item}?" + }, + "successMessage": { + "detail": "{item} переміщено | {item} переміщено" + }, + "errorMessage": { + "detail": "Не вдалося перемістити {item}" + }, + "errrorMessage": { + "detail": "Не вдалося перемістити {item}" + }, + "cannotDetermineTargetProject": "Не вдалося визначити цільовий проєкт.", + "cannotDetermineTargetFolder": "Не вдалося визначити цільову теку." + }, + "deleteItem": { + "action": "Видалити {item}", + "successMessage": { + "detail": "{item} видалено | {item} видалено" + }, + "errorMessage": { + "detail": "Не вдалося видалити {item}" + } + }, + "deleteSelected": { + "action": "Видалити вибране: {item}", + "confirmationMessage": "Справді видалити вибране: {item}?", + "successMessage": { + "detail": "Вибране видалено: {item}" + }, + "errorMessage": { + "detail": "Не вдалося видалити вибране: {item}" + } + }, + "promptsStudio": { + "title": "Prompt Studio" + }, + "skillsStudio": { + "title": "Skills Studio" + }, + "personaStudio": { + "title": "Persona Studio" + }, + "promptsLibrary": { + "title": "Бібліотека промтів", + "newPrompt": "Новий промт", + "search": "Пошук промтів", + "searchWithTags": "Фільтруйте або введіть # для тегів", + "quickPrompt": "Швидкий промт", + "saveToQuickPrompts": "Зберегти у швидкі промти", + "copyPrompt": "Скопіювати промт у буфер обміну", + "shortcutUsage": "Введіть /, щоб шукати в бібліотеці промтів", + "setDefaultFolder": "Зробити типовою текою", + "unsetDefaultFolder": "Скасувати типову теку", + "createRootFolder": "Нова тека в корені", + "folder": "Тека", + "prompt": "Промт", + "deleteAllPrompt": { + "title": "Видалити всі промти й теки", + "description": "Це очистить усю бібліотеку промтів разом із теками. Після видалення відновити їх неможливо.", + "successMessage": { + "detail": "Усі промти видалено" + } + }, + "empty": { + "title": "Немає доступних промтів.", + "description": "Почніть зі створення або імпорту нового промта. Також можна імпортувати типові промти." + }, + "import": { + "title": "Імпортувати типові промти", + "successMessage": { + "detail": "Тепер ви можете використовувати імпортовані промти у своїх розмовах." + }, + "copyMultiplePrompts": "Скопіювати {count} промтів у буфер обміну", + "copyMultiplePromptsAsJson": "Скопіювати {count} промтів як JSON у буфер обміну", + "errorMessage": { + "detail": "Не вдалося імпортувати типові промти" + }, + "copyErrorMessage": { + "detail": "Не вдалося скопіювати промт. Спробуйте ще раз." + } + }, + "discover": { + "bulkInstall": { + "statusInstalling": "Встановлення промтів", + "statusStopping": "Зупинка встановлення промтів", + "stopButtonIdle": "Зупинити встановлення", + "stopButtonStopping": "Зупиняю…", + "stoppedSummary": "Встановлення зупинено", + "progressPreparing": "Готую чергу встановлення…", + "progressStopping": "Зупинюся після поточного елемента. Лишилось: {remaining}.", + "progressRunning": "{completed} з {total} завершено · лишилось {remaining}", + "installedSegment": "встановлено {count} {label}", + "failedSegment": "{count} з помилкою", + "skippedSegment": "{count} пропущено", + "promptSingular": "промт", + "promptPlural": "промтів" + } + }, + "folderForm": { + "updateSuccessMessage": { + "detail": "Теку оновлено" + }, + "updateErrorMessage": { + "detail": "Не вдалося оновити теку" + }, + "createSuccessMessage": { + "detail": "Теку створено" + }, + "createErrorMessage": { + "detail": "Не вдалося створити теку" + }, + "deleteConfirmation": { + "header": "Видалити теку", + "message": "Справді видалити {folderName} з усіма підтеками й промтами?", + "successMessage": { + "detail": "Теку видалено" + }, + "errorMessage": { + "detail": "Не вдалося видалити теку" + } + } + }, + "promptForm": { + "addTitle": "Додати новий промт", + "editTitle": "Редагувати промт", + "promptName": "Назва промта", + "promptDescription": "Опис", + "updateSuccessMessage": { + "detail": "Промт оновлено" + }, + "updateErrorMessage": { + "detail": "Не вдалося оновити промт" + }, + "createSuccessMessage": { + "detail": "Промт створено" + }, + "createErrorMessage": { + "detail": "Не вдалося створити промт" + }, + "deleteConfirmation": { + "header": "Видалити промтів: {count}", + "message": "Справді видалити?", + "successMessage": { + "detail": "Промт видалено" + }, + "errorMessage": { + "detail": "Не вдалося видалити промт" + } + } + }, + "saveAsVersion": "Зберегти як версію", + "version": { + "noVersions": "Версій не збережено", + "selectVersion": "Виберіть версію", + "saveAsVersion": "Зберегти як версію", + "saveAsVersionN": "Зберегти як версію {n}", + "saveVersion": "Зберегти версію", + "changelog": "Список змін", + "changelogPlaceholder": "Опишіть, що змінилося в цій версії...", + "savedAs": "Збережено як версію {version}", + "saveError": "Не вдалося зберегти версію", + "setActive": "Зробити промт активним", + "unsetActive": "Скасувати активну", + "markedActive": "Версію позначено активною", + "clearedActive": "Активну версію скасовано", + "setActiveError": "Не вдалося задати активну версію", + "unsavedChangesMessage": "У вас є незбережені зміни. Перемикання версій їх відкине.", + "deleteVersion": "Видалити версію", + "deleteConfirm": "Справді видалити версію {version}? Цю дію не можна скасувати.", + "deleted": "Версію {version} видалено", + "deleteError": "Не вдалося видалити версію", + "cannotDelete": "Видалити неможливо", + "cannotDeleteLast": "Має залишитися щонайменше одна версія" + }, + "workbench": { + "savePromptFirst": "Спершу збережіть промт, щоб скористатися верстаком", + "unsavedRunMessage": "У вас є незбережений тестовий запуск. Перемикання версій його відкине." + }, + "testRunDetails": "Деталі тестового запуску", + "loadTestRun": "Завантажити конфігурацію", + "noteHint": "Додайте нотатку про цей тестовий запуск...", + "versionDetails": "Деталі версії", + "bestConfig": "Найкраща конфігурація", + "recentTestRuns": "Нещодавні тестові запуски", + "noTestRuns": "Для цієї версії тестових запусків ще немає", + "versionNotFound": "Версію не знайдено", + "variables": { + "manageVariables": "Заповніть змінні", + "requiredVariablesMissing": "Обов'язковим змінним потрібні значення" + }, + "tags": { + "label": "Теги", + "placeholder": "Додайте теги...", + "noResults": "Введіть текст, щоб знайти або створити тег", + "addSuccess": "Тег додано", + "removeSuccess": "Тег прибрано", + "addError": "Не вдалося додати тег", + "removeError": "Не вдалося прибрати тег" + } + }, + "importDefault": { + "title": "Імпортувати типові {item}", + "successMessage": { + "detail": "Типові {item} імпортовано" + }, + "errorMessage": { + "detail": "Не вдалося імпортувати типові {item}" + } + }, + "contextIsolation": { + "isolate": "Ізолювати контекст", + "unIsolate": "Прибрати ізоляцію контексту", + "label": "Ізольований контекст", + "clearAll": { + "title": "Скасувати всі ізоляції контексту", + "successMessage": { + "detail": "Усі ізоляції контексту скасовано" + } + } + }, + "responseMetrics": { + "title": "Метрики відповіді", + "longPressOrAltClickToCycle": "Довге натискання або {key}+клац — перемикати метрики" + }, + "quickView": "Швидкий перегляд", + "detailsView": "Детальний перегляд", + "input": "Вхід | Входи", + "output": "Результат | Результати", + "think": "Мислення", + "reasoning": { + "emptyNotice": "Модель міркувала всередині, але не повернула підсумку.", + "thinking": "Розмірковую...", + "ponderedBriefly": "Коротко поміркувала", + "ponderedFor": "Міркувала {time}", + "ponderedTimes": "Міркувала разів: {count}", + "seconds": "секунд" + }, + "toolCall": { + "usedTool": "Використано {tool}", + "usedToolFrom": "Використано {tool} з {source}", + "inputs": "Вхідні дані", + "outputs": "Результати", + "noDetailsAvailable": "Деталей немає" + }, + "service": "Служба | Служби", + "localAIService": "Служба локального ШІ", + "version": "Версія | Версії", + "invalidConfig": "Некоректна конфігурація. Введіть коректний JSON-об'єкт.", + "unsavedChanges": "Незбережені зміни", + "saveChanges": "Зберегти зміни", + "day": "День | Дні", + "every": "Кожні", + "files": "Файли", + "file": "Файл | Файли", + "reallyDelete": "Справді видалити?", + "similarity": "Схожість", + "saveAsDraft": "Зберегти як чернетку", + "compose": "Написати", + "embeddingModel": "Модель ембедингів", + "document": "Документ | Документи", + "matched": "Збіг", + "active": "Активно", + "inactive": "Неактивно", + "folderName": "Назва теки", + "addNewFolder": "Додати нову теку", + "editFolder": "Редагувати теку", + "errorGeneric": "Сталася помилка. Спробуйте пізніше. Деталі — у логах.", + "sharedService": { + "modelsPath": { + "title": "Шлях до моделей", + "description": "Сюди {service} завантажує моделі й тут їх шукає. Ви можете вказати власну теку.", + "edit": { + "title": "Змінити шлях до моделей", + "description": "Вкажіть бажане розташування.", + "willRestartWarning": "Зверніть увагу: після зміни шляху до моделей службу {service} буде перезапущено, щоб зміни набули чинності.", + "selectModelsPath": "Виберіть шлях до моделей", + "successMessage": { + "detail": "Шлях до моделей оновлено" + }, + "errorMessage": { + "detail": "Не вдалося оновити шлях до моделей" + } + } + }, + "quickPromptDialog": { + "title": "Зберегти у швидкі промти", + "description": "Дайте своєму системному промту коротку назву. Його буде додано до швидких промтів для зручного повторного використання.", + "nameLabel": "Назва швидкого промта", + "successMessage": "Системний промт збережено у швидкі промти.", + "errorMessage": "Не вдалося зберегти системний промт у швидкі промти.", + "emptyPromptMessage": "Додайте текст системного промта, перш ніж зберігати у швидкі промти." + }, + "serviceHealth": { + "title": "Стан служби", + "description": "Стан {service}. Виникли проблеми? Спробуйте перезапустити службу або перегляньте логи.", + "serviceAction": { + "restartService": "Перезапустити службу", + "stopService": "Зупинити службу", + "startService": "Запустити службу", + "errorMessage": { + "detail": "Не вдалося виконати дію {action} для {service}. Деталі — у логах." + }, + "restartSuccessMessage": { + "detail": "{service} перезапущено" + } + }, + "serviceStatus": { + "starting": "Запускається", + "running": "Працює", + "stopped": "Зупинено" + } + }, + "serviceEndpoint": { + "title": "Ендпоінт служби | Ендпоінти служби", + "description": { + "base": "Локальний ендпоінт для {service}. Використовуйте його, щоб підключатися з інших застосунків на цьому пристрої.", + "serviceIsNotRunning": "Щойно служба запуститься, адресу буде показано тут.", + "serviceIsAvailableOnNetwork": "Оскільки служба доступна в мережі, до неї можна підключатися з інших пристроїв за мережевим URL." + }, + "copyNetworkURL": "Скопіювати мережевий URL" + }, + "serviceVersion": { + "title": "Версія служби", + "description": "Показує поточну версію {service}. Щоб мати найкращу продуктивність і нові можливості, тримайте її актуальною. За потреби доступне й перевстановлення.", + "forceUpdate": { + "title": "Примусово оновити {service}", + "forCpu": "Примусово оновити {service} (CPU)", + "forCuda": "Примусово оновити {service} (CUDA)", + "forCuda124": "Примусово оновити {service} (CUDA 12.4)", + "forCuda133": "Примусово оновити {service} (CUDA 13.3)", + "forVulkan": "Примусово оновити {service} (Vulkan)", + "forRocm": "Примусово оновити {service} (ROCm)", + "forOpencl": "Примусово оновити {service} (OpenCL)", + "forSycl": "Примусово оновити {service} (SYCL)", + "successMessage": { + "detail": "{service} оновлено до найновішої версії {version}" + }, + "errorMessage": { + "detail": "Не вдалося оновити {service}. Деталі — у логах." + }, + "forCuda131": "Примусово оновити {service} (CUDA 13.1)" + }, + "removeService": { + "title": "Прибрати {service}", + "confirmationHeader": "Прибрати {service}", + "confirmationMessage": "Справді прибрати {service}? Це видалить бінарник служби та всі її налаштування. Пізніше службу можна перевстановити зі сторінки налаштувань.", + "confirmationAccept": "Прибрати", + "successMessage": { + "detail": "{service} успішно прибрано" + }, + "errorMessage": { + "detail": "Не вдалося прибрати {service}. Деталі — у логах." + } + } + }, + "localArchive": { + "drawerHeader": "Встановити з локального архіву", + "variant": "Варіант", + "primaryArchive": "Архів LLaMA.cpp", + "cudartArchive": "Архів CUDA Runtime", + "noFileSelected": "Файл не вибрано", + "browse": "Огляд", + "install": "Встановити", + "cudartHint": "напр. cudart-llama-bin-win-cuda-*.zip" + }, + "serviceConfigurations": { + "title": "Налаштування служби", + "description": "Ці налаштування застосовуються до {service} під час запуску. Після збереження змін {service} автоматично перезапуститься.", + "enableNetworkAccess": { + "title": "Увімкнути доступ із мережі", + "description": "Дозволити іншим пристроям у вашій мережі звертатися до {service} за IP-адресою цього пристрою." + }, + "allowMstyStudioAccess": { + "title": "Дозволити доступ із Msty Studio", + "description": "Дозволити підключення з вебверсії Msty Studio до цього застосунку, щоб вона мала доступ до {service}." + }, + "captureServiceLogs": { + "title": "Записувати логи служби", + "description": "Увімкнути логування, щоб збирати дані служби для налагодження. Використовуйте лише за потреби." + }, + "unsavedChanges": { + "message": "У налаштуваннях {service} є незбережені зміни. Після збереження {service} буде перезапущено з новими налаштуваннями.", + "saveChanges": "Зберегти зміни й перезапустити службу", + "successMessage": { + "detail": "Налаштування {service} збережено, службу перезапущено" + }, + "errorMessage": { + "detail": "Не вдалося зберегти налаштування {service}. Деталі — у логах." + } + } + }, + "modelConfigurations": { + "title": "Налаштування моделі", + "description": "Ці налаштування застосовуються до всіх моделей під час сесій чату." + } + }, + "keyboardShortcuts": { + "title": "Гарячі клавіші", + "description": "Налаштуйте гарячі клавіші для швидкого доступу до функцій", + "search": "Пошук комбінацій...", + "searchByShortcut": "Шукати за комбінацією", + "searchByName": "Шукати за назвою", + "pressShortcut": "Натисніть будь-яку комбінацію клавіш...", + "pressKeys": "Натисніть клавіші...", + "notSet": "Не задано", + "edit": "Змінити комбінацію", + "clear": "Очистити", + "global": "Глобальні", + "saved": "Комбінацію збережено", + "error": "Помилка збереження комбінації", + "reset": "Комбінацію скинуто", + "resetToDefault": "Скинути до типової", + "resetAll": "Скинути всі комбінації", + "allReset": "Усі комбінації скинуто до типових", + "noResults": "Комбінацій не знайдено", + "conflictWith": "Конфліктує з: {name}", + "categories": { + "all": "Усі", + "general": "Загальні", + "navigation": "Навігація", + "appearance": "Вигляд", + "conversation": "Розмова", + "agentMode": "Режим агента" + }, + "resetAllConfirm": { + "title": "Скинути всі комбінації", + "message": "Справді скинути всі гарячі клавіші до типових значень?" + }, + "help": { + "title": "Гарячі клавіші", + "customizeButton": "Налаштувати комбінації" + }, + "contextual": "Контекстні", + "systemWide": "Загальносистемні", + "perSplit": "Для спліта", + "macOptionHint": "Комбінації з клавішею Option працюють у Msty. Якщо замість них вводяться спецсимволи, перевірте Системні налаштування > Клавіатура > Джерела введення", + "example": { + "title": "Приклад гарячих клавіш", + "description": "Цей компонент демонструє, як реєструвати й використовувати гарячі клавіші у ваших компонентах.", + "registeredShortcuts": "Зареєстровані комбінації:", + "exampleAction1": "Приклад дії 1", + "scopedAction": "Дія в межах області", + "actions": "Дії:", + "updateFirstShortcut": "Оновити першу комбінацію", + "testConflictDetection": "Перевірити виявлення конфліктів", + "actionLog": "Журнал дій:", + "noActionsYet": "Дій поки немає. Спробуйте натиснути комбінації!", + "developerNotes": { + "title": "Нотатки для розробників:", + "items": [ + "Комбінації автоматично прибираються, коли компонент розмонтовується", + "Використовуйте комбінації в межах компонента, щоб уникнути конфліктів ID", + "Прив'язки для конкретних платформ обробляються автоматично (Cmd на Mac, Ctrl на Windows)", + "Перевіряйте наявність конфліктів перед реєстрацією комбінацій, які можуть перетнутися з наявними", + "Комбінації можуть бути глобальними (працюють усюди) або контекстними" + ] + } + }, + "splitRemoval": { + "selectSplitToRemove": "Виберіть спліт, який прибрати", + "pressKeysToCancel": "Натисніть", + "remove": "Прибрати" + } + }, + "commandPalette": { + "title": "Палітра команд", + "description": "Пошук команд, налаштувань і навігації", + "placeholder": "Введіть команду, панель або місце призначення", + "count": "збігів", + "unavailable": "Недоступно", + "sections": { + "recent": "Нещодавні", + "create": "Створити", + "navigation": "Перейти до", + "settings": "Налаштування", + "desktop": "Десктоп" + }, + "empty": { + "title": "Команд у цьому діапазоні немає", + "default": "Спробуйте пошукати налаштування, місце призначення або команду створення.", + "withQuery": "За цим запитом команд не знайдено. Спробуйте коротшу фразу або ширше ключове слово." + }, + "reasons": { + "blockedByOverlay": "Спершу закрийте поточний діалог чи панель", + "requiresConversation": "Спершу відкрийте розмову", + "unavailableInCrew": "Створення сплітів недоступне в сесіях із командою", + "unavailable": "Ця команда зараз недоступна" + }, + "toasts": { + "checkingUpdates": "Перевіряю оновлення…", + "localAIUpdateStarted": "Оновлення Local AI розпочато", + "mlxUpdateStarted": "Оновлення MLX розпочато", + "llamaCppUpdateStarted": "Оновлення LLaMA.cpp розпочато" + }, + "commands": { + "newConversation": { + "label": "Нова розмова", + "description": "Почати нову розмову в активній робочій області" + }, + "newSplit": { + "label": "Новий спліт чату", + "description": "Додати новий спліт до поточної розмови" + }, + "openModelHub": { + "label": "Відкрити Model Hub", + "description": "Переглянути провайдерів, моделі, калькулятори та інструменти пошуку" + }, + "openRemoteModels": { + "label": "Відкрити віддалені моделі", + "description": "Перейти одразу до хмарних провайдерів моделей у Model Hub" + }, + "openLocalModels": { + "label": "Відкрити локальні моделі", + "description": "Перейти одразу до встановлених локальних моделей у Model Hub" + }, + "openMLXModels": { + "label": "Відкрити моделі MLX", + "description": "Перейти одразу до обраних моделей MLX у Model Hub" + }, + "openLlamaCppModels": { + "label": "Відкрити моделі LLaMA.cpp", + "description": "Перейти одразу до моделей LLaMA.cpp у Model Hub" + }, + "openTools": { + "label": "Відкрити Інструментарій", + "description": "Відкрити робочу область інструментів" + }, + "openToolsets": { + "label": "Відкрити набори інструментів", + "description": "Відкрити робочу область наборів інструментів" + }, + "openLiveContexts": { + "label": "Відкрити живі контексти", + "description": "Відкрити робочу область живих контекстів" + }, + "openPersonas": { + "label": "Відкрити персони", + "description": "Керувати персонами та їх пошуком" + }, + "openTurnstiles": { + "label": "Відкрити Turnstiles", + "description": "Керувати turnstiles і потоками маршрутизації" + }, + "openKnowledgeStack": { + "label": "Відкрити стек знань", + "description": "Відкрити активний стек знань" + }, + "openPromptsLibrary": { + "label": "Відкрити бібліотеку промтів", + "description": "Переглянути збережені промти й інструменти для них" + }, + "openEnvironments": { + "label": "Відкрити середовища", + "description": "Керувати змінними середовища й значеннями робочої області" + }, + "quickSelectEnvironment": { + "label": "Швидкий вибір середовища", + "description": "Відкрити швидкий вибір середовища" + }, + "openNotifications": { + "label": "Відкрити сповіщення", + "description": "Переглянути нещодавні сповіщення застосунку" + }, + "openLogViewer": { + "label": "Відкрити переглядач логів", + "description": "Переглянути логи десктопного застосунку й вивід під час роботи" + }, + "openSettings": { + "label": "Відкрити налаштування", + "description": "Відкрити діалог налаштувань застосунку" + }, + "openKeyboardShortcuts": { + "label": "Відкрити налаштування гарячих клавіш", + "description": "Налаштувати й переглянути гарячі клавіші" + }, + "openKeyboardShortcutsHelp": { + "label": "Відкрити довідку з гарячих клавіш", + "description": "Показати швидку довідку з гарячих клавіш" + }, + "openLocalAISettings": { + "label": "Відкрити налаштування Local AI", + "description": "Перейти до налаштувань служби Local AI" + }, + "openMLXSettings": { + "label": "Відкрити налаштування MLX", + "description": "Перейти до налаштувань служби MLX" + }, + "openLlamaCppSettings": { + "label": "Відкрити налаштування LLaMA.cpp", + "description": "Перейти до налаштувань служби LLaMA.cpp" + }, + "openVibeCLIProxySettings": { + "label": "Відкрити Vibe CLI Proxy", + "description": "Перейти до розділу Vibe CLI Proxy у налаштуваннях" + }, + "openNotificationsSettings": { + "label": "Відкрити налаштування сповіщень", + "description": "Перейти до параметрів сповіщень у налаштуваннях" + }, + "openLogViewerSettings": { + "label": "Відкрити налаштування переглядача логів", + "description": "Перейти до параметрів переглядача логів у налаштуваннях" + }, + "checkForUpdates": { + "label": "Перевірити оновлення застосунку", + "description": "Попросити десктопний застосунок перевірити наявність новішої версії" + }, + "updateLocalAI": { + "label": "Оновити Local AI", + "description": "Розпочати оновлення служби Local AI" + }, + "updateMLX": { + "label": "Оновити MLX", + "description": "Розпочати оновлення служби MLX" + }, + "updateLlamaCpp": { + "label": "Оновити LLaMA.cpp", + "description": "Розпочати оновлення служби LLaMA.cpp" + }, + "createForgeCanvas": { + "label": "Новий Forge Canvas", + "description": "Створити нову розмову типу forge canvas" + }, + "createPersonaConversation": { + "label": "Нова розмова з персоною", + "description": "Почати розмову з персоною" + }, + "createCrewConversation": { + "label": "Нова розмова з командою", + "description": "Почати розмову з командою кількох агентів" + }, + "createAgentSession": { + "description": "Почати нову сесію автономного агента" + }, + "enterVaporMode": { + "label": "Увійти в режим Vapor", + "description": "Почати тимчасову розмову без збереження" + }, + "expandAllProjects": { + "label": "Розгорнути всі проєкти", + "description": "Розгорнути всі теки проєктів у бічній панелі" + }, + "collapseAllProjects": { + "label": "Згорнути всі проєкти", + "description": "Згорнути всі теки проєктів у бічній панелі" + }, + "setSplitWidth": { + "label": "Задати ширину сплітів", + "description": "Виберіть ширину панелей розмови" + }, + "splitSlim": { + "label": "Вузька", + "description": "Вузькі панелі розмови" + }, + "splitBalanced": { + "label": "Збалансована", + "description": "Панелі розмови середньої ширини" + }, + "splitRoomy": { + "label": "Простора", + "description": "Комфортні панелі розмови" + }, + "splitSpacious": { + "label": "Дуже простора", + "description": "Особливо широкі панелі розмови" + }, + "splitFull": { + "label": "На всю ширину", + "description": "Панелі розмови максимальної ширини" + }, + "setTheme": { + "label": "Задати колірну схему", + "description": "Виберіть світлу, темну або системну тему" + }, + "themeLight": { + "label": "Світла", + "description": "Перемкнутися на світлий режим" + }, + "themeDark": { + "label": "Темна", + "description": "Перемкнутися на темний режим" + }, + "themeSystem": { + "label": "Системна", + "description": "Слідувати колірній схемі системи" + }, + "setMode": { + "label": "Перемкнути режим перегляду", + "description": "Виберіть звичайний режим, режим фокусу або дзен" + }, + "modeNormal": { + "label": "Звичайний", + "description": "Стандартний вигляд з усіма панелями" + }, + "modeFocus": { + "label": "Фокус", + "description": "Менше відволікань, мінімальний інтерфейс" + }, + "modeZen": { + "label": "Дзен", + "description": "Максимальний спокій, нічого зайвого" + }, + "setAccentColor": { + "label": "Задати акцентний колір", + "description": "Виберіть акцентний колір інтерфейсу" + }, + "setAccentColorTo": { + "description": "Задати акцентний колір: {name}" + }, + "toggleMiniMap": { + "label": "Перемкнути мінікарту", + "description": "Показати або сховати мінікарту розмови" + }, + "createWorkspace": { + "label": "Нова робоча область", + "description": "Створити нову робочу область" + }, + "switchWorkspace": { + "label": "Перемкнути робочу область", + "description": "Перейти до іншої робочої області" + }, + "switchWorkspaceTo": { + "description": "Перейти до {name}" + }, + "exitVaporMode": { + "label": "Вийти з режиму Vapor", + "description": "Вийти з режиму Vapor і повернутися до звичайних розмов" + }, + "editConversationTitle": { + "label": "Змінити назву розмови", + "description": "Перейменувати активну розмову" + }, + "toggleSidebar": { + "label": "Перемкнути бічну панель", + "description": "Показати або сховати бічну панель" + }, + "setBaseColor": { + "label": "Задати базовий колір", + "description": "Виберіть базовий колір поверхонь для темного режиму" + }, + "setBaseColorTo": { + "description": "Задати базовий колір: {name}" + } + } + }, + "createNew": "Створити", + "copy": "Копіювати", + "miniMapActions": { + "noMessageSelectedWarning": { + "summary": "Повідомлень не вибрано", + "detail": "Виберіть щонайменше одне повідомлення, щоб виконати дію" + }, + "exportOrCopyMessage": { + "exportMessage": "Експортувати повідомлення | Експортувати повідомлення", + "copyMessage": "Копіювати повідомлення | Копіювати повідомлення", + "asJson": "Як JSON", + "asMarkdown": "Як Markdown", + "successMessage": "Повідомлення успішно {action} у форматі {format}", + "action": { + "export": "експортовано", + "copy": "скопійовано" + } + } + }, + "reIndexItem": { + "action": "Переіндексувати {item}", + "successMessage": { + "detail": "{item} успішно переіндексовано" + }, + "errorMessage": { + "detail": "Не вдалося переіндексувати {item}" + }, + "confirmationMessage": "Справді переіндексувати {item}?" + }, + "recent": "Нещодавнє|Нещодавні", + "recentsPinned": "Нещодавні та закріплені", + "knowledgeStack": { + "title": "Стек знань | Стеки знань", + "manageCloudShared": "Керувати стеками знань, поширеними в хмарі...", + "contexts": "Контексти стека знань", + "composeProgress": { + "clickForDetails": "Формую — клацніть для деталей", + "badgeLabel": "{count} стек знань в обробці | Стеків знань в обробці: {count}", + "processing": "Обробка: {fileName}", + "composing": "Формування", + "composingEllipsis": "Формування…", + "files": "Файли", + "notes": "Нотатки", + "youtube": "YouTube", + "webLinks": "Вебпосилання", + "folders": "Теки", + "conversations": "Розмови", + "conversationProjects": "Проєкти розмов", + "overallProgress": "Загальний прогрес", + "inFlight": "В обробці:" + }, + "itemStatus": { + "ignoredForRetrieval": "Ігнорується під час пошуку" + }, + "archive": { + "groupLabel": "Архів", + "archiveSingle": "Архівувати", + "unarchiveSingle": "Розархівувати", + "archivedToast": "Заархівовано {count} стек знань | Заархівовано стеків знань: {count}", + "hiddenHint": "Тепер він в архіві. Увімкніть «Показувати архівовані», щоб побачити його.", + "unarchivedToast": "Відновлено {count} стек знань | Відновлено стеків знань: {count}", + "error": "Не вдалося оновити статус архівації. Спробуйте ще раз." + }, + "cloudShare": { + "importingFolder": "Імпортую теку: {name}", + "processingCount": "Обробляю стеків знань: {count}" + }, + "saveEdits": { + "title": "Зберегти зміни", + "confirmation": { + "header": "Зберегти зміни й позначити як чернетку", + "message": "Справді зберегти зміни? Стек знань буде позначено як чернетку, і його не можна буде використовувати в роботі, доки він не пройде обробку знову." + } + }, + "selectFolderForImport": "Виберіть, куди імпортувати стек знань", + "newKnowledgeStack": "Новий стек знань", + "legacy": "Класичний", + "switchV2": { + "menu": "Перейти на стек знань Next Gen...", + "title": "Спробуйте новий досвід Next Gen.", + "description": "Повернутися можна будь-коли.", + "confirm": "Перейти на Next Gen", + "caveats": { + "title": "Перед переходом", + "description": "Кілька важливих деталей, про які варто пам'ятати.", + "item1": "Нові стеки, які ви створюватимете, працюватимуть за схемою Next Gen.", + "item2": "Класичні стеки будуть доступні лише для читання, доки ви не оновите їх.", + "item3": "Аналітика з класичних стеків у Next Gen недоступна.", + "item4": "Повернення назад ховає стеки Next Gen, але нічого не видаляє." + }, + "features": { + "title": "Нове в Next Gen", + "description": "Що ви отримаєте одразу.", + "item1": "Вебсторінки й повніше захоплення посилань на YouTube.", + "item2": "Кошики розмов і проєктів.", + "item3": "Режими спостереження за теками з автоматичним формуванням.", + "item4": "Кращі елементи керування формуванням, відновлення й аналітика." + } + }, + "switchV1": { + "menu": "Повернутися до класичного стека знань...", + "title": "Повернутися до класичного стека знань?", + "description": "Повернутися до початкового варіанта стека знань.", + "confirm": "Перейти на класичний", + "caveats": { + "title": "Чого очікувати", + "description": "Класичний режим зберігає ваші дані, але обмежує новіші можливості.", + "item1": "Можливості Next Gen у класичному режимі недоступні.", + "item2": "Стеки Next Gen будуть приховані, доки ви не повернетеся назад.", + "item3": "Ви можете будь-коли знову перейти на Next Gen." + } + }, + "classicLabel": "Класичний", + "nextGenLabel": "Next Gen", + "cloneDefaultTitle": "Копія {title}", + "cloneInfo": { + "title": "Клоновано з", + "id": "ID джерела", + "clonedAt": "Клоновано {time}" + }, + "cloneConfirm": { + "header": "Клонувати стек знань", + "message": "Це створює швидкий клон. Кешований вміст файлів не копіюється. Повторне формування залежить від оригінальних файлів-джерел. Динамічні теки залишаються прив'язаними до своїх шляхів.", + "includeVectorDbLabel": "Включити векторну БД", + "includeVectorDbHelp": "Увімкніть, щоб скопіювати векторні дані й одразу мати пошук у клонованому стеку." + }, + "upgradeV2": { + "menu": "Оновити до Next Gen...", + "title": "Оновити стек знань", + "stackLabel": "Стек: {title}", + "description": "Оновлення переводить цей стек знань на двигун Next Gen. Елементи лишаються на місці, пошук працює до повторного формування, а нові кошики стають доступними. Перегляньте наслідки нижче, перш ніж продовжити.", + "changesTitle": "Що змінюється в Next Gen", + "changesDescription": "Зміни в поведінці після переходу стека на Next Gen.", + "changesItem1": "Цей стек редагується лише в Next Gen; у класичному режимі він відкривається лише для читання.", + "changesItem2": "Усі елементи позначаються для повторної обробки, щоб ви могли переглянути їх або пропустити перед формуванням.", + "changesItem3": "Конвеєр Next Gen керує кешуванням, відстеженням прогресу й відновленням.", + "staysTitle": "Що лишається незмінним", + "staysDescription": "Ваш вміст і структура лишаються недоторканими.", + "staysItem1": "Елементи й розташування джерел не змінюються; нічого не видаляється.", + "staysItem2": "Наявний пошук працює, доки не завершиться повторна обробка.", + "staysItem3": "Ви самі вирішуєте, коли обробляти наново й що включати.", + "nextTitle": "Після оновлення", + "nextDescription": "Рекомендовані наступні кроки після переходу.", + "nextItem1": "Перегляньте елементи, позначені для повторної обробки, і за потреби оновіть правила ігнорування чи блокування.", + "nextItem2": "Сформуйте наново, щоб оновити індекс і аналітику (це може зайняти час).", + "nextItem3": "Призупиняйте, відновлюйте чи переривайте формування, коли потрібно.", + "detailsTitle": "Деталі та наслідки", + "detailsDescription": "Сумісність, поводження з даними, формування та нові можливості.", + "oneWayTitle": "Незворотна зміна", + "oneWayDetail": "Оновлення незворотне. Ви можете й далі працювати в класичному режимі, доки самі не вирішите оновитися.", + "confirm": "Оновити", + "success": "Стек знань оновлено до Next Gen.", + "required": "Потрібне оновлення", + "requiredDetail": "Щоб скористатися цією функцією, оновіть цей стек знань.", + "sections": { + "compatibility": { + "title": "Сумісність", + "description": "Як класичний режим і Next Gen працюють із цим стеком після оновлення.", + "item1": "Після оновлення класичний режим відкриває цей стек лише для читання.", + "item2": "Інші стеки можуть залишатися класичними, доки ви не вирішите оновити і їх." + }, + "data": { + "title": "Ваш вміст", + "description": "Як зберігаються елементи й що робити з відсутніми джерелами.", + "item1": "Елементи лишаються на місці; джерела не переміщуються.", + "item2": "Якщо джерела бракує, ви побачите попередження й зможете вирішити, що робити далі." + }, + "compose": { + "title": "Формування та пошук", + "description": "Що відбувається під час повторної обробки цього стека.", + "item1": "Елементи позначаються для повторної обробки, щоб ви могли їх переглянути або пропустити.", + "item2": "Наявний пошук працює, доки не завершиться повторна обробка.", + "item3": "Формування можна будь-коли призупинити, відновити або перервати." + }, + "features": { + "title": "Нове в Next Gen", + "description": "Додаткові кошики й елементи керування, доступні після оновлення.", + "item1": "Стають доступними вебпосилання, розмови та проєкти.", + "item2": "Надійніше відстеження прогресу, пауза/відновлення й відновлення після збоїв." + } + } + }, + "import": { + "title": "Імпортувати стек знань", + "titleWithFolder": "Імпортувати стек знань до {folder}", + "dragAndDropMessage": "Перетягніть сюди експорт стека знань Msty (.mstyks), щоб імпортувати його.", + "feedback": { + "alreadyExistsSkipped": "{itemName} уже існує. Встановлення пропущено", + "allSkipped": "Пропущено {count} стек знань (уже існує) | Пропущено всі стеки знань ({count}) — вони вже існують", + "allItemsSkippedError": "Усі елементи пропущено, бо вони вже існують", + "successImported": "Успішно імпортовано {count} стек знань | Успішно імпортовано стеків знань: {count}", + "summaryImported": "імпортовано {count} | імпортовано {count}", + "summarySkippedDuplicates": "пропущено {count} дублікат | пропущено дублікатів: {count}", + "summaryFailed": "{count} з помилкою | {count} з помилкою", + "completedWithIssues": "Імпорт завершено з зауваженнями: {summary}", + "importFailed": "Імпорт не вдався" + } + }, + "addDescription": "Додати опис", + "editDescription": "Редагувати опис", + "descriptionPlaceholder": "Додайте опис цього стека знань...", + "autoSaving": "Зберігаю...", + "autoSaved": "Збережено {time}", + "basicInfo": "Основна інформація", + "similarityThreshold": "Поріг схожості", + "similarityThresholdTooltip": "Мінімальний бал збігу (0–1). Вищі значення повертають лише дуже релевантні фрагменти. Нижчі — більше результатів.", + "similarityMatch": "Збіг за схожістю", + "unsavedChanges": { + "confirmNavigation": "У вас є незбережені зміни. Справді залишити цю сторінку? Зміни буде втрачено.", + "confirmReload": "У вас є незбережені зміни — після перезавантаження сторінки їх буде втрачено." + }, + "empty": { + "title": "Стек знань не вибрано", + "description": "Стек знань дає змогу підключати файли, теки, нотатки й транскрипти YouTube, роблячи їх придатними для пошуку й спілкування завдяки Retrieval-Augmented Generation (RAG)" + }, + "selectOrCreate": "Виберіть стек знань", + "selectFromTreeOrCreate": "Виберіть стек знань у дереві або створіть новий", + "folderForm": { + "addTitle": "Додати нову теку", + "editTitle": "Редагувати теку", + "editIgnoreRules": "Редагувати правила ігнорування", + "editIgnoreRulesTitle": "Правила ігнорування", + "ignoreRulesDescription": "Задайте шаблони, щоб виключити файли й теки з обробки.", + "ignoreRulesHierarchySimple": "Пріоритет: локальні .mstyignore/.gitignore → правила теки → системні типові", + "ignoreRulesPlaceholder": "# Вводьте шаблони тут, по одному в рядку\n# Приклад: *.log, node_modules/, !important.txt", + "showExamples": "Показати приклади й довідку", + "ignoreExample1": "Файли логів", + "ignoreExample2": "Тимчасові файли в усіх теках", + "ignoreExample3": "Ціла тека", + "ignoreExample4": "Шаблон-виняток", + "ignoreExample5": "Кілька типів зображень", + "ignoreExample6": "Усі файли в test і підтеках", + "ignoreExample7": "Збіг без урахування регістру", + "ignoreExample8": "Файли, що починаються з secret-", + "insertTemplate": "Використати шаблон", + "clearContent": "Очистити все", + "ignoreRulesUpdated": "Правила ігнорування успішно оновлено", + "ignoreRulesUpdateError": "Не вдалося оновити правила ігнорування", + "deleteConfirmation": { + "header": "Видалити теку «{folderName}»", + "message": "Справді видалити цю теку? Усі стеки знань усередині буде прибрано. Скасувати цю дію неможливо.", + "successMessage": { + "detail": "Теку видалено" + }, + "errorMessage": { + "detail": "Не вдалося видалити теку" + } + }, + "updateSuccessMessage": { + "detail": "Теку оновлено" + }, + "updateErrorMessage": { + "detail": "Не вдалося оновити теку" + }, + "createSuccessMessage": { + "detail": "Теку створено" + }, + "createErrorMessage": { + "detail": "Не вдалося створити теку" + } + }, + "setDefaultFolder": "Зробити типовою текою", + "unsetDefaultFolder": "Скасувати типову теку", + "createRootFolder": "Нова тека в корені", + "knowledgeStackForm": { + "addTitle": "Додати новий стек знань", + "deleteConfirmation": { + "header": "Видалити стек знань", + "message": "Справді видалити цей стек знань? Усі елементи всередині буде прибрано. Скасувати цю дію неможливо." + } + }, + "deleteAllKnowledgeStack": { + "title": "Видалити всі стеки знань", + "description": "Це очистить усі стеки знань. Після видалення відновити їх неможливо.", + "successMessage": { + "detail": "Усі стеки знань видалено" + }, + "errorMessage": { + "detail": "Не вдалося видалити всі стеки знань" + } + }, + "chunksConsole": { + "chunk": "Фрагмент | Фрагменти", + "chunks": "Фрагменти", + "title": "Консоль фрагментів", + "description": "У цій консолі можна побачити, як використовується ваш стек знань «{ title }» і які фрагменти надсилаються моделі під час спілкування. Фрагмент також можна видалити, якщо він нерелевантний чи некорисний.", + "queryText": "Текст запиту", + "similarityFilter": { + "title": "Схожість", + "all": "Усі", + "highest": "Найвища", + "high": "Висока", + "medium": "Середня", + "low": "Низька" + }, + "matchCount": "К-ть фрагментів", + "sourceFile": "Файл-джерело", + "sourceNote": "Нотатка-джерело", + "sourceVideo": "Відео-джерело", + "sourceWebLink": "Вебпосилання-джерело", + "sourceConversation": "Розмова-джерело", + "source": "Джерело", + "score": "Бал", + "searchResults": "Результати пошуку", + "rerankApplied": "Застосовано переранжування ({model})", + "rerankSelected": "Вибрано модель переранжування ({model})", + "rerankScore": "Бал переранжування", + "reranked": "Переранжовано", + "noResultsFound": "Результатів пошуку не знайдено. Спробуйте змінити запит або налаштування пошуку.", + "noResultsAfterFilter": "Жоден результат не відповідає поточному фільтру схожості. Спробуйте послабити фільтр.", + "deleteChunk": { + "successMessage": { + "detail": "Фрагмент видалено" + } + }, + "searchType": { + "title": "Тип пошуку", + "hybrid": "Гібридний пошук", + "semantic": "Семантичний пошук", + "keyword": "Пошук за ключовими словами" + }, + "filterDisclaimer": "Цей фільтр впливає лише на те, які результати показано нижче. Сам запит він не змінює.", + "tooltip": { + "scrubbed": "Вміст очищено від персональних даних", + "cached": "Використано кешовану очищену версію", + "fresh": "Свіжоочищений вміст" + }, + "runQuery": "Виконати запит" + }, + "addon": { + "title": "Стек знань", + "selectedCount": "вибрано: {count}", + "selectedStacks": "Вибрані стеки", + "searchPlaceholder": "Пошук стеків знань...", + "recentlyUpdated": "Нещодавно оновлені", + "allStacks": "Усі стеки знань", + "searchResults": "Результати пошуку", + "noResults": "Стеків знань не знайдено", + "noStacks": "Немає доступних стеків знань", + "noDescription": "Без опису", + "numberOfChunks": "Кількість фрагментів", + "numberOfChunksTooltip": "Максимальна кількість текстових фрагментів, які беруться з ваших стеків знань. Більші значення дають більше контексту, але споживають більше токенів.", + "searchType": "Тип пошуку", + "searchTypeTooltip": "Семантичний знаходить концептуально схожий вміст. Пошук за ключовими словами шукає точні збіги. Гібридний поєднує обидва підходи.", + "synthesizePrompt": "Синтезувати запит", + "synthesizePromptTooltip": "Переформульовує ваш запит для кращих результатів: розгортає скорочення й додає контекст.", + "enablePiiScrubbing": "Увімкнути очищення персональних даних", + "enablePiiScrubbingTooltip": "Автоматично приховує персональні дані (імена, email, номери телефонів тощо) у знайдених фрагментах перед надсиланням моделі.", + "fullContentContextLimit": "Максимум повних контекстів", + "fullContentContextLimitTooltip": "Кількість повних документів, які додаються поряд із фрагментами. Дає багатший контекст, але суттєво збільшує витрату токенів.", + "fullContentContextWarning": "Повні контексти можуть суттєво збільшити витрату токенів і вплинути на швидкодію", + "manageStacks": "Керувати стеками", + "onlyCompletedStacks": "Вибрати можна лише завершені стеки" + }, + "totalFiles": "Усього файлів", + "vectorDimensions": "Розмірність векторів", + "wordCount": "Кількість слів", + "readingTime": "Час читання", + "embeddingModel": { + "title": "Модель ембедингів", + "noModel": "Модель ембедингів не налаштовано", + "modelMissing": "Модель {modelId} не знайдено", + "providerRemapped": "Провайдера моделі автоматично перепризначено", + "changeModel": "Змінити модель ембедингів для запитів", + "selectModel": "Виберіть модель ембедингів для запитів", + "missingModelWarning": "Початкова модель ембедингів для цього стека знань недоступна. Виберіть нову модель.", + "providerRemappedInfo": "Провайдера моделі ембедингів автоматично перепризначено на сумісного.", + "currentModel": "Поточна модель", + "noModelConfigured": "Модель не налаштовано", + "selectNewModel": "Виберіть нову модель", + "defaultLocal": "Типова (локальна)" + }, + "buckets": { + "files": { + "title": "Файли", + "description": "Додавайте .pdf, .csv, .md, .json, .jsonl, .xlsx, .docx, .rtf, .txt, .pptx та інші підтримувані типи файлів.", + "dropZoneText": "Перетягніть файли сюди або виберіть нижче", + "browseFiles": "Вибрати файли", + "dropHint": "Киньте файли сюди", + "limitMessage": "Сюди можна додати до {limit} окремих файлів. Для більших наборів краще додати теку — так буде впорядкованіше й зручніше.", + "bulkRemoveConfirm": "Прибрати {count} файлів із цього стека знань?" + }, + "folders": { + "title": "Теки та сховища Obsidian", + "description": "Додавайте теки з файлами. Також можна кинути сюди сховища Obsidian.", + "dropZoneText": "Перетягніть теки сюди або виберіть нижче", + "browseFolders": "Вибрати теки", + "dropHint": "Киньте теки сюди", + "liveMode": "Живий режим", + "liveModeDescription": "Теки відстежуються на зміни й автоматично оновлюють стек знань", + "duplicateFolder": "Дублікат теки", + "alreadyAdded": "Теку вже додано", + "folderAlreadyExists": "Цю теку вже додано до стека знань", + "folderAlreadyAdded": "Теку «{path}» уже додано", + "folderProcessed": "Теку оброблено", + "filesAdded": "Успішно додано файлів: {count}", + "onlyFoldersAllowed": "Сюди можна додавати лише теки. Виберіть теку замість окремих файлів.", + "selectFolder": "Вибрати теку", + "useDirectoryPicker": "У вебверсії виберіть теку кнопкою «Огляд»", + "processed": "Оброблено", + "processingError": "Помилка обробки теки", + "folderExplorer": "Оглядач тек", + "showIgnoredFiles": "Показувати ігноровані файли", + "noFolders": "Тек ще не додано", + "refresh": "Оновити", + "showInFileManager": "Показати у файловому менеджері", + "remove": "Прибрати", + "loadError": "Не вдалося завантажити теку", + "removed": "Теку прибрано", + "folderRemoved": "«{name}» прибрано зі стека знань", + "removeError": "Не вдалося прибрати теку", + "ignored": "Ігнорується", + "loading": "Завантаження...", + "loadingContents": "Завантажую вміст теки...", + "confirmRemove": "Справді прибрати «{name}» з цього стека знань? Тека та її файли залишаться у вашій системі.", + "expandFolder": "Розгорнути теку", + "collapseFolder": "Згорнути теку", + "folderIgnored": "Цю теку ігнорується за правилами .mstyignore або .gitignore", + "fileIgnored": "Цей файл ігнорується за правилами .mstyignore або .gitignore", + "actionMenu": "Меню дій", + "emptyFolder": "Порожня тека", + "itemCount": "{count} елемент | Елементів: {count}", + "hiddenItemCount": "{count} прихований елемент | Прихованих елементів: {count}" + }, + "obsidianVaults": { + "title": "Сховища Obsidian", + "description": "Додавайте сховища Obsidian до стека знань. Msty проіндексує всі нотатки у сховищі.", + "dropZoneText": "Перетягніть сховища Obsidian сюди або виберіть нижче", + "browseVaults": "Вибрати сховища Obsidian" + }, + "notes": { + "title": "Нотатки", + "description": "Додавайте власні нотатки до стека знань. Їх буде розбито на фрагменти й векторизовано для семантичного пошуку.", + "addNote": "Додати нотатку", + "titlePlaceholder": "Введіть заголовок нотатки...", + "contentPlaceholder": "Введіть текст нотатки...", + "empty": "Нотаток ще не додано. Додайте їх нижче.", + "unsaved": "Ще не збережено" + }, + "youTubeLinks": { + "title": "Посилання на YouTube", + "description": "Додавайте посилання на відео з YouTube, щоб проіндексувати їхні транскрипти. Msty отримає транскрипти й зробить їх придатними для пошуку.", + "deprecationWarning": "Доступ до транскриптів YouTube наразі ускладнений через обмеження сторонньої платформи. Ми шукаємо альтернативні способи відновити цю функціональність; якщо сталого рішення не знайдеться, у майбутніх випусках цю функцію може бути прибрано.", + "dropZoneText": "Перетягніть посилання на YouTube сюди або вставте їх нижче", + "inputPlaceholder": "Вставте сюди URL з YouTube (через пробіл або кому)...", + "inputPlaceholderWithDetected": "Вставте сюди URL з YouTube (виявлено: {count}) | Вставте сюди URL з YouTube (виявлено: {count})", + "autoDetection": "Автоматично завантажувати виявлені URL", + "detectedCount": "Виявлено {count} URL | Виявлено URL: {count}", + "detectedUnpulledUrls": "Виявлено {count} URL з YouTube, але ще не завантажено | Виявлено URL з YouTube, але ще не завантажено: {count}" + }, + "webLinks": { + "title": "Вебпосилання", + "description": "Додавайте вебсторінки до стека знань. Msty завантажить і збереже їхній вміст для пошуку.", + "dropZoneText": "Перетягніть URL сюди або вставте їх нижче", + "inputPlaceholder": "Вставте сюди URL сайтів (через пробіл або кому)...", + "inputPlaceholderWithDetected": "Вставте сюди URL сайтів (виявлено: {count}) | Вставте сюди URL сайтів (виявлено: {count})", + "autoDetection": "Автоматично завантажувати виявлені URL", + "detectedCount": "Виявлено {count} URL | Виявлено URL: {count}", + "detectedUnpulledUrls": "Виявлено {count} URL, але ще не завантажено | Виявлено URL, але ще не завантажено: {count}", + "tokenBudgetLabel": "Бюджет токенів", + "tokenBudgetHelp": "Визначає, скільки вмісту завантажується з кожної сторінки.", + "missingCachedContent": "Кешованого вмісту немає. Додайте це посилання ще раз, щоб оновити його." + }, + "conversationProjects": { + "title": "Проєкти розмов", + "description": "Додавайте проєкти розмов, щоб включити їхні розмови до цього стека знань.", + "add": "Додати проєкти", + "empty": "Проєктів розмов ще не додано. Додайте їх нижче.", + "selectTitle": "Виберіть проєкти розмов", + "selectDescription": "Виберіть проєкти розмов, які включити до цього стека знань.", + "filterPlaceholder": "Пошук проєктів...", + "projectUnknown": "Невідомий проєкт", + "conversationCount": "розмова | розмов", + "confirmRemove": "Прибрати «{title}» з цього стека знань?", + "loadError": "Не вдалося завантажити проєкти розмов" + }, + "conversations": { + "title": "Розмови", + "description": "Додавайте розмови, щоб проіндексувати їхню історію.", + "add": "Додати розмови", + "empty": "Розмов ще не додано. Додайте їх нижче.", + "selectTitle": "Виберіть розмови", + "selectDescription": "Виберіть розмови, які включити до цього стека знань.", + "filterPlaceholder": "Пошук розмов...", + "untitled": "Розмова без назви", + "projectUnknown": "Невідомий проєкт", + "unknownDate": "Невідома дата", + "confirmRemove": "Прибрати «{title}» з цього стека знань?", + "loadError": "Не вдалося завантажити розмови" + } + }, + "actions": { + "addTo": "Додати до стека знань", + "addSelectedTo": "Додати вибране до стека знань", + "selectedConversationsLabel": "{count} вибрана розмова | Вибрано розмов: {count}", + "addToDescription": "Виберіть стек знань для «{item}».", + "addToConfirm": "Додати", + "addedToStack": "«{item}» додано до «{stack}»", + "addedCountToStack": "{count} розмову додано до «{stack}» | Розмов додано до «{stack}»: {count}", + "composeReminder": "Не забудьте сформувати «{stack}», щоб застосувати зміни.", + "composeReminderSelected": "Не забудьте сформувати «{stack}», щоб застосувати зміни.", + "alreadyInStack": "«{item}» уже є в «{stack}»", + "alreadyInStackCount": "{count} уже є в «{stack}» | {count} уже є в «{stack}»", + "addToError": "Не вдалося додати до стека знань", + "empty": "Стеків знань поки немає. Створіть один нижче.", + "loadError": "Не вдалося завантажити список стеків знань", + "upgradeRequired": "Потрібне оновлення" + }, + "itemActions": { + "markForReprocessing": "Позначити для повторної обробки", + "lockTemporary": "Тимчасово заблокувати", + "lockPermanent": "Заблокувати назавжди", + "unlock": "Розблокувати", + "permanentLockedSkipped": "Пропущено {count} назавжди заблокований елемент | Пропущено назавжди заблокованих елементів: {count}", + "viewContent": "Переглянути вміст", + "ignoreRetrieval": "Ігнорувати під час пошуку", + "unignoreRetrieval": "Враховувати під час пошуку", + "moreActions": "Більше дій" + }, + "lockPermanent": { + "subtitle": "Цю дію не можна скасувати", + "warning": "Після блокування назавжди цей елемент не можна буде розблокувати чи обробити наново.", + "consequences": "Що це означає", + "consequence1": "Не можна розблокувати чи змінити", + "consequence2": "Буде пропущено під час примусового формування", + "consequence3": "Наявні фрагменти лишаються доступними для пошуку", + "whenToUse": "Використовуйте для остаточного вмісту, який ніколи не має змінюватися" + }, + "loadMode": { + "title": "Режим завантаження", + "dialogTitle": "Виберіть режим завантаження", + "distribution": "Розподіл", + "dialogDescription": "Виберіть, як завантажувати цей файл під час формування стека знань.", + "staticFiles": "Статичні файли", + "dynamicFiles": "Динамічні файли", + "syncFiles": "Синхронізовані файли", + "totalFiles": "Усього файлів", + "specialModes": "Особливі режими", + "specialModesRatio": "Частка особливих режимів", + "static": { + "label": "Статичний режим", + "description": "Використовує кешовану версію на момент додавання файлу. Швидко й передбачувано, але не відображає нових змін.", + "shortDescription": "Кешований вміст із початкового індексування", + "badge": "Типово" + }, + "dynamic": { + "label": "Динамічний режим", + "description": "Завантажує найновіший вміст файлу під час кожного формування. Трохи повільніше, але завжди актуально.", + "shortDescription": "Свіжий вміст під час кожного формування", + "badge": "Рекомендовано" + }, + "sync": { + "label": "Режим синхронізації", + "description": "Стежить за змінами файлів і формує стек наново автоматично. Найкраще для невеликих файлів, що часто змінюються.", + "shortDescription": "Автоматично формує наново, коли файли змінюються", + "badge": "Витратно" + } + }, + "watchMode": { + "title": "Режим спостереження", + "dialogTitle": "Виберіть режим спостереження", + "dialogDescription": "Виберіть, як цей елемент має реагувати на оновлення.", + "manual": { + "label": "Вручну", + "description": "Обробляти наново лише тоді, коли ви вручну формуєте цей стек знань." + }, + "watchReprocess": { + "label": "Стежити й позначати", + "description": "Виявляти зміни й позначати елементи для повторної обробки." + }, + "watchCompose": { + "label": "Стежити й формувати", + "description": "Виявляти зміни й автоматично формувати у фоні." + }, + "ignore": { + "label": "Ігнорувати", + "description": "Пропускати цей елемент під час формування." + } + }, + "syncMode": { + "start": "Запустити режим синхронізації", + "pause": "Призупинити режим синхронізації", + "pauseAll": "Призупинити все", + "started": "Режим синхронізації запущено", + "startedDetail": "Тепер стежу за змінами файлів для {name}", + "stopped": "Режим синхронізації призупинено", + "stoppedDetail": "Спостереження за файлами призупинено", + "startFailed": "Не вдалося запустити режим синхронізації", + "startFailedDetail": "Переконайтеся, що у стеку знань є файли, позначені для режиму синхронізації", + "allPaused": "Усі режими синхронізації призупинено", + "allPausedDetail": "Спостереження за файлами зупинено для всіх стеків знань", + "active": "{count} активний | Активних: {count}", + "activeTitle": "Активні режими синхронізації", + "filesWatching": "{count} файл | Файлів: {count}", + "filesCount": "{count} файл | Файлів: {count}", + "startedTime": "Запущено {time}", + "totalStats": "{stacks} стек, файлів: {files} | Стеків: {stacks}, файлів: {files}", + "hoursAgo": "{hours} год тому", + "daysAgo": "{days} дн. тому" + }, + "analytics": { + "title": "Аналітика та висновки", + "lastComposed": "Останнє формування", + "sections": "Розділи аналітики", + "performanceTimings": "Час виконання", + "summaryStatistics": "Підсумкова статистика", + "contentBreakdown": "Розподіл вмісту", + "querySettings": "Налаштування запитів", + "readingStatistics": "Статистика читання", + "noAnalyticsAvailable": "Аналітика недоступна", + "noAnalyticsDescription": "Аналітика з'явиться після формування цього стека знань.", + "noSectionsSelected": "Розділи аналітики не вибрано", + "noSectionsSelectedDescription": "Виберіть один або кілька розділів аналітики вище, щоб побачити відомості про ваш стек знань.", + "selectAllSections": "Вибрати всі розділи", + "timings": { + "loadingItems": "Завантаження елементів", + "splittingChunks": "Розбиття на фрагменти", + "embeddingChunks": "Векторизація фрагментів", + "composingStack": "Формування стека", + "totalTime": "Загальний час", + "parallelNote": "Деякі операції можуть виконуватися паралельно, тому сума окремих значень може не збігатися із загальним часом", + "fileReading": "Читання файлів", + "databaseWrite": "Запис до бази даних" + }, + "stats": { + "numberOfItems": "К-ть елементів", + "totalChunks": "Усього фрагментів", + "availableChunks": "Доступні фрагменти", + "skippedChunks": "Пропущені фрагменти", + "wordCount": "Кількість слів", + "characterCount": "Кількість символів", + "readingTime": "Час читання" + }, + "ignoredItems": "Ігноровані елементи", + "ignoredForRetrieval": "Ігноруються під час пошуку", + "ignoredItemsDescription": "Ці елементи виключено з пошуку й отримання даних", + "ignoredPercentage": "Відсоток ігнорованих елементів", + "ofTotal": "з {total}", + "files": "Файли", + "notes": "Нотатки", + "youTubeLinks": "Відео з YouTube", + "webLinks": "Вебпосилання", + "conversations": "Розмови", + "conversationProjects": "Проєкти розмов", + "noIgnoredItems": "Ігнорованих елементів немає", + "allItemsIncluded": "Усі елементи цього стека знань беруть участь у пошуку й отриманні даних", + "failedItems": { + "title": "{count} елемент з помилкою | Елементів з помилкою: {count}", + "description": "Елементи з помилками пропущено. Сформуйте їх наново по одному або всі одразу.", + "recomposeItem": "Сформувати наново", + "recomposeAll": "Сформувати наново всі з помилками", + "showInFileManagerFailed": "Не вдалося відкрити розташування у файловому менеджері", + "markFailed": "Не вдалося поставити в чергу {count} елемент для повторного формування | Не вдалося поставити в чергу елементів для повторного формування: {count}", + "recomposeError": "Не вдалося сформувати наново елементи з помилками", + "recomposeSuccess": "Елементи з помилками успішно сформовано наново", + "recomposeCompletedWithErrors": "Формування завершено, лишився {count} елемент з помилкою | Формування завершено, лишилося елементів з помилками: {count}" + }, + "recommendation": "Рекомендація", + "contentTypes": { + "files": "ФАЙЛИ", + "obsidianVaults": "СХОВИЩА OBSIDIAN", + "folders": "ТЕКИ", + "notes": "НОТАТКИ", + "youTubeLinks": "ПОСИЛАННЯ НА YOUTUBE", + "webLinks": "ВЕБПОСИЛАННЯ", + "conversations": "РОЗМОВИ", + "conversationProjects": "ПРОЄКТИ РОЗМОВ" + }, + "piiScrubbing": { + "title": "Очищення персональних даних", + "totalChunks": "Усього фрагментів", + "scrubbedChunks": "Очищені фрагменти", + "cachedChunks": "Кешовані фрагменти", + "coverage": "Покриття", + "progress": "Прогрес очищення", + "loadAnalytics": "Завантажити аналітику", + "failedToLoadAnalytics": "Не вдалося завантажити дані аналітики персональних даних", + "analyticsNotLoaded": "Аналітику персональних даних не завантажено", + "clickToViewAnalytics": "Натисніть «Завантажити аналітику», щоб побачити статистику очищення персональних даних", + "scoreTooltip": "Цей бал показує, наскільки повно очищення персональних даних застосовано до вашого стека знань. Вищий бал означає, що більше фрагментів пройшло обробку.", + "optionalDescription": "Очищення персональних даних необов'язкове. Вмикайте його в налаштуваннях запитів, лише якщо ваш вміст містить чутливу особисту інформацію.", + "protectionDescription": "Показує, наскільки добре захищено чутливу інформацію у вашому стеку знань", + "status": { + "notEnabled": "Не увімкнено", + "wellProtected": "Добре захищено", + "partiallyProtected": "Частково захищено", + "limitedProtection": "Обмежений захист", + "minimalProtection": "Мінімальний захист" + }, + "insights": { + "excellentPrivacy": "Чудовий захист приватності — захищено майже весь вміст", + "goodPrivacy": "Добрий захист приватності — захищено більшість вмісту", + "partialPrivacy": "Частковий захист приватності — варто переглянути налаштування", + "limitedPrivacy": "Обмежений захист приватності — перевірте чутливий вміст", + "notEnabled": "Очищення персональних даних вимкнено. Це цілком нормально, якщо ваш вміст не містить чутливої особистої інформації.", + "whenToEnable": "Вмикайте очищення персональних даних, лише якщо ваш стек знань містить імена, адреси, номери телефонів, email чи інші особисті дані.", + "significantReduction": "Суттєве скорочення вмісту ({percentage}%) — знайдено багато персональних даних", + "moderateReduction": "Помірне скорочення вмісту ({percentage}%) — частину персональних даних прибрано", + "minimalReduction": "Мінімальне скорочення вмісту ({percentage}%) — виявлено мало персональних даних", + "noContentChange": "Розмір вмісту не змінився — персональних даних не виявлено й не прибрано", + "allChunksProcessed": "Усі фрагменти успішно оброблено", + "nearlyAllProcessed": "Успішно оброблено майже всі фрагменти", + "mostProcessed": "Більшість фрагментів оброблено — деякі можуть потребувати уваги", + "incompleteProcessing": "Обробку не завершено — перевірте налаштування очищення персональних даних", + "largeKnowledgeBase": "Велика база знань — варто збільшити покриття виявлення персональних даних", + "manyUnprocessed": "Багато необроблених фрагментів — перегляньте налаштування очищення персональних даних", + "optionalFeature": "Очищення персональних даних необов'язкове. Увімкніть його в налаштуваннях запитів, якщо ваш вміст містить чутливу інформацію — імена, email чи номери телефонів.", + "privacyOption": "Очищення персональних даних допомагає захистити чутливу інформацію. Воно необов'язкове й за потреби вмикається в налаштуваннях запитів." + }, + "labels": { + "securityStatus": "Стан безпеки", + "privacyStatus": "Стан приватності", + "whenToEnable": "Коли вмикати", + "contentImpact": "Вплив на вміст", + "processingEfficiency": "Ефективність обробки", + "scaleRecommendation": "Рекомендація щодо масштабу", + "coverageRecommendation": "Рекомендація щодо покриття", + "optionalFeature": "Необов'язкова функція", + "privacyOption": "Опція приватності" + } + }, + "querySettingsDetails": { + "searchType": "Тип пошуку", + "numberOfChunks": "Кількість фрагментів", + "promptPrefix": "Префікс промта" + }, + "privacyOptimizationScore": "Бал оптимізації приватності", + "piiProtectionLevel": "Рівень захисту персональних даних", + "piiScrubbingStatus": "Стан очищення персональних даних", + "unscrubbedChunks": "Неочищені фрагменти", + "originalSize": "Початковий розмір", + "processedSize": "Розмір після обробки", + "sizeReduction": "Скорочення розміру", + "privacyInsights": "Висновки щодо приватності", + "dataModified": "Дані було змінено", + "showOutdatedData": "Усе одно показати застарілі дані", + "contentDistribution": "Розподіл вмісту", + "contentContribution": "{label} дають {percentage}% усіх фрагментів", + "processingIssue": "Проблема обробки", + "lowEfficiency": "{label} мають низьку ефективність ({efficiency}%)", + "dataQualityIssue": "Проблема якості даних", + "highSkipRates": "Типів вмісту з високою часткою пропусків: {count}", + "contentDiversity": "Різноманітність вмісту", + "singleContentType": "Лише один тип вмісту — варто урізноманітнити джерела", + "excellentDiversity": "Чудова різноманітність вмісту з кількох типів джерел", + "optimizationTip": "Порада з оптимізації", + "reduceChunkSize": "Зменшіть розмір фрагмента до 800–1200 символів для кращої деталізації вмісту", + "increaseChunkSize": "Збільшіть розмір фрагмента до 1500–2000 символів для кращої ефективності", + "embeddingThroughput": "Пропускна здатність векторизації", + "chunksPerSecond": "{rate} фрагм./с ({time} мс на кожен)", + "searchStrategy": "Стратегія пошуку", + "balancedSearch": "Збалансований підхід: ключові слова + семантичний пошук", + "semanticSearch": "Семантичний пошук на базі ШІ — найкращий для концептуальних запитів", + "keywordSearch": "Класичний пошук за ключовими словами — найкращий для точних термінів", + "retrievalVolume": "Обсяг вибірки", + "lowChunkCount": "Надто мала кількість фрагментів може призвести до втрати релевантної інформації", + "highChunkCount": "Велика кількість фрагментів може додавати шум і сповільнювати відповіді", + "optimalChunkCount": "Оптимальна кількість фрагментів для збалансованої вибірки", + "contentFiltering": "Фільтрація вмісту", + "relaxedFiltering": "М'яка фільтрація — може потрапляти слабко пов'язаний вміст", + "strictFiltering": "Сувора фільтрація — дуже точні результати", + "moderateFiltering": "Збалансована фільтрація релевантного вмісту", + "guidedContext": "Керований контекст", + "customPromptPrefix": "Власний префікс промта скеровуватиме тлумачення запиту", + "lockIndicator": "Індикатор блокування", + "allItemsCanBeReprocessed": "Усі елементи можна обробити наново", + "itemsPartiallyLocked": "Заблоковано {percentage}% елементів", + "mostItemsLocked": "Більшість елементів заблоковано — можливості повторної обробки обмежені", + "privacySecurity": "Приватність і безпека", + "privacyProtectionEnabled": "Захист приватності увімкнено для чутливих даних", + "noPiiScrubbing": "Очищення персональних даних вимкнено — переконайтеся, що вміст не чутливий", + "scaleOptimization": "Оптимізація під масштаб", + "largeKnowledgeBase": "Велика база знань — збільште кількість фрагментів для кращого покриття", + "smallKnowledgeBase": "Невелика база знань — варто зменшити кількість фрагментів", + "performanceProfile": "Профіль продуктивності", + "optimizedForSpeed": "Конфігурацію оптимізовано під швидкі відповіді", + "optimizedForQuality": "Конфігурацію оптимізовано під якісні результати", + "highLockRate": "Висока частка блокувань", + "lockedItemsPercentage": "{percentage}% елементів заблоковано й не оброблятиметься наново", + "unlockRecommendation": "Якщо тимчасово заблоковані елементи потребують оновлення, варто їх розблокувати", + "overHalfLocked": "Заблоковано понад 50% елементів. Це може суттєво обмежити здатність бази знань залишатися актуальною.", + "lockStatus": "Стан блокування", + "totalItems": "Усього елементів", + "unlocked": "Розблоковано", + "temporarilyLocked": "Тимчасово заблоковано", + "permanentlyLocked": "Заблоковано назавжди", + "lockStatusByContentType": "Стан блокування за типом вмісту", + "tempLocked": "Тимч. заблок.", + "permLocked": "Назавжди заблок.", + "lockStatusInsights": "Висновки щодо блокувань", + "processingEfficiency": "Ефективність обробки", + "contentInsights": "Висновки щодо вмісту", + "compositionOptimizationScore": "Бал оптимізації формування", + "compositionInsights": "Висновки щодо формування", + "performanceInsights": "Висновки щодо продуктивності", + "processingPhaseDetails": "Деталі етапів обробки", + "loadingItems": "Завантаження елементів", + "splittingChunks": "Розбиття на фрагменти", + "embeddingChunks": "Векторизація фрагментів", + "fileReading": "Читання файлів", + "databaseWrite": "Запис до бази даних", + "composingStack": "Формування стека", + "totalProcessingTime": "Загальний час обробки", + "totalLockedItems": "Усього заблокованих елементів", + "efficiency": "Ефективність", + "loadMode": { + "title": "Аналітика режимів завантаження", + "description": "Як завантажуються файли у вашому стеку знань", + "distribution": "Розподіл режимів завантаження", + "totalFiles": "Усього файлів", + "staticFiles": "Статичний режим", + "dynamicFiles": "Динамічний режим", + "syncFiles": "Режим синхронізації", + "specialModes": "Особливі режими", + "specialModesRatio": "% особливих режимів", + "status": "Статус", + "active": "Активно", + "inactive": "Неактивно", + "breakdown": "Візуальний розподіл", + "noFiles": "У цьому стеку знань немає файлів", + "desktopOnly": "Режими завантаження доступні лише в десктопному застосунку", + "notAvailable": "Режими завантаження доступні лише в десктопному застосунку", + "noSpecialModes": "Усі файли використовують статичний режим. Увімкніть динамічний режим або режим синхронізації, щоб працювати з найновішим вмістом.", + "syncActive": "Режим синхронізації активний", + "syncActiveDetails": "Спостереження: {files} • Запущено {time}", + "staticDescription": "Кешований вміст із початкового індексування", + "dynamicDescription": "Свіжий вміст під час кожного формування", + "syncDescription": "Автоматично формує наново, коли файли змінюються", + "staticBadge": "Типово", + "dynamicBadge": "Свіже", + "syncBadge": "Наживо", + "insights": { + "highSyncCount": { + "title": "Багато файлів у режимі синхронізації", + "description": "Файлів у режимі синхронізації: {count}", + "recommendation": "Для файлів, що оновлюються рідше, краще використати динамічний режим — це зменшить навантаження" + }, + "syncEnabled": { + "title": "Режим синхронізації увімкнено", + "description": "Файлів, що оновлюються автоматично після змін: {count}" + }, + "highDynamicUsage": { + "title": "Активне використання динамічного режиму", + "description": "{percentage}% файлів працюють у динамічному режимі", + "recommendation": "Для файлів, які майже не змінюються, вистачить статичного режиму" + }, + "dynamicEnabled": { + "title": "Динамічний режим активний", + "description": "Файлів, що завантажують свіжий вміст під час кожного формування: {count}" + }, + "staticOnly": { + "title": "Лише статичний режим", + "description": "Усі файли використовують кешований вміст із початкового індексування", + "recommendation": "Увімкніть динамічний режим або синхронізацію для файлів, що часто оновлюються, щоб вміст був свіжим" + }, + "mixedModes": { + "title": "Змішані режими завантаження", + "description": "{percentage}% файлів використовують особливі режими завантаження" + } + } + } + }, + "composeSettings": { + "title": "Налаштування формування", + "chunkOverlapping": "Перекриття фрагментів", + "embeddingModel": { + "title": "Модель ембедингів", + "warning": "Зміна моделі ембедингів потребуватиме повторного формування всього стека знань, і навіть тоді є ризик, що воно не вдасться.", + "learnMore": "Дізнатися більше про сумісність моделей ембедингів", + "defaultPlaceholder": "Типова (локальна)" + }, + "placeholders": { + "selectEmbeddingModel": "Виберіть модель ембедингів", + "selectchunkingMethod": "Виберіть метод розбиття", + "selectChunkOverlapping": "Виберіть перекриття фрагментів", + "selectChunkSize": "Виберіть розмір фрагмента" + }, + "chunkingMethod": { + "title": "Метод розбиття", + "recursiveCharacter": "Рекурсивний посимвольний", + "sentence": "За реченнями", + "file": "Файл (один фрагмент)", + "fileWarning": "Розбиття на рівні файлу робить кожен елемент одним фрагментом. Розмір фрагмента, перекриття й правила ігнорування не використовуються.", + "description": "Виберіть, як розбивати документи на менші частини для кращого пошуку й вибірки." + }, + "overlapping": { + "title": "Перекриття", + "description": "Виберіть, наскільки фрагменти перекриватимуться. Більше перекриття покращує контекст, але збільшує витрату токенів." + }, + "chunkSize": { + "title": "Розмір фрагмента", + "description": "Задайте максимальний розмір кожного фрагмента в символах. Менші фрагменти підвищують точність пошуку, але збільшують витрату токенів.", + "contextWarning": "Розмір фрагмента — приблизно {estimatedTokens} токенів, що перевищує довжину контексту цієї моделі ({contextLength}). Зменште розмір фрагмента, щоб уникнути помилок векторизації.", + "contextWarningUnavailable": "Не вдалося дізнатися довжину контексту вибраної моделі. Попередження про розмір фрагмента можуть бути неточними." + }, + "chunkSizesToIgnore": { + "title": "Розміри фрагментів, які ігнорувати", + "description": "Вкажіть розміри фрагментів, які пропускати під час обробки. Корисно, щоб виключити дуже малі або дуже великі фрагменти." + }, + "advanced": { + "title": "Розширені опції", + "sentenceStreamingThreshold": { + "title": "Поріг потокового читання речень", + "description": "Стосується лише розбиття за реченнями.", + "tooltip": { + "intro": "Стосується лише розбиття за реченнями (не рекурсивного чи файлового). Якщо файл більший за цей розмір, речення зчитуються потоком, а не завантажується весь файл у пам'ять.", + "whenTitle": "Коли це змінювати", + "whenLower": "Зменште, якщо на середніх/великих файлах помічаєте стрибки споживання пам'яті.", + "whenRaise": "Збільште, якщо маєте багато RAM і хочете швидшої обробки.", + "whenDisable": "Встановіть 0 (вимкнено), щоб завжди розбивати речення в пам'яті.", + "metaFolder": "Поведінка для тек: оцінюється для кожного файлу окремо." + } + }, + "persistEveryItems": { + "title": "Зберігати кожні", + "description": "Визначає, як часто зберігається прогрес.", + "tooltip": { + "intro": "Під час формування прогрес (статус, лічильники тощо) періодично зберігається. Цей параметр задає, скільки елементів обробляється перед збереженням. Додатково діє запасне збереження за часом.", + "whenTitle": "Коли це змінювати", + "whenLower": "Менше (1–3) — безпечніше для довгих прогонів і частіші оновлення прогресу.", + "whenHigher": "Більше (10–20) — менше записів і вища швидкість, але більше втрат у разі переривання." + } + }, + "chunkInsertBatchSize": { + "title": "Розмір пакета вставки фрагментів", + "description": "Визначає, скільки фрагментів записується за один пакет.", + "tooltip": { + "intro": "Визначає, скільки фрагментів записується у векторну базу даних за один пакет.", + "whenTitle": "Коли це змінювати", + "whenLower": "Менше (25–50), якщо помічаєте стрибки пам'яті або конкуренцію за базу даних.", + "whenHigher": "Більше (100–500) на потужних машинах/SSD для швидшого імпорту." + } + }, + "analytics": { + "notApplicable": "Н/Д", + "title": "Збирати аналітику", + "description": "Відстежувати час формування, кількість слів і розподіл елементів для аналітики." + } + } + }, + "querySettings": { + "title": "Налаштування запитів", + "numberOfChunks": "Кількість фрагментів", + "promptPrefix": "Префікс промта", + "rerank": { + "title": "Модель переранжування", + "tooltip": "Переоцінює й перевпорядковує знайдені фрагменти за допомогою спеціалізованої моделі, щоб покращити релевантність." + }, + "similarityThreshold": { + "low": "Низький", + "medium": "Середній", + "high": "Високий", + "highest": "Найвищий" + }, + "searchTypes": { + "semantic": "Семантичний пошук", + "keyword": "Пошук за ключовими словами", + "hybrid": "Гібридний пошук" + }, + "modes": { + "push": "Режим Push", + "pull": "Режим Pull" + }, + "chunks": { + "title": "Контекст стека знань", + "loadError": "Не вдалося завантажити фрагменти стека знань. Спробуйте ще раз.", + "searchSettings": "Налаштування пошуку", + "searchType": "Тип пошуку", + "searchQuery": "Пошуковий запит", + "source": "Джерело", + "content": "Вміст", + "fullContent": "Повний вміст", + "chunkInfo": "Інформація про фрагмент", + "knowledgeStack": "Стек знань", + "chunks": "фрагментів", + "maxChunks": "Максимум фрагментів" + }, + "retrievalMode": { + "title": "Режим вибірки фрагментів", + "description": "Виберіть режим Push, у якому фрагменти завантажуються заздалегідь, або режим Pull, у якому модель сама звертається до стеків знань" + } + }, + "chunks": { + "coverage": "Покриття", + "skippedChunks": "Пропущені фрагменти", + "availableChunks": "Доступні фрагменти", + "numberOfChunks": "Кількість фрагментів", + "promptPrefix": "Префікс промта", + "chunkingMethod": "Метод розбиття", + "chunkSize": "Розмір фрагмента", + "chunkOverlap": "Перекриття фрагментів", + "totalChunks": "Усього фрагментів", + "cachedChunks": "Кешовані фрагменти", + "scrubbedChunks": "Очищені фрагменти", + "loadError": "Не вдалося завантажити фрагменти стека знань. Спробуйте ще раз.", + "searchSettings": "Налаштування пошуку", + "searchType": "Тип пошуку", + "maxChunks": "Максимум фрагментів", + "searchQuery": "Пошуковий запит", + "synthesizedQuery": "Синтезований запит", + "chunks": "фрагмент | фрагментів", + "source": "Джерело", + "content": "Вміст", + "viewFull": "Переглянути повний вміст", + "fullContent": "Повний вміст фрагмента", + "chunkInfo": "Інформація про фрагмент", + "knowledgeStack": "Стек знань", + "scrubbed": "Очищено", + "original": "Оригінал", + "chunkId": "ID фрагмента", + "piiStatus": "Стан персональних даних", + "piiScrubbed": "Персональні дані очищено", + "piiUnscrubbed": "Персональні дані не очищено", + "tooltip": { + "scrubbed": "Вміст очищено від персональних даних", + "cached": "Використано кешовану очищену версію", + "fresh": "Свіжоочищений вміст", + "original": "Оригінальний вміст без очищення персональних даних" + }, + "queryAnalysis": "Аналіз запиту", + "fullContentRetrieved": "Активний контекст із повним вмістом", + "documentsRetrieved": "Отримано документів", + "contentContext": "Контекст вмісту", + "keywords": "Ключові слова", + "fullDoc": "Повний док.", + "type": "Тип", + "fullDocument": "Повний документ" + }, + "chunksVisualizer": { + "title": "Візуалізатор фрагментів", + "description": "Фрагменти джерел одним поглядом — перегляд, запити й керування", + "openStitcher": "Відкрити візуалізатор", + "viewStitcher": "Переглянути візуалізатор", + "stitchableFiles": "Доступні файли", + "loading": "Завантажую файли...", + "noFiles": "Файлів не знайдено", + "selectFile": "Виберіть файл", + "selectFileDescription": "Виберіть файл ліворуч, щоб побачити його фрагменти й вміст", + "mimeType": "MIME-тип", + "chunks": "Фрагменти", + "overlaps": "Перекриття", + "stitchedSize": "Розмір зшитого тексту", + "showOverlaps": "Показати перекриття", + "hideOverlaps": "Сховати перекриття", + "showChunks": "Показати фрагменти", + "showStitched": "Показати зшитий текст", + "copyContent": "Скопіювати вміст", + "stitchedContent": "Зшитий вміст", + "scrubbedChunks": "Очищені фрагменти", + "unScrubbedChunks": "Неочищені фрагменти", + "overlapRemoved": "Перекриття прибрано для чистої реконструкції тексту", + "chunkNumber": "Фрагмент {number}", + "overlapPrevious": "Перекриття з попереднім", + "overlapNext": "Перекриття з наступним", + "overlapWithPrevious": "Цей текст перекривається з попереднім фрагментом", + "overlapWithNext": "Цей текст перекривається з наступним фрагментом", + "chunkIndices": "Позиції символів у файлі", + "coreIndices": "Основний вміст без перекриттів", + "chunkCount": "{count} фрагмент | Фрагментів: {count}", + "showOriginal": "Показати оригінал", + "showScrubbed": "Показати очищене", + "showScrubbedOnly": "Показати лише очищене", + "showAllChunks": "Показати всі фрагменти", + "tooltip": { + "scrubbed": "Вміст очищено від персональних даних", + "cached": "Використано кешовану очищену версію", + "fresh": "Свіжоочищений вміст" + }, + "itemsPerPage": "На сторінку", + "showingChunks": "{start}–{end} з {total} фрагментів", + "loadingChunks": "Завантажую фрагменти...", + "noItems": "Елементів не знайдено", + "noChunksAvailablePrimary": "Для цього стека знань фрагментів поки немає.", + "noChunksAvailableHint": "Сформуйте стек із підтримуваним вмістом і спробуйте ще раз.", + "selectItem": "Виберіть елемент", + "selectItemDescription": "Виберіть файл або нотатку ліворуч, щоб побачити їхні фрагменти й вміст", + "openConsole": "Відкрити консоль", + "selectedChunks": "Вибрано фрагментів: {count}", + "deleteSelected": "Видалити вибране", + "clearSelection": "Зняти вибір", + "confirmDelete": "Підтвердьте видалення", + "confirmDeleteMessage": "Справді видалити вибрані фрагменти ({count})? Цю дію не можна скасувати.", + "deleteSuccess": "Фрагменти видалено", + "deleteSuccessDetail": "Успішно видалено фрагментів: {count}", + "deletedChunksCount": "Успішно видалено фрагментів: {count}", + "deleteError": "Не вдалося видалити" + }, + "export": { + "forceCompose": "Примусово сформувати", + "overallProgress": "Загальний прогрес", + "itemsExported": "Експортовано елементів: {count}", + "items": "Елементи", + "skip": "Пропустити", + "exportCompleted": "Експорт успішно завершено!", + "savedTo": "Збережено в: {path}", + "cancelAll": "Скасувати все", + "done": "Готово", + "export": "Експорт", + "exporting": "Експортую", + "knowledgeStack": "Стек знань", + "folder": "Тека", + "exportFailed": "Експорт не вдався", + "importFailed": "Імпорт не вдався" + }, + "messages": { + "editsSaved": "Ваші зміни до стека знань збережено. Щоб вони набули чинності, сформуйте стек наново.", + "savedAndProcessing": "Стек знань збережено, обробку розпочато", + "cannotForceCompose": "Примусове формування неможливе: спершу збережіть стек знань", + "failedToForceCompose": "Не вдалося примусово сформувати стек знань", + "forceComposeStarted": "Примусове формування розпочато — усі елементи буде оброблено наново", + "failedToUpdateQuerySettings": "Не вдалося оновити налаштування запитів", + "querySettingsUpdated": "Налаштування запитів оновлено", + "justNow": "щойно", + "minutesAgo": "{minutes} хв тому", + "searchPlaceholder": "Пошук...", + "failedToSelectItem": "Не вдалося вибрати елемент", + "failedToSelectFolder": "Не вдалося вибрати теку", + "processingCompleted": "Обробку стека знань {title} завершено. Перегляньте статус на предмет проблем", + "processingCompletedWithErrors": "Стек знань {title} завершено з {count} елементом з помилкою | Стек знань {title} завершено; елементів з помилками: {count}", + "processingFailed": "Обробка стека знань {title} не вдалася", + "compositionPaused": "Формування {title} призупинено", + "compositionResumed": "Формування {title} відновлено", + "compositionAborted": "Формування {title} перервано", + "compositionErrorSuggestion": "Спробуйте вибрати іншу модель ембедингів і сформувати наново", + "cloneVectorDbCopyFallbackWarning": "Не вдалося скопіювати векторну БД під час клонування. Елементи повернуто в стан очікування — сформуйте цей стек знань, щоб перебудувати вектори.", + "nothingToCompose": "Для стека знань {title} немає що формувати", + "composeError": "Помилка формування стека знань {title}", + "downloadImportNotAvailableInWeb": "Імпорт за URL доступний лише в десктопному застосунку", + "deleteSuccess": "Видалено стеків знань: {count}!", + "createError": "Не вдалося створити стек знань", + "saveEditsError": "Не вдалося зберегти зміни до стека знань", + "folderAdded": "Теку «{name}» додано до стека знань" + }, + "folderLockedTemporary": "Теку «{name}» тимчасово заблоковано", + "folderLockedPermanent": "Теку «{name}» заблоковано назавжди", + "lockFailed": "Не вдалося заблокувати теку", + "folderUnlocked": "Теку «{name}» розблоковано", + "unlockFailed": "Не вдалося розблокувати теку", + "unlock": "Розблокувати", + "status": { + "misc": "Різне", + "path": "Шлях: {path}", + "name": "Назва: {name}", + "unknown": "Невідомо", + "original": "Оригінал", + "loadingPiiAnalytics": "Завантажую аналітику персональних даних...", + "allItemsUnlocked": "Усі елементи розблоковано, за потреби їх можна обробити наново." + }, + "abortProcessing": "Перервати обробку", + "errors": { + "processingFailed": "Обробка не вдалася", + "errorMessage": "Повідомлення про помилку", + "occurredAt": "Сталося", + "failedFile": "Файл із помилкою", + "errorSummary": "Підсумок помилки", + "technicalDetails": "Технічні деталі", + "stackTrace": "Трасування стека", + "copyDetails": "Скопіювати деталі", + "detailsCopied": "Деталі помилки скопійовано в буфер обміну", + "clickToSeeDetails": "Клацніть, щоб побачити деталі помилки", + "failedItemsTitle": "Деталі елементів з помилками ({count})", + "showInFileManagerFailed": "Не вдалося відкрити розташування у файловому менеджері", + "fileIsNull": "Файл порожній (null)", + "checkingPathError": "Помилка перевірки, чи шлях є текою", + "processingFolderError": "Помилка обробки теки", + "lockFolderTemporaryFailed": "Не вдалося тимчасово заблокувати теку", + "lockFolderPermanentFailed": "Не вдалося заблокувати теку назавжди", + "unlockFolderFailed": "Не вдалося розблокувати теку", + "status": { + "completed": "Статус: завершено", + "completedWithErrors": "Статус: завершено з помилками", + "processing": "Статус: обробка", + "paused": "Статус: призупинено", + "pending": "Статус: очікує", + "draft": "Статус: чернетка", + "needsReprocessing": "Статус: потребує повторної обробки", + "error": "Статус: помилка", + "lockedTemporary": "Статус: тимчасово заблоковано", + "lockedPermanent": "Статус: заблоковано назавжди", + "aborted": "Статус: перервано", + "unknown": "Статус: невідомо" + } + } + }, + "features": { + "showcase": { + "title": "Відкрийте можливості Aurum", + "subtitle": "Перейдіть на ліцензію Aurum, щоб отримати найпотужніші ШІ-функції та розширені можливості", + "eyebrow": "Усе, що вам потрібно", + "viewPricing": "Переглянути ціни", + "featureMatrix": "Порівняння можливостей", + "activateLicense": "Активувати ліцензію", + "licenses": { + "aurum": "Aurum" + } + } + }, + "images": { + "upload": "Завантажити зображення…", + "onlySupported": "Підтримуються лише файли зображень.", + "maxSize": "Зображення має бути не більшим за 1 МБ." + }, + "userAvatar": { + "updated": "Зображення профілю оновлено.", + "updateFailed": "Не вдалося оновити зображення. Спробуйте ще раз.", + "changeHint": "Клацніть, щоб змінити зображення профілю" + }, + "setting": { + "lostAndFound": { + "title": "Загублене й знайдене", + "description": "Знаходьте й відновлюйте втрачені робочі області на своєму комп'ютері. Скануються й знаходяться лише бази даних робочих областей, без вкладень.", + "experimentalInfo": "«Загублене й знайдене» — експериментальна функція. Перед спробою відновлення завжди тримайте резервні копії даних робочої області.", + "scanForLostWorkspaces": "Шукати втрачені робочі області", + "scanAppData": "Сканувати дані застосунку", + "scanFolder": "Сканувати теку…", + "workspace": "Робоча область", + "file": "Файл", + "status": "Статус", + "lastModifiedColumn": "Останні зміни", + "actions": "Дії", + "statusCurrent": "Поточна", + "statusLinked": "Пов'язана", + "statusFound": "Знайдена", + "restoreCurrentWorkspace": "Відновити поточну робочу область", + "importAsNewWorkspace": "Імпортувати як нову робочу область", + "restoreConfirmHeader": "Відновити поточну робочу область?", + "restoreConfirmMessage": "Дані активної робочої області буде замінено даними з вибраного відновленого файлу. Цю дію не можна скасувати.", + "restore": "Відновити", + "failedToImportWorkspace": "Не вдалося імпортувати робочу область", + "workspaceImported": "Робочу область імпортовано", + "workspaceImportedDetail": "Відновлену робочу область імпортовано. За потреби перейдіть до неї на панелі робочих областей.", + "failedToRestoreWorkspace": "Не вдалося відновити робочу область", + "workspaceRestored": "Робочу область відновлено", + "workspaceRestoredDetail": "Поточну робочу область відновлено з відновленого файлу.", + "showInFileExplorer": "Показати у Провіднику", + "lastModified": "Останні зміни", + "failedToImportRecoveredWorkspace": "Не вдалося імпортувати відновлену робочу область", + "failedToImportRecoveredWorkspaceUnexpected": "Не вдалося імпортувати відновлену робочу область (неочікувана помилка)", + "failedToRestoreFromRecoveredFile": "Не вдалося відновити робочу область із відновленого файлу", + "failedToRestoreFromRecoveredFileUnexpected": "Не вдалося відновити робочу область із відновленого файлу (неочікувана помилка)" + } + }, + "quickFilter": "Швидкий фільтр...", + "toggleQuickFilter": "Перемкнути швидкий фільтр", + "toggleFilter": "Перемкнути фільтр", + "toggleSearchConversations": "Перемкнути пошук розмов", + "toggleSidebar": "Перемкнути бічну панель", + "adjust": "Налаштувати", + "experimentalInfo": "{item} — експериментальна функція, що активно розробляється. Повідомляйте команду про будь-які проблеми.", + "attachmentsManager": { + "columnHeaders": { + "name": "Назва", + "fileType": "Тип файлу", + "attachmentType": "Тип вкладення", + "size": "Розмір", + "dateAdded": "Дата додавання", + "actions": "Дії" + }, + "actions": { + "browseExisting": "Переглянути наявні вкладення", + "starredOnly": "Показати лише з зірочкою", + "quickPreview": "Швидкий перегляд", + "startNewMediaSession": "Почати нову медіасесію", + "newMediaSession": "Нова медіасесія", + "viewAssociations": "Переглянути зв'язки", + "attach": "Прикріпити", + "delete": { + "title": "Видалити вкладення | Видалити вкладення", + "confirmationMessage": "Справді видалити це вкладення? Усі зв'язки з ним також буде прибрано. Цю дію не можна скасувати. | Справді видалити ці вкладення? Усі зв'язки з ними також буде прибрано. Цю дію не можна скасувати.", + "successMessage": "Вкладення успішно видалено | Вкладення успішно видалено", + "errorMessage": "Не вдалося видалити вкладення | Не вдалося видалити вкладення" + } + }, + "filters": { + "starred": "З зірочкою", + "associationAll": "Усі", + "associated": "Зі зв'язками", + "unassociated": "Без зв'язків", + "metadataAll": "Усі", + "metadataProcessed": "Метадані оброблено", + "metadataNotProcessed": "Без метаданих", + "associationEntityPersona": "Персона", + "associationEntityFolder": "Тека", + "associationEntityConversation": "Розмова", + "associationEntityMediaStudio": "Media Studio", + "associationEntitySplitPreset": "Пресет сплітів", + "associationEntityTurnstile": "Turnstile" + }, + "mobileControls": { + "filters": "Фільтри", + "associationStatus": "Стан зв'язків", + "metadataStatus": "Стан метаданих", + "associatedWith": "Пов'язано з", + "sortBy": "Сортувати за", + "sortNewest": "Найновіші", + "sortOldest": "Найстаріші", + "sortNameAsc": "Назва А–Я", + "sortNameDesc": "Назва Я–А", + "sortSizeDesc": "Найбільші", + "sortSizeAsc": "Найменші", + "select": "Вибрати", + "deselect": "Зняти вибір", + "star": "Додати в обране", + "unstar": "Прибрати з обраного" + }, + "search": "Пошук за назвою", + "filter": "Фільтр за типом вкладення", + "title": "Context Studio", + "emptyState": { + "title": "Створіть свою бібліотеку контексту", + "description": "Додавайте файли, сайти чи відео з YouTube, щоб мати багаторазовий контекст для розмов і творчої роботи.", + "dropHint": "Файли також можна перетягнути в будь-яке місце цієї панелі.", + "actions": { + "addAttachment": { + "title": "Додати вкладення", + "description": "Завантажте документи, зображення, аудіо чи відео." + }, + "addWebsite": { + "title": "Додати сайт", + "description": "Збережіть вміст вебсторінки як багаторазовий контекст." + }, + "addYouTube": { + "title": "Додати YouTube", + "description": "Імпортуйте відео та його транскрипт." + }, + "settings": "Налаштувати Context Studio" + } + }, + "previewUnavailable": { + "title": "Попередній перегляд недоступний", + "description": "Цей тип вкладення зараз не можна переглянути напряму." + }, + "associations": { + "title": "Зв'язки для {attachmentName}", + "search": "Пошук за назвою зв'язку", + "filter": "Фільтр за пов'язаною сутністю", + "emptyState": { + "title": "Зв'язків не знайдено", + "description": "Ви ще ніде не використовували це вкладення." + }, + "columnHeaders": { + "associationName": "Назва зв'язку", + "associatedEntity": "Пов'язана сутність", + "actions": "Дії" + }, + "actions": { + "jumpTo": "Перейти до {entity}", + "detach": { + "action": "Від'єднати", + "title": "Від'єднати зв'язок", + "confirmationMessage": "Справді від'єднати зв'язок від {associationEntity}? Цю дію не можна скасувати.", + "successMessage": "Зв'язок успішно від'єднано", + "errorMessage": "Не вдалося від'єднати зв'язок" + } + } + } + }, + "iconSelector": { + "searchMode": "Пошук", + "aiMode": "Промт для ШІ", + "aiPlaceholder": "Опишіть, що має зображати іконка...", + "findIcon": "Знайти іконку", + "finding": "Шукаю..." + }, + "sso": { + "emailLoginTitle": "Вхід через email", + "signInWithCodeOrSso": "Увійдіть за кодом або через SSO", + "signInWithMagicLinkOrCode": "Увійдіть за посиланням або кодом", + "loginInCode": "Увійти за кодом", + "loginWithSso": "Увійти через SSO", + "verificationCodeDescription": "Отримайте код підтвердження на свою пошту.", + "ssoFindProvider": "За вашим email ми знайдемо вашого провайдера.", + "submitEmailToResolveProvider": "Введіть email, щоб визначити вашого провайдера", + "changeMethod": "Змінити спосіб", + "emailAddress": "Адреса email", + "alreadyHaveVerificationCode": "Уже маєте код підтвердження?", + "enterCode": "Введіть код", + "sendLoginCode": "Надіслати код для входу", + "ssoCopyUrlHint": "Якщо браузер не відкрився, скопіюйте цей URL і вставте його в браузер.", + "continue": "Продовжити через SSO", + "title": "Налаштування SSO", + "adminGroupId": "ID групи адміністраторів", + "adminGroupIdDescription": "Введіть ID групи в Microsoft Entra ID. Учасники цієї групи отримають роль адміністратора; усі інші — роль користувача.", + "adminGroupIdPlaceholder": "ID групи", + "saveSuccess": "Налаштування SSO успішно збережено", + "saveError": "Не вдалося зберегти налаштування SSO", + "providers": { + "microsoft": "Microsoft Entra ID", + "google": "Google", + "other": "Інший OIDC-провайдер" + }, + "configIntro": "Налаштуйте єдиний вхід (SSO) для вашої організації. Додайте", + "configOutro": "як URL перенаправлення.", + "providerLabel": "OIDC-провайдер", + "providerTooltip": "Виберіть провайдера, щоб заповнити issuer і типові клейми.", + "providerPlaceholder": "Виберіть провайдера", + "orgDomainLabel": "Домен організації", + "orgDomainTooltip": "Домен email, за яким користувачів зіставляють із цією організацією.", + "orgDomainPlaceholder": "напр. acme.com", + "advancedOptionsTooltip": "Налаштуйте зіставлення ролі адміністратора та перевизначення клеймів для SSO.", + "advancedOptionsDescription": "Необов'язкові перевизначення клеймів і налаштування ролі адміністратора.", + "adminGroupIdLabel": "ID групи адміністраторів", + "adminGroupIdTooltip": "Користувачі, що збігаються за ID групи адміністраторів або значеннями ролі адміністратора, отримують роль адміністратора. Якщо не задано ні того, ні іншого, вхід через SSO не змінюватиме наявні ролі користувачів.", + "adminRoleValuesLabel": "Значення ролі адміністратора", + "adminRoleValuesTooltip": "Користувачі, що збігаються за ID групи адміністраторів або значеннями ролі адміністратора, отримують роль адміністратора. Якщо не задано ні того, ні іншого, вхід через SSO не змінюватиме наявні ролі користувачів.", + "adminRoleValuesPlaceholder": "напр. Admin, MstyAdmin", + "emailClaimLabel": "Клейм email", + "emailClaimTooltip": "Назва клейму для email (напр. email, preferred_username, upn).", + "emailClaimPlaceholder": "напр. email", + "groupsClaimLabel": "Клейм груп", + "groupsClaimTooltip": "Назва клейму для груп (напр. groups, roles, memberOf).", + "groupsClaimPlaceholder": "напр. groups", + "tenantIdLabel": "ID тенанта", + "tenantIdTooltip": "ID тенанта Microsoft Entra, з якого формується URL issuer.", + "tenantIdPlaceholder": "ID каталогу (тенанта)", + "clientIdLabel": "Client ID", + "clientIdTooltip": "OIDC client ID для десктопного застосунку (публічний клієнт).", + "microsoftClientIdPlaceholder": "ID застосунку (клієнта)", + "googleClientIdPlaceholder": "OAuth client ID", + "otherClientIdPlaceholder": "OIDC client ID", + "clientSecretLabel": "Client Secret", + "clientSecretTooltip": "Зберігається зашифрованим і ніколи не повертається у відповідях.", + "clientSecretPlaceholder": "Введіть client secret", + "clientSecretMaskedPlaceholder": "********", + "issuerUrlLabel": "URL issuer", + "issuerUrlTooltip": "URL issuer OIDC вашого постачальника ідентичності (використовується для discovery).", + "issuerUrlPlaceholder": "напр. https://idp.example.com", + "loadError": "Не вдалося завантажити налаштування SSO", + "settingsSaved": "Налаштування збережено", + "updated": "Налаштування SSO оновлено", + "updateError": "Не вдалося оновити налаштування SSO", + "settingsReset": "Налаштування скинуто", + "resetDetail": "Налаштування SSO скинуто", + "settingsTab": "Налаштування SSO", + "groupAutoAssignment": { + "title": "Автопризначення за групами SSO", + "subtitle": "Вкажіть ID груп вашого постачальника ідентичності, щоб автоматично додавати користувачів до цієї команди під час входу через SSO.", + "groupIdsLabel": "ID груп", + "groupIdsPlaceholder": "напр. group-id-1, group-id-2, group-id-3", + "howItWorksTitle": "Як це працює", + "howItWorksStepOne": "Введіть один або кілька ID груп вашого постачальника ідентичності (через кому)", + "howItWorksStepTwo": "Коли користувач входить через SSO, перевіряється його членство в групах", + "howItWorksStepThree": "Користувачів із будь-якої з цих груп автоматично додають до цієї команди" + } + }, + "shiftcutMode": { + "title": "Shiftcuts", + "description": "Увімкнути або вимкнути функцію Shiftcuts. На відміну від звичайних гарячих клавіш, Shiftcuts спрацьовують після подвійного натискання Shift і наступної клавіші: «t» — новий спліт чату, «e» — вибір середовища, «1» — перемкнути бічну панель, «m» — відкрити мінікарту." + } +}