diff --git a/src/assets/locale/da/playground.json b/src/assets/locale/da/playground.json index f8df2b2..8fdcd54 100644 --- a/src/assets/locale/da/playground.json +++ b/src/assets/locale/da/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Stop Streaming", "knowledge": "Viden" }, - "sendWhenEnter": "Søg, når Indtast trykkes" + "sendWhenEnter": "Søg, når Indtast trykkes", + "welcome": "Hej! Hvordan kan jeg hjælpe dig i dag?" } \ No newline at end of file diff --git a/src/assets/locale/da/settings.json b/src/assets/locale/da/settings.json index 1666d9c..1d088d1 100644 --- a/src/assets/locale/da/settings.json +++ b/src/assets/locale/da/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Generer titel med AI" + }, + "ollamaStatus": { + "label": "Aktivér eller deaktivér Ollama forbindelsesstatus kontrol" } }, "sidepanelRag": { diff --git a/src/assets/locale/de/playground.json b/src/assets/locale/de/playground.json index 119d87f..43eafb9 100644 --- a/src/assets/locale/de/playground.json +++ b/src/assets/locale/de/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Streaming stoppen", "knowledge": "Wissen" }, - "sendWhenEnter": "Senden bei Drücken der Eingabetaste" + "sendWhenEnter": "Senden bei Drücken der Eingabetaste", + "welcome": "Hallo! Wie kann ich Ihnen heute helfen?" } \ No newline at end of file diff --git a/src/assets/locale/de/settings.json b/src/assets/locale/de/settings.json index 30a5da3..c6b134b 100644 --- a/src/assets/locale/de/settings.json +++ b/src/assets/locale/de/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Titel mit KI generieren" + }, + "ollamaStatus": { + "label": "Ollama-Verbindungsstatus-Überprüfung aktivieren oder deaktivieren" } }, "sidepanelRag": { diff --git a/src/assets/locale/en/playground.json b/src/assets/locale/en/playground.json index 05da9ad..c4f5f5c 100644 --- a/src/assets/locale/en/playground.json +++ b/src/assets/locale/en/playground.json @@ -23,7 +23,9 @@ "speechToText": "Speech to Text", "uploadImage": "Upload Image", "stopStreaming": "Stop Streaming", - "knowledge": "Knowledge" + "knowledge": "Knowledge", + "vision": "[Experimental] Vision Chat" }, - "sendWhenEnter": "Send when Enter pressed" + "sendWhenEnter": "Send when Enter pressed", + "welcome": "Hello! How can I help you today?" } \ No newline at end of file diff --git a/src/assets/locale/en/settings.json b/src/assets/locale/en/settings.json index 8f19b6a..eb98bf4 100644 --- a/src/assets/locale/en/settings.json +++ b/src/assets/locale/en/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Generate Title using AI" + }, + "ollamaStatus" :{ + "label":"Enable or disable Ollama connection status check" } }, "sidepanelRag": { diff --git a/src/assets/locale/es/playground.json b/src/assets/locale/es/playground.json index afc3771..2e16639 100644 --- a/src/assets/locale/es/playground.json +++ b/src/assets/locale/es/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Parar Transmisión", "knowledge": "Conocimiento" }, - "sendWhenEnter": "Enviar cuando presione Enter" + "sendWhenEnter": "Enviar cuando presione Enter", + "welcome": "¡Hola! ¿Cómo puedo ayudarte hoy?" } diff --git a/src/assets/locale/es/settings.json b/src/assets/locale/es/settings.json index 241df94..4ed17d8 100644 --- a/src/assets/locale/es/settings.json +++ b/src/assets/locale/es/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Generar título usando IA" + }, + "ollamaStatus": { + "label": "Habilitar o deshabilitar la verificación del estado de conexión de Ollama" } }, "sidepanelRag": { diff --git a/src/assets/locale/fa/playground.json b/src/assets/locale/fa/playground.json index e9161a7..3732e7f 100644 --- a/src/assets/locale/fa/playground.json +++ b/src/assets/locale/fa/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "توقف Streaming", "knowledge": "دانش" }, - "sendWhenEnter": "با فشار دادن Enter ارسال شود" + "sendWhenEnter": "با فشار دادن Enter ارسال شود", + "welcome": "سلام! امروز چطور می‌توانم به شما کمک کنم؟" } diff --git a/src/assets/locale/fa/settings.json b/src/assets/locale/fa/settings.json index 039f222..0a0cde8 100644 --- a/src/assets/locale/fa/settings.json +++ b/src/assets/locale/fa/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "تولید عنوان با استفاده از هوش مصنوعی" + }, + "ollamaStatus": { + "label": "فعال یا غیرفعال کردن بررسی وضعیت اتصال Ollama" } }, "sidepanelRag": { diff --git a/src/assets/locale/fr/playground.json b/src/assets/locale/fr/playground.json index fddf9c0..e81c542 100644 --- a/src/assets/locale/fr/playground.json +++ b/src/assets/locale/fr/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Arrêtez la diffusion", "knowledge": "Connaissance" }, - "sendWhenEnter": "Envoyer en appuyant sur Entrée" + "sendWhenEnter": "Envoyer en appuyant sur Entrée", + "welcome": "Bonjour ! Comment puis-je vous aider aujourd'hui ?" } \ No newline at end of file diff --git a/src/assets/locale/fr/settings.json b/src/assets/locale/fr/settings.json index 027c1b3..7d3b191 100644 --- a/src/assets/locale/fr/settings.json +++ b/src/assets/locale/fr/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Générer le titre en utilisant l'IA" + }, + "ollamaStatus": { + "label": "Activer ou désactiver la vérification de l'état de la connexion Ollama" } }, "sidepanelRag": { diff --git a/src/assets/locale/it/playground.json b/src/assets/locale/it/playground.json index 766fe20..c43cf87 100644 --- a/src/assets/locale/it/playground.json +++ b/src/assets/locale/it/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Ferma lo Streaming", "knowledge": "Conoscenza" }, - "sendWhenEnter": "Invia subito dopo Enter" + "sendWhenEnter": "Invia subito dopo Enter", + "welcome": "Ciao! Come posso aiutarti oggi?" } \ No newline at end of file diff --git a/src/assets/locale/it/settings.json b/src/assets/locale/it/settings.json index af15a71..e227d22 100644 --- a/src/assets/locale/it/settings.json +++ b/src/assets/locale/it/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Genera titolo utilizzando l'IA" + }, + "ollamaStatus": { + "label": "Abilita o disabilita il controllo dello stato della connessione Ollama" } }, "sidepanelRag": { diff --git a/src/assets/locale/ja-JP/playground.json b/src/assets/locale/ja-JP/playground.json index 96c4d1a..f89911c 100644 --- a/src/assets/locale/ja-JP/playground.json +++ b/src/assets/locale/ja-JP/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "ストリーミングを停止", "knowledge": "知識" }, - "sendWhenEnter": "Enterキーを押すと送信" + "sendWhenEnter": "Enterキーを押すと送信", + "welcome": "こんにちは!本日はどのようなお手伝いができますか?" } \ No newline at end of file diff --git a/src/assets/locale/ja-JP/settings.json b/src/assets/locale/ja-JP/settings.json index af5a1f5..0058062 100644 --- a/src/assets/locale/ja-JP/settings.json +++ b/src/assets/locale/ja-JP/settings.json @@ -35,6 +35,9 @@ }, "generateTitle": { "label": "AIを使用してタイトルを生成" + }, + "ollamaStatus": { + "label": "Ollamaの接続状態チェックを有効または無効にする" } }, "sidepanelRag": { diff --git a/src/assets/locale/ko/playground.json b/src/assets/locale/ko/playground.json index 082ad5d..d60b102 100644 --- a/src/assets/locale/ko/playground.json +++ b/src/assets/locale/ko/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "스트리밍 중지", "knowledge": "지식" }, - "sendWhenEnter": "Enter 키를 누르면 전송" + "sendWhenEnter": "Enter 키를 누르면 전송", + "welcome": "안녕하세요! 오늘 어떻게 도와드릴까요?" } diff --git a/src/assets/locale/ko/settings.json b/src/assets/locale/ko/settings.json index 072c7f6..f3c7109 100644 --- a/src/assets/locale/ko/settings.json +++ b/src/assets/locale/ko/settings.json @@ -35,6 +35,9 @@ }, "generateTitle": { "label": "AI로 제목 생성" + }, + "ollamaStatus": { + "label": "Ollama 연결 상태 확인 활성화 또는 비활성화" } }, "sidepanelRag": { @@ -342,4 +345,3 @@ "title": "Chrome AI 설정" } } - diff --git a/src/assets/locale/ml/playground.json b/src/assets/locale/ml/playground.json index 8297aa4..e789350 100644 --- a/src/assets/locale/ml/playground.json +++ b/src/assets/locale/ml/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "സ്ട്രീമിംഗ് നിർത്തുക", "knowledge": "അറിവ്" }, - "sendWhenEnter": "എന്റര്‍ അമര്‍ത്തുമ്പോള്‍ അയയ്ക്കുക" + "sendWhenEnter": "എന്റര്‍ അമര്‍ത്തുമ്പോള്‍ അയയ്ക്കുക", + "welcome": "നമസ്കാരം! ഇന്ന് എനിക്ക് നിങ്ങളെ എങ്ങനെ സഹായിക്കാൻ കഴിയും?" } \ No newline at end of file diff --git a/src/assets/locale/ml/settings.json b/src/assets/locale/ml/settings.json index b6ebd30..03d67f1 100644 --- a/src/assets/locale/ml/settings.json +++ b/src/assets/locale/ml/settings.json @@ -35,6 +35,9 @@ }, "generateTitle": { "label": "എഐ ഉപയോഗിച്ച് ശീർഷകം സൃഷ്ടിക്കുക" + }, + "ollamaStatus": { + "label": "ഒല്ലാമ കണക്ഷൻ സ്റ്റാറ്റസ് പരിശോധന പ്രവർത്തനക്ഷമമാക്കുകയോ പ്രവർത്തനരഹിതമാക്കുകയോ ചെയ്യുക" } }, "sidepanelRag": { diff --git a/src/assets/locale/no/playground.json b/src/assets/locale/no/playground.json index b812649..43e2fa3 100644 --- a/src/assets/locale/no/playground.json +++ b/src/assets/locale/no/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Stopp Streaming", "knowledge": "Kunnskap" }, - "sendWhenEnter": "Søk når Enter trykkes" + "sendWhenEnter": "Søk når Enter trykkes", + "welcome": "Hei! Hvordan kan jeg hjelpe deg i dag?" } diff --git a/src/assets/locale/no/settings.json b/src/assets/locale/no/settings.json index a09437f..8085e3e 100644 --- a/src/assets/locale/no/settings.json +++ b/src/assets/locale/no/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Generer tittel med AI" + }, + "ollamaStatus": { + "label": "Aktiver eller deaktiver Ollama tilkoblingsstatussjekk" } }, "sidepanelRag": { diff --git a/src/assets/locale/pt-BR/playground.json b/src/assets/locale/pt-BR/playground.json index 6e91e97..ea11ffa 100644 --- a/src/assets/locale/pt-BR/playground.json +++ b/src/assets/locale/pt-BR/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Parar Streaming", "knowledge": "Conhecimento" }, - "sendWhenEnter": "Enviar ao pressionar Enter" + "sendWhenEnter": "Enviar ao pressionar Enter", + "welcome": "Olá! Como posso ajudar você hoje?" } \ No newline at end of file diff --git a/src/assets/locale/pt-BR/settings.json b/src/assets/locale/pt-BR/settings.json index ac7e70b..fad3b11 100644 --- a/src/assets/locale/pt-BR/settings.json +++ b/src/assets/locale/pt-BR/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Gerar título usando IA" + }, + "ollamaStatus": { + "label": "Ativar ou desativar verificação de status da conexão Ollama" } }, "sidepanelRag": { diff --git a/src/assets/locale/ru/playground.json b/src/assets/locale/ru/playground.json index fdc2933..39ba724 100644 --- a/src/assets/locale/ru/playground.json +++ b/src/assets/locale/ru/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Остановить поток", "knowledge": "Знание" }, - "sendWhenEnter": "Отправить при нажатии клавиши Enter" + "sendWhenEnter": "Отправить при нажатии клавиши Enter", + "welcome": "Здравствуйте! Как я могу помочь вам сегодня?" } diff --git a/src/assets/locale/ru/settings.json b/src/assets/locale/ru/settings.json index 0c3c183..adf0008 100644 --- a/src/assets/locale/ru/settings.json +++ b/src/assets/locale/ru/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Сгенерировать заголовок с помощью ИИ" + }, + "ollamaStatus": { + "label": "Включить или отключить проверку состояния подключения Ollama" } }, "sidepanelRag": { diff --git a/src/assets/locale/sv/playground.json b/src/assets/locale/sv/playground.json index d7195c5..16c8e80 100644 --- a/src/assets/locale/sv/playground.json +++ b/src/assets/locale/sv/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "Stoppa strömning", "knowledge": "Kunskap" }, - "sendWhenEnter": "Skicka när Enter trycks" + "sendWhenEnter": "Skicka när Enter trycks", + "welcome": "Hej! Hur kan jag hjälpa dig idag?" } diff --git a/src/assets/locale/sv/settings.json b/src/assets/locale/sv/settings.json index cb28f1e..d1e11d0 100644 --- a/src/assets/locale/sv/settings.json +++ b/src/assets/locale/sv/settings.json @@ -32,6 +32,9 @@ }, "generateTitle": { "label": "Generera titel med AI" + }, + "ollamaStatus": { + "label": "Aktivera eller inaktivera Ollama anslutningsstatuskontroll" } }, "sidepanelRag": { diff --git a/src/assets/locale/uk/chrome.json b/src/assets/locale/uk/chrome.json new file mode 100644 index 0000000..12fa7ee --- /dev/null +++ b/src/assets/locale/uk/chrome.json @@ -0,0 +1,13 @@ +{ + "heading": "Налаштування Chrome AI", + "status": { + "label": "Ввімкнути або вимкнути підтримку Chrome AI на Page Assist" + }, + "error": { + "browser_not_supported": "Ця версія Chrome не підтримується моделлю Gemini Nano. Будь ласка, оновіть до версії 127 або новішої", + "ai_not_supported": "Налаштування chrome://flags/#prompt-api-for-gemini-nano не увімкнено. Будь ласка, увімкніть його.", + "ai_not_ready": "Модель Gemini Nano ще не готова; вам потрібно перевірити налаштування Chrome знову", + "internal_error": "Стався внутрішній збій. Будь ласка, спробуйте пізніше." + }, + "errorDescription": "Щоб використовувати Chrome AI, вам потрібна версія переглядача новіша за 127-му, яка наразі доступна в каналах Dev і Canary. Після завантаження підтримуваної версії виконайте наступні кроки:\n\n1. Перейдіть до `chrome://flags/#prompt-api-for-gemini-nano` та виберіть \"Ввімкнути\".\n2. Перейдіть до `chrome://flags/#optimization-guide-on-device-model` та виберіть \"EnabledBypassPrefRequirement\".\n3. Перейдіть до `chrome://components`, знайдіть \"Optimization Guide On Device Model\" і натисніть \"Перевірити оновлення\". Це завантажить модель. Якщо ви не бачите налаштувань, повторіть кроки 1 і 2 та перезапустіть переглядач." +} diff --git a/src/assets/locale/uk/common.json b/src/assets/locale/uk/common.json new file mode 100644 index 0000000..899e12b --- /dev/null +++ b/src/assets/locale/uk/common.json @@ -0,0 +1,125 @@ +{ + "pageAssist": "Допомога на сторінці", + "selectAModel": "Виберіть модель", + "save": "Зберегти", + "saved": "Збережено", + "cancel": "Скасувати", + "retry": "Спробувати знову", + "share": { + "tooltip": { + "share": "Поділитися" + }, + "modal": { + "title": "Поділитися посиланням на чат" + }, + "form": { + "defaultValue": { + "name": "Анонімний", + "title": "Неназваний чат" + }, + "title": { + "label": "Назва чату", + "placeholder": "Введіть назву чату", + "required": "Назва чату обовʼязкова" + }, + "name": { + "label": "Ваше імʼя", + "placeholder": "Введіть ваше імʼя", + "required": "Ваше імʼя обов'язкове" + }, + "btn": { + "save": "Створити посилання", + "saving": "Створення посилання..." + } + }, + "notification": { + "successGenerate": "Посилання скопійовано до буфера обміну", + "failGenerate": "Не вдалося створити посилання" + } + }, + "copyToClipboard": "Копіювати в буфер обміну", + "webSearch": "Пошук у мережі", + "regenerate": "Перегенерувати", + "edit": "Редагувати", + "delete": "Видалити", + "saveAndSubmit": "Зберегти та надіслати", + "editMessage": { + "placeholder": "Введіть повідомлення..." + }, + "submit": "Надіслати", + "noData": "Немає даних", + "noHistory": "Немає історії чату", + "chatWithCurrentPage": "Чат з поточної сторінки", + "beta": "Бета", + "tts": "Читання вголос", + "currentChatModelSettings": "Налаштування поточної моделі чату", + "modelSettings": { + "label": "Налаштування моделі", + "description": "Встановіть глобальні параметри моделі для всіх чатів", + "form": { + "keepAlive": { + "label": "Тривалість збереження в памʼяті", + "help": "вказує, як довго модель залишатиметься завантаженою у памʼять після запиту (за замовчуванням: 5 хв)", + "placeholder": "Введіть тривалість збереження у памʼяті (наприклад, 5m, 10m, 1h)" + }, + "temperature": { + "label": "Температура", + "placeholder": "Введіть значення температури (наприклад, 0.7, 1.0)" + }, + "numCtx": { + "label": "Кількість контекстів", + "placeholder": "Введіть кількість контекстів (типово: 2048)" + }, + "numPredict": { + "label": "Максимальна кількість токенів", + "placeholder": "Введіть максимальну кількість токенів (наприклад, 2048, 4096)" + }, + "seed": { + "label": "Зерно", + "placeholder": "Введіть значення зерна (наприклад, 1234)", + "help": "Повторюваність виводу моделі" + }, + "topK": { + "label": "Top K", + "placeholder": "Введіть значення для Верхніх K (наприклад, 40, 100)" + }, + "topP": { + "label": "Top P", + "placeholder": "Введіть значення для Верхнього P (наприклад, 0.9, 0.95)" + }, + "numGpu": { + "label": "Кількість GPU", + "placeholder": "Введіть кількість шарів для відправки на GPU" + }, + "systemPrompt": { + "label": "Тимчасовий системний запит", + "placeholder": "Введіть системний запит", + "help": "Швидкий спосіб встановити системний запит для поточного чату, який замінить вибраний системний запит, якщо він існує." + } + }, + "advanced": "Додаткові налаштування моделі" + }, + "copilot": { + "summary": "Підсумувати", + "explain": "Пояснити", + "rephrase": "Перефразувати", + "translate": "Перекласти", + "custom": "Власне" + }, + "citations": "Цитати", + "segmented": { + "ollama": "Моделі Ollama", + "custom": "Власні моделі" + }, + "downloadCode": "Завантажити код", + "date": { + "pinned": "Прикріплено", + "today": "Сьогодні", + "yesterday": "Вчора", + "last7Days": "Останні 7 днів", + "older": "Старіше" + }, + "pin": "Прикріпити", + "unpin": "Відкріпити", + "generationInfo": "Інформація про генерацію" +} diff --git a/src/assets/locale/uk/knowledge.json b/src/assets/locale/uk/knowledge.json new file mode 100644 index 0000000..dd5dd9f --- /dev/null +++ b/src/assets/locale/uk/knowledge.json @@ -0,0 +1,40 @@ +{ + "addBtn": "Додати нове знання", + "columns": { + "title": "Назва", + "status": "Статус", + "embeddings": "Модель вкладень", + "createdAt": "Створено в", + "action": "Дії" + }, + "expandedColumns": { + "name": "Імʼя" + }, + "confirm": { + "delete": "Ви впевнені, що хочете видалити це знання?" + }, + "deleteSuccess": "Знання успішно видалено", + "status": { + "pending": "Очікування", + "finished": "Завершено", + "processing": "Обробка", + "failed": "Не вдалося" + }, + "addKnowledge": "Додати знання", + "form": { + "title": { + "label": "Назва знань", + "placeholder": "Введіть назву знань", + "required": "Назва знань обовʼязкова" + }, + "uploadFile": { + "label": "Завантажити файл", + "uploadText": "Перетягніть файл сюди або натисніть для завантаження", + "uploadHint": "Підтримуються типи файлів: .pdf, .csv, .txt, .md, .docx", + "required": "Файл обовʼязковий" + }, + "submit": "Надіслати", + "success": "Знання успішно додано" + }, + "noEmbeddingModel": "Будь ласка, додайте модель вкладень з сторінки налаштувань RAG спочатку" +} diff --git a/src/assets/locale/uk/openai.json b/src/assets/locale/uk/openai.json new file mode 100644 index 0000000..f714a97 --- /dev/null +++ b/src/assets/locale/uk/openai.json @@ -0,0 +1,90 @@ +{ + "settings": "Сумісний з OpenAI API", + "heading": "Сумісний з OpenAI API", + "subheading": "Тут керування та налаштування ваших постачальників OpenAI API.", + "addBtn": "Додати постачальника", + "table": { + "name": "Назва постачальника", + "baseUrl": "Базовий URL", + "actions": "Дії" + }, + "modal": { + "titleAdd": "Додати нового постачальника", + "name": { + "label": "Назва постачальника", + "required": "Назва постачальника обовʼязкова.", + "placeholder": "Введіть назву постачальника" + }, + "baseUrl": { + "label": "Базовий URL", + "help": "Базовий URL постачальника OpenAI API. Наприклад, (http://localhost:1234/v1)", + "required": "Базовий URL обовʼязковий.", + "placeholder": "Введіть базовий URL" + }, + "apiKey": { + "label": "Ключ API", + "required": "Ключ API обовʼязковий.", + "placeholder": "Введіть ключ API" + }, + "submit": "Зберегти", + "update": "Оновити", + "deleteConfirm": "Ви впевнені, що хочете видалити цього постачальника?", + "model": { + "title": "Список моделей", + "subheading": "Виберіть чат-моделі, які ви хочете використовувати з цим постачальником.", + "success": "Моделі успішно додано." + }, + "tipLMStudio": "Page Assist автоматично отримає моделі, завантажені в LM Studio. Вам не потрібно додавати їх вручну." + }, + "addSuccess": "Постачальника додано успішно.", + "deleteSuccess": "Постачальника видалено успішно.", + "updateSuccess": "Постачальника оновлено успішно.", + "delete": "Видалити", + "edit": "Редагувати", + "newModel": "Додати моделі до постачальника", + "noNewModel": "Для LMStudio, Ollama, Llamafile ми отримуємо моделі динамічно. Ручного додавання не потрібно.", + "searchModel": "Пошук моделі", + "selectAll": "Вибрати все", + "save": "Зберегти", + "saving": "Збереження...", + "manageModels": { + "columns": { + "name": "Назва моделі", + "model_type": "Тип моделі", + "model_id": "Ідентифікатор моделі", + "provider": "Назва постачальника", + "actions": "Дії" + }, + "tooltip": { + "delete": "Видалити" + }, + "confirm": { + "delete": "Ви впевнені, що хочете видалити цю модель?" + }, + "modal": { + "title": "Додати власну модель", + "form": { + "name": { + "label": "Ідентифікатор моделі", + "placeholder": "llama3.2", + "required": "Ідентифікатор моделі обовʼязковий." + }, + "provider": { + "label": "Постачальник", + "placeholder": "Виберіть постачальника", + "required": "Постачальник обовʼязковий." + }, + "type": { + "label": "Тип моделі" + } + } + } + }, + "noModelFound": "Не знайдено моделей. Переконайтеся, що ви додали правильного постачальника з базовим URL та ключем API.", + "radio": { + "chat": "Модель чату", + "embedding": "Модель вкладень", + "chatInfo": "використовується для завершення чату та генерації розмови", + "embeddingInfo": "використовується для RAG та інших повʼязаних завдань семантичного пошуку." + } +} diff --git a/src/assets/locale/uk/option.json b/src/assets/locale/uk/option.json new file mode 100644 index 0000000..22a76d4 --- /dev/null +++ b/src/assets/locale/uk/option.json @@ -0,0 +1,13 @@ +{ + "newChat": "Новий чат", + "selectAPrompt": "Виберіть запит", + "githubRepository": "Репозиторій GitHub", + "settings": "Налаштування", + "sidebarTitle": "Історія чату", + "error": "Збій", + "somethingWentWrong": "Щось пішло не так", + "validationSelectModel": "Будь ласка, виберіть модель для продовження", + "deleteHistoryConfirmation": "Ви впевнені, що хочете видалити цю історію?", + "editHistoryTitle": "Введіть нову назву", + "temporaryChat": "Тимчасовий чат" +} diff --git a/src/assets/locale/uk/playground.json b/src/assets/locale/uk/playground.json new file mode 100644 index 0000000..29e244d --- /dev/null +++ b/src/assets/locale/uk/playground.json @@ -0,0 +1,30 @@ +{ + "ollamaState": { + "searching": "Пошук вашого Ollama 🦙", + "running": "Ollama працює 🦙", + "notRunning": "Неможливо підключитися до Ollama 🦙", + "connectionError": "Здається, у вас виникла проблема з підключенням. Будь ласка, зверніться до цієї документації для усунення несправностей." + }, + "formError": { + "noModel": "Виберіть модель", + "noEmbeddingModel": "Налаштуйте модель вкладень на сторінці Налаштування > RAG" + }, + "form": { + "textarea": { + "placeholder": "Введіть повідомлення..." + }, + "webSearch": { + "on": "Увімкнено", + "off": "Вимкнено" + } + }, + "tooltip": { + "searchInternet": "Пошук в Інтернеті", + "speechToText": "Голос у текст", + "uploadImage": "Завантажити зображення", + "stopStreaming": "Зупинити трансляцію", + "knowledge": "Знання" + }, + "sendWhenEnter": "Надсилати при натисканні Enter", + "welcome": "Вітаю! Як я можу допомогти вам сьогодні?" +} \ No newline at end of file diff --git a/src/assets/locale/uk/settings.json b/src/assets/locale/uk/settings.json new file mode 100644 index 0000000..db0695b --- /dev/null +++ b/src/assets/locale/uk/settings.json @@ -0,0 +1,344 @@ +{ + "generalSettings": { + "title": "Загальні налаштування", + "settings": { + "heading": "Налаштування веб-інтерфейсу", + "speechRecognitionLang": { + "label": "Мова для розпізнавання голосу", + "placeholder": "Виберіть мову" + }, + "language": { + "label": "Мова інтерфейсу", + "placeholder": "Виберіть мову" + }, + "darkMode": { + "label": "Змінити тему", + "options": { + "light": "Світла", + "dark": "Темна" + } + }, + "copilotResumeLastChat": { + "label": "Поновити останню розмову при відкритті бічної панелі (Copilot)" + }, + "hideCurrentChatModelSettings": { + "label": "Приховати налаштування поточної моделі чату" + }, + "restoreLastChatModel": { + "label": "Відновити останню використану модель для попередніх чатів" + }, + "sendNotificationAfterIndexing": { + "label": "Надсилати сповіщення після завершення обробки бази знань" + }, + "generateTitle": { + "label": "Створювати заголовок за допомогою AI" + }, + "ollamaStatus": { + "label": "Увімкнути або вимкнути перевірку стану з'єднання Ollama" + } + }, + "sidepanelRag": { + "heading": "Чат з Copilot з налаштуваннями веб-сайту", + "ragEnabled": { + "label": "Чат з веб-сайтом за допомогою векторних вкладень" + }, + "maxWebsiteContext": { + "label": "Розмір вмісту нормального режиму", + "placeholder": "Розмір вмісту (типово 4028)" + } + }, + "webSearch": { + "heading": "Управління веб-пошуком", + "searchMode": { + "label": "Виконувати простий пошук в Інтернеті" + }, + "provider": { + "label": "Пошукова система", + "placeholder": "Виберіть пошукову систему" + }, + "totalSearchResults": { + "label": "Загальна кількість результатів пошуку", + "placeholder": "Введіть загальну кількість результатів пошуку" + }, + "visitSpecificWebsite": { + "label": "Відвідати веб-сайт, згаданий у повідомленні" + } + }, + "system": { + "heading": "Системні налаштування", + "deleteChatHistory": { + "label": "Видалити історію чату", + "button": "Видалити", + "confirm": "Ви впевнені, що хочете видалити історію чату? Ця дія не може бути відвернута." + }, + "export": { + "label": "Експорт історії чату, бази знань та запитів", + "button": "Експортувати дані", + "success": "Експорт успішний" + }, + "import": { + "label": "Імпорт історії чату, бази знань, та запитів", + "button": "Імпортувати дані", + "success": "Імпорт успішний", + "error": "Помилка імпорту" + } + }, + "tts": { + "heading": "Налаштування Текст-у-Голос", + "ttsEnabled": { + "label": "Увімкнути Текст-у-Голос" + }, + "ttsProvider": { + "label": "Поставник Текст-у-Голос", + "placeholder": "Виберіть постачальника" + }, + "ttsVoice": { + "label": "Голос Текст-у-Голос", + "placeholder": "Виберіть голос" + }, + "ssmlEnabled": { + "label": "Ввімкнути SSML (Мова Розмітки для Синтезу Голосу)" + } + } + }, + "manageModels": { + "title": "Управління моделями", + "addBtn": "Додати нову модель", + "columns": { + "name": "Назва", + "digest": "Хеш", + "modifiedAt": "Оновлено", + "size": "Розмір", + "actions": "Дії" + }, + "expandedColumns": { + "parentModel": "Батьківська модель", + "format": "Формат", + "family": "Сімʼя", + "parameterSize": "Розмір параметрів", + "quantizationLevel": "Рівень квантування" + }, + "tooltip": { + "delete": "Видалити модель", + "repull": "Повторно завантажити модель" + }, + "confirm": { + "delete": "Ви впевнені, що хочете видалити цю модель?", + "repull": "Ви впевнені, що хочете повторно завантажити цю модель?" + }, + "modal": { + "title": "Додати нову модель", + "placeholder": "Введіть назву моделі", + "pull": "Завантажити модель" + }, + "notification": { + "pullModel": "Завантаження моделі", + "pullModelDescription": "Завантажується модель {{modelName}}. Для отримання додаткової інформації перевірте іконку розширення.", + "success": "Успіх", + "error": "Помилка", + "successDescription": "Модель успішно завантажена", + "successDeleteDescription": "Модель успішно видалена", + "someError": "Щось пішло не так. Будь ласка, спробуйте пізніше." + } + }, + "managePrompts": { + "title": "Управління запитами", + "addBtn": "Додати новий запит", + "option1": "Нормальний", + "option2": "RAG", + "questionPrompt": "Питання-запит", + "segmented": { + "custom": "Власні запити", + "copilot": "Запити Copilot" + }, + "columns": { + "title": "Назва", + "prompt": "Запит", + "type": "Тип запиту", + "actions": "Дії" + }, + "systemPrompt": "Системний запит", + "quickPrompt": "Швидкий запит", + "tooltip": { + "delete": "Видалити запит", + "edit": "Редагувати запит" + }, + "confirm": { + "delete": "Ви впевнені, що хочете видалити цей запит? Його не вдасться відновити." + }, + "modal": { + "addTitle": "Додати новий запит", + "editTitle": "Редагувати запит" + }, + "form": { + "title": { + "label": "Назва", + "placeholder": "Мій чудовий запит", + "required": "Будь ласка, введіть назву" + }, + "prompt": { + "label": "Запит", + "placeholder": "Введіть запит", + "required": "Будь ласка, введіть запит", + "help": "Ви можете використовувати {key} як змінну у вашому запиті.", + "missingTextPlaceholder": "Змінна {text} відсутня в запиті. Додайте її, будь ласка." + }, + "isSystem": { + "label": "Це системний запит" + }, + "btnSave": { + "saving": "Додавання запиту...", + "save": "Додати запит" + }, + "btnEdit": { + "saving": "Оновлення запиту...", + "save": "Оновити запит" + } + }, + "notification": { + "addSuccess": "Запит додано", + "addSuccessDesc": "Запит успішно додано", + "error": "Збій", + "someError": "Щось пішло не так. Спробуйте знову пізніше", + "updatedSuccess": "Запит оновлено", + "updatedSuccessDesc": "Запит успішно оновлено", + "deletedSuccess": "Запит видалено", + "deletedSuccessDesc": "Запит успішно видалено" + } + }, + "manageShare": { + "title": "Управління спільним доступом", + "heading": "Налаштування URL спільного доступу до сторінки", + "form": { + "url": { + "label": "URL спільного доступу до сторінки", + "placeholder": "Введіть URL спільного доступу до сторінки", + "required": "Будь ласка, введіть ваш URL спільного доступу!", + "help": "З міркувань конфіденційності, ви можете самостійно обробляти спільний доступ до сторінки через цей URL. Дізнатися більше." + } + }, + "webshare": { + "heading": "Спільний доступ через веб", + "columns": { + "title": "Назва", + "url": "URL", + "actions": "Дії" + }, + "tooltip": { + "delete": "Видалити спільний доступ" + }, + "confirm": { + "delete": "Ви впевнені, що хочете видалити цей спільний доступ? Його не вдасться відновити." + }, + "label": "Управління спільним доступом до сторінки", + "description": "Включіть або вимкніть функцію спільного доступу до сторінки" + }, + "notification": { + "pageShareSuccess": "URL спільного доступу до сторінки оновлено успішно", + "someError": "Щось пішло не так. Будь ласка, спробуйте пізніше", + "webShareDeleteSuccess": "Спільний доступ видалено успішно" + } + }, + "ollamaSettings": { + "title": "Налаштування Ollama", + "heading": "Налаштуйте Ollama", + "settings": { + "ollamaUrl": { + "label": "URL до Ollama", + "placeholder": "Введіть URL до Ollama" + }, + "advanced": { + "label": "Розширене налаштування URL Ollama", + "urlRewriteEnabled": { + "label": "Увімкнути або вимкнути налаштування власного URL походження запиту" + }, + "rewriteUrl": { + "label": "Власний URL походження запиту", + "placeholder": "Введіть власний URL походження" + }, + "headers": { + "label": "Власні заголовки", + "add": "Додати заголовок", + "key": { + "label": "Ключ заголовка", + "placeholder": "Authorization" + }, + "value": { + "label": "Значення заголовка", + "placeholder": "Bearer token" + } + }, + "help": "Якщо у вас виникають проблеми з підключенням до Ollama на Page Assist, ви можете налаштувати власний URL походження запиту. Щоб дізнатися більше про це налаштування, натисніть тут." + } + } + }, + "manageSearch": { + "title": "Управління пошуком в Інтернеті", + "heading": "Налаштуйте пошук в Інтернеті" + }, + "about": { + "title": "Про додаток", + "heading": "Інформація про цей додаток", + "chromeVersion": "Версія Page Assist", + "ollamaVersion": "Версія Ollama", + "support": "Ви можете підтримати проект Page Assist, зробивши пожертву або ставши спонсором через наступні платформи:", + "koFi": "Підтримка на Ko-fi", + "githubSponsor": "Стати спонсором на GitHub", + "githubRepo": "Репозиторій GitHub" + }, + "manageKnowledge": { + "title": "Управління знаннями", + "heading": "Налаштування бази знань" + }, + "rag": { + "title": "Налаштування RAG", + "ragSettings": { + "label": "Налаштування RAG", + "model": { + "label": "Модель вбудованих даних", + "required": "Будь ласка, виберіть модель", + "help": "Рекомендується використовувати моделі вбудованих даних, такі як `nomic-embed-text`.", + "placeholder": "Вибрати модель" + }, + "chunkSize": { + "label": "Розмір шматка", + "placeholder": "Ввести розмір шматка", + "required": "Будь ласка, введіть розмір шматка" + }, + "chunkOverlap": { + "label": "Перекриття шматків", + "placeholder": "Ввести перекриття шматків", + "required": "Будь ласка, введіть перекриття шматків" + }, + "totalFilePerKB": { + "label": "Типовий ліміт кількості завантажень файлів до бази знань", + "placeholder": "Введіть типовий ліміт (напр. 10)", + "required": "Будь ласка, введіть типовий ліміт кількості файлів для завантаження" + }, + "noOfRetrievedDocs": { + "label": "Кількість отриманих документів", + "placeholder": "Ввести кількість отриманих документів", + "required": "Будь ласка, введіть кількість документів" + } + }, + "prompt": { + "label": "Налаштування запиту з RAG", + "option1": "Нормальний", + "option2": "З Веб-пошуком", + "alert": "Налаштування системного запиту тут застаріло. Використовуйте розділ «Управління запитами», щоб додавати або редагувати запити. Цей розділ буде видалено в майбутньому оновленні", + "systemPrompt": "Системний запит", + "systemPromptPlaceholder": "Ввести системний запит", + "webSearchPrompt": "Запит веб-пошуку", + "webSearchPromptHelp": "Не видаляйте `{search_results}` із запиту.", + "webSearchPromptError": "Будь ласка, введіть запит для веб-пошуку", + "webSearchPromptPlaceholder": "Ввести запит для веб-пошуку", + "webSearchFollowUpPrompt": "Запит для подальшого пошуку в мережі", + "webSearchFollowUpPromptHelp": "Не видаляйте `{chat_history}` і `{question}` із запиту.", + "webSearchFollowUpPromptError": "Будь ласка, введіть запит для подальшого пошуку в мережі!", + "webSearchFollowUpPromptPlaceholder": "Ваш запит для подальшого пошуку в мережі" + } + }, + "chromeAiSettings": { + "title": "Налаштування Chrome AI" + } +} diff --git a/src/assets/locale/uk/sidepanel.json b/src/assets/locale/uk/sidepanel.json new file mode 100644 index 0000000..ad8250a --- /dev/null +++ b/src/assets/locale/uk/sidepanel.json @@ -0,0 +1,7 @@ +{ + "tooltip": { + "embed": "Може знадобитися кілька хвилин для вкладення сторінки у базу. Будь ласка, зачекайте...", + "clear": "Стерти історію чату", + "history": "Історія чату" + } +} diff --git a/src/assets/locale/zh/playground.json b/src/assets/locale/zh/playground.json index 8f7da46..2b99e39 100644 --- a/src/assets/locale/zh/playground.json +++ b/src/assets/locale/zh/playground.json @@ -25,5 +25,6 @@ "stopStreaming": "停止流媒体", "knowledge": "知识" }, - "sendWhenEnter": "按Enter发送" + "sendWhenEnter": "按Enter发送", + "welcome": "你好!今天我能帮你什么?" } \ No newline at end of file diff --git a/src/assets/locale/zh/settings.json b/src/assets/locale/zh/settings.json index 4c86040..2f834e9 100644 --- a/src/assets/locale/zh/settings.json +++ b/src/assets/locale/zh/settings.json @@ -35,6 +35,9 @@ }, "generateTitle": { "label": "使用人工智能生成标题" + }, + "ollamaStatus": { + "label": "启用或禁用Ollama连接状态检查" } }, "sidepanelRag": { diff --git a/src/components/Common/Playground/MessageSource.tsx b/src/components/Common/Playground/MessageSource.tsx index d0a006a..b0d3ad9 100644 --- a/src/components/Common/Playground/MessageSource.tsx +++ b/src/components/Common/Playground/MessageSource.tsx @@ -13,7 +13,7 @@ type Props = { } export const MessageSource: React.FC = ({ source, onSourceClick }) => { - if (source?.mode === "rag") { + if (source?.mode === "rag" || source?.mode === "chat") { return ( - + {"/"}
- setSearchTerm(e.target.value)} + placeholder="Search..." + className={`${defaultSearchClass} ${searchClassName}`} + disabled={isLoading} + aria-label="Search options" + /> +
+ + +
+ {isLoading ? ( +
+ + {loadingText} +
+ ) : filteredOptions.length === 0 ? ( +
+ +
+ ) : ( + filteredOptions.map((option, index) => ( +
{ + onChange(option) + setIsOpen(false) + setSearchTerm("") + }} + className={` + ${defaultOptionClass} + ${value === option.value ? "bg-blue-50 dark:bg-[#262627]" : "hover:bg-gray-100 dark:hover:bg-[#272728]"} + ${activeIndex === index ? "bg-gray-100 dark:bg-[#272728]" : ""} + ${optionClassName}`}> + {option.label} +
+ )) + )} +
+ + )} + + ) +} diff --git a/src/components/Sidepanel/Chat/empty.tsx b/src/components/Sidepanel/Chat/empty.tsx index f94304b..cf38d1a 100644 --- a/src/components/Sidepanel/Chat/empty.tsx +++ b/src/components/Sidepanel/Chat/empty.tsx @@ -1,4 +1,5 @@ import { cleanUrl } from "@/libs/clean-url" +import { useStorage } from "@plasmohq/storage/hook" import { useQuery, useQueryClient } from "@tanstack/react-query" import { Select } from "antd" import { RotateCcw } from "lucide-react" @@ -17,13 +18,15 @@ export const EmptySidePanel = () => { const [ollamaURL, setOllamaURL] = useState("") const { t } = useTranslation(["playground", "common"]) const queryClient = useQueryClient() + const [checkOllamaStatus] = useStorage("checkOllamaStatus", true) + const { data: ollamaInfo, status: ollamaStatus, refetch, isRefetching } = useQuery({ - queryKey: ["ollamaStatus"], + queryKey: ["ollamaStatus", checkOllamaStatus], queryFn: async () => { const ollamaURL = await getOllamaURL() const isOk = await isOllamaRunning() @@ -32,7 +35,7 @@ export const EmptySidePanel = () => { queryKey: ["getAllModelsForSelect"] }) return { - isOk, + isOk: checkOllamaStatus ? isOk : true, models, ollamaURL } @@ -59,7 +62,7 @@ export const EmptySidePanel = () => {

)} - {!isRefetching && ollamaStatus === "success" ? ( + {!isRefetching && ollamaStatus === "success" && checkOllamaStatus ? ( ollamaInfo.isOk ? (
diff --git a/src/components/Sidepanel/Chat/form.tsx b/src/components/Sidepanel/Chat/form.tsx index 618431d..a402680 100644 --- a/src/components/Sidepanel/Chat/form.tsx +++ b/src/components/Sidepanel/Chat/form.tsx @@ -7,7 +7,14 @@ import { toBase64 } from "~/libs/to-base64" import { Checkbox, Dropdown, Image, Switch, Tooltip } from "antd" import { useWebUI } from "~/store/webui" import { defaultEmbeddingModelForRag } from "~/services/ollama" -import { ImageIcon, MicIcon, StopCircleIcon, X } from "lucide-react" +import { + ImageIcon, + MicIcon, + StopCircleIcon, + X, + EyeIcon, + EyeOffIcon +} from "lucide-react" import { useTranslation } from "react-i18next" import { ModelSelect } from "@/components/Common/ModelSelect" import { useSpeechRecognition } from "@/hooks/useSpeechRecognition" @@ -36,7 +43,7 @@ export const SidepanelForm = ({ dropedFile }: Props) => { resetTranscript, start: startListening, stop: stopSpeechRecognition, - supported: browserSupportsSpeechRecognition, + supported: browserSupportsSpeechRecognition } = useSpeechRecognition() const stopListening = async () => { @@ -237,7 +244,10 @@ export const SidepanelForm = ({ dropedFile }: Props) => { } } await stopListening() - if (value.message.trim().length === 0 && value.image.length === 0) { + if ( + value.message.trim().length === 0 && + value.image.length === 0 + ) { return } form.reset() @@ -281,20 +291,22 @@ export const SidepanelForm = ({ dropedFile }: Props) => { {...form.getInputProps("message")} />
- - - + {chatMode !== "vision" && ( + + + + )} {browserSupportsSpeechRecognition && ( @@ -323,13 +335,35 @@ export const SidepanelForm = ({ dropedFile }: Props) => { )} + + +