From 1600a57b66e7649bcd17f0e11e37152bce78e3d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Mon, 24 Aug 2026 01:59:09 +0000 Subject: [PATCH] =?UTF-8?q?add=20swedish=20(sv-SE)=20locale=20=E2=80=94=20?= =?UTF-8?q?all=20three=20catalogues,=20wired=20in=20all=20four=20registrat?= =?UTF-8?q?ion=20points?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 538 app.* + 541 panel.* + 43 ui.* = 1122 keys, full parity with en-GB. Registered in catalogues.ts, locales.ts SHIPPED_LOCALES, and both workspace locales/index.ts — the four-edit checklist docs/localization.md calls out, since a missed import is what shipped es-ES/de-DE/fr-FR dead the first time. files.menu.selected (officerdev) was number-invariant in English ("selected") but needs one/other in Swedish ("vald"/"valda"), same class of bug as the "1 seleccionados" fix in es-ES — split it rather than copying the English shape. Co-Authored-By: Claude Opus 5 --- src/apps/officer-web/lib/catalogues.ts | 2 + src/apps/officer-web/lib/locales.ts | 2 +- src/apps/officer-web/locales/sv-SE.json | 704 ++++++++++++++++++ src/workspaces/components/locales/index.ts | 2 + src/workspaces/components/locales/sv-SE.json | 81 ++ .../officerdev/src/locales/index.ts | 2 + .../officerdev/src/locales/sv-SE.json | 643 ++++++++++++++++ 7 files changed, 1435 insertions(+), 1 deletion(-) create mode 100644 src/apps/officer-web/locales/sv-SE.json create mode 100644 src/workspaces/components/locales/sv-SE.json create mode 100644 src/workspaces/officerdev/src/locales/sv-SE.json diff --git a/src/apps/officer-web/lib/catalogues.ts b/src/apps/officer-web/lib/catalogues.ts index 3af2629c..e3984035 100644 --- a/src/apps/officer-web/lib/catalogues.ts +++ b/src/apps/officer-web/lib/catalogues.ts @@ -7,6 +7,7 @@ import appEnGB from '../locales/en-GB.json'; import appEsES from '../locales/es-ES.json'; import appFrFR from '../locales/fr-FR.json'; import appPtPT from '../locales/pt-PT.json'; +import appSvSE from '../locales/sv-SE.json'; /** * The three per-workspace catalogues, merged into one map per shipped locale (D6): `app.*` from @@ -33,6 +34,7 @@ const appCatalogs: TranslationMap = { 'es-ES': appEsES, 'de-DE': appDeDE, 'fr-FR': appFrFR, + 'sv-SE': appSvSE, }; export const catalogues: TranslationMap = Object.fromEntries( diff --git a/src/apps/officer-web/lib/locales.ts b/src/apps/officer-web/lib/locales.ts index 4f324ae6..883f2e27 100644 --- a/src/apps/officer-web/lib/locales.ts +++ b/src/apps/officer-web/lib/locales.ts @@ -19,7 +19,7 @@ const autonym = (code: string): string => { return name.charAt(0).toUpperCase() + name.slice(1); }; -export const SHIPPED_LOCALES: ShippedLocale[] = ['en-GB', 'pt-PT', 'fr-FR', 'de-DE', 'es-ES'].map((code) => ({ +export const SHIPPED_LOCALES: ShippedLocale[] = ['en-GB', 'pt-PT', 'fr-FR', 'de-DE', 'es-ES', 'sv-SE'].map((code) => ({ code, label: autonym(code), })); diff --git a/src/apps/officer-web/locales/sv-SE.json b/src/apps/officer-web/locales/sv-SE.json new file mode 100644 index 00000000..b11662d2 --- /dev/null +++ b/src/apps/officer-web/locales/sv-SE.json @@ -0,0 +1,704 @@ +{ + "common": { + "save": "Spara", + "saving": "Sparar...", + "cancel": "Avbryt" + }, + "settings": { + "profile": { + "userData": { + "email": "E-post", + "username": "Användarnamn", + "name": "Namn", + "namePlaceholder": "Ditt namn", + "updated": "Profilen uppdaterad", + "updateFailed": "Det gick inte att uppdatera profilen", + "selectImage": "Välj en bildfil", + "imageTooLarge": "Bilden måste vara mindre än 384 kB" + }, + "apiKeys": { + "intro": "En API-nyckel loggar in som dig, utan lösenord och utan att gå ut. En nyckel fungerar överallt — en nyckel är inte knuten till en app. Att ge varje enhet sin egen är bara så att du kan stänga av en utan att röra resten. Skicka den som", + "loading": "Läser in nycklar…", + "mintedTitle": "Nyckel för ”{{name}}” — visas en gång", + "savedIt": "Jag har sparat den", + "copyKey": "Kopiera nyckel", + "copied": "Nyckel kopierad", + "copyFailed": "Det gick inte att kopiera — markera och kopiera manuellt", + "newKey": "Ny nyckel", + "namePlaceholder": "iPhone, Musik-appen, laptop-CLI…", + "create": "Skapa", + "createFailed": "Det gick inte att skapa nyckeln", + "noneYet": "Inga nycklar än.", + "noneInUse": "Inga nycklar används.", + "revoked": "återkallad", + "expired": "utgången", + "lastUsed": "senast använd {{date}}", + "neverUsed": "aldrig använd", + "forget": "Ta bort denna post", + "forgetFailed": "Det gick inte att ta bort den", + "revoke": "Återkalla", + "revokeDone": "Återkallad — allt som använder den nyckeln loggas ut", + "revokeFailed": "Det gick inte att återkalla", + "hideDead": "Dölj återkallade och utgångna", + "showDead": { + "one": "Visa {{count}} återkallad eller utgången nyckel", + "other": "Visa {{count}} återkallade eller utgångna nycklar" + } + }, + "voice": { + "label": "Röst", + "refresh": "Uppdatera röster", + "serverDefault": "Serverstandard", + "hint": "Välj en röst för text-till-tal. Behåll serverstandard för att använda rösten administratören har konfigurerat.", + "stop": "Stoppa", + "listen": "Lyssna" + }, + "dock": { + "visible": "Synlig", + "hidden": "Dold", + "dragToShow": "Dra objekt hit för att visa i dockan", + "allVisible": "Alla objekt synliga", + "reset": "Återställ till standard" + }, + "languages": { + "spokenLabel": "Språk du talar", + "addLanguage": "Lägg till ett språk...", + "defaultLabel": "Standardspråk", + "defaultHint": "Används för lokalisering av gränssnittet.", + "translateToLabel": "Översätt till", + "translateToHint": "Målspråk vid översättning av innehåll du inte talar." + }, + "changePassword": { + "currentPasswordLabel": "Nuvarande lösenord", + "currentPasswordPlaceholder": "Nuvarande lösenord", + "newPasswordLabel": "Nytt lösenord", + "newPasswordPlaceholder": "Nytt lösenord", + "confirmPasswordLabel": "Bekräfta nytt lösenord", + "confirmPasswordPlaceholder": "Bekräfta nytt lösenord", + "changeButton": "Byt lösenord", + "changingButton": "Byter...", + "passwordChanged": "Lösenordet ändrat", + "passwordChangeFailed": "Det gick inte att byta lösenord" + }, + "models": { + "defaultModel": "Standardmodell", + "sameAsChat": "Samma som chattstandard", + "taskDefaultsSaved": "Standardvärden för uppgifter sparade", + "saveFailed": "Det gick inte att spara inställningarna", + "defaultChat": "Standardmodell för chatt", + "defaultChatHint": "Används när en ny chatt startas från hemskärmen", + "defaultProject": "Standardmodell för projekt", + "defaultProjectHint": "Används när en ny chatt startas inuti en projektdashboard", + "defaultTask": "Standardmodell för uppgifter", + "defaultTaskHint": "Används när uppgifter körs från filhanteraren", + "aiDefaultsSaved": "Standardvärden för AI-modell sparade" + } + }, + "sections": { + "profile": { + "label": "Profil", + "hint": "avatar, namn, e-post", + "description": "Avatar, namn och e-post" + }, + "changePassword": { + "label": "Byt lösenord", + "description": "Uppdatera ditt lösenord" + }, + "apiKeys": { + "label": "API-nycklar", + "hint": "nycklar som loggar in som dig", + "description": "Nycklar som loggar in som dig, kan återkallas en i taget" + }, + "languages": { + "label": "Språk", + "hint": "talade och översättning", + "description": "Talade, standard och översättning" + }, + "voice": { + "label": "Röst", + "hint": "text-till-tal", + "description": "Inställning för text-till-tal-röst" + }, + "dock": { + "label": "Docka", + "hint": "välj och ordna om", + "description": "Välj och ordna om objekt i dockan" + }, + "myModels": { + "label": "Mina modeller", + "description": "Visa eller dölj modeller för dig själv" + }, + "channelModels": { + "label": "Kanalmodeller", + "description": "Modeller som andra konton än ägaren kan nå" + }, + "defaultModels": { + "label": "Standardmodeller", + "description": "Standardmodeller för chatt, projekt och uppgifter" + }, + "providers": { + "label": "Leverantörer", + "hint": "körmiljöer", + "description": "Fjärran och lokala AI-leverantörer" + }, + "tts": { + "label": "Text till tal", + "description": "TTS-leverantör och röst" + }, + "stt": { + "label": "Tal till text", + "description": "Whisper-serverns URL" + }, + "ocr": { + "label": "OCR", + "description": "Synmodell för textextrahering" + }, + "maintenance": { + "label": "Bygg om och starta om", + "hint": "underhåll", + "description": "Läs in ändringar utan en terminal" + }, + "smtp": { + "label": "SMTP", + "hint": "utgående e-post", + "description": "Leverantör för e-postleverans" + }, + "googleOauth": { + "label": "Google OAuth", + "description": "Klient-ID och hemlighet för Google-API:er" + }, + "apify": { + "label": "Apify", + "description": "API-token för webbskrapningsaktörer" + }, + "davSync": { + "label": "Kalender- och kontaktsynkronisering", + "hint": "applösenord", + "description": "Lösenord per enhet för CalDAV-/CardDAV-klienter" + }, + "accounts": { + "label": "Konton", + "hint": "användare", + "description": "Vem som har åtkomst, och som vad" + }, + "permissions": { + "label": "Behörigheter", + "description": "Vad varje roll kan nå" + } + }, + "searchPlaceholder": "Sök inställningar…", + "selectSection": "Välj en sektion", + "groups": { + "models": "Modeller", + "defaults": "Standardvärden", + "providers": "Leverantörer", + "ai": "AI", + "maintenance": "Underhåll", + "email": "E-post" + }, + "nav": { + "profile": "Profil", + "ai": "AI", + "system": "System", + "integrations": "Integrationer", + "users": "Användare" + }, + "ai": { + "noModels": "Inga modeller tillgängliga. Konfigurera API-nycklar under Leverantörer.", + "dragToShow": "Dra modeller hit för att visa", + "allVisible": "Alla modeller synliga", + "dragToEnable": "Dra modeller hit för att aktivera", + "allEnabled": "Alla modeller aktiverade", + "visible": "Synlig", + "hidden": "Dold", + "enabled": "Aktiverad", + "disabled": "Inaktiverad", + "refresh": "Uppdatera modeller från leverantörer", + "refreshed": "Modeller uppdaterade", + "refreshFailed": "Det gick inte att uppdatera modellerna" + }, + "integrations": { + "enterprise": "Företag", + "personal": "Personligt" + }, + "server": { + "loading": "Läser in…", + "provider": "Leverantör", + "model": "Modell", + "voice": "Röst", + "ocr": { + "serverUrl": "URL till synmodellsserver", + "refreshModels": "Uppdatera modeller", + "selectModel": "Välj en modell", + "saved": "OCR-inställningarna sparade", + "saveFailed": "Det gick inte att spara OCR-inställningarna", + "reachable": "Synmodellsservern är nåbar" + }, + "stt": { + "serverUrl": "URL till Whisper-server", + "saved": "STT-inställningarna sparade", + "saveFailed": "Det gick inte att spara STT-inställningarna", + "reachable": "Whisper-servern är nåbar" + }, + "tts": { + "openaiCompatible": "OpenAI-kompatibel (Kokoro, OpenAI, m.fl.)", + "elevenLabs": "ElevenLabs", + "refreshVoices": "Uppdatera röster", + "selectVoice": "Välj en röst", + "saved": "TTS-inställningarna sparade", + "saveFailed": "Det gick inte att spara TTS-inställningarna", + "playing": "Spelar upp testljud", + "testFailed": "Testet misslyckades — det gick inte att nå TTS-servern" + }, + "smtp": { + "mailhog": "MailHog (lokal testning)", + "resend": "Resend", + "custom": "Anpassad SMTP", + "apiKey": "API-nyckel", + "host": "Värd", + "port": "Port", + "username": "Användarnamn", + "password": "Lösenord", + "tls": "TLS/SSL", + "fromName": "Avsändarnamn", + "fromEmail": "Avsändaradress", + "sendTest": "Skicka testmejl", + "userExample": "user@example.com", + "recipientExample": "recipient@example.com", + "saved": "SMTP-inställningarna sparade", + "saveFailed": "Det gick inte att spara SMTP-inställningarna", + "connected": "Anslutningen lyckades", + "testSent": "Testmejl skickat till {{email}}" + }, + "maintenance": { + "updateTitle": "Uppdatera plattformen", + "updateHint": "Ändrar ingenting som körs. Allt uppdateringen behöver listas här, och det är alltid ditt beslut.", + "rebuild": "Bygg om gränssnittet", + "restart": "Starta om servern", + "upToDate": "Redan uppdaterad", + "rebuilt": "Gränssnittet ombyggt — uppdatera sidan för att se det", + "restarting": "Startar om — sidan återansluter av sig själv", + "pulled": { + "one": "Hämtade {{count}} commit", + "other": "Hämtade {{count}} commits" + } + }, + "harnesses": { + "piMono": "Pi Mono", + "checking": "Kontrollerar…", + "localProviders": "Lokala leverantörer", + "remoteProviders": "Fjärrleverantörer", + "connect": "Anslut", + "authenticate": "Autentisera", + "connectLocal": "Anslut lokal leverantör", + "connectProvider": "Anslut leverantör", + "none": "Inga leverantörer hittades.", + "updatePiMono": "Uppdatera Pi Mono", + "removeProvider": "Ta bort leverantör", + "namePlaceholder": "Namn (t.ex. Min Ollama)", + "username": "Användarnamn", + "password": "Lösenord", + "apiKey": "API-nyckel", + "editKey": "Redigera nyckel", + "disconnect": "Koppla från leverantör", + "saveKey": "Spara nyckel", + "enterKey": "Ange API-nyckel", + "search": "Sök leverantörer…", + "connectFailed": "Det gick inte att ansluta", + "authFailed": "Autentiseringen misslyckades", + "saveFailed": "Det gick inte att spara leverantören", + "connectedTo": "Ansluten till {{name}}" + } + }, + "users": { + "loadingPermissions": "Läser in behörigheter…", + "permissionsFailed": "Det gick inte att läsa in behörigheterna.", + "deniedUnlessGranted": "Allt nekas om det inte beviljas här.", + "read": "Läs", + "full": "Fullständig", + "noAccess": "Ingen åtkomst", + "role": "Roll", + "permissionsSaved": "Sparade vad {{role}} kan nå", + "copyBeforeClosing": "Kopiera det du behöver innan du stänger — inget av det kan visas igen.", + "password": "Lösenord", + "linuxAccount": "Linuxkonto", + "sshKey": "Deras publika SSH-nyckel", + "addToGitea": "Lägg till detta i deras Gitea-konto", + "linuxIncomplete": "Kontot fungerar, men dess Linux-del blev inte klar", + "done": "Klar", + "addAccount": "Lägg till konto", + "newAccount": "Nytt konto", + "email": "E-post", + "name": "Namn", + "username": "Användarnamn", + "usernameHint": "Bokstäver, siffror, punkter, bindestreck och understreck.", + "generatePassword": "Generera ett lösenord", + "copyPassword": "Kopiera lösenordet", + "passwordHint": "Minst 12 tecken, med stora och små bokstäver, en siffra och ett specialtecken.", + "sshPlaceholder": "ssh-ed25519 AAAAC3Nza… ana@laptop", + "passwordCopied": "Lösenordet kopierat", + "loadingAccounts": "Läser in konton…", + "accountsFailed": "Det gick inte att läsa in kontona.", + "removeAccount": "Ta bort konto", + "generateNewPassword": "Generera ett nytt lösenord", + "serverOwner": "Serverägare", + "copySshTitle": "Kopiera deras publika SSH-nyckel (lägg till den i deras Gitea-konto)", + "resetPasswordTitle": "Generera ett nytt lösenord — visas en gång, och loggar ut dem överallt", + "copyNewPassword": "Kopiera det nya lösenordet", + "publicKeyCopied": "Publik nyckel kopierad", + "copyFailed": "Det gick inte att kopiera — markera den och kopiera för hand", + "repairFor": "Reparera {{email}}s Linuxkonto", + "linuxAccountFor": "Linuxkonto: {{osUser}} — klicka för att reparera eller ersätta deras SSH-nyckel", + "copySshFor": "Kopiera {{email}}s publika SSH-nyckel", + "resetPasswordFor": "Återställ {{email}}s lösenord", + "removeFor": "Ta bort {{email}}", + "provisionPrompt": "Linuxkonto för {{email}}.\n\nKlistra in en publik SSH-nyckel för att tillåta dem att SSH:a in, eller lämna tomt för att behålla den nuvarande.", + "createLinux": "Skapa ett Linuxkonto", + "noLinux": "Inget Linuxkonto — klicka för att skapa ett", + "removeTitle": "Ta bort {{email}}?", + "removeBody": "Detta tar bort kontot och allt som tillhör det — passkeys, dashboards, sparade layouter och allt en installerad plugin sparar åt dem. Det kan inte ångras.", + "resetTitle": "Återställa lösenordet för {{email}}?", + "resetBody": "Ett nytt lösenord genereras och visas för dig en gång — det sparas ingenstans och kan inte hämtas i efterhand. Deras befintliga lösenord slutar fungera omedelbart, och de loggas ut överallt.", + "resetLinuxNote": "Deras Linuxkonto ({{osUser}}) påverkas inte: det har inget lösenord, och SSH-nycklarna är oförändrade." + }, + "dav": { + "newDevice": "Ny enhet", + "create": "Skapa", + "none": "Inga enheter än.", + "placeholder": "Pixel 9, iPad, Thunderbird…", + "revoke": "Återkalla", + "delete": "Ta bort", + "copyFailed": "Det gick inte att kopiera — markera och kopiera manuellt", + "createFailed": "Det gick inte att skapa applösenordet", + "revoked": "Återkallat — den enheten slutar synkronisera", + "revokeFailed": "Det gick inte att återkalla", + "deleteFailed": "Det gick inte att ta bort", + "copyField": "Kopiera {{field}}", + "copied": "{{what}} kopierat" + }, + "google": { + "guideToggle": "Steg-för-steg-guide", + "step1": { + "title": "Skapa ett Google Cloud-projekt", + "body": "Öppna sidan för att skapa projekt, ge det ett namn (till exempel ”Officer”), och klicka på:", + "link": "New Project" + }, + "step2": { + "title": "Aktivera API:erna", + "body": "Öppna API-biblioteket och sök efter var och en av dessa, klicka sedan på:", + "link": "API Library" + }, + "step3": { + "title": "Konfigurera OAuth-samtyckesskärmen", + "link": "OAuth Branding", + "appName": "Ange din organisations namn, eller ”Officer”, som:", + "supportEmail": "Ange din administratörs e-post som:", + "devContact": "Lägg till din administratörs e-post under:", + "save": "Klicka sedan på:" + }, + "step4": { + "title": "Ställ in målgruppen", + "link": "OAuth Audience", + "internal": "Om ditt team använder Google Workspace, välj — ingen verifiering behövs:", + "external": "Välj annars, och lägg till ditt teams e-postadresser under Test users (krävs medan appen är overifierad; gräns på 100 testanvändare):" + }, + "step5": { + "title": "Lägg till scopes", + "link": "Data Access", + "body": "Öppna dataåtkomst, sök efter och lägg till scopen nedan, klicka sedan på:", + "note": "Google klassar kalenderscopet som känsligt och Gmail-scopet som begränsat. Det är okej för Interna appar (Google Workspace) och för Externa appar i testläge; publicering i produktion med begränsade scopes kräver Google-verifiering." + }, + "step6": { + "title": "Skapa OAuth-inloggningsuppgifter", + "link": "Clients", + "body": "Öppna klientsidan och klicka på:", + "appType": "Application type:", + "nameAnything": "Namn: vad som helst (till exempel ”Officer”)", + "redirectUris": "Authorized redirect URIs — lägg till:", + "thenClick": "Klicka sedan på:" + }, + "step7": { + "title": "Kopiera inloggningsuppgifterna", + "body": "En dialog visar ditt klient-ID och din klienthemlighet. Kopiera båda och klistra in dem i fälten nedan." + }, + "scopeGmail": "Läs e-post", + "scopeCalendar": "Läs kalenderhändelser", + "verifying": "Verifierar inloggningsuppgifter…", + "valid": "Inloggningsuppgifterna är giltiga", + "invalid": "Ogiltiga inloggningsuppgifter", + "verifyFailed": "Verifieringsförfrågan misslyckades", + "clientId": "Klient-ID", + "clientSecret": "Klienthemlighet", + "redirectUri": "Omdirigerings-URI", + "redirectUriHint": "Lägg till denna URI i din Google OAuth-klients auktoriserade omdirigerings-URI:er", + "saved": "Google OAuth-konfigurationen sparad", + "saveFailed": "Det gick inte att spara Google OAuth-konfigurationen" + }, + "googleAccount": { + "title": "Googlekonto", + "hint": "Anslut ditt Googlekonto för Kalender, Kontakter och andra Google-tjänster.", + "connected": "Anslutet", + "disconnect": "Koppla från", + "connect": "Anslut Googlekonto", + "connectedToast": "Googlekontot anslutet", + "connectFailed": "Det gick inte att ansluta Googlekontot", + "disconnectedToast": "Googlekontot frånkopplat", + "disconnectFailed": "Det gick inte att koppla från Googlekontot" + }, + "apify": { + "token": "API-token", + "saved": "Apify API-token sparad", + "saveFailed": "Det gick inte att spara Apify API-token" + } + }, + "header": { + "userMenu": { + "profile": "Profil", + "systemSettings": "Systeminställningar", + "signOut": "Logga ut", + "ai": "AI", + "integrations": "Integrationer", + "userManagement": "Användarhantering" + }, + "tabName": "Flikens namn", + "tabNameHint": "Klicka för att döpa om denna flik — rensa den för att gå tillbaka till sidans namn", + "logoAlt": "Officer", + "navigation": "Navigering", + "jobsRunning": "Körande jobb", + "jobsNothingRunning": "Inget körs", + "jobsQueued": "Köade jobb" + }, + "nav": { + "home": "Hem", + "files": "Filer", + "chat": "Chatt", + "commandHq": "Command HQ", + "editor": "Editor", + "jobs": "Jobb", + "terminal": "Terminal", + "browser": "Webbläsare", + "monitor": "Monitor", + "activity": "Aktivitet", + "dashboards": "Dashboards", + "sendOff": "SendOff", + "calendar": "Kalender", + "contacts": "Kontakter", + "appStore": "Appbutik", + "marketplace": "Marketplace", + "codeEditor": "Kod-editor" + }, + "theme": { + "pillTitle": "Tema: {{name}} · ctrl+shift+←/→ bläddra · ctrl+shift+space bläddra i galleri · ctrl+shift+f {{starAction}}", + "pillLabel": "Tema: {{name}}", + "star": "stjärnmärk", + "unstar": "avmarkera stjärna", + "cycleHint": "ctrl+shift+←/→ bläddra · ctrl+shift+space galleri", + "everyShortcutHint": "ctrl+? för alla kortkommandon", + "favouritesOnly": "Endast favoriter ({{count}})", + "favourites": "Favoriter ({{count}})", + "noFavourites": "Inga favoriter än — stjärnmärk en med knappen på dess rad.", + "starNamed": "Stjärnmärk {{name}}", + "unstarNamed": "Avmarkera stjärna för {{name}}", + "addToFavourites": "Lägg till i favoriter", + "removeFromFavourites": "Ta bort från favoriter", + "addToFavouritesKey": "Lägg till i favoriter (f)", + "removeFromFavouritesKey": "Ta bort från favoriter (f)", + "active": "aktiv", + "browseHint": "j/k eller ↑/↓ flytta · l eller → förhandsgranska · f stjärna · h eller ← återställ · enter behåll · esc avbryt" + }, + "spotlight": { + "placeholder": "Gå till…", + "noResults": "Inget matchar ”{{query}}”." + }, + "shortcutsModal": { + "title": "Kortkommandon", + "hint": "Ctrl+? · Esc för att stänga" + }, + "screenError": { + "title": "Den här skärmen kunde inte renderas", + "description": "Inget gick förlorat — detta är ett visningsfel, inte ett datafel. Agenttranskript, jobb och filer är opåverkade.", + "unknownError": "Okänt fel", + "tryAgain": "Försök igen", + "reload": "Läs om", + "goHome": "Gå hem", + "resetHint": "Om det misslyckas igen på samma ställe är en sparad panellayout den vanliga orsaken. Återställning sätter tillbaka varje skärms paneler till standardläget.", + "dashboardsSafe": "Dina dashboards påverkas inte.", + "resetting": "Återställer…", + "resetConfirm": "Ja — återställ alla skärmlayouter", + "reset": "Återställ skärmlayouter" + }, + "rescan": { + "label": "Skanna om objekt", + "title": "Skanna om officer-items (tillämpa ändringar utan omstart)", + "failed": "Det gick inte att skanna om objekten", + "done": "Skannade om objekt — {{summary}}", + "counts": { + "tasks": { + "one": "{{count}} uppgift", + "other": "{{count}} uppgifter" + }, + "agents": { + "one": "{{count}} agent", + "other": "{{count}} agenter" + }, + "tools": { + "one": "{{count}} verktyg", + "other": "{{count}} verktyg" + }, + "skills": { + "one": "{{count}} skill", + "other": "{{count}} skills" + }, + "processes": { + "one": "{{count}} process", + "other": "{{count}} processer" + }, + "affordances": { + "one": "{{count}} affordance", + "other": "{{count}} affordances" + } + }, + "newChatsOnly": "Gäller nya chattar — en öppen chatt behåller det den startade med.", + "noDescription": { + "one": "{{count}} skill saknar beskrivning, så ingen agent erbjuds den.", + "other": "{{count}} skills saknar beskrivning, så ingen agent erbjuds dem." + } + }, + "bugReport": { + "label": "Rapportera ett fel", + "title": "Rapportera ett fel", + "describePlaceholder": "Beskriv vad som gick fel...", + "screenshot": "Skärmbild", + "noScreenshot": "Ingen skärmbild togs", + "collectedNote": "Konsolloggar, webbläsarinfo och nyliga API-fel samlas in automatiskt.", + "submitted": "Felrapport skickad", + "failed": "Det gick inte att skicka felrapporten", + "submit": "Skicka" + }, + "auth": { + "signInTitle": "Välkommen tillbaka", + "signInSubtitle": "Logga in på ditt konto", + "emailOrUsername": "E-post eller användarnamn", + "password": "Lösenord", + "forgotPassword": "Glömt lösenordet?", + "emailPlaceholder": "you@example.com", + "passwordPlaceholder": "Ditt lösenord", + "forgotTitle": "Glömt lösenord", + "forgotSubtitle": "Ange din e-post för att få en återställningslänk", + "email": "E-post", + "backToLogin": "Tillbaka till inloggning", + "checkEmail": "Kolla din e-post", + "checkEmailHint": "Klicka på den för att återställa ditt lösenord.", + "resetOk": "Lösenordet återställdes. Logga in.", + "verifying": "Verifierar…", + "invalidLink": "Ogiltig länk", + "invalidLinkHint": "Den här återställningslänken är ogiltig eller har gått ut.", + "resetTitle": "Återställ lösenord", + "resetSubtitle": "Ange ditt nya lösenord", + "confirmPassword": "Bekräfta lösenord", + "minChars": "Minst 12 tecken", + "confirmPlaceholder": "Bekräfta ditt lösenord", + "bootstrapTitle": "Välkommen, administratör", + "bootstrapSubtitle": "Skapa ditt administratörskonto", + "name": "Namn", + "username": "Användarnamn", + "namePlaceholder": "Ditt namn", + "adminEmailPlaceholder": "admin@example.com", + "bootstrapOk": "Administratörskontot skapades. Logga in.", + "debug": { + "controls": "Kontroller:", + "camera": "Kamera:", + "model": "Modell:" + } + }, + "shortcuts": { + "navigation": "Navigering", + "spotlight": "Spotlight — gå till vilken skärm, plugin eller inställning som helst med namn", + "thisList": "Denna lista", + "themes": "Teman", + "themesNote": "Webbläsaren tillämpar temat medan du flyttar dig, så du ser appen förändras i stället för att läsa namn.", + "openBrowser": "Öppna temabläddraren", + "prevNextTheme": "Föregående/nästa tema, utan att öppna något", + "starCurrent": "Stjärnmärk eller avmarkera det aktuella temat, varifrån som helst", + "inBrowser": "I temabläddraren", + "moveList": "Flytta genom listan", + "applyKeepBrowsing": "Tillämpa det markerade temat och fortsätt bläddra", + "restoreStart": "Sätt tillbaka temat du började med", + "starFocused": "Stjärnmärk eller avmarkera det markerade temat", + "keepLooking": "Behåll det du tittar på", + "cancelRestore": "Avbryt och återställ", + "inSpotlight": "I Spotlight", + "moveResults": "Flytta genom resultaten", + "goThere": "Gå dit", + "close": "Stäng", + "chat": "Chatt", + "chatNote": "Återkallning tar bara piltangenten från ett TOMT skrivfält, och varje annan tangent avslutar återkallningen — så ett utkast skrivs aldrig över.", + "prevNextPrompt": "Föregående/nästa prompt du skickade, i skalstil", + "send": "Skicka · på ett tomt skrivfält med något köat, skicka det nu", + "newline": "Ny rad", + "stopTurn": "Stoppa turen som genereras" + }, + "jobs": { + "runningQueued": "Körs och köade", + "loading": "Läser in…", + "nothingRunning": "Inget körs", + "history": "Historik", + "clearAll": "Rensa alla", + "selectJob": "Välj ett jobb", + "notFound": "Jobbet hittades inte.", + "backToJobs": "Tillbaka till jobb", + "stop": "Stoppa", + "testNotification": "Skicka en testnotis till varje konfigurerad kanal", + "search": "Sök…", + "deleteFinished": "Ta bort alla avslutade jobb", + "noChannels": "Inga kanaler konfigurerade", + "notifyFailed": "Det gick inte att skicka notisen", + "stopRequested": "Stopp begärt", + "stopFailed": "Det gick inte att stoppa", + "titles": "Titlar", + "download": "Ladda ner", + "input": "Indata", + "output": "Utdata", + "steps": "Steg", + "selectStep": "Välj ett steg eller en deluppgift för att visa utdata", + "noOutput": "Ingen utdata än", + "tokens": "Tokens:", + "cost": "Kostnad:", + "status": { + "running": "Körs", + "queued": "Köad", + "completed": "Klar", + "failed": "Misslyckades", + "stopped": "Stoppad", + "interrupted": "Avbruten" + }, + "failedWithCode": "Misslyckades (avslut {{code}})" + }, + "activity": { + "title": "Aktivitet", + "backgroundTasks": "Bakgrundsuppgifter", + "detached": "Frikopplad", + "backToList": "Tillbaka till listan", + "selectTask": "Välj en uppgift för att följa dess utdata live", + "noneRunning": "inget körs" + }, + "passkeyGate": { + "setUp": "Ställ in din passkey" + }, + "chatHistory": { + "loadFailed": "Det gick inte att läsa in den här konversationen: {{reason}}" + }, + "capability": { + "frontmatter": "Frontmatter", + "noMatches": "Inga träffar", + "emptyFile": "Tom fil", + "createFailed": "Det gick inte att skapa {{kind}}", + "deleteFailed": "Det gick inte att ta bort {{kind}}", + "searchPlaceholder": "Sök {{kind}}…", + "selectOne": "Välj en {{kind}}", + "selectToView": "Välj en {{kind}} för att visa dess innehåll", + "delete": "Ta bort", + "createPrompt": "Hjälp mig skapa innehållet för den här nya {{kind}}-filen", + "improvePrompt": "Hjälp mig förstå och förbättra den här {{kind}}-filen" + } +} diff --git a/src/workspaces/components/locales/index.ts b/src/workspaces/components/locales/index.ts index aa400b8d..17cf2c90 100644 --- a/src/workspaces/components/locales/index.ts +++ b/src/workspaces/components/locales/index.ts @@ -4,6 +4,7 @@ import enGB from './en-GB.json'; import esES from './es-ES.json'; import frFR from './fr-FR.json'; import ptPT from './pt-PT.json'; +import svSE from './sv-SE.json'; /** Shared components' own catalog, per locale — merged into the app-wide map by `I18nBridge` under `ui.*`. */ export const uiCatalogs: TranslationMap = { @@ -12,6 +13,7 @@ export const uiCatalogs: TranslationMap = { 'es-ES': esES, 'de-DE': deDE, 'fr-FR': frFR, + 'sv-SE': svSE, }; export { useTranslation } from './useTranslation'; diff --git a/src/workspaces/components/locales/sv-SE.json b/src/workspaces/components/locales/sv-SE.json new file mode 100644 index 00000000..9dd5704e --- /dev/null +++ b/src/workspaces/components/locales/sv-SE.json @@ -0,0 +1,81 @@ +{ + "button": { + "cancel": "Avbryt", + "confirm": "Bekräfta", + "ok": "Ok", + "close": "Stäng" + }, + "search": { + "placeholder": "Sök", + "open": "Öppna sökning", + "close": "Stäng sökning", + "clear": "Rensa sökning" + }, + "select": { + "placeholder": "Välj..." + }, + "tabs": { + "filterPlaceholder": "Filtrera" + }, + "commandBlock": { + "run": "Kör i terminalen", + "copy": "Kopiera kommando" + }, + "colorPicker": { + "placeholder": "Hexfärg" + }, + "state": { + "loading": "Läser in…" + }, + "dataTable": { + "empty": "Ingen data hittades.", + "pagination": { + "showingPage": "Visar sida {{current}} av {{total}}", + "showingPageShort": "s {{current}}/{{total}}", + "rowsPerPage": "Rader per sida", + "perPage": "{{size}} / sida", + "perPageShort": "{{size}}/s", + "first": "Första", + "prev": "Föreg.", + "next": "Nästa", + "last": "Sista" + } + }, + "pagination": { + "label": "Sidnumrering", + "previous": "Föregående", + "next": "Nästa", + "morePages": "Fler sidor", + "goToPrevious": "Gå till föregående sida", + "goToNext": "Gå till nästa sida" + }, + "carousel": { + "previous": "Föregående bild", + "next": "Nästa bild" + }, + "breadcrumb": { + "more": "Mer" + }, + "theme": { + "toggle": "Växla färgläge" + }, + "error": { + "forbidden": { + "title": "Obehörig åtkomst", + "description": "Du har inte behörighet att utföra denna åtgärd.", + "hint": "Om du tror att detta är ett fel, kontakta din ansvariga person." + }, + "unauthorized": { + "title": "Ogiltiga inloggningsuppgifter", + "description": "Din åtkomsttoken har gått ut", + "hint": "Logga in igen" + }, + "server": { + "title": "Serverfel" + } + }, + "logo": { + "icon": "Officer-ikon", + "logo": "Officer-logotyp" + } +} diff --git a/src/workspaces/officerdev/src/locales/index.ts b/src/workspaces/officerdev/src/locales/index.ts index e8652db7..29727864 100644 --- a/src/workspaces/officerdev/src/locales/index.ts +++ b/src/workspaces/officerdev/src/locales/index.ts @@ -4,6 +4,7 @@ import enGB from './en-GB.json'; import esES from './es-ES.json'; import frFR from './fr-FR.json'; import ptPT from './pt-PT.json'; +import svSE from './sv-SE.json'; /** Panel apps' own catalog, per locale — merged into the app-wide map by `I18nBridge` under `panel.*`. */ export const panelCatalogs: TranslationMap = { @@ -12,6 +13,7 @@ export const panelCatalogs: TranslationMap = { 'es-ES': esES, 'de-DE': deDE, 'fr-FR': frFR, + 'sv-SE': svSE, }; export { useTranslation } from './useTranslation'; diff --git a/src/workspaces/officerdev/src/locales/sv-SE.json b/src/workspaces/officerdev/src/locales/sv-SE.json new file mode 100644 index 00000000..597ba81f --- /dev/null +++ b/src/workspaces/officerdev/src/locales/sv-SE.json @@ -0,0 +1,643 @@ +{ + "common": { + "save": "Spara", + "delete": "Ta bort" + }, + "qrTransfer": { + "chooseFile": "Välj en fil att skicka", + "startScanning": "Börja skanna", + "receiveAnother": "Ta emot en till", + "stop": "Stoppa" + }, + "dav": { + "empty": "Inget här än. Lägg till en från en telefon eller stationär klient via CalDAV/CardDAV.", + "calendar": "Kalender", + "contacts": "Kontakter", + "readFailed": "Det gick inte att läsa {{name}}: {{reason}}" + }, + "terminal": { + "title": "Terminal", + "find": "Sök", + "runningShells": "Körande skal", + "loading": "Läser in…", + "noShells": "Inga skal körs.", + "refresh": "Uppdatera", + "kill": "Döda detta skal" + }, + "appStore": { + "loading": "Läser in", + "loadFailed": "Det gick inte att läsa in appbutiken.", + "installed": "Installerad", + "available": "Tillgänglig", + "needsYou": "Behöver dig", + "needsYouShort": "behöver dig", + "selectApp": "Välj en app", + "installFailed": "Installationen misslyckades", + "uninstall": "Avinstallera", + "enable": "Aktivera", + "disable": "Inaktivera", + "enabled": "aktiverad", + "disabled": "inaktiverad", + "removalNote": "Att inaktivera stoppar sidovagnen och dess container. Att avinstallera tar också bort containrarna — din data, konfiguration och den här appens tabeller sparas i båda fallen.", + "installing": "installerar", + "failed": "misslyckades", + "installedIcon": "installerad" + }, + "systemMonitor": { + "cpuPackage": "CPU-paket", + "user": "Användare", + "cpuPct": "CPU%", + "memPct": "MEM%", + "command": "Kommando", + "memory": "Minne", + "disks": "Diskar", + "temperature": "Temperatur", + "network": "Nätverk", + "power": "Ström", + "topProcesses": "Mest aktiva processer", + "filterPlaceholder": "filtrera namn eller image…", + "name": "Namn", + "status": "Status", + "mem": "Minne", + "uptime": "Drifttid", + "scopeDockers": "dockers" + }, + "codeEditor": { + "closeFile": "Stäng {{name}}", + "loading": "Läser in…", + "noFiles": "Inga filer", + "explorer": "Utforskare", + "openAFile": "Öppna en fil från utforskaren för att börja redigera", + "refresh": "Uppdatera trädet och läs om oförändrade öppna filer", + "readFailed": "Det gick inte att läsa filen", + "saved": "Filen sparad", + "saveFailed": "Det gick inte att spara filen", + "title": "Kodeditor" + }, + "widgets": { + "resync": "Synka om widgetar (läs om för att fånga upp nyligen distribuerade widgetar)" + }, + "preview": { + "title": "Förhandsgranskning", + "reload": "Läs om", + "changeUrl": "Ändra URL", + "openNewTab": "Öppna i en ny flik", + "pointAtApp": "Peka den här panelen mot en körande app", + "open": "Öppna", + "hint": "Allt webbläsaren kan nå. Det stannar kvar på den här panelen och överlever en omläsning.", + "connecting": "Ansluter…" + }, + "sendOff": { + "files": "Filer", + "where": "Vart", + "loading": "Läser in…", + "landsIn": "Hamnar i deras", + "landedIn": "Hamnade i", + "whoMaySend": "Vem som får skicka till mig", + "allowedLandIn": "Filer från alla du tillåter hamnar i", + "removeFile": "Ta bort {{name}}", + "sendTo": "Skicka till {{name}}", + "turningOff": "Att stänga av någon stoppar framtida sändningar och lämnar det de redan skickat orört." + }, + "panelName": { + "appStore": "Appbutik", + "appDetail": "Appdetaljer", + "calendar": "Kalender", + "contacts": "Kontakter", + "categories": "Kategorier", + "chat": "Chatt", + "chatSessions": "Sessioner", + "codeEditor": "Kodeditor", + "commander": "Commander", + "commanders": "Commanders", + "dashboardPreview": "Dashboard-förhandsgranskning", + "dashboards": "Dashboards", + "fileBrowser": "Filhanterare", + "pluginDetail": "Plugin-detaljer", + "plugins": "Plugins", + "preview": "Förhandsgranskning", + "qrReceive": "QR-mottagning", + "qrSend": "QR-sändning", + "scope": "Omfattning", + "systemMonitor": "Systemövervakning", + "widgets": "Widgetar", + "terminal": "Terminal", + "hostTerminal": "Värdterminal", + "runningShells": "Körande skal", + "pm2Processes": "pm2-processer" + }, + "dashboards": { + "title": "Dashboards", + "new": "Ny dashboard", + "delete": "Ta bort dashboard", + "confirmDelete": "Är du säker på att du vill ta bort", + "search": "Sök dashboards", + "name": "Namn", + "description": "Beskrivning", + "open": "Öppna dashboard", + "selectOne": "Välj en dashboard eller skapa en ny", + "namePlaceholder": "Min Dashboard", + "descriptionPlaceholder": "Vad är den här dashboarden till för?", + "template": "Mall", + "create": "Skapa", + "templates": { + "single": "Enkel", + "twoColumns": "2 kolumner", + "mainSide": "Huvud + sido", + "sidebar": "Sidopanel", + "grid": "2x2-rutnät", + "colsBottom": "Kolumner + botten" + } + }, + "fileViewer": { + "readAloud": "Läs upp", + "ocr": "Extrahera text (OCR)", + "transcribe": "Transkribera", + "extractAudio": "Extrahera ljud", + "extract": "Extrahera", + "saveNextTo": "Spara bredvid originalet", + "download": "Ladda ner", + "pdfViewer": "PDF-visare", + "videoFailed": "Det gick inte att läsa in videon", + "imageFailed": "Det gick inte att läsa in bilden", + "audioFailed": "Det gick inte att läsa in ljudfilen", + "audioTrack": "Ljudspår", + "subtitles": "Undertexter", + "track": "Spår {{n}}", + "saved": "Filen sparad", + "saveFailed": "Det gick inte att spara filen", + "scrollTop": "Rulla till toppen", + "speechFailed": "Det gick inte att generera talljud", + "ocrFailed": "Det gick inte att extrahera text från bilden", + "transcribeFailed": "Det gick inte att transkribera ljudet", + "extractAudioFailed": "Det gick inte att extrahera ljud från videon", + "extractFailed": "Det gick inte att extrahera arkivet", + "savedAs": "Sparad som ”{{name}}”", + "extractedTo": "Extraherad till ”{{name}}”", + "downloadInstead": "Ladda ner i stället", + "archiveFile": "Arkivfil" + }, + "plugins": { + "loading": "Läser in…", + "onThisMachine": "På den här maskinen", + "noPluginsIn": "Inga plugins i", + "available": "Tillgänglig", + "needsOnThisMachine": "Behöver på den här maskinen", + "install": "Installera", + "clonesInto": "Klonar förvaret till", + "deleteData": "Ta även bort all dess data", + "noTables": "Denna plugin deklarerar inga tabeller, så det finns ingen data att spara.", + "selectOne": "Välj en plugin.", + "disable": "Inaktivera", + "enable": "Aktivera", + "publisher": "Utgivare", + "version": "Version", + "needsPlatform": "Behöver plattform", + "wouldMount": "Skulle montera", + "ships": "Levererar", + "permissions": "Behörigheter", + "source": "Källa", + "mountsAt": "Monteras på", + "sidecar": "Sidovagn", + "deleteNamed": "Ta bort {{name}}", + "updateTo": "Uppdatera till {{version}}" + }, + "commandHq": { + "selectOne": "Välj en commander, eller starta en ny.", + "startConversation": "Starta konversationen", + "name": "Namn", + "nameHint": "Används för konversationen från start, i stället för att harnesset döper den efter ditt första meddelande.", + "referencePath": "Referenssökväg", + "referencePathHint": "Vad denna commander bevakar eller arbetar med — inte var den bor. Den kan lägga till fler av dessa själv när den väl körs.", + "new": "Ny commander", + "spawned": "Startade", + "deleteQ": "Ta bort?", + "uncategorised": "Okategoriserad", + "loading": "Läser in…", + "platformDeploys": "Plattformsdistributioner", + "endSession": "Avsluta session — släpper den så den kan återupptas någon annanstans", + "confirmDeleteHint": "Bekräfta borttagning — tar även bort konversationen, inte bara Command HQ-posten", + "confirmDelete": "Bekräfta borttagning", + "cancelDelete": "Avbryt borttagning", + "deleteCommander": "Ta bort commander", + "none": "Inga commanders här än.", + "startOne": "Starta en", + "confirmDeleteNamed": "Bekräfta borttagning av {{name}}", + "deleteNamed": "Ta bort {{name}}", + "categories": "Kategorier", + "noCategories": "Inga kategorier än", + "newCategory": "Ny kategori", + "allCommanders": "Alla commanders", + "categoryName": "Kategorinamn", + "guide": { + "whatIsIt": "Vad en commander är", + "starting": "Starta en", + "examples": "Exempel på ett första meddelande", + "whileRunning": "Medan den körs", + "whatIsItBody1": "En agent som fortsätter arbeta när du inte är här — den väntar på att något ska hända, agerar på det, och rapporterar tillbaka.", + "whatIsItBody2": "Det är en vanlig konversation. Du börjar med att berätta vad den ska bevaka och vad den ska göra åt det, med dina egna ord.", + "startingBody1": "Beskriv jobbet här, precis som du skulle till vem som helst. Säg vad den ska bevaka, var, och vad den ska göra när det utlöses.", + "startingBody2": "TODO: de konkreta stegen, när skapandeflödet är fastställt. Detta ersätter ”öppna bakgrundsjobbsdialogen och aktivera en bevakare”, vilket ingen kunde förväntas gissa sig till.", + "examplesBody1": "TODO: två eller tre exempel på inledande prompter, när skapandeflödet är fastställt. De är det som gör ”beskriv jobbet” till något en förstagångsanvändare kan agera på, i stället för bara en instruktion.", + "whileRunningBody1": "TODO: vad ägaren ser — var kostnaden visas, hur man läser vad dess startade agenter gör, och hur man stoppar den.", + "draft": "utkast" + }, + "startHint": "Den tittar på det du pekade den mot, och frågar dig sedan vad den ska bevaka.", + "startBlocked": "{{missing}} — sedan startar detta den.", + "confirmDeletingNamed": "Bekräfta borttagning av {{name}}" + }, + "chatHistory": { + "newChat": "Ny chatt", + "tryAgain": "Försök igen", + "refresh": "Uppdatera", + "refreshSessions": "Uppdatera sessioner", + "newChatInDir": "Ny chatt i en katalog…", + "loadFailed": "Det gick inte att läsa in sessioner", + "reading": "Läser transkript…", + "noSessions": "Inga sessioner än", + "liveFailed": "Det gick inte att läsa live-sessioner", + "asking": "Frågar agenten…", + "tabs": { + "tree": "Träd", + "latest": "Senaste", + "live": "Live", + "agents": "Agenter", + "commanders": "Commanders" + }, + "notifyPreference": "Notisinställning", + "notify": { + "everyTurn": "Vid varje turs slut", + "inputNeeded": "Bara när indata behövs", + "none": "Ingen" + }, + "notificationsLabel": "Notiser: {{choice}}", + "chooseDir": "Välj en arbetskatalog", + "create": "Skapa", + "newFolder": "Ny mapp", + "selectFolder": "Välj denna mapp", + "newFolderName": "Nytt mappnamn", + "noSubfolders": { + "one": "Inga synliga undermappar — {{count}} dold mapp är filtrerad bort", + "other": "Inga synliga undermappar — {{count}} dolda mappar är filtrerade bort" + }, + "showHidden": "Visa dolda", + "showHiddenCount": "Visa dolda ({{count}})", + "selectSession": "Välj en session att visa", + "endSession": "Avsluta session — dödar en pågående tur och släpper den så den kan återupptas någon annanstans", + "noReadable": "Inga läsbara konversationer här.", + "noConversations": "Inga konversationer än", + "newChatIn": "Ny chatt i {{path}}", + "sessionTitle": "Sessionstitel", + "saveTitle": "Spara titel", + "cancelRename": "Avbryt namnändring", + "confirmDelete": "Bekräfta borttagning", + "cancelDelete": "Avbryt borttagning", + "rename": "Byt namn", + "deleteSession": "Ta bort session", + "renameFailed": "Det gick inte att byta namn på sessionen: {{reason}}", + "deleteFailed": "Det gick inte att ta bort sessionen: {{reason}}", + "deleteAll": "Ta bort alla {{count}}?", + "confirmDeletingNamed": "Bekräfta borttagning av {{name}}", + "renameNamed": "Byt namn på {{name}}", + "deleteNamed": "Ta bort {{name}}", + "newChatTitle": "Ny chatt", + "renameHint": "Klicka för att byta namn på denna chatt", + "hideHidden": "Dölj dolda" + }, + "chat": { + "newChat": "Ny chatt", + "rename": "Byt namn", + "deleteQ": "Ta bort ”{{title}}”?", + "duplicateAgent": "Det finns redan en agent som heter ”{{name}}” på denna dashboard", + "composerPlaceholder": "Vad vill du jobba på nu?", + "turnFinished": "Turen avslutad · inget avslutande meddelande", + "job": { + "title": "Bakgrundsjobb", + "runsIn": "Körs i", + "command": "Kommando — kör exakt detta", + "prompt": "Prompt — beskriv det, agenten löser det", + "watch": "Bevaka något", + "watchHint": "I löptext. Agenten frågar innan den aktiveras om något är oklart.", + "handBack": "Avsluta och lämna tillbaka till agenten, aktivera sedan igen", + "keepGoing": "Fortsätt — agera varje gång och kör vidare", + "stopAfter": "Stoppa efter", + "start": "Starta", + "watchExample": "bevaka våra Gitea-förvar; vid varje ny push, hämta den och push:a till GitHub-spegeln", + "startJob": "Starta ett bakgrundsjobb eller en bevakare" + }, + "tasks": { + "restart": "Starta om", + "pinned": "Fäst", + "clearFinished": "Rensa alla avslutade", + "clearFinishedTasks": "Rensa alla avslutade uppgifter", + "stopJob": "Stoppa detta jobb", + "dismiss": "Avfärda", + "rerun": "Stoppa det och kör samma kommando igen", + "collapse": "Fäll ihop", + "collapseDetail": "Fäll ihop uppgiftsdetaljer", + "stopNamed": "Stoppa {{label}}", + "dismissNamed": "Avfärda {{label}}", + "status": "Uppgift {{status}}." + }, + "usage": { + "noSignIn": "Ingen sparad inloggning — kör /login för att använda den här", + "updating": "Uppdaterar…", + "unreadable": "Kunde inte läsa användning på den här maskinen.", + "loading": "Läser in…", + "limits": "Gränser", + "byDay": "Tokens per dag", + "byModel": "Tokens per modell", + "title": "Användning och gränser", + "modelBreakdown": "In {{input}} · ut {{output}} · cacheläsning {{cacheRead}} · cacheskrivning {{cacheWrite}}", + "switchTo": "Byt till {{account}}", + "switchToOrg": "Byt till {{account}} ({{org}})", + "signInExpired": "{{account}} — inloggningen har gått ut, kör /login" + }, + "attach": { + "image": "Bild", + "textFile": "Textfil", + "webpageUrl": "Webbsidans URL", + "attach": "Bifoga", + "readFailed": "Det gick inte att läsa {{name}}: {{reason}}", + "unknownError": "okänt fel", + "webpageTitle": "Bifoga webbsida", + "webpageHint": "Ange en URL att skrapa och bifoga som kontext.", + "scrapeFailed": "Det gick inte att skrapa webbsidan", + "uploadFailed": "Det gick inte att ladda upp bilden", + "dropImages": "Släpp bilder för att bifoga" + }, + "signIn": { + "title": "Logga in på Claude", + "done": "Inloggad. Nya turer använder dessa inloggningsuppgifter — ingen omstart behövs.", + "asking": "Frågar CLI:n efter en inloggningslänk…", + "openHint": "Öppna den här, godkänn, och klistra tillbaka koden du får.", + "authorise": "Godkänn på claude.com", + "copyLink": "Kopiera länken, för att öppna den i en annan webbläsare eller på din telefon", + "pasteCode": "klistra in koden" + }, + "message": { + "copyCode": "Kopiera koden", + "copyMarkdown": "Kopiera som ett markdown-block", + "showMore": "Visa mer ({{count}} rader till)", + "subagent": "Underagent", + "outputError": "Utdata — fel", + "contextCleared": "Kontexten rensad — inget ovanför detta finns kvar i minnet", + "interrupted": "Avbruten av användaren", + "agentRestarted": "Agenten omstartad — turen avbröts", + "retry": "Försök igen", + "planUnchanged": "Planläge oförändrat", + "approve": "Godkänn", + "frontmatter": "Frontmatter", + "systemPrompt": "Systemprompt", + "reviseHint": "Vad ska ändras? Agenten omarbetar planen utifrån detta.", + "waiting": "Väntar på ett svar", + "narrationFailed": "Uppläsningen genererades men kunde inte spelas upp.", + "readAloudFailed": "Det gick inte att läsa upp detta meddelande: {{reason}}", + "compacted": "Kontexten komprimerad", + "compactedAuto": "Kontexten komprimerad automatiskt", + "answerSent": "Svar skickat — väntar på agenten", + "other": "Annat..." + }, + "composer": { + "stop": "Stoppa", + "sendIntoTurn": "Skicka dessa till turen som redan körs", + "removeFromQueue": "Ta bort från kön", + "send": "Skicka", + "startHint": "Skicka ett meddelande för att börja", + "jumpToLatest": "Hoppa till senaste meddelandet", + "noAudio": "Inget ljud spelades in" + }, + "agent": { + "gone": "Den här panelens agent finns inte längre.", + "forget": "Glöm den", + "name": "Namnge denna agent", + "peers": "Motparter: {{names}}" + }, + "copy": "Kopiera" + }, + "files": { + "folderGone": "Den mappen är borta — tillbaka till starten", + "searchFailed": "Sökningen misslyckades", + "createFolderFailed": "Det gick inte att skapa mappen", + "createFileFailed": "Det gick inte att skapa filen", + "uploadFailed": "Det gick inte att ladda upp filerna", + "renameFailed": "Det gick inte att byta namn", + "deleteFailed": "Det gick inte att ta bort", + "deleteSomeFailed": "Det gick inte att ta bort vissa objekt", + "downloadFailed": "Det gick inte att ladda ner", + "pathCopied": "Sökvägen kopierad", + "generatingSpeech": "Genererar talljud…", + "speechFailed": "Det gick inte att generera talljud", + "extracting": "Extraherar arkiv…", + "extractFailed": "Det gick inte att extrahera arkivet", + "cloned": "Förvaret klonat", + "cloneFailed": "Det gick inte att klona förvaret", + "cloning": "Klonar…", + "duplicateFailed": "Det gick inte att duplicera", + "compressing": "Komprimerar…", + "compressFailed": "Det gick inte att komprimera", + "pasteFailed": "Det gick inte att klistra in", + "pasteNeedsSecure": "Att klistra in från urklipp kräver en säker kontext (https). Dra in filen i stället.", + "copiedItems": { + "one": "Kopierade {{count}} objekt", + "other": "Kopierade {{count}} objekt" + }, + "cutItems": { + "one": "Klippte ut {{count}} objekt", + "other": "Klippte ut {{count}} objekt" + }, + "pastedItems": { + "one": "Klistrade in {{count}} objekt", + "other": "Klistrade in {{count}} objekt" + }, + "uploadedFiles": { + "one": "Laddade upp {{count}} fil", + "other": "Laddade upp {{count}} filer" + }, + "deleteItemsQ": { + "one": "Ta bort {{count}} objekt?", + "other": "Ta bort {{count}} objekt?" + }, + "deletedItems": { + "one": "Tog bort {{count}} objekt", + "other": "Tog bort {{count}} objekt" + }, + "createdFolder": "Skapade mappen ”{{name}}”", + "created": "Skapade ”{{name}}”", + "renamedTo": "Bytte namn till ”{{name}}”", + "deleteQ": "Ta bort ”{{name}}”?", + "deleted": "Tog bort ”{{name}}”", + "extractedTo": "Extraherad till ”{{name}}”", + "duplicated": "Duplicerade ”{{name}}”", + "pastedInto": "Klistrade in i ”{{name}}”", + "unpinned": "Lossade ”{{name}}”", + "pinned": "Fäste ”{{name}}”", + "menu": { + "copyPath": "Kopiera sökväg", + "chatAboutThis": "Chatta om detta", + "paste": "Klistra in", + "newFile": "Ny fil", + "newFolder": "Ny mapp", + "uploadFiles": "Ladda upp filer", + "uploadFolder": "Ladda upp mapp", + "cloneRepository": "Klona förvar", + "hideHiddenFiles": "Dölj dolda filer", + "showHiddenFiles": "Visa dolda filer", + "createDashboardHere": "Skapa dashboard här", + "downloadVideo": "Ladda ner video", + "dictate": "Diktera", + "dropToUpload": "Släpp filer för att ladda upp", + "openFolder": "Öppna mapp", + "showLocation": "Visa plats", + "download": "Ladda ner", + "noResults": "Inga resultat hittades", + "open": "Öppna", + "openInEditor": "Öppna i editorn", + "openInEditorTooLarge": "Öppna i editorn (för stor)", + "pasteIntoFolder": "Klistra in i mapp", + "readAloud": "Läs upp", + "extract": "Extrahera", + "runTask": "Kör uppgift", + "runAgent": "Kör agent", + "cut": "Klipp ut", + "copy": "Kopiera", + "duplicate": "Duplicera", + "rename": "Byt namn", + "compress": "Komprimera", + "compressSelection": "Komprimera markering", + "unpin": "Lossa", + "pin": "Fäst", + "chat": "Chatta...", + "delete": "Ta bort", + "gitClone": "Git-klon", + "searchFiles": "Sök filer...", + "clearSelection": "Rensa markering", + "selected": { + "one": "vald", + "other": "valda" + }, + "refresh": "Uppdatera" + }, + "grid": { + "empty": "Denna mapp är tom", + "sort": "Sortera:", + "folderType": "Mapp", + "name": "Namn", + "type": "Typ", + "size": "Storlek", + "date": "Datum" + } + }, + "taskRunner": { + "stop": "Stoppa", + "taskFailed": "Uppgiften misslyckades", + "taskComplete": "Uppgiften klar", + "noSubtitles": "Inga undertexter", + "none": "Ingen", + "noVideos": "Inga videor hittades i denna mapp.", + "differentLayout": "Annan layout — kör dessa separat:", + "skipped": "Hoppade över (konvertera separat):", + "analyzing": "Analyserar filer…", + "close": "Stäng", + "runningOn": "Körs på", + "queue": "Kö", + "concurrency": "Samtidighet", + "model": "Modell", + "steps": "Steg", + "stopPipeline": "Stoppa pipeline", + "pipelineFailed": "Pipeline misslyckades", + "pipelineComplete": "Pipeline klar", + "viewInJobs": "Visa i Jobb", + "copyOutput": "Kopiera utdata", + "track": "Spår {{n}}", + "runFromStep": "Kör från steg {{n}}" + }, + "newEntry": { + "nameReserved": "Det namnet är reserverat", + "nameSlash": "Namnet får inte innehålla \"/\"", + "nameExists": "\"{{name}}\" finns redan här", + "urlSpaces": "En URL kan inte innehålla mellanslag", + "cancel": "Avbryt", + "file": { + "title": "Ny fil", + "description": "Inkludera filändelsen — det är vad editorn använder för att välja språk. Den öppnas när den skapats.", + "label": "Filnamn", + "placeholder": "notes.txt", + "submit": "Skapa och öppna" + }, + "folder": { + "title": "Ny mapp", + "description": "Skapas i mappen du tittar på.", + "label": "Mappnamn", + "placeholder": "documents", + "submit": "Skapa mapp" + }, + "clone": { + "title": "Klona förvar", + "description": "Klonas till mappen du tittar på, under sitt eget namn.", + "label": "Förvarets URL", + "placeholder": "https://github.com/owner/repo.git", + "submit": "Klona" + } + }, + "videoDownload": { + "title": "Ladda ner video", + "descriptionInput": "Klistra in en video- eller spellista-URL — den hämtar detaljer innan nedladdning.", + "descriptionPreview": "Granska och ladda ner.", + "urlPlaceholder": "https://www.youtube.com/watch?v=… eller …/playlist?list=…", + "audioOnly": "Extrahera endast ljud (mp3)", + "fetch": "Hämta", + "back": "Tillbaka", + "audioOnlyLabel": "Endast ljud", + "video": "Video", + "itemCount": { + "one": "{{count}} objekt", + "other": "{{count}} objekt" + }, + "subfolderPlaceholder": "Undermapp (valfritt) — lämna tomt för denna mapp", + "downloadAll": "Ladda ner alla", + "couldNotFetch": "Det gick inte att hämta", + "downloading": "Laddar ner…", + "saving": "Sparar…", + "saved": "Sparad", + "retry": "Försök igen", + "download": "Ladda ner", + "couldNotFetchInfo": "Det gick inte att hämta information", + "timedOut": "Tidsgränsen överskreds", + "downloadFailed": "Nedladdningen misslyckades", + "couldNotStart": "Det gick inte att starta nedladdningen" + }, + "fileBrowserWidget": { + "title": "Filhanterare", + "search": "Sök...", + "browse": "Bläddra", + "recent": "Senaste", + "pinned": "Fäst", + "noResults": "Inga resultat", + "emptyDirectory": "Tom katalog", + "noPinnedFiles": "Inga fästa filer", + "noRecentFiles": "Inga senaste filer", + "uploading": "Laddar upp...", + "empty": "Denna mapp är tom", + "sort": "Sortera:" + }, + "agentRunner": { + "agentRunning": "Agenten körs", + "keepsGoing": "Den fortsätter oavsett om den här är öppen. Följ den i chatten — senaste sessionen överst.", + "openChat": "Öppna chatt", + "target": "Mål", + "starting": "Startar…", + "runAgent": "Kör agent", + "startFailed": "Det gick inte att starta agenten" + }, + "dictate": { + "title": "Diktera", + "description": "Spelar in ljud. Tryck Enter eller klicka Stoppa för att spara.", + "recording": "Spelar in...", + "startingStatus": "Startar...", + "stopSave": "Stoppa och spara", + "noAudioCaptured": "Inget ljud spelades in", + "micAccessFailed": "Det gick inte att komma åt mikrofonen", + "recordingFailed": "Inspelningen misslyckades" + } +}