summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSondre <[email protected]>2026-01-22 13:47:19 +0100
committerGitHub <[email protected]>2026-01-22 06:47:19 -0600
commit8427f40e8dc1ca6e187af789387a6e756cea557f (patch)
tree23c3736145eb97a61dc4d0277081fcfbe387cbab
parente9c6a4a2d4b853014dfd965c9e8451adfc2f5c6d (diff)
downloadopencode-8427f40e8dc1ca6e187af789387a6e756cea557f.tar.gz
opencode-8427f40e8dc1ca6e187af789387a6e756cea557f.zip
feat: Add support for Norwegian translations (#10018)
-rw-r--r--packages/app/src/context/language.tsx12
-rw-r--r--packages/app/src/i18n/ar.ts3
-rw-r--r--packages/app/src/i18n/da.ts3
-rw-r--r--packages/app/src/i18n/de.ts3
-rw-r--r--packages/app/src/i18n/en.ts3
-rw-r--r--packages/app/src/i18n/es.ts3
-rw-r--r--packages/app/src/i18n/fr.ts3
-rw-r--r--packages/app/src/i18n/ja.ts3
-rw-r--r--packages/app/src/i18n/ko.ts3
-rw-r--r--packages/app/src/i18n/no.ts599
-rw-r--r--packages/app/src/i18n/pl.ts3
-rw-r--r--packages/app/src/i18n/ru.ts3
-rw-r--r--packages/app/src/i18n/zh.ts3
-rw-r--r--packages/app/src/i18n/zht.ts3
-rw-r--r--packages/ui/src/i18n/no.ts95
15 files changed, 727 insertions, 15 deletions
diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx
index e34e399d8..1e3c85719 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<RawDictionary>
-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 627e85a69..86433f16b 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 0021b2cd0..8dcfa1ca3 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 9a41c5f66..79e47f613 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<Record<Keys, string>>
+} satisfies Partial<Record<Keys, string>> \ No newline at end of file
diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts
index 34df35f3d..f01362503 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 0edf3078b..97dd44ffb 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 07e3a0092..36af12501 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 8f2846328..ef5b62f56 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 792c4a5d8..61c45a5de 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 000000000..63a9055a0
--- /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<Keys, string> = {
+ "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 092ef3796..0145835c8 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 21a061db8..b038a734c 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 a8b11869d..59e37ca57 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<Record<Keys, string>>
+} satisfies Partial<Record<Keys, string>> \ No newline at end of file
diff --git a/packages/app/src/i18n/zht.ts b/packages/app/src/i18n/zht.ts
index 81406d32a..ab64b2417 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<Record<Keys, string>>
+} satisfies Partial<Record<Keys, string>> \ 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 000000000..4b9937076
--- /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<Keys, string> = {
+ "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