From 840e8d9403c1b5c4a6db36ef5f7c36c6d7f85141 Mon Sep 17 00:00:00 2001 From: Sondre <68125004+Finityno@users.noreply.github.com> Date: Thu, 22 Jan 2026 13:17:20 +0100 Subject: [PATCH] Add support for norwegian translations From the quick overview most of it looks correct First pass with Opus 4.5, and got 5.2 high to review for me in addition to me going through, and most looks correct --- packages/app/src/context/language.tsx | 12 +- packages/app/src/i18n/ar.ts | 3 +- packages/app/src/i18n/da.ts | 3 +- packages/app/src/i18n/de.ts | 3 +- packages/app/src/i18n/en.ts | 3 +- packages/app/src/i18n/es.ts | 3 +- packages/app/src/i18n/fr.ts | 3 +- packages/app/src/i18n/ja.ts | 3 +- packages/app/src/i18n/ko.ts | 3 +- packages/app/src/i18n/no.ts | 599 ++++++++++++++++++++++++++ packages/app/src/i18n/pl.ts | 3 +- packages/app/src/i18n/ru.ts | 3 +- packages/app/src/i18n/zh.ts | 3 +- packages/app/src/i18n/zht.ts | 3 +- packages/ui/src/i18n/no.ts | 95 ++++ 15 files changed, 727 insertions(+), 15 deletions(-) create mode 100644 packages/app/src/i18n/no.ts create mode 100644 packages/ui/src/i18n/no.ts diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx index e34e399d839c..1e3c85719afb 100644 --- a/packages/app/src/context/language.tsx +++ b/packages/app/src/context/language.tsx @@ -15,6 +15,7 @@ import { dict as ja } from "@/i18n/ja" import { dict as pl } from "@/i18n/pl" import { dict as ru } from "@/i18n/ru" import { dict as ar } from "@/i18n/ar" +import { dict as no } from "@/i18n/no" import { dict as uiEn } from "@opencode-ai/ui/i18n/en" import { dict as uiZh } from "@opencode-ai/ui/i18n/zh" import { dict as uiZht } from "@opencode-ai/ui/i18n/zht" @@ -27,13 +28,14 @@ import { dict as uiJa } from "@opencode-ai/ui/i18n/ja" import { dict as uiPl } from "@opencode-ai/ui/i18n/pl" import { dict as uiRu } from "@opencode-ai/ui/i18n/ru" import { dict as uiAr } from "@opencode-ai/ui/i18n/ar" +import { dict as uiNo } from "@opencode-ai/ui/i18n/no" -export type Locale = "en" | "zh" | "zht" | "ko" | "de" | "es" | "fr" | "da" | "ja" | "pl" | "ru" | "ar" +export type Locale = "en" | "zh" | "zht" | "ko" | "de" | "es" | "fr" | "da" | "ja" | "pl" | "ru" | "ar" | "no" type RawDictionary = typeof en & typeof uiEn type Dictionary = i18n.Flatten -const LOCALES: readonly Locale[] = ["en", "zh", "zht", "ko", "de", "es", "fr", "da", "ja", "pl", "ru", "ar"] +const LOCALES: readonly Locale[] = ["en", "zh", "zht", "ko", "de", "es", "fr", "da", "ja", "pl", "ru", "ar", "no"] function detectLocale(): Locale { if (typeof navigator !== "object") return "en" @@ -54,6 +56,7 @@ function detectLocale(): Locale { if (language.toLowerCase().startsWith("pl")) return "pl" if (language.toLowerCase().startsWith("ru")) return "ru" if (language.toLowerCase().startsWith("ar")) return "ar" + if (language.toLowerCase().startsWith("no") || language.toLowerCase().startsWith("nb") || language.toLowerCase().startsWith("nn")) return "no" } return "en" @@ -81,6 +84,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont if (store.locale === "pl") return "pl" if (store.locale === "ru") return "ru" if (store.locale === "ar") return "ar" + if (store.locale === "no") return "no" return "en" }) @@ -103,6 +107,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont if (locale() === "pl") return { ...base, ...i18n.flatten({ ...pl, ...uiPl }) } if (locale() === "ru") return { ...base, ...i18n.flatten({ ...ru, ...uiRu }) } if (locale() === "ar") return { ...base, ...i18n.flatten({ ...ar, ...uiAr }) } + if (locale() === "no") return { ...base, ...i18n.flatten({ ...no, ...uiNo }) } return { ...base, ...i18n.flatten({ ...ko, ...uiKo }) } }) @@ -121,6 +126,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont pl: "language.pl", ru: "language.ru", ar: "language.ar", + no: "language.no", } const label = (value: Locale) => t(labelKey[value]) @@ -141,4 +147,4 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont }, } }, -}) +}) \ No newline at end of file diff --git a/packages/app/src/i18n/ar.ts b/packages/app/src/i18n/ar.ts index 627e85a69ad8..86433f16b163 100644 --- a/packages/app/src/i18n/ar.ts +++ b/packages/app/src/i18n/ar.ts @@ -304,6 +304,7 @@ export const dict = { "language.ru": "الروسية", "language.pl": "البولندية", "language.ar": "العربية", + "language.no": "النرويجية", "toast.language.title": "لغة", "toast.language.description": "تم التبديل إلى {{language}}", @@ -643,4 +644,4 @@ export const dict = { "workspace.reset.archived.one": "ستتم أرشفة جلسة واحدة.", "workspace.reset.archived.many": "ستتم أرشفة {{count}} جلسات.", "workspace.reset.note": "سيؤدي هذا إلى إعادة تعيين مساحة العمل لتتطابق مع الفرع الافتراضي.", -} +} \ No newline at end of file diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts index 0021b2cd04fb..8dcfa1ca378a 100644 --- a/packages/app/src/i18n/da.ts +++ b/packages/app/src/i18n/da.ts @@ -287,6 +287,7 @@ export const dict = { "language.ru": "Russisk", "language.pl": "Polsk", "language.ar": "Arabisk", + "language.no": "Norsk", "toast.language.title": "Sprog", "toast.language.description": "Skiftede til {{language}}", @@ -569,4 +570,4 @@ export const dict = { "workspace.reset.archived.one": "1 session vil blive arkiveret.", "workspace.reset.archived.many": "{{count}} sessioner vil blive arkiveret.", "workspace.reset.note": "Dette vil nulstille arbejdsområdet til at matche hovedgrenen.", -} +} \ No newline at end of file diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index 9a41c5f66ecb..79e47f613dd5 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -292,6 +292,7 @@ export const dict = { "language.ru": "Russisch", "language.pl": "Polnisch", "language.ar": "Arabisch", + "language.no": "Norwegisch", "toast.language.title": "Sprache", "toast.language.description": "Zu {{language}} gewechselt", @@ -578,4 +579,4 @@ export const dict = { "workspace.reset.archived.one": "1 Sitzung wird archiviert.", "workspace.reset.archived.many": "{{count}} Sitzungen werden archiviert.", "workspace.reset.note": "Dadurch wird der Arbeitsbereich auf den Standard-Branch zurückgesetzt.", -} satisfies Partial> +} satisfies Partial> \ No newline at end of file diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 34df35f3d699..f0136250357d 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -304,6 +304,7 @@ export const dict = { "language.ru": "Russian", "language.pl": "Polish", "language.ar": "Arabic", + "language.no": "Norwegian", "toast.language.title": "Language", "toast.language.description": "Switched to {{language}}", @@ -647,4 +648,4 @@ export const dict = { "workspace.reset.archived.one": "1 session will be archived.", "workspace.reset.archived.many": "{{count}} sessions will be archived.", "workspace.reset.note": "This will reset the workspace to match the default branch.", -} +} \ No newline at end of file diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts index 0edf3078ba08..97dd44ffbf13 100644 --- a/packages/app/src/i18n/es.ts +++ b/packages/app/src/i18n/es.ts @@ -287,6 +287,7 @@ export const dict = { "language.ru": "Ruso", "language.pl": "Polaco", "language.ar": "Árabe", + "language.no": "Noruego", "toast.language.title": "Idioma", "toast.language.description": "Cambiado a {{language}}", @@ -572,4 +573,4 @@ export const dict = { "workspace.reset.archived.one": "1 sesión será archivada.", "workspace.reset.archived.many": "{{count}} sesiones serán archivadas.", "workspace.reset.note": "Esto restablecerá el espacio de trabajo para coincidir con la rama predeterminada.", -} +} \ No newline at end of file diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts index 07e3a00929dc..36af1250175a 100644 --- a/packages/app/src/i18n/fr.ts +++ b/packages/app/src/i18n/fr.ts @@ -287,6 +287,7 @@ export const dict = { "language.ru": "Russe", "language.pl": "Polonais", "language.ar": "Arabe", + "language.no": "Norvégien", "toast.language.title": "Langue", "toast.language.description": "Passé à {{language}}", @@ -579,4 +580,4 @@ export const dict = { "workspace.reset.archived.one": "1 session sera archivée.", "workspace.reset.archived.many": "{{count}} sessions seront archivées.", "workspace.reset.note": "Cela réinitialisera l'espace de travail pour correspondre à la branche par défaut.", -} +} \ No newline at end of file diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts index 8f2846328e7e..ef5b62f56159 100644 --- a/packages/app/src/i18n/ja.ts +++ b/packages/app/src/i18n/ja.ts @@ -285,6 +285,7 @@ export const dict = { "language.ru": "ロシア語", "language.pl": "ポーランド語", "language.ar": "アラビア語", + "language.no": "ノルウェー語", "toast.language.title": "言語", "toast.language.description": "{{language}}に切り替えました", @@ -566,4 +567,4 @@ export const dict = { "workspace.reset.archived.one": "1つのセッションがアーカイブされます。", "workspace.reset.archived.many": "{{count}}個のセッションがアーカイブされます。", "workspace.reset.note": "これにより、ワークスペースはデフォルトブランチと一致するようにリセットされます。", -} +} \ No newline at end of file diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index 792c4a5d885f..61c45a5de586 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -289,6 +289,7 @@ export const dict = { "language.ru": "러시아어", "language.pl": "폴란드어", "language.ar": "아랍어", + "language.no": "노르웨이어", "toast.language.title": "언어", "toast.language.description": "{{language}}(으)로 전환됨", @@ -567,4 +568,4 @@ export const dict = { "workspace.reset.archived.one": "1개의 세션이 보관됩니다.", "workspace.reset.archived.many": "{{count}}개의 세션이 보관됩니다.", "workspace.reset.note": "이 작업은 작업 공간을 기본 브랜치와 일치하도록 재설정합니다.", -} +} \ No newline at end of file diff --git a/packages/app/src/i18n/no.ts b/packages/app/src/i18n/no.ts new file mode 100644 index 000000000000..63a9055a0472 --- /dev/null +++ b/packages/app/src/i18n/no.ts @@ -0,0 +1,599 @@ +import { dict as en } from "./en" +type Keys = keyof typeof en + +export const dict: Record = { + "command.category.suggested": "Foreslått", + "command.category.view": "Visning", + "command.category.project": "Prosjekt", + "command.category.provider": "Leverandør", + "command.category.server": "Server", + "command.category.session": "Sesjon", + "command.category.theme": "Tema", + "command.category.language": "Språk", + "command.category.file": "Fil", + "command.category.terminal": "Terminal", + "command.category.model": "Modell", + "command.category.mcp": "MCP", + "command.category.agent": "Agent", + "command.category.permissions": "Tillatelser", + "command.category.workspace": "Arbeidsområde", + "command.category.settings": "Innstillinger", + + "theme.scheme.system": "System", + "theme.scheme.light": "Lys", + "theme.scheme.dark": "Mørk", + + "command.sidebar.toggle": "Veksle sidepanel", + "command.project.open": "Åpne prosjekt", + "command.provider.connect": "Koble til leverandør", + "command.server.switch": "Bytt server", + "command.settings.open": "Åpne innstillinger", + "command.session.previous": "Forrige sesjon", + "command.session.next": "Neste sesjon", + "command.session.archive": "Arkiver sesjon", + + "command.palette": "Kommandopalett", + + "command.theme.cycle": "Bytt tema", + "command.theme.set": "Bruk tema: {{theme}}", + "command.theme.scheme.cycle": "Bytt fargevalg", + "command.theme.scheme.set": "Bruk fargevalg: {{scheme}}", + + "command.language.cycle": "Bytt språk", + "command.language.set": "Bruk språk: {{language}}", + + "command.session.new": "Ny sesjon", + "command.file.open": "Åpne fil", + "command.file.open.description": "Søk i filer og kommandoer", + "command.terminal.toggle": "Veksle terminal", + "command.review.toggle": "Veksle gjennomgang", + "command.terminal.new": "Ny terminal", + "command.terminal.new.description": "Opprett en ny terminalfane", + "command.steps.toggle": "Veksle trinn", + "command.steps.toggle.description": "Vis eller skjul trinn for gjeldende melding", + "command.message.previous": "Forrige melding", + "command.message.previous.description": "Gå til forrige brukermelding", + "command.message.next": "Neste melding", + "command.message.next.description": "Gå til neste brukermelding", + "command.model.choose": "Velg modell", + "command.model.choose.description": "Velg en annen modell", + "command.mcp.toggle": "Veksle MCP-er", + "command.mcp.toggle.description": "Veksle MCP-er", + "command.agent.cycle": "Bytt agent", + "command.agent.cycle.description": "Bytt til neste agent", + "command.agent.cycle.reverse": "Bytt agent bakover", + "command.agent.cycle.reverse.description": "Bytt til forrige agent", + "command.model.variant.cycle": "Bytt tenkeinnsats", + "command.model.variant.cycle.description": "Bytt til neste innsatsnivå", + "command.permissions.autoaccept.enable": "Godta endringer automatisk", + "command.permissions.autoaccept.disable": "Slutt å godta endringer automatisk", + "command.session.undo": "Angre", + "command.session.undo.description": "Angre siste melding", + "command.session.redo": "Gjør om", + "command.session.redo.description": "Gjør om siste angrede melding", + "command.session.compact": "Komprimer sesjon", + "command.session.compact.description": "Oppsummer sesjonen for å redusere kontekststørrelsen", + "command.session.fork": "Forgren fra melding", + "command.session.fork.description": "Opprett en ny sesjon fra en tidligere melding", + "command.session.share": "Del sesjon", + "command.session.share.description": "Del denne sesjonen og kopier URL-en til utklippstavlen", + "command.session.unshare": "Slutt å dele sesjon", + "command.session.unshare.description": "Slutt å dele denne sesjonen", + + "palette.search.placeholder": "Søk i filer og kommandoer", + "palette.empty": "Ingen resultater funnet", + "palette.group.commands": "Kommandoer", + "palette.group.files": "Filer", + + "dialog.provider.search.placeholder": "Søk etter leverandører", + "dialog.provider.empty": "Ingen leverandører funnet", + "dialog.provider.group.popular": "Populære", + "dialog.provider.group.other": "Andre", + "dialog.provider.tag.recommended": "Anbefalt", + "dialog.provider.anthropic.note": "Koble til med Claude Pro/Max eller API-nøkkel", + + "dialog.model.select.title": "Velg modell", + "dialog.model.search.placeholder": "Søk etter modeller", + "dialog.model.empty": "Ingen modellresultater", + "dialog.model.manage": "Administrer modeller", + "dialog.model.manage.description": "Tilpass hvilke modeller som vises i modellvelgeren.", + + "dialog.model.unpaid.freeModels.title": "Gratis modeller levert av OpenCode", + "dialog.model.unpaid.addMore.title": "Legg til flere modeller fra populære leverandører", + + "dialog.provider.viewAll": "Vis alle leverandører", + + "provider.connect.title": "Koble til {{provider}}", + "provider.connect.title.anthropicProMax": "Logg inn med Claude Pro/Max", + "provider.connect.selectMethod": "Velg innloggingsmetode for {{provider}}.", + "provider.connect.method.apiKey": "API-nøkkel", + "provider.connect.status.inProgress": "Autorisering pågår...", + "provider.connect.status.waiting": "Venter på autorisering...", + "provider.connect.status.failed": "Autorisering mislyktes: {{error}}", + "provider.connect.apiKey.description": + "Skriv inn din {{provider}} API-nøkkel for å koble til kontoen din og bruke {{provider}}-modeller i OpenCode.", + "provider.connect.apiKey.label": "{{provider}} API-nøkkel", + "provider.connect.apiKey.placeholder": "API-nøkkel", + "provider.connect.apiKey.required": "API-nøkkel er påkrevd", + "provider.connect.opencodeZen.line1": + "OpenCode Zen gir deg tilgang til et utvalg av pålitelige optimaliserte modeller for kodeagenter.", + "provider.connect.opencodeZen.line2": + "Med én enkelt API-nøkkel får du tilgang til modeller som Claude, GPT, Gemini, GLM og flere.", + "provider.connect.opencodeZen.visit.prefix": "Besøk ", + "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", + "provider.connect.opencodeZen.visit.suffix": " for å hente API-nøkkelen din.", + "provider.connect.oauth.code.visit.prefix": "Besøk ", + "provider.connect.oauth.code.visit.link": "denne lenken", + "provider.connect.oauth.code.visit.suffix": + " for å hente autorisasjonskoden din for å koble til kontoen din og bruke {{provider}}-modeller i OpenCode.", + "provider.connect.oauth.code.label": "{{method}} autorisasjonskode", + "provider.connect.oauth.code.placeholder": "Autorisasjonskode", + "provider.connect.oauth.code.required": "Autorisasjonskode er påkrevd", + "provider.connect.oauth.code.invalid": "Ugyldig autorisasjonskode", + "provider.connect.oauth.auto.visit.prefix": "Besøk ", + "provider.connect.oauth.auto.visit.link": "denne lenken", + "provider.connect.oauth.auto.visit.suffix": + " og skriv inn koden nedenfor for å koble til kontoen din og bruke {{provider}}-modeller i OpenCode.", + "provider.connect.oauth.auto.confirmationCode": "Bekreftelseskode", + "provider.connect.toast.connected.title": "{{provider}} tilkoblet", + "provider.connect.toast.connected.description": "{{provider}}-modeller er nå tilgjengelige.", + + "model.tag.free": "Gratis", + "model.tag.latest": "Nyeste", + "model.provider.anthropic": "Anthropic", + "model.provider.openai": "OpenAI", + "model.provider.google": "Google", + "model.provider.xai": "xAI", + "model.provider.meta": "Meta", + "model.input.text": "tekst", + "model.input.image": "bilde", + "model.input.audio": "lyd", + "model.input.video": "video", + "model.input.pdf": "pdf", + "model.tooltip.allows": "Tillater: {{inputs}}", + "model.tooltip.reasoning.allowed": "Tillater resonnering", + "model.tooltip.reasoning.none": "Ingen resonnering", + "model.tooltip.context": "Kontekstgrense {{limit}}", + + "common.search.placeholder": "Søk", + "common.goBack": "Gå tilbake", + "common.loading": "Laster", + "common.loading.ellipsis": "...", + "common.cancel": "Avbryt", + "common.submit": "Send inn", + "common.save": "Lagre", + "common.saving": "Lagrer...", + "common.default": "Standard", + "common.attachment": "vedlegg", + + "prompt.placeholder.shell": "Skriv inn shell-kommando...", + "prompt.placeholder.normal": 'Spør om hva som helst... "{{example}}"', + "prompt.mode.shell": "Shell", + "prompt.mode.shell.exit": "ESC for å avslutte", + + "prompt.example.1": "Fiks en TODO i kodebasen", + "prompt.example.2": "Hva er teknologistabelen i dette prosjektet?", + "prompt.example.3": "Fiks ødelagte tester", + "prompt.example.4": "Forklar hvordan autentisering fungerer", + "prompt.example.5": "Finn og fiks sikkerhetssårbarheter", + "prompt.example.6": "Legg til enhetstester for brukerservicen", + "prompt.example.7": "Refaktorer denne funksjonen for bedre lesbarhet", + "prompt.example.8": "Hva betyr denne feilen?", + "prompt.example.9": "Hjelp meg med å feilsøke dette problemet", + "prompt.example.10": "Generer API-dokumentasjon", + "prompt.example.11": "Optimaliser databasespørringer", + "prompt.example.12": "Legg til inputvalidering", + "prompt.example.13": "Lag en ny komponent for...", + "prompt.example.14": "Hvordan deployer jeg dette prosjektet?", + "prompt.example.15": "Gjennomgå koden min for beste praksis", + "prompt.example.16": "Legg til feilhåndtering i denne funksjonen", + "prompt.example.17": "Forklar dette regex-mønsteret", + "prompt.example.18": "Konverter dette til TypeScript", + "prompt.example.19": "Legg til logging i hele kodebasen", + "prompt.example.20": "Hvilke avhengigheter er utdaterte?", + "prompt.example.21": "Hjelp meg med å skrive et migreringsskript", + "prompt.example.22": "Implementer caching for dette endepunktet", + "prompt.example.23": "Legg til paginering i denne listen", + "prompt.example.24": "Lag en CLI-kommando for...", + "prompt.example.25": "Hvordan fungerer miljøvariabler her?", + + "prompt.popover.emptyResults": "Ingen matchende resultater", + "prompt.popover.emptyCommands": "Ingen matchende kommandoer", + "prompt.dropzone.label": "Slipp bilder eller PDF-er her", + "prompt.slash.badge.custom": "egendefinert", + "prompt.context.active": "aktiv", + "prompt.context.includeActiveFile": "Inkluder aktiv fil", + "prompt.context.removeActiveFile": "Fjern aktiv fil fra kontekst", + "prompt.context.removeFile": "Fjern fil fra kontekst", + "prompt.action.attachFile": "Legg ved fil", + "prompt.attachment.remove": "Fjern vedlegg", + "prompt.action.send": "Send", + "prompt.action.stop": "Stopp", + + "prompt.toast.pasteUnsupported.title": "Liming ikke støttet", + "prompt.toast.pasteUnsupported.description": "Kun bilder eller PDF-er kan limes inn her.", + "prompt.toast.modelAgentRequired.title": "Velg en agent og modell", + "prompt.toast.modelAgentRequired.description": "Velg en agent og modell før du sender en forespørsel.", + "prompt.toast.worktreeCreateFailed.title": "Kunne ikke opprette worktree", + "prompt.toast.sessionCreateFailed.title": "Kunne ikke opprette sesjon", + "prompt.toast.shellSendFailed.title": "Kunne ikke sende shell-kommando", + "prompt.toast.commandSendFailed.title": "Kunne ikke sende kommando", + "prompt.toast.promptSendFailed.title": "Kunne ikke sende forespørsel", + + "dialog.mcp.title": "MCP-er", + "dialog.mcp.description": "{{enabled}} av {{total}} aktivert", + "dialog.mcp.empty": "Ingen MCP-er konfigurert", + + "mcp.status.connected": "tilkoblet", + "mcp.status.failed": "mislyktes", + "mcp.status.needs_auth": "trenger autentisering", + "mcp.status.disabled": "deaktivert", + + "dialog.fork.empty": "Ingen meldinger å forgrene fra", + + "dialog.directory.search.placeholder": "Søk etter mapper", + "dialog.directory.empty": "Ingen mapper funnet", + + "dialog.server.title": "Servere", + "dialog.server.description": "Bytt hvilken OpenCode-server denne appen kobler til.", + "dialog.server.search.placeholder": "Søk etter servere", + "dialog.server.empty": "Ingen servere ennå", + "dialog.server.add.title": "Legg til en server", + "dialog.server.add.url": "Server-URL", + "dialog.server.add.placeholder": "http://localhost:4096", + "dialog.server.add.error": "Kunne ikke koble til server", + "dialog.server.add.checking": "Sjekker...", + "dialog.server.add.button": "Legg til", + "dialog.server.default.title": "Standardserver", + "dialog.server.default.description": + "Koble til denne serveren ved oppstart i stedet for å starte en lokal server. Krever omstart.", + "dialog.server.default.none": "Ingen server valgt", + "dialog.server.default.set": "Sett gjeldende server som standard", + "dialog.server.default.clear": "Tøm", + "dialog.server.action.remove": "Fjern server", + + "dialog.project.edit.title": "Rediger prosjekt", + "dialog.project.edit.name": "Navn", + "dialog.project.edit.icon": "Ikon", + "dialog.project.edit.icon.alt": "Prosjektikon", + "dialog.project.edit.icon.hint": "Klikk eller dra et bilde", + "dialog.project.edit.icon.recommended": "Anbefalt: 128x128px", + "dialog.project.edit.color": "Farge", + "dialog.project.edit.color.select": "Velg fargen {{color}}", + + "context.breakdown.title": "Kontekstfordeling", + "context.breakdown.note": + 'Omtrentlig fordeling av input-tokens. "Annet" inkluderer verktøydefinisjoner og overhead.', + "context.breakdown.system": "System", + "context.breakdown.user": "Bruker", + "context.breakdown.assistant": "Assistent", + "context.breakdown.tool": "Verktøykall", + "context.breakdown.other": "Annet", + + "context.systemPrompt.title": "Systemprompt", + "context.rawMessages.title": "Rå meldinger", + + "context.stats.session": "Sesjon", + "context.stats.messages": "Meldinger", + "context.stats.provider": "Leverandør", + "context.stats.model": "Modell", + "context.stats.limit": "Kontekstgrense", + "context.stats.totalTokens": "Totalt antall tokens", + "context.stats.usage": "Forbruk", + "context.stats.inputTokens": "Input-tokens", + "context.stats.outputTokens": "Output-tokens", + "context.stats.reasoningTokens": "Resonnerings-tokens", + "context.stats.cacheTokens": "Cache-tokens (les/skriv)", + "context.stats.userMessages": "Brukermeldinger", + "context.stats.assistantMessages": "Assistentmeldinger", + "context.stats.totalCost": "Total kostnad", + "context.stats.sessionCreated": "Sesjon opprettet", + "context.stats.lastActivity": "Siste aktivitet", + + "context.usage.tokens": "Tokens", + "context.usage.usage": "Forbruk", + "context.usage.cost": "Kostnad", + "context.usage.clickToView": "Klikk for å se kontekst", + "context.usage.view": "Se kontekstforbruk", + + "language.en": "Engelsk", + "language.zh": "Kinesisk (forenklet)", + "language.zht": "Kinesisk (tradisjonell)", + "language.ko": "Koreansk", + "language.de": "Tysk", + "language.es": "Spansk", + "language.fr": "Fransk", + "language.ja": "Japansk", + "language.da": "Dansk", + "language.ru": "Russisk", + "language.pl": "Polsk", + "language.ar": "Arabisk", + "language.no": "Norsk", + + "toast.language.title": "Språk", + "toast.language.description": "Byttet til {{language}}", + + "toast.theme.title": "Tema byttet", + "toast.scheme.title": "Fargevalg", + + "toast.permissions.autoaccept.on.title": "Godtar endringer automatisk", + "toast.permissions.autoaccept.on.description": "Redigerings- og skrivetillatelser vil bli godkjent automatisk", + "toast.permissions.autoaccept.off.title": "Sluttet å godta endringer automatisk", + "toast.permissions.autoaccept.off.description": "Redigerings- og skrivetillatelser vil kreve godkjenning", + + "toast.model.none.title": "Ingen modell valgt", + "toast.model.none.description": "Koble til en leverandør for å oppsummere denne sesjonen", + + "toast.file.loadFailed.title": "Kunne ikke laste fil", + + "toast.session.share.copyFailed.title": "Kunne ikke kopiere URL til utklippstavlen", + "toast.session.share.success.title": "Sesjon delt", + "toast.session.share.success.description": "Delings-URL kopiert til utklippstavlen!", + "toast.session.share.failed.title": "Kunne ikke dele sesjon", + "toast.session.share.failed.description": "Det oppstod en feil under deling av sesjonen", + + "toast.session.unshare.success.title": "Deling av sesjon stoppet", + "toast.session.unshare.success.description": "Sesjonen deles ikke lenger!", + "toast.session.unshare.failed.title": "Kunne ikke stoppe deling av sesjon", + "toast.session.unshare.failed.description": "Det oppstod en feil da delingen av sesjonen skulle stoppes", + + "toast.session.listFailed.title": "Kunne ikke laste sesjoner for {{project}}", + + "toast.update.title": "Oppdatering tilgjengelig", + "toast.update.description": "En ny versjon av OpenCode ({{version}}) er nå tilgjengelig for installasjon.", + "toast.update.action.installRestart": "Installer og start på nytt", + "toast.update.action.notYet": "Ikke nå", + + "error.page.title": "Noe gikk galt", + "error.page.description": "Det oppstod en feil under lasting av applikasjonen.", + "error.page.details.label": "Feildetaljer", + "error.page.action.restart": "Start på nytt", + "error.page.action.checking": "Sjekker...", + "error.page.action.checkUpdates": "Se etter oppdateringer", + "error.page.action.updateTo": "Oppdater til {{version}}", + "error.page.report.prefix": "Vennligst rapporter denne feilen til OpenCode-teamet", + "error.page.report.discord": "på Discord", + "error.page.version": "Versjon: {{version}}", + + "error.dev.rootNotFound": + "Rotelement ikke funnet. Glemte du å legge det til i index.html? Eller kanskje id-attributten er feilstavet?", + + "error.globalSync.connectFailed": "Kunne ikke koble til server. Kjører det en server på `{{url}}`?", + + "error.chain.unknown": "Ukjent feil", + "error.chain.causedBy": "Forårsaket av:", + "error.chain.apiError": "API-feil", + "error.chain.status": "Status: {{status}}", + "error.chain.retryable": "Kan prøves på nytt: {{retryable}}", + "error.chain.responseBody": "Responsinnhold:\n{{body}}", + "error.chain.didYouMean": "Mente du: {{suggestions}}", + "error.chain.modelNotFound": "Modell ikke funnet: {{provider}}/{{model}}", + "error.chain.checkConfig": "Sjekk leverandør-/modellnavnene i konfigurasjonen din (opencode.json)", + "error.chain.mcpFailed": 'MCP-server "{{name}}" mislyktes. Merk at OpenCode ikke støtter MCP-autentisering ennå.', + "error.chain.providerAuthFailed": "Leverandørautentisering mislyktes ({{provider}}): {{message}}", + "error.chain.providerInitFailed": + 'Kunne ikke initialisere leverandør "{{provider}}". Sjekk legitimasjon og konfigurasjon.', + "error.chain.configJsonInvalid": "Konfigurasjonsfilen på {{path}} er ikke gyldig JSON(C)", + "error.chain.configJsonInvalidWithMessage": "Konfigurasjonsfilen på {{path}} er ikke gyldig JSON(C): {{message}}", + "error.chain.configDirectoryTypo": + 'Mappen "{{dir}}" i {{path}} er ikke gyldig. Gi mappen nytt navn til "{{suggestion}}" eller fjern den. Dette er en vanlig skrivefeil.', + "error.chain.configFrontmatterError": "Kunne ikke analysere frontmatter i {{path}}:\n{{message}}", + "error.chain.configInvalid": "Konfigurasjonsfilen på {{path}} er ugyldig", + "error.chain.configInvalidWithMessage": "Konfigurasjonsfilen på {{path}} er ugyldig: {{message}}", + + "notification.permission.title": "Tillatelse påkrevd", + "notification.permission.description": "{{sessionTitle}} i {{projectName}} trenger tillatelse", + "notification.question.title": "Spørsmål", + "notification.question.description": "{{sessionTitle}} i {{projectName}} har et spørsmål", + "notification.action.goToSession": "Gå til sesjon", + + "notification.session.responseReady.title": "Svar klart", + "notification.session.error.title": "Sesjonsfeil", + "notification.session.error.fallbackDescription": "Det oppstod en feil", + + "home.recentProjects": "Nylige prosjekter", + "home.empty.title": "Ingen nylige prosjekter", + "home.empty.description": "Kom i gang ved å åpne et lokalt prosjekt", + + "session.tab.session": "Sesjon", + "session.tab.review": "Gjennomgang", + "session.tab.context": "Kontekst", + "session.panel.reviewAndFiles": "Gjennomgang og filer", + "session.review.filesChanged": "{{count}} filer endret", + "session.review.loadingChanges": "Laster endringer...", + "session.review.empty": "Ingen endringer i denne sesjonen ennå", + "session.messages.renderEarlier": "Vis tidligere meldinger", + "session.messages.loadingEarlier": "Laster inn tidligere meldinger...", + "session.messages.loadEarlier": "Last inn tidligere meldinger", + "session.messages.loading": "Laster meldinger...", + "session.messages.jumpToLatest": "Hopp til nyeste", + + "session.context.addToContext": "Legg til {{selection}} i kontekst", + + "session.new.worktree.main": "Hovedgren", + "session.new.worktree.mainWithBranch": "Hovedgren ({{branch}})", + "session.new.worktree.create": "Opprett nytt worktree", + "session.new.lastModified": "Sist endret", + + "session.header.search.placeholder": "Søk i {{project}}", + "session.header.searchFiles": "Søk etter filer", + + "session.share.popover.title": "Publiser på nett", + "session.share.popover.description.shared": + "Denne sesjonen er offentlig på nettet. Den er tilgjengelig for alle med lenken.", + "session.share.popover.description.unshared": + "Del sesjonen offentlig på nettet. Den vil være tilgjengelig for alle med lenken.", + "session.share.action.share": "Del", + "session.share.action.publish": "Publiser", + "session.share.action.publishing": "Publiserer...", + "session.share.action.unpublish": "Avpubliser", + "session.share.action.unpublishing": "Avpubliserer...", + "session.share.action.view": "Vis", + "session.share.copy.copied": "Kopiert", + "session.share.copy.copyLink": "Kopier lenke", + + "lsp.tooltip.none": "Ingen LSP-servere", + "lsp.label.connected": "{{count}} LSP", + + "prompt.loading": "Laster prompt...", + "terminal.loading": "Laster terminal...", + "terminal.title": "Terminal", + "terminal.title.numbered": "Terminal {{number}}", + "terminal.close": "Lukk terminal", + "terminal.connectionLost.title": "Tilkobling mistet", + "terminal.connectionLost.description": + "Terminalforbindelsen ble avbrutt. Dette kan skje når serveren starter på nytt.", + + "common.closeTab": "Lukk fane", + "common.dismiss": "Avvis", + "common.requestFailed": "Forespørsel mislyktes", + "common.moreOptions": "Flere alternativer", + "common.learnMore": "Lær mer", + "common.rename": "Gi nytt navn", + "common.reset": "Tilbakestill", + "common.delete": "Slett", + "common.close": "Lukk", + "common.edit": "Rediger", + "common.loadMore": "Last flere", + "common.key.esc": "ESC", + + "sidebar.menu.toggle": "Veksle meny", + "sidebar.nav.projectsAndSessions": "Prosjekter og sesjoner", + "sidebar.settings": "Innstillinger", + "sidebar.help": "Hjelp", + "sidebar.workspaces.enable": "Aktiver arbeidsområder", + "sidebar.workspaces.disable": "Deaktiver arbeidsområder", + "sidebar.gettingStarted.title": "Kom i gang", + "sidebar.gettingStarted.line1": "OpenCode inkluderer gratis modeller så du kan starte umiddelbart.", + "sidebar.gettingStarted.line2": "Koble til en leverandør for å bruke modeller, inkl. Claude, GPT, Gemini osv.", + "sidebar.project.recentSessions": "Nylige sesjoner", + "sidebar.project.viewAllSessions": "Vis alle sesjoner", + + "settings.section.desktop": "Skrivebord", + "settings.tab.general": "Generelt", + "settings.tab.shortcuts": "Snarveier", + + "settings.general.section.appearance": "Utseende", + "settings.general.section.notifications": "Systemvarsler", + "settings.general.section.sounds": "Lydeffekter", + + "settings.general.row.language.title": "Språk", + "settings.general.row.language.description": "Endre visningsspråket for OpenCode", + "settings.general.row.appearance.title": "Utseende", + "settings.general.row.appearance.description": "Tilpass hvordan OpenCode ser ut på enheten din", + "settings.general.row.theme.title": "Tema", + "settings.general.row.theme.description": "Tilpass hvordan OpenCode er tematisert.", + "settings.general.row.font.title": "Skrift", + "settings.general.row.font.description": "Tilpass mono-skriften som brukes i kodeblokker", + + "settings.general.notifications.agent.title": "Agent", + "settings.general.notifications.agent.description": + "Vis systemvarsel når agenten er ferdig eller trenger oppmerksomhet", + "settings.general.notifications.permissions.title": "Tillatelser", + "settings.general.notifications.permissions.description": "Vis systemvarsel når en tillatelse er påkrevd", + "settings.general.notifications.errors.title": "Feil", + "settings.general.notifications.errors.description": "Vis systemvarsel når det oppstår en feil", + + "settings.general.sounds.agent.title": "Agent", + "settings.general.sounds.agent.description": "Spill av lyd når agenten er ferdig eller trenger oppmerksomhet", + "settings.general.sounds.permissions.title": "Tillatelser", + "settings.general.sounds.permissions.description": "Spill av lyd når en tillatelse er påkrevd", + "settings.general.sounds.errors.title": "Feil", + "settings.general.sounds.errors.description": "Spill av lyd når det oppstår en feil", + + "settings.shortcuts.title": "Tastatursnarveier", + "settings.shortcuts.reset.button": "Tilbakestill til standard", + "settings.shortcuts.reset.toast.title": "Snarveier tilbakestilt", + "settings.shortcuts.reset.toast.description": "Tastatursnarveier er tilbakestilt til standard.", + "settings.shortcuts.conflict.title": "Snarvei allerede i bruk", + "settings.shortcuts.conflict.description": "{{keybind}} er allerede tilordnet til {{titles}}.", + "settings.shortcuts.unassigned": "Ikke tilordnet", + "settings.shortcuts.pressKeys": "Trykk taster", + "settings.shortcuts.search.placeholder": "Søk etter snarveier", + "settings.shortcuts.search.empty": "Ingen snarveier funnet", + + "settings.shortcuts.group.general": "Generelt", + "settings.shortcuts.group.session": "Sesjon", + "settings.shortcuts.group.navigation": "Navigasjon", + "settings.shortcuts.group.modelAndAgent": "Modell og agent", + "settings.shortcuts.group.terminal": "Terminal", + "settings.shortcuts.group.prompt": "Prompt", + + "settings.providers.title": "Leverandører", + "settings.providers.description": "Leverandørinnstillinger vil kunne konfigureres her.", + "settings.models.title": "Modeller", + "settings.models.description": "Modellinnstillinger vil kunne konfigureres her.", + "settings.agents.title": "Agenter", + "settings.agents.description": "Agentinnstillinger vil kunne konfigureres her.", + "settings.commands.title": "Kommandoer", + "settings.commands.description": "Kommandoinnstillinger vil kunne konfigureres her.", + "settings.mcp.title": "MCP", + "settings.mcp.description": "MCP-innstillinger vil kunne konfigureres her.", + + "settings.permissions.title": "Tillatelser", + "settings.permissions.description": "Kontroller hvilke verktøy serveren kan bruke som standard.", + "settings.permissions.section.tools": "Verktøy", + "settings.permissions.toast.updateFailed.title": "Kunne ikke oppdatere tillatelser", + + "settings.permissions.action.allow": "Tillat", + "settings.permissions.action.ask": "Spør", + "settings.permissions.action.deny": "Avslå", + + "settings.permissions.tool.read.title": "Les", + "settings.permissions.tool.read.description": "Lesing av en fil (matcher filbanen)", + "settings.permissions.tool.edit.title": "Rediger", + "settings.permissions.tool.edit.description": "Endre filer, inkludert redigeringer, skriving, patcher og multi-redigeringer", + "settings.permissions.tool.glob.title": "Glob", + "settings.permissions.tool.glob.description": "Match filer ved hjelp av glob-mønstre", + "settings.permissions.tool.grep.title": "Grep", + "settings.permissions.tool.grep.description": "Søk i filinnhold ved hjelp av regulære uttrykk", + "settings.permissions.tool.list.title": "Liste", + "settings.permissions.tool.list.description": "List filer i en mappe", + "settings.permissions.tool.bash.title": "Bash", + "settings.permissions.tool.bash.description": "Kjør shell-kommandoer", + "settings.permissions.tool.task.title": "Oppgave", + "settings.permissions.tool.task.description": "Start underagenter", + "settings.permissions.tool.skill.title": "Ferdighet", + "settings.permissions.tool.skill.description": "Last en ferdighet etter navn", + "settings.permissions.tool.lsp.title": "LSP", + "settings.permissions.tool.lsp.description": "Kjør språkserverforespørsler", + "settings.permissions.tool.todoread.title": "Les gjøremål", + "settings.permissions.tool.todoread.description": "Les gjøremålslisten", + "settings.permissions.tool.todowrite.title": "Skriv gjøremål", + "settings.permissions.tool.todowrite.description": "Oppdater gjøremålslisten", + "settings.permissions.tool.webfetch.title": "Webhenting", + "settings.permissions.tool.webfetch.description": "Hent innhold fra en URL", + "settings.permissions.tool.websearch.title": "Websøk", + "settings.permissions.tool.websearch.description": "Søk på nettet", + "settings.permissions.tool.codesearch.title": "Kodesøk", + "settings.permissions.tool.codesearch.description": "Søk etter kode på nettet", + "settings.permissions.tool.external_directory.title": "Ekstern mappe", + "settings.permissions.tool.external_directory.description": "Få tilgang til filer utenfor prosjektmappen", + "settings.permissions.tool.doom_loop.title": "Doom Loop", + "settings.permissions.tool.doom_loop.description": "Oppdager gjentatte verktøykall med identisk input", + + "workspace.new": "Nytt arbeidsområde", + "workspace.type.local": "lokal", + "workspace.type.sandbox": "sandkasse", + "workspace.create.failed.title": "Kunne ikke opprette arbeidsområde", + "workspace.delete.failed.title": "Kunne ikke slette arbeidsområde", + "workspace.resetting.title": "Tilbakestiller arbeidsområde", + "workspace.resetting.description": "Dette kan ta et minutt.", + "workspace.reset.failed.title": "Kunne ikke tilbakestille arbeidsområde", + "workspace.reset.success.title": "Arbeidsområde tilbakestilt", + "workspace.reset.success.description": "Arbeidsområdet samsvarer nå med standardgrenen.", + "workspace.status.checking": "Sjekker for ikke-sammenslåtte endringer...", + "workspace.status.error": "Kunne ikke bekrefte git-status.", + "workspace.status.clean": "Ingen ikke-sammenslåtte endringer oppdaget.", + "workspace.status.dirty": "Ikke-sammenslåtte endringer oppdaget i dette arbeidsområdet.", + "workspace.delete.title": "Slett arbeidsområde", + "workspace.delete.confirm": 'Slette arbeidsområdet "{{name}}"?', + "workspace.delete.button": "Slett arbeidsområde", + "workspace.reset.title": "Tilbakestill arbeidsområde", + "workspace.reset.confirm": 'Tilbakestille arbeidsområdet "{{name}}"?', + "workspace.reset.button": "Tilbakestill arbeidsområde", + "workspace.reset.archived.none": "Ingen aktive sesjoner vil bli arkivert.", + "workspace.reset.archived.one": "1 sesjon vil bli arkivert.", + "workspace.reset.archived.many": "{{count}} sesjoner vil bli arkivert.", + "workspace.reset.note": "Dette vil tilbakestille arbeidsområdet til å samsvare med standardgrenen.", +} \ No newline at end of file diff --git a/packages/app/src/i18n/pl.ts b/packages/app/src/i18n/pl.ts index 092ef37960b5..0145835c8b66 100644 --- a/packages/app/src/i18n/pl.ts +++ b/packages/app/src/i18n/pl.ts @@ -303,6 +303,7 @@ export const dict = { "language.pl": "Polski", "language.ru": "Rosyjski", "language.ar": "Arabski", + "language.no": "Norweski", "toast.language.title": "Język", "toast.language.description": "Przełączono na {{language}}", @@ -648,4 +649,4 @@ export const dict = { "workspace.reset.archived.one": "1 sesja zostanie zarchiwizowana.", "workspace.reset.archived.many": "{{count}} sesji zostanie zarchiwizowanych.", "workspace.reset.note": "To zresetuje przestrzeń roboczą, aby odpowiadała domyślnej gałęzi.", -} +} \ No newline at end of file diff --git a/packages/app/src/i18n/ru.ts b/packages/app/src/i18n/ru.ts index 21a061db85c2..b038a734c1ba 100644 --- a/packages/app/src/i18n/ru.ts +++ b/packages/app/src/i18n/ru.ts @@ -303,6 +303,7 @@ export const dict = { "language.da": "Датский", "language.ru": "Русский", "language.ar": "Арабский", + "language.no": "Норвежский", "toast.language.title": "Язык", "toast.language.description": "Переключено на {{language}}", @@ -651,4 +652,4 @@ export const dict = { "workspace.reset.archived.one": "1 сессия будет архивирована.", "workspace.reset.archived.many": "{{count}} сессий будет архивировано.", "workspace.reset.note": "Рабочее пространство будет сброшено в соответствие с веткой по умолчанию.", -} +} \ No newline at end of file diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index a8b11869d791..59e37ca5706d 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -285,6 +285,7 @@ export const dict = { "language.ru": "俄语", "language.pl": "波兰语", "language.ar": "阿拉伯语", + "language.no": "挪威语", "toast.language.title": "语言", "toast.language.description": "已切换到{{language}}", @@ -561,4 +562,4 @@ export const dict = { "workspace.reset.archived.one": "将归档 1 个会话。", "workspace.reset.archived.many": "将归档 {{count}} 个会话。", "workspace.reset.note": "这将把工作区重置为与默认分支一致。", -} satisfies Partial> +} satisfies Partial> \ No newline at end of file diff --git a/packages/app/src/i18n/zht.ts b/packages/app/src/i18n/zht.ts index 81406d32a4b8..ab64b241763c 100644 --- a/packages/app/src/i18n/zht.ts +++ b/packages/app/src/i18n/zht.ts @@ -281,6 +281,7 @@ export const dict = { "language.ko": "韓語", "language.ru": "俄語", "language.ar": "阿拉伯語", + "language.no": "挪威語", "toast.language.title": "語言", "toast.language.description": "已切換到 {{language}}", @@ -557,4 +558,4 @@ export const dict = { "workspace.reset.archived.one": "將封存 1 個工作階段。", "workspace.reset.archived.many": "將封存 {{count}} 個工作階段。", "workspace.reset.note": "這將把工作區重設為與預設分支一致。", -} satisfies Partial> +} satisfies Partial> \ No newline at end of file diff --git a/packages/ui/src/i18n/no.ts b/packages/ui/src/i18n/no.ts new file mode 100644 index 000000000000..4b9937076d50 --- /dev/null +++ b/packages/ui/src/i18n/no.ts @@ -0,0 +1,95 @@ +import { dict as en } from "./en" +type Keys = keyof typeof en + +export const dict: Record = { + "ui.sessionReview.title": "Sesjonsendringer", + "ui.sessionReview.diffStyle.unified": "Samlet", + "ui.sessionReview.diffStyle.split": "Delt", + "ui.sessionReview.expandAll": "Utvid alle", + "ui.sessionReview.collapseAll": "Fold sammen alle", + + "ui.sessionTurn.steps.show": "Vis trinn", + "ui.sessionTurn.steps.hide": "Skjul trinn", + "ui.sessionTurn.summary.response": "Svar", + "ui.sessionTurn.diff.showMore": "Vis flere endringer ({{count}})", + + "ui.sessionTurn.retry.retrying": "Prøver igjen", + "ui.sessionTurn.retry.inSeconds": "om {{seconds}}s", + + "ui.sessionTurn.status.delegating": "Delegerer arbeid", + "ui.sessionTurn.status.planning": "Planlegger neste trinn", + "ui.sessionTurn.status.gatheringContext": "Samler inn kontekst", + "ui.sessionTurn.status.searchingCodebase": "Søker i kodebasen", + "ui.sessionTurn.status.searchingWeb": "Søker på nettet", + "ui.sessionTurn.status.makingEdits": "Gjør endringer", + "ui.sessionTurn.status.runningCommands": "Kjører kommandoer", + "ui.sessionTurn.status.thinking": "Tenker", + "ui.sessionTurn.status.thinkingWithTopic": "Tenker - {{topic}}", + "ui.sessionTurn.status.gatheringThoughts": "Samler tanker", + "ui.sessionTurn.status.consideringNextSteps": "Vurderer neste trinn", + + "ui.messagePart.diagnostic.error": "Feil", + "ui.messagePart.title.edit": "Rediger", + "ui.messagePart.title.write": "Skriv", + "ui.messagePart.option.typeOwnAnswer": "Skriv ditt eget svar", + "ui.messagePart.review.title": "Gjennomgå svarene dine", + + "ui.list.loading": "Laster", + "ui.list.empty": "Ingen resultater", + "ui.list.clearFilter": "Tøm filter", + "ui.list.emptyWithFilter.prefix": "Ingen resultater for", + "ui.list.emptyWithFilter.suffix": "", + + "ui.messageNav.newMessage": "Ny melding", + + "ui.textField.copyToClipboard": "Kopier til utklippstavlen", + "ui.textField.copied": "Kopiert", + + "ui.imagePreview.alt": "Bildeforhåndsvisning", + + "ui.tool.read": "Les", + "ui.tool.list": "Liste", + "ui.tool.glob": "Glob", + "ui.tool.grep": "Grep", + "ui.tool.webfetch": "Webhenting", + "ui.tool.shell": "Shell", + "ui.tool.patch": "Patch", + "ui.tool.todos": "Gjøremål", + "ui.tool.todos.read": "Les gjøremål", + "ui.tool.questions": "Spørsmål", + "ui.tool.agent": "{{type}}-agent", + + "ui.common.file.one": "fil", + "ui.common.file.other": "filer", + "ui.common.question.one": "spørsmål", + "ui.common.question.other": "spørsmål", + + "ui.common.add": "Legg til", + "ui.common.cancel": "Avbryt", + "ui.common.confirm": "Bekreft", + "ui.common.dismiss": "Avvis", + "ui.common.close": "Lukk", + "ui.common.next": "Neste", + "ui.common.submit": "Send inn", + + "ui.permission.deny": "Avslå", + "ui.permission.allowAlways": "Tillat alltid", + "ui.permission.allowOnce": "Tillat én gang", + + "ui.message.expand": "Utvid melding", + "ui.message.collapse": "Skjul melding", + "ui.message.copy": "Kopier", + "ui.message.copied": "Kopiert!", + "ui.message.attachment.alt": "vedlegg", + + "ui.patch.action.deleted": "Slettet", + "ui.patch.action.created": "Opprettet", + "ui.patch.action.moved": "Flyttet", + "ui.patch.action.patched": "Oppdatert", + + "ui.question.subtitle.answered": "{{count}} besvart", + "ui.question.answer.none": "(ingen svar)", + "ui.question.review.notAnswered": "(ikke besvart)", + "ui.question.multiHint": "(velg alle som gjelder)", + "ui.question.custom.placeholder": "Skriv svaret ditt...", +} \ No newline at end of file