feat: Add support for Norwegian translations (#10018)

This commit is contained in:
Sondre
2026-01-22 13:47:19 +01:00
committed by GitHub
parent e9c6a4a2d4
commit 8427f40e8d
15 changed files with 727 additions and 15 deletions

View File

@@ -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
},
}
},
})
})

View File

@@ -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": "سيؤدي هذا إلى إعادة تعيين مساحة العمل لتتطابق مع الفرع الافتراضي.",
}
}

View File

@@ -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.",
}
}

View File

@@ -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>>

View File

@@ -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.",
}
}

View File

@@ -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.",
}
}

View File

@@ -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.",
}
}

View File

@@ -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": "これにより、ワークスペースはデフォルトブランチと一致するようにリセットされます。",
}
}

View File

@@ -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": "이 작업은 작업 공간을 기본 브랜치와 일치하도록 재설정합니다.",
}
}

599
packages/app/src/i18n/no.ts Normal file
View File

@@ -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.",
}

View File

@@ -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.",
}
}

View File

@@ -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": "Рабочее пространство будет сброшено в соответствие с веткой по умолчанию.",
}
}

View File

@@ -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>>

View File

@@ -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>>

View File

@@ -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...",
}