From 9e4921583651de385247f2db55425d3b72fa24c3 Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Sun, 27 Oct 2024 00:53:21 +0530 Subject: [PATCH 01/10] Bump version to 1.3.2 Minor version bump to reflect the latest updates. --- wxt.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wxt.config.ts b/wxt.config.ts index 5d06de7..c5963ab 100644 --- a/wxt.config.ts +++ b/wxt.config.ts @@ -50,7 +50,7 @@ export default defineConfig({ outDir: "build", manifest: { - version: "1.3.1", + version: "1.3.2", name: process.env.TARGET === "firefox" ? "Page Assist - A Web UI for Local AI Models" From 1564750852918bac2e6b775f3f8defaca0d68bd9 Mon Sep 17 00:00:00 2001 From: Pierre Mesure Date: Fri, 1 Nov 2024 17:45:08 +0100 Subject: [PATCH 02/10] Add Swedish translation --- src/assets/locale/sv/chrome.json | 13 + src/assets/locale/sv/common.json | 120 ++++++++++ src/assets/locale/sv/knowledge.json | 40 ++++ src/assets/locale/sv/openai.json | 90 +++++++ src/assets/locale/sv/option.json | 12 + src/assets/locale/sv/playground.json | 29 +++ src/assets/locale/sv/settings.json | 341 +++++++++++++++++++++++++++ src/assets/locale/sv/sidepanel.json | 7 + src/i18n/lang/sv.ts | 19 ++ src/public/_locales/sv/messages.json | 29 +++ 10 files changed, 700 insertions(+) create mode 100644 src/assets/locale/sv/chrome.json create mode 100644 src/assets/locale/sv/common.json create mode 100644 src/assets/locale/sv/knowledge.json create mode 100644 src/assets/locale/sv/openai.json create mode 100644 src/assets/locale/sv/option.json create mode 100644 src/assets/locale/sv/playground.json create mode 100644 src/assets/locale/sv/settings.json create mode 100644 src/assets/locale/sv/sidepanel.json create mode 100644 src/i18n/lang/sv.ts create mode 100644 src/public/_locales/sv/messages.json diff --git a/src/assets/locale/sv/chrome.json b/src/assets/locale/sv/chrome.json new file mode 100644 index 0000000..bb01650 --- /dev/null +++ b/src/assets/locale/sv/chrome.json @@ -0,0 +1,13 @@ +{ + "heading": "Konfigurera Chrome AI", + "status": { + "label": "Aktivera eller inaktivera Chrome AI-stöd på Page Assist" + }, + "error": { + "browser_not_supported": "Denna version av Chrome stöds inte av Gemini Nano-modellen. Uppdatera till version 127 eller senare", + "ai_not_supported": "Inställningen chrome://flags/#prompt-api-for-gemini-nano är inte aktiverad. Var vänlig och aktivera den.", + "ai_not_ready": "Gemini Nano är inte redo än; du måste dubbelkolla Chrome-inställningarna.", + "internal_error": "Ett internt fel uppstod. Försök igen senare." + }, + "errorDescription": "För att använda Chrome AI, behöver du en webbläsarversion högre än 127, som för närvarande finns i Dev- och Canary-kanalerna. Efter att ha laddat ner den stödda versionen, följ dessa steg:\n\n1. Gå till `chrome://flags/#prompt-api-for-gemini-nano` och välj \"Enable\".\n2. Gå till `chrome://flags/#optimization-guide-on-device-model` och välj \"EnabledBypassPrefRequirement\".\n3. Gå till `chrome://components`, sök efter \"Optimization Guide On Device Model\" och klicka på \"Check for Update\". Detta kommer att ladda ner modellen. Om du inte ser inställningarna, upprepa steg 1 och 2 och starta om webbläsaren." +} diff --git a/src/assets/locale/sv/common.json b/src/assets/locale/sv/common.json new file mode 100644 index 0000000..3127267 --- /dev/null +++ b/src/assets/locale/sv/common.json @@ -0,0 +1,120 @@ +{ + "pageAssist": "Page Assist", + "selectAModel": "Välj en modell", + "save": "Spara", + "saved": "Sparad", + "cancel": "Avbryt", + "retry": "Försök igen", + "share": { + "tooltip": { + "share": "Dela" + }, + "modal": { + "title": "Dela länk till chatt" + }, + "form": { + "defaultValue": { + "name": "Anonym", + "title": "Chatt utan titel" + }, + "title": { + "label": "Chattitel", + "placeholder": "Ange chattitel", + "required": "Chattitel krävs" + }, + "name": { + "label": "Ditt namn", + "placeholder": "Ange ditt namn", + "required": "Ditt namn krävs" + }, + "btn": { + "save": "Generera länk", + "saving": "Genererar länk..." + } + }, + "notification": { + "successGenerate": "Länk kopierad till urklipp", + "failGenerate": "Misslyckades med att generera länk" + } + }, + "copyToClipboard": "Kopiera till urklipp", + "webSearch": "Söker på webben", + "regenerate": "Återskapa", + "edit": "Redigera", + "delete": "Radera", + "saveAndSubmit": "Spara & Skicka", + "editMessage": { + "placeholder": "Skriv ett meddelande..." + }, + "submit": "Skicka", + "noData": "Inga data", + "noHistory": "Ingen chattlogg", + "chatWithCurrentPage": "Chatta med nuvarande sidan", + "beta": "Beta", + "tts": "Läs högt", + "currentChatModelSettings": "Nuvarande chattmodellinställningar", + "modelSettings": { + "label": "Modellinställningar", + "description": "Ställ in modellalternativen globalt för alla chatter", + "form": { + "keepAlive": { + "label": "Keep Alive", + "help": "kontrollerar hur länge modellen kommer att vara laddad i minnet efter förfrågan (standard: 5 min)", + "placeholder": "Ange Keep Alive varaktighet (t.ex. 5m, 10m, 1h)" + }, + "temperature": { + "label": "Temperatur", + "placeholder": "Ange temperaturvärde (t.ex. 0.7, 1.0)" + }, + "numCtx": { + "label": "Antal kontexter", + "placeholder": "Ange antal kontextvärden (standard: 2048)" + }, + "seed": { + "label": "Frö", + "placeholder": "Ange frövärde (t.ex. 1234)", + "help": "Reproducerbarhet av modellens utskrift" + }, + "topK": { + "label": "Topp K", + "placeholder": "Ange Topp K värde (t.ex. 40, 100)" + }, + "topP": { + "label": "Topp P", + "placeholder": "Ange Topp P värde (t.ex. 0.9, 0.95)" + }, + "numGpu": { + "label": "Antal GPU", + "placeholder": "Ange antal lager att skicka till GPU(s)" + }, + "systemPrompt": { + "label": "Tillfällig systempromt", + "placeholder": "Ange systemprompt", + "help": "Detta är ett snabbt sätt att ställa in systemprompten i den nuvarande chatten, vilket kommer att åsidosätta den valda systemprompten om den finns." + } + }, + "advanced": "Fler modellinställningar" + }, + "copilot": { + "summary": "Sammanfatta", + "explain": "Förklara", + "rephrase": "Formulera om", + "translate": "Översätt", + "custom": "Custom" + }, + "citations": "Citat", + "segmented": { + "ollama": "Ollama-modeller", + "custom": "Custom modeller" + }, + "downloadCode": "Ladda ner kod", + "date": { + "pinned": "Fäst", + "today": "Idag", + "yesterday": "Igår", + "last7Days": "Senaste 7 dagarna", + "older": "Äldre" + }, + "pin": "Fäst", + "unpin": "Ta bort fäst" +} diff --git a/src/assets/locale/sv/knowledge.json b/src/assets/locale/sv/knowledge.json new file mode 100644 index 0000000..a01b1a2 --- /dev/null +++ b/src/assets/locale/sv/knowledge.json @@ -0,0 +1,40 @@ +{ + "addBtn": "Lägg till ny kunskap", + "columns": { + "title": "Titel", + "status": "Status", + "embeddings": "Inbäddningsmodell", + "createdAt": "Skapad den", + "action": "Åtgärder" + }, + "expandedColumns": { + "name": "Namn" + }, + "confirm": { + "delete": "Är du säker på att du vill ta bort denna kunskap?" + }, + "deleteSuccess": "Kunskap raderades framgångsrikt", + "status": { + "pending": "Väntar", + "finished": "Klar", + "processing": "Bearbetar", + "failed": "Misslyckades" + }, + "addKnowledge": "Lägg till kunskap", + "form": { + "title": { + "label": "Kunskapstitel", + "placeholder": "Ange kunskapstitel", + "required": "Kunskapstitel är obligatorisk" + }, + "uploadFile": { + "label": "Ladda upp fil", + "uploadText": "Dra och släpp en fil här eller klicka för att ladda upp", + "uploadHint": "Stödda filtyper: .pdf, .csv, .txt, .md, .docx", + "required": "Fil är obligatorisk" + }, + "submit": "Skicka in", + "success": "Kunskap tillagd framgångsrikt" + }, + "noEmbeddingModel": "Vänligen lägg till en inbäddningsmodell från sidan för RAG-inställningar först" +} diff --git a/src/assets/locale/sv/openai.json b/src/assets/locale/sv/openai.json new file mode 100644 index 0000000..55bdbc7 --- /dev/null +++ b/src/assets/locale/sv/openai.json @@ -0,0 +1,90 @@ +{ + "settings": "OpenAI-kompatibel API", + "heading": "OpenAI-kompatibel API", + "subheading": "Hantera och konfigurera dina OpenAI API-kompatibla leverantörer här.", + "addBtn": "Lägg till leverantör", + "table": { + "name": "Leverantörsnamn", + "baseUrl": "Bas-URL", + "actions": "Åtgärd" + }, + "modal": { + "titleAdd": "Lägg till ny leverantör", + "name": { + "label": "Leverantörsnamn", + "required": "Leverantörsnamn krävs.", + "placeholder": "Ange leverantörsnamn" + }, + "baseUrl": { + "label": "Bas-URL", + "help": "Bas-URL för OpenAI API-leverantören. t.ex. (http://localhost:1234/v1)", + "required": "Bas-URL krävs.", + "placeholder": "Ange bas-URL" + }, + "apiKey": { + "label": "API-nyckel", + "required": "API-nyckel krävs.", + "placeholder": "Ange API-nyckel" + }, + "submit": "Spara", + "update": "Uppdatera", + "deleteConfirm": "Är du säker på att du vill radera denna leverantör?", + "model": { + "title": "Modellista", + "subheading": "Vänligen välj chattmodellerna du vill använda med denna leverantör.", + "success": "Nya modeller har lagts till framgångsrikt." + }, + "tipLMStudio": "Page Assist hämtar automatiskt modellerna du laddat i LM Studio. Ingen manuell tilläggning behövs." + }, + "addSuccess": "Leverantör tillagd framgångsrikt.", + "deleteSuccess": "Leverantör raderad framgångsrikt.", + "updateSuccess": "Leverantör uppdaterad framgångsrikt.", + "delete": "Radera", + "edit": "Redigera", + "newModel": "Lägg till modeller till leverantör", + "noNewModel": "För LMStudio hämtar vi dynamiskt. Ingen manuell tilläggning behövs.", + "searchModel": "Sök modell", + "selectAll": "Välj alla", + "save": "Spara", + "saving": "Sparar...", + "manageModels": { + "columns": { + "name": "Modellnamn", + "model_type": "Modelltyp", + "model_id": "Modell-ID", + "provider": "Leverantörsnamn", + "actions": "Åtgärd" + }, + "tooltip": { + "delete": "Radera" + }, + "confirm": { + "delete": "Är du säker på att du vill radera denna modell?" + }, + "modal": { + "title": "Lägg till Custom-modell", + "form": { + "name": { + "label": "Modell-ID", + "placeholder": "llama3.2", + "required": "Modell-ID krävs." + }, + "provider": { + "label": "Leverantör", + "placeholder": "Välj leverantör", + "required": "Leverantör krävs." + }, + "type": { + "label": "Modelltyp" + } + } + } + }, + "noModelFound": "Ingen modell hittades. Se till att du har lagt till korrekt leverantör med bas-URL och API-nyckel.", + "radio": { + "chat": "Chattmodell", + "embedding": "Inbäddningsmodell", + "chatInfo": "används för chattkompletion och konversationsgenerering", + "embeddingInfo": "används för RAG och andra semantiska sökrelaterade uppgifter." + } +} diff --git a/src/assets/locale/sv/option.json b/src/assets/locale/sv/option.json new file mode 100644 index 0000000..d7017ee --- /dev/null +++ b/src/assets/locale/sv/option.json @@ -0,0 +1,12 @@ +{ + "newChat": "Ny chatt", + "selectAPrompt": "Välj en fråga", + "githubRepository": "GitHu repository", + "settings": "Inställningar", + "sidebarTitle": "Chatthistorik", + "error": "Fel", + "somethingWentWrong": "Något gick fel", + "validationSelectModel": "Vänligen välj en modell för att fortsätta", + "deleteHistoryConfirmation": "Är du säker på att du vill radera denna historik?", + "editHistoryTitle": "Ange en ny titel" +} diff --git a/src/assets/locale/sv/playground.json b/src/assets/locale/sv/playground.json new file mode 100644 index 0000000..d7195c5 --- /dev/null +++ b/src/assets/locale/sv/playground.json @@ -0,0 +1,29 @@ +{ + "ollamaState": { + "searching": "Söker efter din Ollama 🦙", + "running": "Ollama körs 🦙", + "notRunning": "Kan inte ansluta till Ollama 🦙", + "connectionError": "Det verkar som att du har ett anslutningsfel. Vänligen se denna dokumentation för felsökning." + }, + "formError": { + "noModel": "Vänligen välj en modell", + "noEmbeddingModel": "Vänligen ställ in en inbäddningsmodell på sidan Inställningar > RAG" + }, + "form": { + "textarea": { + "placeholder": "Skriv ett meddelande..." + }, + "webSearch": { + "on": "På", + "off": "Av" + } + }, + "tooltip": { + "searchInternet": "Sök på Internet", + "speechToText": "Tal till text", + "uploadImage": "Ladda upp bild", + "stopStreaming": "Stoppa strömning", + "knowledge": "Kunskap" + }, + "sendWhenEnter": "Skicka när Enter trycks" +} diff --git a/src/assets/locale/sv/settings.json b/src/assets/locale/sv/settings.json new file mode 100644 index 0000000..cb28f1e --- /dev/null +++ b/src/assets/locale/sv/settings.json @@ -0,0 +1,341 @@ +{ + "generalSettings": { + "title": "Allmänna Inställningar", + "settings": { + "heading": "Webbgränssnitt Inställningar", + "speechRecognitionLang": { + "label": "Taligenkänningsspråk", + "placeholder": "Välj ett språk" + }, + "language": { + "label": "Språk", + "placeholder": "Välj ett språk" + }, + "darkMode": { + "label": "Byt Tema", + "options": { + "light": "Ljust", + "dark": "Mörkt" + } + }, + "copilotResumeLastChat": { + "label": "Återuppta den senaste chatten när du öppnar sidopanelen (Copilot)" + }, + "hideCurrentChatModelSettings": { + "label": "Göm de nuvarande chattmodellinställningarna" + }, + "restoreLastChatModel": { + "label": "Återställ den senast använda modellen för tidigare chatter" + }, + "sendNotificationAfterIndexing": { + "label": "Skicka meddelande efter att ha avslutat bearbetning av kunskapsbasen" + }, + "generateTitle": { + "label": "Generera titel med AI" + } + }, + "sidepanelRag": { + "heading": "Copilot Chatt med Webbplats Inställningar", + "ragEnabled": { + "label": "Chatta med webbplatsen med vektorinbäddningar" + }, + "maxWebsiteContext": { + "label": "Vanligt läge webbplatsinnehållsstorlek", + "placeholder": "Innehållsstorlek (standard 4028)" + } + }, + "webSearch": { + "heading": "Hantera Webb Sök", + "searchMode": { + "label": "Utför Enkel InternetSökning" + }, + "provider": { + "label": "Sökmotor", + "placeholder": "Välj en sökmotor" + }, + "totalSearchResults": { + "label": "Totalt Sökresultat", + "placeholder": "Ange Totalt Sökresultat" + }, + "visitSpecificWebsite": { + "label": "Besök webbplatsen som nämns i meddelandet" + } + }, + "system": { + "heading": "Systeminställningar", + "deleteChatHistory": { + "label": "Radera Chatt Historik", + "button": "Radera", + "confirm": "Är du säker på att du vill radera din chatthistorik? Denna åtgärd kan inte ångras." + }, + "export": { + "label": "Exportera chatthistorik, kunskapsbas och instruktioner", + "button": "Exportera Data", + "success": "Exportering Lyckades" + }, + "import": { + "label": "Importera chatthistorik, kunskapsbas och instruktioner", + "button": "Importera Data", + "success": "Importering Lyckades", + "error": "Importeringsfel" + } + }, + "tts": { + "heading": "Text till Tal Inställningar", + "ttsEnabled": { + "label": "Aktivera Text till Tal" + }, + "ttsProvider": { + "label": "Text till Tal Leverantör", + "placeholder": "Välj en leverantör" + }, + "ttsVoice": { + "label": "Text till Tal Röst", + "placeholder": "Välj en röst" + }, + "ssmlEnabled": { + "label": "Aktivera SSML (Speech Synthesis Markup Language)" + } + } + }, + "manageModels": { + "title": "Hantera Modeller", + "addBtn": "Lägg till Ny Modell", + "columns": { + "name": "Namn", + "digest": "Sammanfattning", + "modifiedAt": "Modifierad Den", + "size": "Storlek", + "actions": "Åtgärder" + }, + "expandedColumns": { + "parentModel": "Föräldramodell", + "format": "Format", + "family": "Familj", + "parameterSize": "Parameterstorlek", + "quantizationLevel": "Kvantifieringsnivå" + }, + "tooltip": { + "delete": "Radera Modell", + "repull": "Hämta Modell Igen" + }, + "confirm": { + "delete": "Är du säker på att du vill radera denna modell?", + "repull": "Är du säker på att du vill hämta modellen igen?" + }, + "modal": { + "title": "Lägg till Ny Modell", + "placeholder": "Ange Modellnamn", + "pull": "Hämta Modell" + }, + "notification": { + "pullModel": "Hämtar Modell", + "pullModelDescription": "Hämtar {{modelName}} modell. För mer information, kontrollera ikonen för tillägget.", + "success": "Lyckades", + "error": "Fel", + "successDescription": "Modellen hämtades framgångsrikt", + "successDeleteDescription": "Modellen raderades framgångsrikt", + "someError": "Något gick fel. Försök igen senare" + } + }, + "managePrompts": { + "title": "Hantera instruktioner", + "addBtn": "Lägg till ny instruktion", + "option1": "Normal", + "option2": "RAG", + "questionPrompt": "Frågeinstruktion", + "segmented": { + "custom": "Custom instruktion", + "copilot": "Copilot instruktion" + }, + "columns": { + "title": "Titel", + "prompt": "instruktion", + "type": "Instruktionstyp", + "actions": "Åtgärder" + }, + "systemPrompt": "Systeminstruktion", + "quickPrompt": "Snabb instruktion", + "tooltip": { + "delete": "Radera instruktion", + "edit": "Redigera instruktion" + }, + "confirm": { + "delete": "Är du säker på att du vill radera denna instruktion? Denna åtgärd kan inte ångras." + }, + "modal": { + "addTitle": "Lägg till ny instruktion", + "editTitle": "Redigera instruktion" + }, + "form": { + "title": { + "label": "Titel", + "placeholder": "Min fantastiska instruktion", + "required": "Vänligen ange en titel" + }, + "prompt": { + "label": "Instruktion", + "placeholder": "Ange instruktion", + "required": "Vänligen ange en instruktion", + "help": "Du kan använda {key} som variabel i din instruktion.", + "missingTextPlaceholder": "Variabeln {text} saknas i instruktionen. Lägg till den." + }, + "isSystem": { + "label": "Är Systeminstruktion" + }, + "btnSave": { + "saving": "Lägger till instruktion...", + "save": "Lägg till instruktion" + }, + "btnEdit": { + "saving": "Uppdaterar instruktion...", + "save": "Uppdatera instruktion" + } + }, + "notification": { + "addSuccess": "Instruktion Tillagd", + "addSuccessDesc": "Instruktionen har lagts till framgångsrikt", + "error": "Fel", + "someError": "Något gick fel. Försök igen senare", + "updatedSuccess": "Instruktion Uppdaterad", + "updatedSuccessDesc": "Instruktionen har uppdaterats framgångsrikt", + "deletedSuccess": "Instruktion Raderad", + "deletedSuccessDesc": "Instruktionen har raderats framgångsrikt" + } + }, + "manageShare": { + "title": "Hantera Delningar", + "heading": "Konfigurera Sidans Delnings-URL", + "form": { + "url": { + "label": "Sidans Delnings-URL", + "placeholder": "Ange Sidans Delnings-URL", + "required": "Vänligen ange din Sidans Delnings-URL!", + "help": "För integritetsskäl, kan du använda egen värd för sidans delning och ange URL här. Läs Mer." + } + }, + "webshare": { + "heading": "Webbdelning", + "columns": { + "title": "Titel", + "url": "URL", + "actions": "Åtgärder" + }, + "tooltip": { + "delete": "Radera Delning" + }, + "confirm": { + "delete": "Är du säker på att du vill radera denna delning? Denna åtgärd kan inte ångras." + }, + "label": "Hantera Sidans Delning", + "description": "Aktivera eller inaktivera funktionen för sidans delning" + }, + "notification": { + "pageShareSuccess": "Sidans Delnings-URL uppdaterad framgångsrikt", + "someError": "Något gick fel. Försök igen senare", + "webShareDeleteSuccess": "Webbdelning raderades framgångsrikt" + } + }, + "ollamaSettings": { + "title": "Ollamainställningar", + "heading": "Konfigurera Ollama", + "settings": { + "ollamaUrl": { + "label": "Ollama URL", + "placeholder": "Ange Ollama URL" + }, + "advanced": { + "label": "Avancerad Ollama URL-konfiguration", + "urlRewriteEnabled": { + "label": "Aktivera eller inaktivera custom ursprungs-URL" + }, + "rewriteUrl": { + "label": "Custom ursprungs-URL", + "placeholder": "Ange Custom ursprungs-URL" + }, + "headers": { + "label": "Custom Headers", + "add": "Lägg till Header", + "key": { + "label": "Headernyckel", + "placeholder": "Auktorisering" + }, + "value": { + "label": "Headervärde", + "placeholder": "Bärare token" + } + }, + "help": "Om du har anslutningsproblem med Ollama på Page Assist, kan du konfigurera en custom ursprungs-URL. För att veta mer om konfigurationen, klicka här." + } + } + }, + "manageSearch": { + "title": "Hantera Webbsök", + "heading": "Konfigurera Webbsök" + }, + "about": { + "title": "Om", + "heading": "Om", + "chromeVersion": "Page Assist Version", + "ollamaVersion": "Ollamaversion", + "support": "Du kan stödja Page Assist-projektet genom att donera eller sponsra genom följande plattformar:", + "koFi": "Stöd på Ko-fi", + "githubSponsor": "Sponsra på GitHub", + "githubRepo": "GitHub repository" + }, + "manageKnowledge": { + "title": "Hantera kunskap", + "heading": "Konfigurera kunskapsbas" + }, + "rag": { + "title": "RAG-inställningar", + "ragSettings": { + "label": "RAG-inställningar", + "model": { + "label": "Inbäddningsmodell", + "required": "Vänligen välj en modell", + "help": "Det rekommenderas starkt att använda inbäddningsmodeller som 'nomic-embed-text'.", + "placeholder": "Välj en modell" + }, + "chunkSize": { + "label": "Chunkstorlek", + "placeholder": "Ange chunkstorlek", + "required": "Vänligen ange en chunkstorlek" + }, + "chunkOverlap": { + "label": "Chunköverlapp", + "placeholder": "Ange chunköverlapp", + "required": "Vänligen ange en chunköverlapp" + }, + "totalFilePerKB": { + "label": "Standardgräns för kunskapsbas filuppladdning", + "placeholder": "Ange standardgräns för filuppladdning (t.ex. 10)", + "required": "Vänligen ange standardgräns för filuppladdning" + }, + "noOfRetrievedDocs": { + "label": "Antal hämtade dokument", + "placeholder": "Ange antal hämtade dokument", + "required": "Vänligen ange antal hämtade dokument" + } + }, + "prompt": { + "label": "Konfigurera RAG-instruktion", + "option1": "Normal", + "option2": "Webb", + "alert": "Att konfigurera systeminstruktionen här är föråldrat. Använd Hantera instruktioner-sektionen för att lägga till eller redigera instruktionar. Denna sektion kommer att tas bort i en framtida version", + "systemPrompt": "Systeminstruktion", + "systemPromptPlaceholder": "Ange systeminstruktion", + "webSearchPrompt": "Webbsökinstruktion", + "webSearchPromptHelp": "Ta inte bort '{search_results}' från instruktionen.", + "webSearchPromptError": "Vänligen ange en instruktion för webbsökning", + "webSearchPromptPlaceholder": "Ange instruktion för webbsök", + "webSearchFollowUpPrompt": "Uppföljningsinstruktion för webbsök", + "webSearchFollowUpPromptHelp": "Ta inte bort '{chat_history}' och '{question}' från instruktionen.", + "webSearchFollowUpPromptError": "Vänligen ange din uppföljningsinstruktion för webbsök!", + "webSearchFollowUpPromptPlaceholder": "Din uppföljningsinstruktion för webbsök" + } + }, + "chromeAiSettings": { + "title": "Chrome AI-inställningar" + } +} diff --git a/src/assets/locale/sv/sidepanel.json b/src/assets/locale/sv/sidepanel.json new file mode 100644 index 0000000..5c8672a --- /dev/null +++ b/src/assets/locale/sv/sidepanel.json @@ -0,0 +1,7 @@ +{ + "tooltip": { + "embed": "Det kan ta några minuter att bädda in sidan. Vänta...", + "clear": "Radera chatthistorik", + "history": "Chatthistorik" + } +} diff --git a/src/i18n/lang/sv.ts b/src/i18n/lang/sv.ts new file mode 100644 index 0000000..39938b8 --- /dev/null +++ b/src/i18n/lang/sv.ts @@ -0,0 +1,19 @@ +import option from "@/assets/locale/sv/option.json"; +import playground from "@/assets/locale/sv/playground.json"; +import common from "@/assets/locale/sv/common.json"; +import sidepanel from "@/assets/locale/sv/sidepanel.json"; +import settings from "@/assets/locale/sv/settings.json"; +import knowledge from "@/assets/locale/sv/knowledge.json"; +import chrome from "@/assets/locale/sv/chrome.json"; +import openai from "@/assets/locale/sv/openai.json"; + +export const sv = { + option, + playground, + common, + sidepanel, + settings, + knowledge, + chrome, + openai +} diff --git a/src/public/_locales/sv/messages.json b/src/public/_locales/sv/messages.json new file mode 100644 index 0000000..414a9a8 --- /dev/null +++ b/src/public/_locales/sv/messages.json @@ -0,0 +1,29 @@ +{ + "extName": { + "message": "Page Assist - Ett webbaserat användargränssnitt för lokala AI-modeller" + }, + "extDescription": { + "message": "Använd dina lokalt körande AI-modeller för att hjälpa dig i din webbsurfning." + }, + "openSidePanelToChat": { + "message": "Öppna Copilot för att chatta" + }, + "openOptionToChat": { + "message": "Öppna Web UI för att chatta" + }, + "contextSummarize": { + "message": "Sammanfatta" + }, + "contextExplain": { + "message": "Förklara" + }, + "contextRephrase": { + "message": "Skriv om" + }, + "contextTranslate": { + "message": "Översätt" + }, + "contextCustom": { + "message": "Custom" + } +} From 8a6dc5154060ac3f2ad9979726fb043bc4b625c1 Mon Sep 17 00:00:00 2001 From: Pierre Mesure Date: Fri, 1 Nov 2024 17:45:30 +0100 Subject: [PATCH 03/10] Minor formatting fixes on other languages --- src/assets/locale/da/settings.json | 12 +++++----- src/assets/locale/de/settings.json | 2 +- src/assets/locale/en/common.json | 2 +- src/assets/locale/en/settings.json | 2 +- src/assets/locale/no/settings.json | 2 +- src/public/_locales/da/messages.json | 4 ++-- src/public/_locales/de/messages.json | 4 ++-- src/public/_locales/en/messages.json | 4 ++-- src/public/_locales/fa/messages.json | 2 +- src/public/_locales/fr/messages.json | 4 ++-- src/public/_locales/it/messages.json | 2 +- src/public/_locales/ja/messages.json | 30 ++++++++++++------------- src/public/_locales/ml/messages.json | 4 ++-- src/public/_locales/no/messages.json | 4 ++-- src/public/_locales/ru/messages.json | 4 ++-- src/public/_locales/zh_CN/messages.json | 4 ++-- 16 files changed, 44 insertions(+), 42 deletions(-) diff --git a/src/assets/locale/da/settings.json b/src/assets/locale/da/settings.json index 372213f..1666d9c 100644 --- a/src/assets/locale/da/settings.json +++ b/src/assets/locale/da/settings.json @@ -30,7 +30,7 @@ "sendNotificationAfterIndexing": { "label": "Send besked efter færdigbehandling af vidensbasen" }, - "generateTitle" :{ + "generateTitle": { "label": "Generer titel med AI" } }, @@ -67,7 +67,6 @@ "label": "Slet Chathistorik", "button": "Slet", "confirm": "Er du sikker på, at du vil slette din chathistorik? Denne handling kan ikke fortrydes." - }, "export": { "label": "Eksporter chathistorik, vidensbase og prompts", @@ -162,7 +161,8 @@ "edit": "Ændre Prompt" }, "confirm": { - "delete": "Er du sikker på, at du vil slette denne prompt? Denne handling kan ikke fortrydes." }, + "delete": "Er du sikker på, at du vil slette denne prompt? Denne handling kan ikke fortrydes." + }, "modal": { "addTitle": "Tilføj ny Prompt", "editTitle": "Ændre Prompt" @@ -211,7 +211,8 @@ "label": "Page Deling URL", "placeholder": "Indtast websted deling URL", "required": "Venligst indstast din Page deling URL!", - "help": "Af hensyn til privatliv kan du selv hoste side delingen og angive URL'en her. Lær Mere." } + "help": "Af hensyn til privatliv kan du selv hoste side delingen og angive URL'en her. Lær Mere." + } }, "webshare": { "heading": "Web Deling", @@ -264,7 +265,8 @@ "placeholder": "Bearer token" } }, - "help": "Hvis du har forbindelsesproblemer med Ollama på Page Assist, kan du konfigurere en brugerdefineret oprindelses-URL. For mere information om konfigurationen, klik her." } + "help": "Hvis du har forbindelsesproblemer med Ollama på Page Assist, kan du konfigurere en brugerdefineret oprindelses-URL. For mere information om konfigurationen, klik her." + } } }, "manageSearch": { diff --git a/src/assets/locale/de/settings.json b/src/assets/locale/de/settings.json index d44390a..30a5da3 100644 --- a/src/assets/locale/de/settings.json +++ b/src/assets/locale/de/settings.json @@ -30,7 +30,7 @@ "sendNotificationAfterIndexing": { "label": "Benachrichtigung nach Abschluss der Wissensbasis-Verarbeitung senden" }, - "generateTitle" :{ + "generateTitle": { "label": "Titel mit KI generieren" } }, diff --git a/src/assets/locale/en/common.json b/src/assets/locale/en/common.json index 0cd96d7..f5b9e39 100644 --- a/src/assets/locale/en/common.json +++ b/src/assets/locale/en/common.json @@ -117,4 +117,4 @@ }, "pin": "Pin", "unpin": "Unpin" -} \ No newline at end of file +} diff --git a/src/assets/locale/en/settings.json b/src/assets/locale/en/settings.json index eb54db8..8f19b6a 100644 --- a/src/assets/locale/en/settings.json +++ b/src/assets/locale/en/settings.json @@ -30,7 +30,7 @@ "sendNotificationAfterIndexing": { "label": "Send Notification After Finishing Processing the Knowledge Base" }, - "generateTitle" :{ + "generateTitle": { "label": "Generate Title using AI" } }, diff --git a/src/assets/locale/no/settings.json b/src/assets/locale/no/settings.json index fb90aa5..a09437f 100644 --- a/src/assets/locale/no/settings.json +++ b/src/assets/locale/no/settings.json @@ -30,7 +30,7 @@ "sendNotificationAfterIndexing": { "label": "Send varsel etter ferdigbehandling av kunnskapsbasen" }, - "generateTitle" :{ + "generateTitle": { "label": "Generer tittel med AI" } }, diff --git a/src/public/_locales/da/messages.json b/src/public/_locales/da/messages.json index b0b239d..378213e 100644 --- a/src/public/_locales/da/messages.json +++ b/src/public/_locales/da/messages.json @@ -20,10 +20,10 @@ "contextRephrase": { "message": "Omskriv" }, - "contextTranslate" :{ + "contextTranslate": { "message": "Oversæt" }, "contextCustom": { "message": "Tilpasset" } -} \ No newline at end of file +} diff --git a/src/public/_locales/de/messages.json b/src/public/_locales/de/messages.json index 3da10c1..8a9a0aa 100644 --- a/src/public/_locales/de/messages.json +++ b/src/public/_locales/de/messages.json @@ -20,10 +20,10 @@ "contextRephrase": { "message": "Umformulieren" }, - "contextTranslate" :{ + "contextTranslate": { "message": "Übersetzen" }, "contextCustom": { "message": "Benutzerdefiniert" } -} \ No newline at end of file +} diff --git a/src/public/_locales/en/messages.json b/src/public/_locales/en/messages.json index cd34708..892f62e 100644 --- a/src/public/_locales/en/messages.json +++ b/src/public/_locales/en/messages.json @@ -20,10 +20,10 @@ "contextRephrase": { "message": "Rephrase" }, - "contextTranslate" :{ + "contextTranslate": { "message": "Translate" }, "contextCustom": { "message": "Custom" } -} \ No newline at end of file +} diff --git a/src/public/_locales/fa/messages.json b/src/public/_locales/fa/messages.json index c193a32..f956800 100644 --- a/src/public/_locales/fa/messages.json +++ b/src/public/_locales/fa/messages.json @@ -20,7 +20,7 @@ "contextRephrase": { "message": "بازنویسی" }, - "contextTranslate" :{ + "contextTranslate": { "message": "ترجمه کردن" }, "contextCustom": { diff --git a/src/public/_locales/fr/messages.json b/src/public/_locales/fr/messages.json index 179752d..656eefc 100644 --- a/src/public/_locales/fr/messages.json +++ b/src/public/_locales/fr/messages.json @@ -17,10 +17,10 @@ "contextRephrase": { "message": "Reformuler" }, - "contextTranslate" :{ + "contextTranslate": { "message": "Traduire" }, "contextCustom": { "message": "Personnalisé" } -} \ No newline at end of file +} diff --git a/src/public/_locales/it/messages.json b/src/public/_locales/it/messages.json index eaee088..e37d5d2 100644 --- a/src/public/_locales/it/messages.json +++ b/src/public/_locales/it/messages.json @@ -17,7 +17,7 @@ "contextRephrase": { "message": "Riformula" }, - "contextTranslate" :{ + "contextTranslate": { "message": "Traduci" }, "contextCustom": { diff --git a/src/public/_locales/ja/messages.json b/src/public/_locales/ja/messages.json index 347ad7b..15fb399 100644 --- a/src/public/_locales/ja/messages.json +++ b/src/public/_locales/ja/messages.json @@ -9,18 +9,18 @@ "message": "チャットするためにCopilotを開く" }, "contextSummarize": { - "message": "要約" - }, - "contextExplain": { - "message": "説明" - }, - "contextRephrase": { - "message": "言い換え" - }, - "contextTranslate" :{ - "message": "翻訳" - }, - "contextCustom": { - "message": "カスタム" - } -} \ No newline at end of file + "message": "要約" + }, + "contextExplain": { + "message": "説明" + }, + "contextRephrase": { + "message": "言い換え" + }, + "contextTranslate": { + "message": "翻訳" + }, + "contextCustom": { + "message": "カスタム" + } +} diff --git a/src/public/_locales/ml/messages.json b/src/public/_locales/ml/messages.json index 4a6699a..bbde162 100644 --- a/src/public/_locales/ml/messages.json +++ b/src/public/_locales/ml/messages.json @@ -17,10 +17,10 @@ "contextRephrase": { "message": "പുനഃരൂപീകരിക്കുക" }, - "contextTranslate" :{ + "contextTranslate": { "message": "വിവർത്തനം ചെയ്യുക" }, "contextCustom": { "message": "ഇഷ്ടാനുസൃതം" } -} \ No newline at end of file +} diff --git a/src/public/_locales/no/messages.json b/src/public/_locales/no/messages.json index 1bb0b1f..4ada7b8 100644 --- a/src/public/_locales/no/messages.json +++ b/src/public/_locales/no/messages.json @@ -20,10 +20,10 @@ "contextRephrase": { "message": "Omskrive" }, - "contextTranslate" :{ + "contextTranslate": { "message": "Oversett" }, "contextCustom": { "message": "Tilpasset" } -} \ No newline at end of file +} diff --git a/src/public/_locales/ru/messages.json b/src/public/_locales/ru/messages.json index 61c6a1d..9d41aaf 100644 --- a/src/public/_locales/ru/messages.json +++ b/src/public/_locales/ru/messages.json @@ -17,10 +17,10 @@ "contextRephrase": { "message": "Перефразировать" }, - "contextTranslate" :{ + "contextTranslate": { "message": "Перевести" }, "contextCustom": { "message": "Пользовательский" } -} \ No newline at end of file +} diff --git a/src/public/_locales/zh_CN/messages.json b/src/public/_locales/zh_CN/messages.json index e9be275..9d050c5 100644 --- a/src/public/_locales/zh_CN/messages.json +++ b/src/public/_locales/zh_CN/messages.json @@ -17,10 +17,10 @@ "contextRephrase": { "message": "改述" }, - "contextTranslate" :{ + "contextTranslate": { "message": "翻译" }, "contextCustom": { "message": "自定义" } -} \ No newline at end of file +} From 3a1ed7a1c13fead9ccd68e5b33cc81116547b6dc Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Sat, 2 Nov 2024 16:05:50 +0530 Subject: [PATCH 04/10] feat: Add Swedish language support Adds Swedish language support to the application, including translations and a new language option in the settings. --- src/i18n/index.ts | 4 +++- src/i18n/support-language.ts | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/i18n/index.ts b/src/i18n/index.ts index 0b49571..97bbf6f 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -13,6 +13,7 @@ import { fa } from "./lang/fa"; import { de } from "./lang/de"; import { da } from "./lang/da"; import { no } from "./lang/no"; +import { sv } from "./lang/sv"; i18n @@ -35,7 +36,8 @@ i18n "fa-IR": fa, da: da, no: no, - de: de + de: de, + sv: sv }, fallbackLng: "en", lng: localStorage.getItem("i18nextLng") || "en", diff --git a/src/i18n/support-language.ts b/src/i18n/support-language.ts index c9bbfa1..2c62ad4 100644 --- a/src/i18n/support-language.ts +++ b/src/i18n/support-language.ts @@ -51,5 +51,9 @@ export const supportLanguage = [ { label: "Norsk", value: "no" + }, + { + value: "sv", + label: "Svenska" } ] From 9089653961fd99b79d3e4d36c9f0321666a884b1 Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Sat, 2 Nov 2024 16:05:58 +0530 Subject: [PATCH 05/10] Fix: Handle PDF content in Firefox Firefox does not allow extensions to run content scripts on PDF pages, so we have to work around this limitation. This commit adds a workaround that retrieves the PDF URL and type directly from the tab. This ensures that the extension can handle PDFs in Firefox while waiting for the bug in Firefox to be fixed. --- src/libs/get-html.ts | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/src/libs/get-html.ts b/src/libs/get-html.ts index ddb2ad7..29bbd9e 100644 --- a/src/libs/get-html.ts +++ b/src/libs/get-html.ts @@ -42,14 +42,30 @@ export const getDataFromCurrentTab = async () => { .query({ active: true, currentWindow: true }) .then(async (tabs) => { const tab = tabs[0] + try { + const data = await browser.scripting.executeScript({ + target: { tabId: tab.id }, + func: _getHtml + }) - const data = await browser.scripting.executeScript({ - target: { tabId: tab.id }, - func: _getHtml - }) - - if (data.length > 0) { - resolve(data[0].result) + if (data.length > 0) { + resolve(data[0].result) + } + } catch (e) { + console.log("error", e) + // this is a weird method but it works + if (import.meta.env.BROWSER === "firefox") { + // all I need is to get the pdf url but somehow + // firefox won't allow extensions to run content scripts on pdf https://bugzilla.mozilla.org/show_bug.cgi?id=1454760 + // so I set up a weird method to fix this issue by asking tab to give the url + // and then I can get the pdf url + const result = { + url: tab.url, + content: "", + type: "pdf" + } + resolve(result) + } } }) } From 9f1873d37adf43a8d1670b45bb45bf5f72433644 Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Sat, 2 Nov 2024 16:35:06 +0530 Subject: [PATCH 06/10] feat: Improve download button placement Move the download button to a dedicated container for improved visual clarity and consistency within the modal. --- src/entries/hf-pull.content.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/entries/hf-pull.content.ts b/src/entries/hf-pull.content.ts index 9406683..ac44737 100644 --- a/src/entries/hf-pull.content.ts +++ b/src/entries/hf-pull.content.ts @@ -66,10 +66,12 @@ export default defineContentScript({ ) } }) - copyButton.parentElement!.insertBefore( - downloadButton, - copyButton.nextSibling - ) + const buttonContainer = document.createElement('div') + buttonContainer.classList.add("mb-3") + buttonContainer.style.display = 'flex' + buttonContainer.style.justifyContent = 'flex-end' + buttonContainer.appendChild(downloadButton) + modal.querySelector("pre")!.insertAdjacentElement("afterend", buttonContainer) } } From 31ca246407efd2b4b342292308f66494982e8b70 Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Sun, 3 Nov 2024 23:38:29 +0530 Subject: [PATCH 07/10] feat: update LaTeX processing Adds LaTeX processing to the code, enabling the rendering of LaTeX equations within the application. This improves the user experience by allowing users to insert mathematical formulas directly into the content. The LaTeX processing is implemented using a dedicated utility function that replaces LaTeX tags with appropriate MathJax syntax, ensuring seamless rendering. This change is expected to have a positive impact on the overall user experience, making the application more versatile and convenient for users who work with mathematical content. --- bun.lockb | Bin 440402 -> 440402 bytes package.json | 2 +- src/utils/latex.ts | 19 +++++++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 src/utils/latex.ts diff --git a/bun.lockb b/bun.lockb index deaa93f5559b303cdfcdc7f40997e7fbad481eeb..8d4fe90e294d729224c4e4397fe940cc2bf9fa6d 100644 GIT binary patch delta 175 zcmV;g08szZ@EX$a8jvm^-M8C-RnXw4#nL=2pYQ;@@1G-75Iw=IbM+Ej)MNn;fljqf z0g6-s7?VInCzF6h2!{w&0k;TM0$sg80*g|an#=XK84Nj+BT)TxPR|**PP)EJ(ZaD^ z-pHx7V$B7DV~8BS>Q7Ny5a3tCk9Bso-{Lx&CQs2A($BEghouq&x1|yUmU0LJ00000 d0001oLxlu~LxlymLxl$VEdn?&w?DH669vwPOBMhC delta 175 zcmV;g08szZ@EX$a8jvm^443}S$aDVVW$}TFLG$As`}ZI~4m`9Jg<}AXMh3jwfljqf z0g6-s1Cu~SCzF6h2!{w&0k;TM0$sg8Sp7$^x{88@Fh~9!VkF;~4`uZFsuWQVHVAfh{R { + + let processedContent = content.replace( + /\\\[(.*?)\\\]/gs, + (_, equation) => `$$${equation}$$` + ) + + processedContent = processedContent.replace( + /\\\((.*?)\\\)/gs, + (_, equation) => `$${equation}$` + ) + + processedContent = processedContent.replace( + /\$(\d)/g, + '\\$$1' + ) + + return processedContent +} From 65ba2ff898897ea7a4fbebcc1a044ca7fa07e6f4 Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Sun, 3 Nov 2024 23:38:41 +0530 Subject: [PATCH 08/10] feat: add save and send functionality for user message Adds a "Save" button to the edit message form in Playground, allowing users to save changes without immediately submitting them. This also introduces a new `isSend` flag to the `onEditFormSubmit` prop, enabling developers to control whether a message should be sent immediately or saved for later submission. This enhances flexibility and user control during the message editing process. --- src/components/Common/Markdown.tsx | 14 +----- .../Common/Playground/EditMessageForm.tsx | 50 +++++++++++++------ src/components/Common/Playground/Message.tsx | 2 +- .../Option/Playground/PlaygroundChat.tsx | 4 +- src/components/Option/Settings/tts-mode.tsx | 9 ++-- src/hooks/useMessageOption.tsx | 18 ++++--- 6 files changed, 53 insertions(+), 44 deletions(-) diff --git a/src/components/Common/Markdown.tsx b/src/components/Common/Markdown.tsx index 2934b64..c996acf 100644 --- a/src/components/Common/Markdown.tsx +++ b/src/components/Common/Markdown.tsx @@ -8,20 +8,8 @@ import rehypeKatex from "rehype-katex" import "property-information" import React from "react" import { CodeBlock } from "./CodeBlock" -export const preprocessLaTeX = (content: string) => { - // Replace block-level LaTeX delimiters \[ \] with $$ $$ +import { preprocessLaTeX } from "@/utils/latex" - const blockProcessedContent = content.replace( - /\\\[(.*?)\\\]/gs, - (_, equation) => `$$${equation}$$` - ) - // Replace inline LaTeX delimiters \( \) with $ $ - const inlineProcessedContent = blockProcessedContent.replace( - /\\\((.*?)\\\)/gs, - (_, equation) => `$${equation}$` - ) - return inlineProcessedContent -} function Markdown({ message, className = "prose break-words dark:prose-invert prose-p:leading-relaxed prose-pre:p-0 dark:prose-dark" diff --git a/src/components/Common/Playground/EditMessageForm.tsx b/src/components/Common/Playground/EditMessageForm.tsx index e818f24..f42b6d4 100644 --- a/src/components/Common/Playground/EditMessageForm.tsx +++ b/src/components/Common/Playground/EditMessageForm.tsx @@ -5,7 +5,7 @@ import useDynamicTextareaSize from "~/hooks/useDynamicTextareaSize" type Props = { value: string - onSumbit: (value: string) => void + onSumbit: (value: string, isSend: boolean) => void onClose: () => void isBot: boolean } @@ -31,7 +31,7 @@ export const EditMessageForm = (props: Props) => { onSubmit={form.onSubmit((data) => { if (isComposing) return props.onClose() - props.onSumbit(data.message) + props.onSumbit(data.message, true) })} className="flex flex-col gap-2">