Compare commits

..

1 Commits

Author SHA1 Message Date
Aiden Cline 9fdd4fddb6 fix(session): use session selection for commands 2026-08-17 02:49:33 +00:00
268 changed files with 9840 additions and 10744 deletions
+3 -3
View File
@@ -81,6 +81,7 @@
"@solidjs/router": "catalog:",
"@tanstack/solid-query": "5.91.4",
"@tanstack/solid-virtual": "catalog:",
"@thisbeyond/solid-dnd": "0.7.5",
"diff": "catalog:",
"effect": "catalog:",
"fuzzysort": "catalog:",
@@ -188,15 +189,12 @@
"@types/bun": "catalog:",
"@typescript/native-preview": "catalog:",
"effect": "catalog:",
"solid-js": "catalog:",
},
"peerDependencies": {
"effect": "4.0.0-beta.101",
"solid-js": ">=1.9.0",
},
"optionalPeers": [
"effect",
"solid-js",
],
},
"packages/codemode": {
@@ -2955,6 +2953,8 @@
"@testing-library/user-event": ["@testing-library/user-event@14.6.3", "", { "peerDependencies": { "@testing-library/dom": ">=7.21.4" } }, "sha512-6dBq67jT8lE+JTE8Exm02Kt6ze43hz1jdiSpSJwtTZiT1xQQ6b7nZYTTQ9njdArdU8XklOwaDp/AbT/eYSKF4g=="],
"@thisbeyond/solid-dnd": ["@thisbeyond/solid-dnd@0.7.5", "", { "peerDependencies": { "solid-js": "^1.5" } }, "sha512-DfI5ff+yYGpK9M21LhYwIPlbP2msKxN2ARwuu6GF8tT1GgNVDTI8VCQvH4TJFoVApP9d44izmAcTh/iTCH2UUw=="],
"@tsconfig/bun": ["@tsconfig/bun@1.0.9", "", {}, "sha512-4M0/Ivfwcpz325z6CwSifOBZYji3DFOEpY6zEUt0+Xi2qRhzwvmqQN9XAHJh3OVvRJuAqVTLU2abdCplvp6mwQ=="],
"@tsconfig/node22": ["@tsconfig/node22@22.0.2", "", {}, "sha512-Kmwj4u8sDRDrMYRoN9FDEcXD8UpBSaPQQ24Gz+Gamqfm7xxn+GBR7ge/Z7pK8OXNGyUzbSwJj+TH6B+DS/epyA=="],
-1
View File
@@ -27,7 +27,6 @@
- When migrating existing copy to i18n, preserve the English text byte-for-byte unless the task explicitly requests a copy change.
- NEVER change existing English text or English keys to facilitate translation. English is intentional, designer-written source copy; adapt locale-specific translations and i18n mechanics around it.
- Keep locale complexity behind the shared typed i18n APIs. Feature and component code should use `language.t(...)` for ordinary copy and `language.plural(baseKey, count, params)` for count-sensitive copy. It must not inspect the locale, call `Intl.PluralRules`, construct or select plural-category keys such as `.one` or `.other`, or branch on locale-specific grammar.
- Do not compose translated count phrases or sentence fragments in feature components. Add a focused language-context operation that owns plural selection and composition when one UI concept needs coordinated keys.
- Prefer complete translated phrases. Do not concatenate grammatical fragments or make call sites assemble sentences. Keep placeholders to irreducible dynamic values such as names, paths, and counts.
- If a translation cannot be expressed by the current API, deepen the shared language/UI i18n module so one typed call owns locale selection, plural resolution, fallback, and interpolation. Do not leak that machinery into product code.
- Do not translate from model knowledge alone. Verify terminology and grammar with Unicode CLDR locale/plural data, Microsoft Localization Style Guides and terminology, Apple localization/style guidance and localized platform UI, Mozilla localization style guides, Mozilla Pontoon, and the Firefox localization corpus at `github.com/mozilla-l10n/firefox-l10n`.
@@ -151,6 +151,9 @@ export async function setupTimeline(
},
}),
)
if (settings.newLayoutDesigns === false) {
localStorage.setItem("app-version.v1", JSON.stringify({ version: "1.17.20" }))
}
}, input.settings ?? {})
if (input.locale) {
await page.addInitScript((locale) => {
@@ -48,6 +48,7 @@ benchmark.describe("performance: review pane scaling", () => {
await setupTimelineBenchmark(page, {
historyTurns: 0,
eventBatch: 1,
newLayoutDesigns: true,
})
await page.route("**/vcs/diff**", (route) =>
route.fulfill({
@@ -13,8 +13,21 @@ import { measureSessionSwitch, waitForStableTimeline } from "./session-tab-switc
type Result = Awaited<ReturnType<typeof measureSessionSwitch>>
benchmark("benchmarks cold and hot session tab switching", async ({ browser, report }, testInfo) => {
benchmark.setTimeout(180_000)
const results = { cold: [] as Result[], hot: [] as Result[] }
for (const mode of ["cold", "hot"] as const) {
for (let run = 0; run < 5; run++) {
results[mode].push(
await withBenchmarkPage(browser, `session-tab-switch-${mode}-${run}`, (page) => trial(page, mode), testInfo),
)
}
}
report({ results, summary: summarize(results) })
})
benchmark(
"benchmarks session tab switching with and without the review pane",
"benchmarks v2 session tab switching with and without the review pane",
async ({ browser, report }, testInfo) => {
benchmark.setTimeout(360_000)
const runs = Number(process.env.SESSION_TAB_SWITCH_RUNS ?? 5)
@@ -28,8 +41,8 @@ benchmark(
results[reviewPane][mode].push(
await withBenchmarkPage(
browser,
`session-tab-switch-${reviewPane}-${mode}-${run}`,
(page) => trial(page, mode, reviewPane),
`session-tab-switch-v2-${reviewPane}-${mode}-${run}`,
(page) => trial(page, mode, { newLayoutDesigns: true, reviewPane }),
testInfo,
),
)
@@ -40,10 +53,14 @@ benchmark(
},
)
async function trial(page: Page, mode: "cold" | "hot", reviewPane: "closed" | "open") {
const reviewDiffs = createReviewDiffs()
async function trial(
page: Page,
mode: "cold" | "hot",
options?: { newLayoutDesigns?: boolean; reviewPane?: "closed" | "open" },
) {
const reviewDiffs = options?.newLayoutDesigns ? createReviewDiffs() : undefined
await mockStressTimeline(page, { vcsDiff: reviewDiffs })
await installTimelineSettings(page)
if (options?.newLayoutDesigns) await installTimelineSettings(page)
await installStressSessionTabs(page)
if (mode === "hot") {
await page.goto(stressSessionHref(fixture.targetID))
@@ -55,7 +72,7 @@ async function trial(page: Page, mode: "cold" | "hot", reviewPane: "closed" | "o
await expectSessionTitle(page, fixture.expected.sourceTitle)
}
await waitForStableTimeline(page, fixture.expected.sourceMessageIDs.at(-1)!)
if (reviewPane === "open") {
if (options?.reviewPane === "open") {
await openReviewPane(page)
await waitForStableTimeline(page, fixture.expected.sourceMessageIDs.at(-1)!)
}
@@ -117,6 +134,8 @@ async function openReviewPane(page: Page) {
await page.getByRole("button", { name: "Toggle review" }).click()
const panel = page.locator("#review-panel")
await expect(panel).toBeVisible()
// Text-based readiness works across review implementations; the legacy list mounts
// diff viewers lazily while V2 mounts the active preview eagerly.
await page.waitForFunction(() => {
const panel = document.querySelector<HTMLElement>("#review-panel")
const text = panel?.textContent ?? ""
@@ -98,6 +98,7 @@ export async function setupTimelineBenchmark(
options: {
historyTurns: number
eventBatch: number
newLayoutDesigns?: boolean
vcsDiff?: unknown[]
turnDiffs?: unknown[]
},
@@ -123,18 +124,22 @@ export async function setupTimelineBenchmark(
events: () => events.splice(0, eventBatch),
eventRetry: 16,
})
await page.addInitScript(() => {
localStorage.setItem(
"settings.v3",
JSON.stringify({
general: {
editToolPartsExpanded: true,
shellToolPartsExpanded: true,
showReasoningSummaries: true,
},
}),
)
})
await page.addInitScript(
(input) => {
localStorage.setItem(
"settings.v3",
JSON.stringify({
general: {
newLayoutDesigns: input.newLayoutDesigns,
editToolPartsExpanded: true,
shellToolPartsExpanded: true,
showReasoningSummaries: true,
},
}),
)
},
{ newLayoutDesigns: options.newLayoutDesigns ?? false },
)
await page.setViewportSize({ width: 1366, height: 768 })
const scroller = page.locator(".scroll-view__viewport", { has: page.locator("[data-timeline-row]") })
const text = page.locator(`[data-timeline-part-id="${textPartID}"]`).first()
@@ -15,6 +15,7 @@ import {
} from "./session-timeline-stream-probe"
type TimelineStreamOptions = {
newLayoutDesigns?: boolean
reviewDiffs?: boolean
reviewPane?: boolean
}
@@ -44,27 +45,34 @@ benchmark.describe("performance: session timeline streaming", () => {
report(result.metrics, result.context)
})
benchmark("streams assistant text with review diffs and pane closed", async ({ page, report }) => {
benchmark("streams assistant text in v2 with review pane closed", async ({ page, report }) => {
benchmark.setTimeout(Number(process.env.TIMELINE_COMPLETION_TIMEOUT_MS ?? 420_000) + 60_000)
const result = await runTimelineStreamBenchmark(page, { reviewDiffs: true })
const result = await runTimelineStreamBenchmark(page, { newLayoutDesigns: true })
report(result.metrics, result.context)
})
benchmark("streams assistant text with review pane open", async ({ page, report }) => {
benchmark("streams assistant text in v2 with review diffs and pane closed", async ({ page, report }) => {
benchmark.setTimeout(Number(process.env.TIMELINE_COMPLETION_TIMEOUT_MS ?? 420_000) + 60_000)
const result = await runTimelineStreamBenchmark(page, { reviewPane: true })
const result = await runTimelineStreamBenchmark(page, { newLayoutDesigns: true, reviewDiffs: true })
report(result.metrics, result.context)
})
benchmark("streams assistant text in v2 with review pane open", async ({ page, report }) => {
benchmark.setTimeout(Number(process.env.TIMELINE_COMPLETION_TIMEOUT_MS ?? 420_000) + 60_000)
const result = await runTimelineStreamBenchmark(page, { newLayoutDesigns: true, reviewPane: true })
report(result.metrics, result.context)
})
})
benchmark.describe("performance: review pane", () => {
benchmark("loads review diffs and switches active files", async ({ page, report }) => {
benchmark("loads v2 review diffs and switches active files", async ({ page, report }) => {
benchmark.setTimeout(240_000)
const historyTurns = Number(process.env.REVIEW_PANE_HISTORY_TURNS ?? 72)
const diffs = createReviewDiffs()
const fixture = await setupTimelineBenchmark(page, {
historyTurns,
eventBatch: 1,
newLayoutDesigns: true,
vcsDiff: diffs,
})
@@ -104,6 +112,7 @@ async function runTimelineStreamBenchmark(page: Page, options: TimelineStreamOpt
const fixture = await setupTimelineBenchmark(page, {
historyTurns,
eventBatch,
newLayoutDesigns: options.newLayoutDesigns,
// Turn diffs exercise timeline data cost; the pane-open scenario serves the same
// diffs through the default git mode so it works across review implementations.
turnDiffs: options.reviewDiffs ? diffs : undefined,
@@ -164,6 +173,7 @@ async function runTimelineStreamBenchmark(page: Page, options: TimelineStreamOpt
queuedDeltas: deltas.length,
historyTurns,
eventBatch,
newLayoutDesigns: options.newLayoutDesigns === true,
reviewPane: options.reviewPane === true ? "open" : "closed",
reviewDiffs: diffs?.length ?? 0,
},
@@ -9,6 +9,7 @@ export async function installTimelineSettings(page: Page) {
"settings.v3",
JSON.stringify({
general: {
newLayoutDesigns: true,
editToolPartsExpanded: true,
shellToolPartsExpanded: true,
showReasoningSummaries: true,
@@ -13,6 +13,7 @@ test("closing the active server's last tab opens the remaining server tab", asyn
await mockServers(page, requests)
await page.addInitScript(
({ serverB, sessionA, sessionB }) => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
localStorage.setItem("opencode.global.dat:server", JSON.stringify({ list: [serverB] }))
localStorage.setItem(
"opencode.window.browser.dat:tabs",
@@ -50,6 +51,7 @@ test("legacy session routes preserve an existing tab's server", async ({ page })
await mockServers(page, [])
await page.addInitScript(
({ serverB, sessionB }) => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
localStorage.setItem("opencode.global.dat:server", JSON.stringify({ list: [serverB] }))
localStorage.setItem(
"opencode.window.browser.dat:tabs",
@@ -124,6 +124,7 @@ async function setup(page: Page) {
await page.addInitScript(
({ directory, server, sessionID }) => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
localStorage.setItem(
"opencode.global.dat:server",
JSON.stringify({
@@ -28,6 +28,7 @@ test("matches the rounded panel corners to the dark new-session background", asy
})
await page.addInitScript(
({ directory, draftID, server }) => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
localStorage.setItem("opencode-theme-id", "oc-2")
localStorage.setItem("opencode-color-scheme", "dark")
localStorage.setItem(
@@ -81,6 +81,10 @@ test("expands a folder whose path has a trailing Windows separator", async ({ pa
await page.addInitScript(
({ directory, server, sessionID }) => {
localStorage.setItem(
"settings.v3",
JSON.stringify({ general: { newLayoutDesigns: true, shouldDisplayTabsToast: false } }),
)
localStorage.setItem(
"opencode.global.dat:server",
JSON.stringify({
@@ -32,6 +32,10 @@ test("preserves the draft when a populated command menu triggers a built-in", as
],
pageMessages: () => ({ items: [] }),
})
await page.addInitScript(() => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
})
await page.goto(`/${base64Encode(directory)}/session/${sessionID}`)
const composer = page.locator('[data-component="prompt-input-v2"]')
const input = composer.locator('[data-component="prompt-input"]')
@@ -49,6 +49,10 @@ test("shows the V2 thinking level control while relevant", async ({ page }) => {
],
pageMessages: () => ({ items: [] }),
})
await page.addInitScript(() => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
})
await page.goto(`/${base64Encode(directory)}/session/${sessionID}`)
const composer = page.locator('[data-component="prompt-input-v2"]')
const input = composer.locator('[data-component="prompt-input"]')
@@ -156,6 +156,7 @@ type PermissionResponse = {
async function configureServers(page: Page, tabs: { type: "session"; server: string; sessionId: string }[] = []) {
await page.addInitScript(
({ serverB, tabs }) => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
localStorage.setItem("opencode.global.dat:server", JSON.stringify({ list: [serverB] }))
localStorage.setItem("opencode.window.browser.dat:tabs", JSON.stringify(tabs))
},
@@ -11,6 +11,7 @@ test("tab busy indicator reflects the tab server's own session status", async ({
await mockServers(page)
await page.addInitScript(
({ serverA, serverB, sessionA, sessionB }) => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
localStorage.setItem("opencode.global.dat:server", JSON.stringify({ list: [serverB] }))
localStorage.setItem(
"opencode.window.browser.dat:tabs",
@@ -0,0 +1,39 @@
import { expect, test } from "@playwright/test"
import { mockOpenCodeServer } from "../utils/mock-server"
const draftID = "draft_removed_layout_preference"
const directory = "C:/OpenCode/RemovedLayoutPreference"
const server = `http://${process.env.PLAYWRIGHT_SERVER_HOST ?? "127.0.0.1"}:${process.env.PLAYWRIGHT_SERVER_PORT ?? "4096"}`
test("ignores persisted old layout preferences when opening drafts", async ({ page }) => {
await mockOpenCodeServer(page, {
directory,
project: {
id: "proj_removed_layout_preference",
worktree: directory,
vcs: "git",
name: "removed-layout-preference",
time: { created: 1700000000000, updated: 1700000000000 },
sandboxes: [],
},
provider: { all: [], connected: [], default: {} },
sessions: [],
pageMessages: () => ({ items: [] }),
})
await page.addInitScript(
({ directory, draftID, server }) => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: false } }))
localStorage.setItem(
"opencode.window.browser.dat:tabs",
JSON.stringify([{ type: "draft", draftID, server, directory }]),
)
},
{ directory, draftID, server },
)
await page.goto(`/new-session?draftId=${draftID}`)
await expect(page).toHaveURL(`/new-session?draftId=${draftID}`)
await expect(page.locator("body")).toHaveAttribute("data-new-layout", "")
await expect(page.getByRole("textbox", { name: "Prompt" })).toBeVisible()
})
@@ -26,6 +26,9 @@ test("clicking an image file in the v2 review pane does not blank the panel", as
async function openReview(page: Page) {
await page.setViewportSize({ width: 960, height: 900 })
await page.addInitScript(() => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
})
await mockOpenCodeServer(page, {
directory,
project: {
@@ -63,6 +63,7 @@ test("opens and searches project files inline", async ({ page }) => {
})
await page.addInitScript(
({ directory, server, sessionID }) => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
localStorage.setItem(
"opencode.global.dat:server",
JSON.stringify({
@@ -103,6 +103,7 @@ async function setup(page: Page) {
)
await page.addInitScript(
({ directory, server, sessions }) => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
localStorage.setItem(
"opencode.global.dat:server",
JSON.stringify({
@@ -103,6 +103,7 @@ async function setup(page: Page) {
await page.addInitScript(
({ directory, server, sessions }) => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
localStorage.setItem(
"opencode.global.dat:server",
JSON.stringify({
@@ -124,6 +124,7 @@ test("keeps the review tree and terminal sized when both panels are open", async
)
await page.routeWebSocket("**/api/pty/pty_review_terminal/connect", () => undefined)
await page.addInitScript(() => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
localStorage.setItem(
"opencode.global.dat:layout",
JSON.stringify({ review: { diffStyle: "split", panelOpened: true } }),
@@ -233,4 +233,7 @@ async function mockServer(
forms: requests.forms,
sessionStatus: requests.sessionStatus,
})
await page.addInitScript(() => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
})
}
@@ -146,7 +146,10 @@ test.describe("session timeline projection", () => {
parentID: "msg_2000_diff_next_user",
created: 1700000011000,
})
await setupTimeline(page, { messages: [user, assistantMessage(), nextUser, nextAssistant] })
await setupTimeline(page, {
messages: [user, assistantMessage(), nextUser, nextAssistant],
settings: { newLayoutDesigns: false },
})
const scroller = page.locator(".scroll-view__viewport", { has: page.locator("[data-timeline-row]") })
await scroller.evaluate((element) => (element.scrollTop = 0))
@@ -156,6 +159,7 @@ test.describe("session timeline projection", () => {
{ exact: true },
),
).toBeVisible()
await expect(page.locator('[data-timeline-row="CommentStrip"]')).toHaveCount(0)
await expect(page.locator('[data-timeline-row="DiffSummary"]')).toHaveCount(0)
})
@@ -13,7 +13,7 @@ for (const deviceScaleFactor of [1.25, 1.5]) {
const shellID = "prt_shell_outline"
const timeline = await setupTimeline(page, {
messages: [userMessage(), assistantMessage([shell(shellID, "completed", "shell output")])],
settings: { shellToolPartsExpanded: true },
settings: { newLayoutDesigns: true, shellToolPartsExpanded: true },
reducedMotion: true,
deviceScaleFactor,
})
@@ -82,7 +82,7 @@ test("keeps the patch card inside a fractionally short virtual row", async ({ pa
toolPart(patchID, "apply_patch", "completed", { files: [file.filePath] }, { metadata: { files: [file] } }),
]),
],
settings: { editToolPartsExpanded: true },
settings: { editToolPartsExpanded: true, newLayoutDesigns: true },
reducedMotion: true,
})
const part = page.locator(`[data-timeline-part-id="${patchID}"]`)
@@ -83,26 +83,6 @@ test("labels all web search provider variants", async ({ page }) => {
await expect(page.getByRole("button", { name: /^Web Search/ })).toBeVisible()
})
test("labels completed searches with result counts", async ({ page }) => {
const glob = "prt_glob_count"
const grep = "prt_grep_count"
await setupTimeline(page, {
messages: [
userMessage(),
assistantMessage([
toolPart(glob, "glob", "completed", { path: ".", pattern: "**/*.ts" }, { metadata: { count: 1 } }),
toolPart(grep, "grep", "completed", { path: ".", pattern: "value" }, { metadata: { matches: 12 } }),
]),
],
})
const group = page.locator(`[data-timeline-part-ids="${glob},${grep}"]`)
await group.locator('[data-slot="collapsible-trigger"]').click()
const rows = group.locator('[data-component="tool-trigger"]')
await expect(rows.nth(0)).toContainText("(1 match)")
await expect(rows.nth(1)).toContainText("(12 matches)")
})
test("labels V2 read tools from their path input", async ({ page }) => {
const id = "prt_read_path"
await setupTimeline(page, {
@@ -119,6 +119,7 @@ async function configurePage(page: Page) {
const server = `http://${process.env.PLAYWRIGHT_SERVER_HOST ?? "127.0.0.1"}:${process.env.PLAYWRIGHT_SERVER_PORT ?? "4096"}`
await page.addInitScript(
({ directory, dirBase64, server, sessionIDs }) => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
localStorage.setItem(
"opencode.global.dat:server",
JSON.stringify({
@@ -207,6 +207,7 @@ async function configurePage(page: Page) {
const server = `http://${process.env.PLAYWRIGHT_SERVER_HOST ?? "127.0.0.1"}:${process.env.PLAYWRIGHT_SERVER_PORT ?? "4096"}`
await page.addInitScript(
({ directory, server, sessionId }) => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
localStorage.setItem(
"opencode.global.dat:server",
JSON.stringify({
@@ -12,6 +12,7 @@ test("pressing mouse down on a tab navigates before mouse up", async ({ page })
await mockServer(page)
await page.addInitScript(
({ server, sessionA, sessionB }) => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
localStorage.setItem(
"opencode.window.browser.dat:tabs",
JSON.stringify([
@@ -45,6 +46,7 @@ test("keyboard navigation follows the visible tab order", async ({ page }) => {
await mockServer(page)
await page.addInitScript(
({ server, sessionA, unresolved, sessionC }) => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
localStorage.setItem(
"opencode.window.browser.dat:tabs",
JSON.stringify([
@@ -71,6 +71,9 @@ test.beforeEach(async ({ page }) => {
}),
)
await page.routeWebSocket(new RegExp(`/api/pty/${ptyID}/connect`), () => undefined)
await page.addInitScript(() => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
})
})
test("routes typing to the composer unless the open terminal is focused", async ({ page }) => {
@@ -121,6 +121,7 @@ async function setup(page: Page) {
await page.addInitScript(
({ directory, server, sessions }) => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
localStorage.setItem(
"opencode.global.dat:server",
JSON.stringify({
@@ -53,6 +53,7 @@ test("creates a session in a new project and selects its model", async ({ page }
findFiles: () => ["NewProject"],
})
await page.addInitScript(() => {
localStorage.setItem("settings.v3", JSON.stringify({ general: { newLayoutDesigns: true } }))
localStorage.setItem("opencode.global.dat:server", JSON.stringify({ projects: { local: [] } }))
localStorage.setItem(
"opencode.global.dat:model",
+1
View File
@@ -21,6 +21,7 @@
<script id="oc-theme-preload-script" src="/oc-theme-preload.js"></script>
</head>
<body
data-new-layout
class="antialiased overscroll-none font-(family-name:--font-family-text) text-[13px] font-[440] overflow-hidden bg-v2-background-bg-deep"
>
<noscript>You need to enable JavaScript to run this app.</noscript>
+1
View File
@@ -74,6 +74,7 @@
"@solidjs/router": "catalog:",
"@tanstack/solid-query": "5.91.4",
"@tanstack/solid-virtual": "catalog:",
"@thisbeyond/solid-dnd": "0.7.5",
"diff": "catalog:",
"effect": "catalog:",
"fuzzysort": "catalog:",
+3 -2
View File
@@ -166,9 +166,10 @@ function QueryProvider(props: ParentProps) {
return <QueryClientProvider client={client}>{props.children}</QueryClientProvider>
}
function BodyTypography() {
function BodyDesignClass() {
createRenderEffect(() => {
if (typeof document === "undefined") return
document.body.toggleAttribute("data-new-layout", true)
document.body.classList.remove("text-12-regular")
document.body.classList.add("font-(family-name:--font-family-text)", "text-[13px]", "font-[440]")
})
@@ -272,7 +273,7 @@ export function AppInterface(props: {
// providers beneath it.
const Root = (rootProps: ParentProps) => (
<TabsProvider>
<BodyTypography />
<BodyDesignClass />
<CommandProvider>
<DesktopCommands />
<HighlightsProvider>
@@ -1,9 +1,12 @@
import { Button } from "@opencode-ai/ui/button"
import { useDialog } from "@opencode-ai/ui/context/dialog"
import { Dialog } from "@opencode-ai/ui/dialog"
import { Icon } from "@opencode-ai/ui/icon"
import { List } from "@opencode-ai/ui/list"
import { IconButton } from "@opencode-ai/ui/icon-button"
import { List, type ListRef } from "@opencode-ai/ui/list"
import { ProviderIcon } from "@opencode-ai/ui/provider-icon"
import { Spinner } from "@opencode-ai/ui/spinner"
import { Tag } from "@opencode-ai/ui/tag"
import { TextField } from "@opencode-ai/ui/text-field"
import { ButtonV2 } from "@opencode-ai/ui/v2/button-v2"
import { DialogBody, DialogHeader, DialogTitle, DialogV2 } from "@opencode-ai/ui/v2/dialog-v2"
@@ -15,7 +18,8 @@ import { useParams } from "@solidjs/router"
import { ExternalLink } from "@/components/external-link"
import { useServerSync } from "@/context/server-sync"
import { useLanguage } from "@/context/language"
import { useProviders } from "@/hooks/use-providers"
import { useSettings } from "@/context/settings"
import { popularProviders, useProviders } from "@/hooks/use-providers"
import { useIntegrations } from "@/hooks/use-integrations"
import { CustomProviderForm } from "./dialog-custom-provider"
import { decode64 } from "@/utils/base64"
@@ -43,6 +47,8 @@ export const DialogConnectProvider: Component<{
const fallback = useProviderConnectController()
const controller = props.controller ?? fallback
const language = useLanguage()
const settings = useSettings()
const newLayout = settings.general.newLayoutDesigns
const reset = controller.back
const back = { current: reset }
let focusHost: HTMLDivElement | undefined
@@ -56,7 +62,7 @@ export const DialogConnectProvider: Component<{
return (
<Switch>
<Match when={controller.selected() === CUSTOM_ID}>
<CustomProviderForm autofocus={false} />
<CustomProviderForm autofocus={!newLayout()} />
</Match>
<Match when={controller.selected() && controller.selected() !== CUSTOM_ID ? controller.selected() : undefined}>
{(provider) => (
@@ -69,42 +75,140 @@ export const DialogConnectProvider: Component<{
)}
</Match>
<Match when={true}>
<ProviderPicker directory={props.directory} onSelect={select} onPrepare={holdFocus} />
<ProviderPicker
directory={props.directory}
onSelect={select}
onPrepare={newLayout() ? holdFocus : undefined}
/>
</Match>
</Switch>
)
}
return (
<DialogV2
containerClass="!h-[min(calc(100vh_-_16px),512px)] !w-[min(calc(100vw_-_16px),640px)]"
class="[font-family:var(--v2-font-family-sans)] [&_[data-slot=dialog-header]]:!px-5 [&_[data-slot=dialog-header-title]]:!text-[15px] [&_[data-slot=dialog-header-title]]:!tracking-[-0.13px]"
>
<DialogHeader closeLabel={language.t("common.close")}>
<Show
when={controller.selected()}
fallback={<DialogTitle>{language.t("command.provider.connect")}</DialogTitle>}
<Show
when={newLayout()}
fallback={
<Dialog
class="h-full"
transition
title={
<Show when={controller.selected()} fallback={language.t("command.provider.connect")}>
<IconButton
tabIndex={-1}
icon="arrow-left"
variant="ghost"
onClick={() => back.current()}
aria-label={language.t("common.goBack")}
/>
</Show>
}
>
<button
type="button"
class="flex size-5 items-center justify-center rounded-sm text-v2-icon-icon-muted hover:bg-v2-overlay-simple-overlay-hover focus-visible:bg-v2-overlay-simple-overlay-hover focus-visible:outline-none"
onClick={() => back.current()}
aria-label={language.t("common.goBack")}
>
<Icon name="arrow-left" size="small" />
</button>
</Show>
</DialogHeader>
<DialogBody class="min-h-0 flex-1 overflow-hidden px-2 pb-2">
<div ref={focusHost} tabIndex={-1} class="flex min-h-0 flex-1 flex-col outline-none">
<Content />
</div>
</DialogBody>
</DialogV2>
</Dialog>
}
>
<DialogV2
containerClass="!h-[min(calc(100vh_-_16px),512px)] !w-[min(calc(100vw_-_16px),640px)]"
class="[font-family:var(--v2-font-family-sans)] [&_[data-slot=dialog-header]]:!px-5 [&_[data-slot=dialog-header-title]]:!text-[15px] [&_[data-slot=dialog-header-title]]:!tracking-[-0.13px]"
>
<DialogHeader closeLabel={language.t("common.close")}>
<Show
when={controller.selected()}
fallback={<DialogTitle>{language.t("command.provider.connect")}</DialogTitle>}
>
<button
type="button"
class="flex size-5 items-center justify-center rounded-sm text-v2-icon-icon-muted hover:bg-v2-overlay-simple-overlay-hover focus-visible:bg-v2-overlay-simple-overlay-hover focus-visible:outline-none"
onClick={() => back.current()}
aria-label={language.t("common.goBack")}
>
<Icon name="arrow-left" size="small" />
</button>
</Show>
</DialogHeader>
<DialogBody class="min-h-0 flex-1 overflow-hidden px-2 pb-2">
<div ref={focusHost} tabIndex={-1} class="flex min-h-0 flex-1 flex-col outline-none">
<Content />
</div>
</DialogBody>
</DialogV2>
</Show>
)
}
function ProviderPicker(props: { directory?: string; onSelect: (provider: string) => void; onPrepare?: () => void }) {
const settings = useSettings()
if (settings.general.newLayoutDesigns())
return <ProviderPickerV2 directory={props.directory} onSelect={props.onSelect} onPrepare={props.onPrepare} />
const integrations = useIntegrations(() => props.directory)
const language = useLanguage()
const popularGroup = () => language.t("dialog.provider.group.popular")
const otherGroup = () => language.t("dialog.provider.group.other")
const customLabel = () => language.t("settings.providers.tag.custom")
const note = (id: string) => {
if (id === "anthropic") return language.t("dialog.provider.anthropic.note")
if (id === "openai") return language.t("dialog.provider.openai.note")
if (id.startsWith("github-copilot")) return language.t("dialog.provider.copilot.note")
if (id === "opencode-go") return language.t("dialog.provider.opencodeGo.tagline")
return undefined
}
return (
<List
class="px-3"
search={{ placeholder: language.t("dialog.provider.search.placeholder"), autofocus: true }}
emptyMessage={language.t("dialog.provider.empty")}
activeIcon="plus-small"
key={(x) => x?.id}
items={() => {
language.locale()
return [{ id: CUSTOM_ID, name: customLabel() }, ...integrations.list()]
}}
filterKeys={["id", "name"]}
groupBy={(x) => (popularProviders.includes(x.id) ? popularGroup() : otherGroup())}
sortBy={(a, b) => {
if (a.id === CUSTOM_ID) return -1
if (b.id === CUSTOM_ID) return 1
if (popularProviders.includes(a.id) && popularProviders.includes(b.id))
return popularProviders.indexOf(a.id) - popularProviders.indexOf(b.id)
return a.name.localeCompare(b.name)
}}
sortGroupsBy={(a, b) => {
const popular = popularGroup()
if (a.category === popular && b.category !== popular) return -1
if (b.category === popular && a.category !== popular) return 1
return 0
}}
onSelect={(x) => {
if (!x) return
props.onSelect(x.id)
}}
>
{(i) => (
<div class="px-1.25 w-full flex items-center gap-x-3">
<ProviderIcon data-slot="list-item-extra-icon" id={i.id} />
<span>{i.name}</span>
<Show when={i.id === "opencode"}>
<div class="text-14-regular text-text-weak">{language.t("dialog.provider.opencode.tagline")}</div>
</Show>
<Show when={i.id === CUSTOM_ID}>
<Tag>{language.t("settings.providers.tag.custom")}</Tag>
</Show>
<Show when={i.id === "opencode"}>
<Tag>{language.t("dialog.provider.tag.recommended")}</Tag>
</Show>
<Show when={note(i.id)}>{(value) => <div class="text-14-regular text-text-weak">{value()}</div>}</Show>
<Show when={i.id === "opencode-go"}>
<Tag>{language.t("dialog.provider.tag.recommended")}</Tag>
</Show>
</div>
)}
</List>
)
}
function ProviderPickerV2(props: { directory?: string; onSelect: (provider: string) => void; onPrepare?: () => void }) {
const integrations = useIntegrations(() => props.directory)
const language = useLanguage()
const [store, setStore] = createStore({
@@ -261,6 +365,8 @@ function ProviderConnection(props: {
const serverSync = useServerSync()
const params = useParams()
const language = useLanguage()
const settings = useSettings()
const newLayout = settings.general.newLayoutDesigns
const providers = useProviders(() => props.directory)
const directory = () => props.directory ?? decode64(params.dir)
@@ -428,6 +534,15 @@ function ProviderConnection(props: {
)
}
let listRef: ListRef | undefined
function handleKey(e: KeyboardEvent) {
if (e.key === "Enter" && e.target instanceof HTMLInputElement) {
return
}
if (e.key === "Escape") return
listRef?.onKeyDown(e)
}
function goBack() {
if (controller.methods().length > 1 && controller.methodIndex() !== undefined) {
controller.auth.reset()
@@ -439,34 +554,66 @@ function ProviderConnection(props: {
props.setBack(goBack)
function MethodSelection() {
if (newLayout())
return (
<div class="flex flex-col gap-2">
<div class="px-3 text-[13px] font-[440] leading-5 tracking-[-0.04px] text-v2-text-text-muted">
{language.t("provider.connect.selectMethod", { provider: provider().name })}
</div>
<div class="flex flex-col">
<For each={controller.methods()}>
{(item, index) => {
const details = () => methodDetails(item)
return (
<button
type="button"
class="group flex h-9 w-full items-center gap-2 rounded-md px-3 text-left text-[13px] leading-5 tracking-[-0.04px] hover:bg-v2-overlay-simple-overlay-hover focus-visible:bg-v2-overlay-simple-overlay-hover focus-visible:outline-none"
onClick={() => void controller.auth.select(index())}
>
<span class="flex h-2 w-4 shrink-0 items-center justify-center rounded-[1px] bg-v2-background-bg-base shadow-[var(--v2-elevation-button-neutral)]">
<span class="hidden h-0.5 w-2.5 bg-v2-icon-icon-base group-hover:block group-focus-visible:block" />
</span>
<span class="font-[530] text-v2-text-text-base">{details().label}</span>
<Show when={details().hint}>
{(hint) => <span class="font-[440] text-v2-text-text-muted">{hint()}</span>}
</Show>
</button>
)
}}
</For>
</div>
</div>
)
return (
<div class="flex flex-col gap-2">
<div class="px-3 text-[13px] font-[440] leading-5 tracking-[-0.04px] text-v2-text-text-muted">
<>
<div class="text-14-regular text-text-base">
{language.t("provider.connect.selectMethod", { provider: provider().name })}
</div>
<div class="flex flex-col">
<For each={controller.methods()}>
{(item, index) => {
const details = () => methodDetails(item)
return (
<button
type="button"
class="group flex h-9 w-full items-center gap-2 rounded-md px-3 text-left text-[13px] leading-5 tracking-[-0.04px] hover:bg-v2-overlay-simple-overlay-hover focus-visible:bg-v2-overlay-simple-overlay-hover focus-visible:outline-none"
onClick={() => void controller.auth.select(index())}
>
<span class="flex h-2 w-4 shrink-0 items-center justify-center rounded-[1px] bg-v2-background-bg-base shadow-[var(--v2-elevation-button-neutral)]">
<span class="hidden h-0.5 w-2.5 bg-v2-icon-icon-base group-hover:block group-focus-visible:block" />
</span>
<span class="font-[530] text-v2-text-text-base">{details().label}</span>
<Show when={details().hint}>
{(hint) => <span class="font-[440] text-v2-text-text-muted">{hint()}</span>}
</Show>
</button>
)
<div>
<List
class="px-3"
ref={(ref) => {
listRef = ref
}}
</For>
items={controller.methods}
key={(m) => m?.label ?? m?.type}
onSelect={async (selected, index) => {
if (!selected) return
void controller.auth.select(index)
}}
>
{(i) => (
<div class="w-full flex items-center gap-x-2">
<div class="w-4 h-2 rounded-[1px] bg-input-base shadow-xs-border-base flex items-center justify-center">
<div class="w-2.5 h-0.5 ml-0 bg-icon-strong-base hidden" data-slot="list-item-extra-icon" />
</div>
<span>{methodLabel(i)}</span>
</div>
)}
</List>
</div>
</div>
</>
)
}
@@ -479,6 +626,7 @@ function ProviderConnection(props: {
})
onMount(() => {
if (!newLayout()) return
apiKey?.focus({ preventScroll: true })
})
@@ -498,54 +646,97 @@ function ProviderConnection(props: {
await controller.auth.connectKey(apiKey)
}
return (
<div class="flex flex-col gap-5 px-3 text-[13px] font-[440] leading-5 tracking-[-0.04px] text-v2-text-text-muted">
<Show
when={provider().id === "opencode"}
fallback={language.t("provider.connect.apiKey.description", { provider: provider().name })}
>
<div class="flex flex-col gap-5">
<div>{language.t("provider.connect.opencodeZen.line1")}</div>
<div>{language.t("provider.connect.opencodeZen.line2")}</div>
<div>
{language.t("provider.connect.opencodeZen.visit.prefix")}
<ExternalLink
href="https://opencode.ai/zen"
class="text-v2-text-text-base focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-v2-border-border-focus"
>
{language.t("provider.connect.opencodeZen.visit.link")}
</ExternalLink>
{language.t("provider.connect.opencodeZen.visit.suffix")}
</div>
</div>
</Show>
<form onSubmit={handleSubmit} class="flex flex-col items-start gap-5 self-stretch">
<label class="flex w-full flex-col gap-1 font-[530] leading-4 text-v2-text-text-base">
{language.t("provider.connect.apiKey.label", { provider: provider().name })}
<TextInputV2
ref={apiKey}
class="!w-full"
name="apiKey"
data-input="provider-api-key"
placeholder={language.t("provider.connect.apiKey.placeholder")}
value={formStore.value}
invalid={formStore.error !== undefined}
aria-describedby={formStore.error ? errorID : undefined}
autocomplete="off"
spellcheck={false}
onInput={(event) => setFormStore("value", event.currentTarget.value)}
/>
</label>
<Show when={formStore.error}>
{(error) => (
<div id={errorID} role="alert" class="-mt-4 text-xs text-v2-state-fg-danger">
{error()}
if (newLayout())
return (
<div class="flex flex-col gap-5 px-3 text-[13px] font-[440] leading-5 tracking-[-0.04px] text-v2-text-text-muted">
<Show
when={provider().id === "opencode"}
fallback={language.t("provider.connect.apiKey.description", { provider: provider().name })}
>
<div class="flex flex-col gap-5">
<div>{language.t("provider.connect.opencodeZen.line1")}</div>
<div>{language.t("provider.connect.opencodeZen.line2")}</div>
<div>
{language.t("provider.connect.opencodeZen.visit.prefix")}
<ExternalLink
href="https://opencode.ai/zen"
class="text-v2-text-text-base focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-v2-border-border-focus"
>
{language.t("provider.connect.opencodeZen.visit.link")}
</ExternalLink>
{language.t("provider.connect.opencodeZen.visit.suffix")}
</div>
)}
</div>
</Show>
<ButtonV2 type="submit" variant="contrast" data-action="provider-connect-submit">
<form onSubmit={handleSubmit} class="flex flex-col items-start gap-5 self-stretch">
<label class="flex w-full flex-col gap-1 font-[530] leading-4 text-v2-text-text-base">
{language.t("provider.connect.apiKey.label", { provider: provider().name })}
<TextInputV2
ref={apiKey}
class="!w-full"
name="apiKey"
data-input="provider-api-key"
placeholder={language.t("provider.connect.apiKey.placeholder")}
value={formStore.value}
invalid={formStore.error !== undefined}
aria-describedby={formStore.error ? errorID : undefined}
autocomplete="off"
spellcheck={false}
onInput={(event) => setFormStore("value", event.currentTarget.value)}
/>
</label>
<Show when={formStore.error}>
{(error) => (
<div id={errorID} role="alert" class="-mt-4 text-xs text-v2-state-fg-danger">
{error()}
</div>
)}
</Show>
<ButtonV2 type="submit" variant="contrast" data-action="provider-connect-submit">
{language.t("common.continue")}
</ButtonV2>
</form>
</div>
)
return (
<div class="flex flex-col gap-6">
<Switch>
<Match when={provider().id === "opencode"}>
<div class="flex flex-col gap-4">
<div class="text-14-regular text-text-base">{language.t("provider.connect.opencodeZen.line1")}</div>
<div class="text-14-regular text-text-base">{language.t("provider.connect.opencodeZen.line2")}</div>
<div class="text-14-regular text-text-base">
{language.t("provider.connect.opencodeZen.visit.prefix")}
<ExternalLink href="https://opencode.ai/zen" tabIndex={-1}>
{language.t("provider.connect.opencodeZen.visit.link")}
</ExternalLink>
{language.t("provider.connect.opencodeZen.visit.suffix")}
</div>
</div>
</Match>
<Match when={true}>
<div class="text-14-regular text-text-base">
{language.t("provider.connect.apiKey.description", { provider: provider().name })}
</div>
</Match>
</Switch>
<form onSubmit={handleSubmit} class="flex flex-col items-start gap-4">
<TextField
autofocus={!newLayout()}
ref={apiKey}
type="text"
label={language.t("provider.connect.apiKey.label", { provider: provider().name })}
placeholder={language.t("provider.connect.apiKey.placeholder")}
name="apiKey"
value={formStore.value}
onChange={(v) => setFormStore("value", v)}
validationState={formStore.error ? "invalid" : undefined}
error={formStore.error}
/>
<Button class="w-auto" type="submit" size="large" variant="primary">
{language.t("common.continue")}
</ButtonV2>
</Button>
</form>
</div>
)
@@ -560,6 +751,7 @@ function ProviderConnection(props: {
})
onMount(() => {
if (!newLayout()) return
codeInput?.focus({ preventScroll: true })
})
@@ -579,41 +771,73 @@ function ProviderConnection(props: {
setFormStore("error", await controller.auth.completeCode(code))
}
if (newLayout())
return (
<div class="flex flex-col gap-5 px-3 text-[13px] font-[440] leading-5 tracking-[-0.04px] text-v2-text-text-muted">
<div>
{language.t("provider.connect.oauth.code.visit.prefix")}
<ExternalLink href={controller.authorization()!.url} class="text-v2-text-text-base">
{language.t("provider.connect.oauth.code.visit.link")}
</ExternalLink>
{language.t("provider.connect.oauth.code.visit.suffix", { provider: provider().name })}
</div>
<form onSubmit={handleSubmit} class="flex flex-col items-start gap-5 self-stretch">
<label class="flex w-full flex-col gap-1 font-[530] leading-4 text-v2-text-text-base">
{language.t("provider.connect.oauth.code.label", { method: controller.currentMethod()?.label ?? "" })}
<TextInputV2
ref={codeInput}
class="!w-full"
name="code"
placeholder={language.t("provider.connect.oauth.code.placeholder")}
value={formStore.value}
invalid={formStore.error !== undefined}
aria-describedby={formStore.error ? errorID : undefined}
autocomplete="off"
spellcheck={false}
onInput={(event) => setFormStore("value", event.currentTarget.value)}
/>
</label>
<Show when={formStore.error}>
{(error) => (
<div id={errorID} role="alert" class="-mt-4 text-xs text-v2-state-fg-danger">
{error()}
</div>
)}
</Show>
<ButtonV2 type="submit" variant="contrast">
{language.t("common.continue")}
</ButtonV2>
</form>
</div>
)
return (
<div class="flex flex-col gap-5 px-3 text-[13px] font-[440] leading-5 tracking-[-0.04px] text-v2-text-text-muted">
<div>
<div class="flex flex-col gap-6">
<div class="text-14-regular text-text-base">
{language.t("provider.connect.oauth.code.visit.prefix")}
<ExternalLink href={controller.authorization()!.url} class="text-v2-text-text-base">
<ExternalLink href={controller.authorization()!.url}>
{language.t("provider.connect.oauth.code.visit.link")}
</ExternalLink>
{language.t("provider.connect.oauth.code.visit.suffix", { provider: provider().name })}
</div>
<form onSubmit={handleSubmit} class="flex flex-col items-start gap-5 self-stretch">
<label class="flex w-full flex-col gap-1 font-[530] leading-4 text-v2-text-text-base">
{language.t("provider.connect.oauth.code.label", { method: controller.currentMethod()?.label ?? "" })}
<TextInputV2
ref={codeInput}
class="!w-full"
name="code"
placeholder={language.t("provider.connect.oauth.code.placeholder")}
value={formStore.value}
invalid={formStore.error !== undefined}
aria-describedby={formStore.error ? errorID : undefined}
autocomplete="off"
spellcheck={false}
onInput={(event) => setFormStore("value", event.currentTarget.value)}
/>
</label>
<Show when={formStore.error}>
{(error) => (
<div id={errorID} role="alert" class="-mt-4 text-xs text-v2-state-fg-danger">
{error()}
</div>
)}
</Show>
<ButtonV2 type="submit" variant="contrast">
<form onSubmit={handleSubmit} class="flex flex-col items-start gap-4">
<TextField
autofocus={!newLayout()}
ref={codeInput}
type="text"
label={language.t("provider.connect.oauth.code.label", {
method: controller.currentMethod()?.label ?? "",
})}
placeholder={language.t("provider.connect.oauth.code.placeholder")}
name="code"
value={formStore.value}
onChange={(v) => setFormStore("value", v)}
validationState={formStore.error ? "invalid" : undefined}
error={formStore.error}
/>
<Button class="w-auto" type="submit" size="large" variant="primary">
{language.t("common.continue")}
</ButtonV2>
</Button>
</form>
</div>
)
@@ -653,10 +877,19 @@ function ProviderConnection(props: {
}
return (
<div class="flex min-h-0 flex-1 flex-col">
<div class="flex h-10 shrink-0 items-start gap-2 px-3">
<ProviderIcon id={props.provider} class="mt-0.5 size-4 shrink-0 text-v2-icon-icon-base" />
<div class="text-[15px] font-[530] leading-5 tracking-[-0.13px] text-v2-text-text-base">
<div class={newLayout() ? "flex min-h-0 flex-1 flex-col" : "flex flex-col gap-6 px-2.5 pb-3"}>
<div class={newLayout() ? "flex h-10 shrink-0 items-start gap-2 px-3" : "flex items-center gap-4 px-2.5"}>
<ProviderIcon
id={props.provider}
class={newLayout() ? "mt-0.5 size-4 shrink-0 text-v2-icon-icon-base" : "size-5 shrink-0 icon-strong-base"}
/>
<div
class={
newLayout()
? "text-[15px] font-[530] leading-5 tracking-[-0.13px] text-v2-text-text-base"
: "text-16-medium text-text-strong"
}
>
<Switch>
<Match
when={props.provider === "anthropic" && controller.currentMethod()?.label?.toLowerCase().includes("max")}
@@ -667,8 +900,12 @@ function ProviderConnection(props: {
</Switch>
</div>
</div>
<div class="flex min-h-0 flex-1 flex-col">
<div>
<div class={newLayout() ? "flex min-h-0 flex-1 flex-col" : "flex flex-col gap-6 px-2.5 pb-10"}>
<div
onKeyDown={handleKey}
tabIndex={newLayout() ? undefined : 0}
autofocus={!newLayout() && controller.methodIndex() === undefined ? true : undefined}
>
<Switch>
<Match when={controller.loading()}>
<div class="text-14-regular text-text-base">
+26 -28
View File
@@ -40,7 +40,7 @@ export type PromptInputV2ComposerProps = {
accentSubmit?: boolean
}
export type PromptInputV2ControllerProps = Omit<PromptInputProps, "class">
export type PromptInputV2ControllerProps = Omit<PromptInputProps, "class" | "submission">
export type PromptInputV2ComposerController = PromptInputV2Interaction & {
readonly model: PromptInputProps["controls"]["model"]
}
@@ -197,33 +197,31 @@ export function usePromptInputV2Controller(props: PromptInputV2ControllerProps):
if (!id) return permission.isAutoAcceptingDirectory(sdk().directory)
return permission.isAutoAccepting(id, sdk().directory)
})
const submission =
props.submission ??
createPromptSubmit({
prompt,
info,
imageAttachments: attachments,
commentCount,
autoAccept: accepting,
mode,
working,
editor: () => editor,
queueScroll: () => requestAnimationFrame(() => editor?.scrollIntoView({ block: "nearest" })),
promptLength,
addToHistory: (value, mode) => controller.addHistory(value, mode),
resetHistoryNavigation: () => controller.resetHistory(),
setMode: (next) => controller.dispatch({ type: next === "shell" ? "mode.shell" : "mode.normal" }),
setPopover: (popover) => {
if (!popover) controller.dispatch({ type: "popover.close" })
},
newSessionWorktree: () => props.newSessionWorktree,
onNewSessionWorktreeReset: props.onNewSessionWorktreeReset,
shouldQueue: props.shouldQueue,
onQueue: props.onQueue,
onAbort: props.onAbort,
onSubmit: props.onSubmit,
model: props.controls.model.selection,
})
const submission = createPromptSubmit({
prompt,
info,
imageAttachments: attachments,
commentCount,
autoAccept: accepting,
mode,
working,
editor: () => editor,
queueScroll: () => requestAnimationFrame(() => editor?.scrollIntoView({ block: "nearest" })),
promptLength,
addToHistory: (value, mode) => controller.addHistory(value, mode),
resetHistoryNavigation: () => controller.resetHistory(),
setMode: (next) => controller.dispatch({ type: next === "shell" ? "mode.shell" : "mode.normal" }),
setPopover: (popover) => {
if (!popover) controller.dispatch({ type: "popover.close" })
},
newSessionWorktree: () => props.newSessionWorktree,
onNewSessionWorktreeReset: props.onNewSessionWorktreeReset,
shouldQueue: props.shouldQueue,
onQueue: props.onQueue,
onAbort: props.onAbort,
onSubmit: props.onSubmit,
model: props.controls.model.selection,
})
const referenceDescription = (reference: ReferenceInfo) =>
reference.source.type === "git" ? reference.source.repository : reference.source.path
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,98 @@
import { Component, For, Show } from "solid-js"
import { Dynamic } from "solid-js/web"
import { FileIcon } from "@opencode-ai/ui/file-icon"
import { IconButton } from "@opencode-ai/ui/icon-button"
import { Tooltip } from "@opencode-ai/ui/tooltip"
import { TooltipV2 } from "@opencode-ai/ui/v2/tooltip-v2"
import { getDirectory, getFilename, getFilenameTruncated } from "@opencode-ai/core/util/path"
import type { ContextItem } from "@/context/prompt"
type PromptContextItem = ContextItem & { key: string }
type ContextItemsProps = {
items: PromptContextItem[]
active: (item: PromptContextItem) => boolean
openComment: (item: PromptContextItem) => void
remove: (item: PromptContextItem) => void
newLayoutDesigns: boolean
t: (key: string) => string
}
export const PromptContextItems: Component<ContextItemsProps> = (props) => {
return (
<Show when={props.items.length > 0}>
<div class="flex flex-nowrap items-start gap-2 p-2 overflow-x-auto no-scrollbar">
<For each={props.items}>
{(item) => {
const directory = getDirectory(item.path)
const filename = getFilename(item.path)
const label = getFilenameTruncated(item.path, 14)
const selected = props.active(item)
return (
<Dynamic
component={props.newLayoutDesigns ? TooltipV2 : Tooltip}
value={
<span class="flex max-w-[300px]">
<span
classList={{
"truncate-start [unicode-bidi:plaintext] min-w-0": true,
"text-v2-text-text-muted": props.newLayoutDesigns,
"text-text-invert-base": !props.newLayoutDesigns,
}}
>
{directory}
</span>
<span class="shrink-0">{filename}</span>
</span>
}
placement="top"
openDelay={800}
>
<div
classList={{
"group shrink-0 flex flex-col rounded-[6px] pl-2 pr-1 py-1 max-w-[200px] h-12 cursor-default transition-all transition-transform shadow-xs-border hover:shadow-xs-border-hover": true,
"hover:bg-surface-interactive-weak": !!item.commentID && !selected,
"bg-surface-interactive-hover hover:bg-surface-interactive-hover shadow-xs-border-hover": selected,
"bg-background-stronger": !selected,
}}
onClick={() => props.openComment(item)}
>
<div class="flex items-center gap-1.5">
<FileIcon node={{ path: item.path, type: "file" }} class="shrink-0 size-3.5" />
<div class="flex items-center text-[12px] min-w-0 font-medium leading-5">
<span class="text-text-strong whitespace-nowrap">{label}</span>
<Show when={item.selection}>
{(sel) => (
<span class="text-text-weak whitespace-nowrap shrink-0">
{sel().startLine === sel().endLine
? `:${sel().startLine}`
: `:${sel().startLine}-${sel().endLine}`}
</span>
)}
</Show>
</div>
<IconButton
type="button"
icon="close-small"
variant="ghost"
class="ml-auto size-3.5 text-text-weak hover:text-text-strong transition-all"
onClick={(e) => {
e.stopPropagation()
props.remove(item)
}}
aria-label={props.t("prompt.context.removeFile")}
/>
</div>
<Show when={item.comment}>
{(comment) => <div class="text-12-regular text-text-strong ml-5 pr-1 truncate">{comment()}</div>}
</Show>
</div>
</Dynamic>
)
}}
</For>
</div>
</Show>
)
}
@@ -0,0 +1,25 @@
import { Component, Show } from "solid-js"
import { Icon } from "@opencode-ai/ui/icon"
type PromptDragOverlayProps = {
type: "image" | "@mention" | null
label: string
}
const kindToIcon = {
image: "photo",
"@mention": "link",
} as const
export const PromptDragOverlay: Component<PromptDragOverlayProps> = (props) => {
return (
<Show when={props.type !== null}>
<div class="absolute inset-0 z-10 flex items-center justify-center bg-surface-raised-stronger-non-alpha/90 pointer-events-none">
<div class="flex flex-col items-center gap-2 text-text-weak">
<Icon name={props.type ? kindToIcon[props.type] : kindToIcon.image} class="size-8" />
<span class="text-14-regular">{props.label}</span>
</div>
</div>
</Show>
)
}
@@ -0,0 +1,43 @@
@keyframes prompt-attachments-fade-left {
from {
visibility: hidden;
}
to {
visibility: visible;
}
}
@keyframes prompt-attachments-fade-right {
from {
visibility: visible;
}
to {
visibility: hidden;
}
}
[data-slot="prompt-attachments"] {
timeline-scope: --prompt-attachments-scroll;
[data-slot^="prompt-attachments-fade-"] {
visibility: hidden;
}
}
@supports (animation-timeline: --prompt-attachments-scroll) and (timeline-scope: --prompt-attachments-scroll) {
[data-slot="prompt-attachments-scroll"] {
scroll-timeline: --prompt-attachments-scroll x;
}
[data-slot="prompt-attachments-fade-left"] {
animation: prompt-attachments-fade-left linear both;
animation-timeline: --prompt-attachments-scroll;
animation-range: 0 0.1px;
}
[data-slot="prompt-attachments-fade-right"] {
animation: prompt-attachments-fade-right linear both;
animation-timeline: --prompt-attachments-scroll;
animation-range: calc(100% - 1.1px) calc(100% - 1px);
}
}
@@ -0,0 +1,169 @@
import { Component, For, Show } from "solid-js"
import { Icon } from "@opencode-ai/ui/icon"
import { Icon as IconV2 } from "@opencode-ai/ui/v2/icon"
import { Tooltip } from "@opencode-ai/ui/tooltip"
import { TooltipV2 } from "@opencode-ai/ui/v2/tooltip-v2"
import { AttachmentCardV2 } from "@opencode-ai/session-ui/v2/attachment-card-v2"
import { CommentCardV2 } from "@opencode-ai/session-ui/v2/comment-card-v2"
import { typeLabel } from "@opencode-ai/session-ui/message-file"
import type { ContextItem, ImageAttachmentPart } from "@/context/prompt"
import "./image-attachments.css"
type PromptCommentItem = ContextItem & { key: string }
type PromptImageAttachmentsProps = {
attachments: ImageAttachmentPart[]
onOpen: (attachment: ImageAttachmentPart) => void
onRemove: (id: string) => void
removeLabel: string
fileLabel: string
newLayoutDesigns: boolean
comments?: PromptCommentItem[]
commentActive?: (item: PromptCommentItem) => boolean
onOpenComment?: (item: PromptCommentItem) => void
onRemoveComment?: (item: PromptCommentItem) => void
}
const fallbackClass = "size-16 rounded-md bg-surface-base flex items-center justify-center border border-border-base"
const imageClass =
"size-16 rounded-md object-cover border border-border-base hover:border-border-strong-base transition-colors"
const imageClassV2 = "w-[58px] h-[46px] rounded-[6px] object-cover"
// inset box-shadows do not paint over <img> content, so the hairline is a separate overlay
const imageHairlineClassV2 =
"absolute inset-0 rounded-[6px] shadow-[inset_0_0_0_0.5px_var(--v2-border-border-base)] pointer-events-none"
const removeClass =
"absolute -top-1.5 -right-1.5 size-5 rounded-full bg-surface-raised-stronger-non-alpha border border-border-base flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity hover:bg-surface-raised-base-hover"
const removeClassV2 =
"absolute -top-1 -right-1 size-4 rounded-full bg-v2-icon-icon-muted outline-solid outline-1 outline-v2-icon-icon-contrast flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity"
const nameClass = "absolute bottom-0 left-0 right-0 px-1 py-0.5 bg-black/50 rounded-b-md"
export const PromptImageAttachments: Component<PromptImageAttachmentsProps> = (props) => {
return (
<Show when={props.attachments.length > 0 || (props.newLayoutDesigns && (props.comments?.length ?? 0) > 0)}>
<div data-slot="prompt-attachments" classList={{ relative: props.newLayoutDesigns }}>
<div
data-slot="prompt-attachments-scroll"
classList={{
"flex gap-2": true,
"flex-nowrap overflow-x-auto no-scrollbar px-2 pt-2 pb-1": props.newLayoutDesigns,
"flex-wrap px-3 pt-3": !props.newLayoutDesigns,
}}
>
<Show when={props.newLayoutDesigns}>
<For each={props.comments ?? []}>
{(item) => (
<div class="relative group shrink-0">
<TooltipV2
value={item.comment}
placement="top"
openDelay={800}
contentClass="max-w-[300px] break-words"
>
<CommentCardV2
comment={item.comment ?? ""}
path={item.path}
selection={item.selection}
active={props.commentActive?.(item)}
onClick={() => props.onOpenComment?.(item)}
/>
</TooltipV2>
<button
type="button"
onClick={() => props.onRemoveComment?.(item)}
class={removeClassV2}
aria-label={props.removeLabel}
>
<IconV2 name="outline-xmark" class="text-v2-icon-icon-contrast" />
</button>
</div>
)}
</For>
</Show>
<For each={props.attachments}>
{(attachment) => {
const image = attachment.mime.startsWith("image/")
const media = () => (
<Show
when={image}
fallback={
<Show
when={props.newLayoutDesigns}
fallback={
<div class={fallbackClass}>
<Icon name="folder" class="size-6 text-text-weak" />
</div>
}
>
<AttachmentCardV2 title={attachment.filename}>
{typeLabel(attachment.filename, attachment.mime, props.fileLabel)}
</AttachmentCardV2>
</Show>
}
>
<img
src={attachment.blob.url}
alt={attachment.filename}
class={props.newLayoutDesigns ? imageClassV2 : imageClass}
onClick={() => props.onOpen(attachment)}
/>
</Show>
)
const name = () => (
<div class={nameClass}>
<span class="text-10-regular text-white truncate block">{attachment.filename}</span>
</div>
)
const remove = () => (
<button
type="button"
onClick={() => props.onRemove(attachment.id)}
class={props.newLayoutDesigns ? removeClassV2 : removeClass}
aria-label={props.removeLabel}
>
<Show when={props.newLayoutDesigns} fallback={<Icon name="close" class="size-3 text-text-weak" />}>
<IconV2 name="outline-xmark" class="text-v2-icon-icon-contrast" />
</Show>
</button>
)
// v2 keeps the remove button outside the tooltip trigger so hovering it dismisses the tooltip
return (
<Show
when={props.newLayoutDesigns}
fallback={
<Tooltip value={attachment.filename} placement="top" contentClass="break-all">
<div class="relative group">
{media()}
{name()}
{remove()}
</div>
</Tooltip>
}
>
<div class="relative group shrink-0">
<TooltipV2 value={attachment.filename} placement="top" contentClass="break-all">
{media()}
<Show when={image}>
<div class={imageHairlineClassV2} />
</Show>
</TooltipV2>
{remove()}
</div>
</Show>
)
}}
</For>
</div>
<Show when={props.newLayoutDesigns}>
<div
data-slot="prompt-attachments-fade-left"
class="pointer-events-none absolute inset-y-0 left-0 z-10 w-6 bg-[linear-gradient(to_right,var(--v2-background-bg-base),transparent)]"
/>
<div
data-slot="prompt-attachments-fade-right"
class="pointer-events-none absolute inset-y-0 right-0 z-10 w-6 bg-[linear-gradient(to_left,var(--v2-background-bg-base),transparent)]"
/>
</Show>
</div>
</Show>
)
}
@@ -0,0 +1,376 @@
import { Component, For, Match, Show, Switch } from "solid-js"
import { FileIcon } from "@opencode-ai/ui/file-icon"
import { Icon } from "@opencode-ai/ui/icon"
import { Tag } from "@opencode-ai/ui/v2/badge-v2"
import { KeybindV2 } from "@opencode-ai/ui/v2/keybind-v2"
import { getDirectory, getFilename } from "@opencode-ai/core/util/path"
export type AtOption =
| { type: "agent"; name: string; display: string }
| {
type: "resource"
name: string
uri: string
client: string
display: string
description?: string
mime?: string
}
| { type: "reference"; name: string; path: string; display: string; description: string }
| { type: "file"; path: string; display: string; recent?: boolean }
export interface SlashCommand {
id: string
trigger: string
title: string
description?: string
keybind?: string
type: "builtin" | "custom"
source?: "command" | "mcp" | "skill"
}
type PromptPopoverProps = {
popover: "at" | "slash" | null
setSlashPopoverRef: (el: HTMLDivElement) => void
atFlat: AtOption[]
atActive?: string
atKey: (item: AtOption) => string
setAtActive: (id: string) => void
onAtSelect: (item: AtOption) => void
slashFlat: SlashCommand[]
slashActive?: string
setSlashActive: (id: string) => void
onSlashSelect: (item: SlashCommand) => void
slashMenu: boolean
slashMenuQuery: string
onSlashMenuInput: (value: string) => void
onSlashMenuKeyDown: (event: KeyboardEvent) => void
commandKeybind: (id: string) => string | undefined
commandKeybindParts: (id: string) => string[]
newLayoutDesigns: boolean
t: (key: string) => string
}
export const PromptPopover: Component<PromptPopoverProps> = (props) => {
return (
<Show when={props.popover}>
<div
ref={(el) => {
if (props.popover === "slash") props.setSlashPopoverRef(el)
}}
class="absolute inset-x-0 -top-2 -translate-y-full origin-bottom-left max-h-80 min-h-10
overflow-auto no-scrollbar flex flex-col p-2"
classList={{
"z-[70] rounded-[10px] bg-v2-background-bg-base shadow-[var(--v2-elevation-raised)]": props.newLayoutDesigns,
"rounded-[12px] bg-surface-raised-stronger-non-alpha shadow-[var(--shadow-lg-border-base)]":
!props.newLayoutDesigns,
}}
onMouseDown={(e) => e.preventDefault()}
>
<Switch>
<Match when={props.popover === "at"}>
<Show
when={props.atFlat.length > 0}
fallback={
<div
class="px-2 py-1"
classList={{
"text-v2-text-text-muted": props.newLayoutDesigns,
"text-text-weak": !props.newLayoutDesigns,
}}
>
{props.t("prompt.popover.emptyResults")}
</div>
}
>
<For each={props.atFlat.slice(0, 10)}>
{(item) => {
const key = props.atKey(item)
if (item.type === "agent") {
return (
<button
class="w-full flex items-center gap-x-2 px-2 py-0.5"
classList={{
"rounded-[4px]": props.newLayoutDesigns,
"rounded-md": !props.newLayoutDesigns,
"bg-v2-overlay-simple-overlay-hover": props.newLayoutDesigns && props.atActive === key,
"bg-surface-raised-base-hover": !props.newLayoutDesigns && props.atActive === key,
}}
onClick={() => props.onAtSelect(item)}
onPointerMove={() => props.setAtActive(key)}
>
<Icon name="brain" size="small" class="text-icon-info-active shrink-0" />
<span
class="whitespace-nowrap"
classList={{
"text-[13px] leading-[calc(var(--font-size-base)*1.8)] tracking-[-0.04px] [font-weight:440]":
props.newLayoutDesigns,
"text-v2-text-text-base": props.newLayoutDesigns,
"text-14-regular": !props.newLayoutDesigns,
"text-text-strong": !props.newLayoutDesigns,
}}
>
@{item.name}
</span>
</button>
)
}
if (item.type === "resource") {
return (
<button
class="w-full flex items-center gap-x-2 px-2 py-0.5"
classList={{
"rounded-[4px]": props.newLayoutDesigns,
"rounded-md": !props.newLayoutDesigns,
"bg-v2-overlay-simple-overlay-hover": props.newLayoutDesigns && props.atActive === key,
"bg-surface-raised-base-hover": !props.newLayoutDesigns && props.atActive === key,
}}
onClick={() => props.onAtSelect(item)}
onPointerMove={() => props.setAtActive(key)}
>
<FileIcon node={{ path: item.uri, type: "file" }} class="shrink-0 size-4" />
<div
class="flex items-center min-w-0"
classList={{
"text-[13px] leading-[calc(var(--font-size-base)*1.8)] tracking-[-0.04px] [font-weight:440]":
props.newLayoutDesigns,
"text-14-regular": !props.newLayoutDesigns,
}}
>
<span
class="text-text-strong whitespace-nowrap"
classList={{ "text-v2-text-text-base": props.newLayoutDesigns }}
>
@{item.name}
</span>
<Show when={item.description}>
{(description) => (
<span
class="whitespace-nowrap truncate min-w-0 ml-2"
classList={{
"text-v2-text-text-muted": props.newLayoutDesigns,
"text-text-weak": !props.newLayoutDesigns,
}}
>
{description()}
</span>
)}
</Show>
</div>
</button>
)
}
if (item.type === "reference") {
return (
<button
class="w-full flex items-center gap-x-2 px-2 py-0.5"
classList={{
"rounded-[4px]": props.newLayoutDesigns,
"rounded-md": !props.newLayoutDesigns,
"bg-v2-overlay-simple-overlay-hover": props.newLayoutDesigns && props.atActive === key,
"bg-surface-raised-base-hover": !props.newLayoutDesigns && props.atActive === key,
}}
onClick={() => props.onAtSelect(item)}
onPointerMove={() => props.setAtActive(key)}
>
<FileIcon node={{ path: item.path, type: "directory" }} class="shrink-0 size-4" />
<div
class="flex items-center min-w-0"
classList={{
"text-[13px] leading-[calc(var(--font-size-base)*1.8)] tracking-[-0.04px] [font-weight:440]":
props.newLayoutDesigns,
"text-14-regular": !props.newLayoutDesigns,
}}
>
<span
class="text-text-strong whitespace-nowrap"
classList={{ "text-v2-text-text-base": props.newLayoutDesigns }}
>
@{item.name}
</span>
<span
class="whitespace-nowrap truncate min-w-0 ml-2"
classList={{
"text-v2-text-text-muted": props.newLayoutDesigns,
"text-text-weak": !props.newLayoutDesigns,
}}
>
{item.description}
</span>
</div>
</button>
)
}
const isDirectory = item.path.endsWith("/")
const directory = isDirectory ? item.path : getDirectory(item.path)
const filename = isDirectory ? "" : getFilename(item.path)
return (
<button
class="w-full flex items-center gap-x-2 px-2 py-0.5"
classList={{
"rounded-[4px]": props.newLayoutDesigns,
"rounded-md": !props.newLayoutDesigns,
"bg-v2-overlay-simple-overlay-hover": props.newLayoutDesigns && props.atActive === key,
"bg-surface-raised-base-hover": !props.newLayoutDesigns && props.atActive === key,
}}
onClick={() => props.onAtSelect(item)}
onPointerMove={() => props.setAtActive(key)}
>
<FileIcon node={{ path: item.path, type: "file" }} class="shrink-0 size-4" />
<div
class="flex items-center min-w-0"
classList={{
"text-[13px] leading-[calc(var(--font-size-base)*1.8)] tracking-[-0.04px] [font-weight:440]":
props.newLayoutDesigns,
"text-14-regular": !props.newLayoutDesigns,
}}
>
<span
class="whitespace-nowrap truncate min-w-0"
classList={{
"text-v2-text-text-muted": props.newLayoutDesigns,
"text-text-weak": !props.newLayoutDesigns,
}}
>
{directory}
</span>
<Show when={!isDirectory}>
<span
class="whitespace-nowrap"
classList={{
"text-v2-text-text-base": props.newLayoutDesigns,
"text-text-strong": !props.newLayoutDesigns,
}}
>
{filename}
</span>
</Show>
</div>
</button>
)
}}
</For>
</Show>
</Match>
<Match when={props.popover === "slash"}>
<Show when={props.slashMenu}>
<div class="px-2 py-1">
<input
ref={(el) => requestAnimationFrame(() => el.focus())}
value={props.slashMenuQuery}
onInput={(event) => props.onSlashMenuInput(event.currentTarget.value)}
onKeyDown={props.onSlashMenuKeyDown}
onMouseDown={(event) => event.stopPropagation()}
aria-label={props.t("prompt.menu.commands")}
placeholder="/"
class="w-full bg-transparent outline-none text-[13px] leading-5 text-v2-text-text-base placeholder:text-v2-text-text-faint"
/>
</div>
</Show>
<Show
when={props.slashFlat.length > 0}
fallback={
<div
class="px-2 py-1"
classList={{
"text-v2-text-text-muted": props.newLayoutDesigns,
"text-text-weak": !props.newLayoutDesigns,
}}
>
{props.t("prompt.popover.emptyCommands")}
</div>
}
>
<For each={props.slashFlat}>
{(cmd) => {
const keybind = () => props.commandKeybind(cmd.id)
const keybindParts = () => props.commandKeybindParts(cmd.id)
return (
<button
data-slash-id={cmd.id}
classList={{
"w-full flex items-center justify-between gap-4 px-2 py-1": true,
"rounded-[4px] scroll-my-2": props.newLayoutDesigns,
"rounded-md": !props.newLayoutDesigns,
"bg-v2-overlay-simple-overlay-hover": props.newLayoutDesigns && props.slashActive === cmd.id,
"bg-surface-raised-base-hover": !props.newLayoutDesigns && props.slashActive === cmd.id,
}}
onClick={() => props.onSlashSelect(cmd)}
onPointerMove={() => props.setSlashActive(cmd.id)}
>
<div class="flex items-center gap-2 min-w-0">
<span
class="whitespace-nowrap"
classList={{
"text-[13px] leading-[calc(var(--font-size-base)*1.8)] tracking-[-0.04px] [font-weight:440]":
props.newLayoutDesigns,
"text-v2-text-text-base": props.newLayoutDesigns,
"text-14-regular": !props.newLayoutDesigns,
"text-text-strong": !props.newLayoutDesigns,
}}
>
/{cmd.trigger}
</span>
<Show when={cmd.description}>
<span
class="truncate"
classList={{
"text-[13px] leading-[calc(var(--font-size-base)*1.8)] tracking-[-0.04px] [font-weight:440]":
props.newLayoutDesigns,
"text-v2-text-text-muted": props.newLayoutDesigns,
"text-14-regular": !props.newLayoutDesigns,
"text-text-weak": !props.newLayoutDesigns,
}}
>
{cmd.description}
</span>
</Show>
</div>
<div class="flex items-center gap-2 shrink-0">
<Show when={cmd.type === "custom" && cmd.source !== "command"}>
<Show
when={props.newLayoutDesigns}
fallback={
<span class="text-11-regular px-1.5 py-0.5 rounded bg-surface-base text-text-subtle">
{cmd.source === "skill"
? props.t("prompt.slash.badge.skill")
: cmd.source === "mcp"
? props.t("prompt.slash.badge.mcp")
: props.t("prompt.slash.badge.custom")}
</span>
}
>
<Tag>
{cmd.source === "skill"
? props.t("prompt.slash.badge.skill")
: cmd.source === "mcp"
? props.t("prompt.slash.badge.mcp")
: props.t("prompt.slash.badge.custom")}
</Tag>
</Show>
</Show>
<Show when={props.newLayoutDesigns ? keybindParts().length > 0 : keybind()}>
<Show
when={props.newLayoutDesigns}
fallback={<span class="text-12-regular text-text-subtle">{keybind()}</span>}
>
<KeybindV2 keys={keybindParts()} variant="neutral" />
</Show>
</Show>
</div>
</button>
)
}}
</For>
</Show>
</Match>
</Switch>
</div>
</Show>
)
}
@@ -534,11 +534,14 @@ describe("prompt submit worktree selection", () => {
id: expect.stringMatching(/^msg_/),
command: "review",
arguments: "staged changes",
agent: "agent",
model: { id: "model", providerID: "provider", variant: "high" },
files: [],
},
])
expect(switchedAgents).toEqual([{ sessionID: "session-1", agent: "agent" }])
expect(switchedModels).toEqual([
{ sessionID: "session-1", model: { id: "model", providerID: "provider", variant: "high" } },
])
expect(sessionRequestOrder).toEqual(["agent", "model"])
expect(serverSessionSyncs).toBe(0)
})
@@ -61,23 +61,39 @@ export async function sendFollowupDraft(input: FollowupSendInput) {
input.serverSync.session.set("session_status", input.draft.sessionID, { type: "idle" })
}
const select = async () => {
const session = input.session()
if (session?.agent !== input.draft.agent) {
await input.api.switchAgent({ sessionID: input.draft.sessionID, agent: input.draft.agent })
}
if (
session?.model?.providerID === input.draft.model.providerID &&
session.model.id === input.draft.model.modelID &&
(session.model.variant ?? "default") === (input.draft.variant ?? "default")
)
return
await input.api.switchModel({
sessionID: input.draft.sessionID,
model: {
id: input.draft.model.modelID,
providerID: input.draft.model.providerID,
variant: input.draft.variant,
},
})
}
const [head, ...tail] = text.split(" ")
const cmd = head?.startsWith("/") ? head.slice(1) : undefined
if (cmd && input.sync.data.command.find((item) => item.name === cmd)) {
setBusy()
try {
await select()
const messageID = Identifier.ascending("message")
await input.api.command({
sessionID: input.draft.sessionID,
id: messageID,
command: cmd,
arguments: tail.join(" "),
agent: input.draft.agent,
model: {
id: input.draft.model.modelID,
providerID: input.draft.model.providerID,
variant: input.draft.variant,
},
files: await Promise.all(
images.map(async (attachment) => ({
uri: await blobDataUrl(attachment.blob, attachment.mime),
@@ -118,24 +134,7 @@ export async function sendFollowupDraft(input: FollowupSendInput) {
})
try {
const session = input.session()
if (session?.agent !== input.draft.agent) {
await input.api.switchAgent({ sessionID: input.draft.sessionID, agent: input.draft.agent })
}
if (
session?.model?.providerID !== input.draft.model.providerID ||
session.model.id !== input.draft.model.modelID ||
(session.model.variant ?? "default") !== (input.draft.variant ?? "default")
) {
await input.api.switchModel({
sessionID: input.draft.sessionID,
model: {
id: input.draft.model.modelID,
providerID: input.draft.model.providerID,
variant: input.draft.variant,
},
})
}
await select()
const admitted = await input.api.prompt({
sessionID: input.draft.sessionID,
@@ -469,14 +468,23 @@ export function createPromptSubmit(input: PromptSubmitInput) {
clearInput()
const messageID = Identifier.ascending("message")
submissionServerSync.session.set("session_status", session.id, { type: "busy" })
void submissionSDK.api.session
.command({
void (async () => {
if (session.agent !== agent)
await submissionSDK.api.session.switchAgent({ sessionID: session.id, agent })
if (
session.model?.providerID !== model.providerID ||
session.model.id !== model.modelID ||
(session.model.variant ?? "default") !== (variant ?? "default")
)
await submissionSDK.api.session.switchModel({
sessionID: session.id,
model: { id: model.modelID, providerID: model.providerID, variant },
})
await submissionSDK.api.session.command({
sessionID: session.id,
id: messageID,
command: commandName,
arguments: args.join(" "),
agent,
model: { id: model.modelID, providerID: model.providerID, variant },
files: await Promise.all(
images.map(async (attachment) => ({
uri: await blobDataUrl(attachment.blob, attachment.mime),
@@ -484,14 +492,14 @@ export function createPromptSubmit(input: PromptSubmitInput) {
})),
),
})
.catch((err) => {
submissionServerSync.session.set("session_status", session.id, { type: "idle" })
showToast({
title: language.t("prompt.toast.commandSendFailed.title"),
description: formatServerError(err, language.t, language.t("common.requestFailed")),
})
restoreInput()
})().catch((err) => {
submissionServerSync.session.set("session_status", session.id, { type: "idle" })
showToast({
title: language.t("prompt.toast.commandSendFailed.title"),
description: formatServerError(err, language.t, language.t("common.requestFailed")),
})
restoreInput()
})
return
}
}
@@ -0,0 +1,46 @@
import { createComputed, on, type Accessor } from "solid-js"
import { createStore, type SetStoreFunction } from "solid-js/store"
import type { PromptHistoryEntry } from "./history"
export type PromptInputTransientState = {
popover: "at" | "slash" | null
slashMenu: boolean
slashMenuQuery: string
historyIndex: number
savedPrompt: PromptHistoryEntry | null
placeholder: number
draggingType: "image" | "@mention" | null
mode: "normal" | "shell"
applyingHistory: boolean
}
function resetPromptInputTransientState(setStore: SetStoreFunction<PromptInputTransientState>) {
setStore({
popover: null,
slashMenu: false,
slashMenuQuery: "",
historyIndex: -1,
savedPrompt: null,
draggingType: null,
mode: "normal",
applyingHistory: false,
})
}
export function createPromptInputTransientState(identity: Accessor<unknown>, placeholder: number) {
const [store, setStore] = createStore<PromptInputTransientState>({
popover: null,
slashMenu: false,
slashMenuQuery: "",
historyIndex: -1,
savedPrompt: null,
placeholder,
draggingType: null,
mode: "normal",
applyingHistory: false,
})
createComputed(on(identity, () => resetPromptInputTransientState(setStore), { defer: true }))
return [store, setStore] as const
}
@@ -1,6 +1,7 @@
import { Show, createMemo, type ComponentProps, type JSX } from "solid-js"
import { Match, Show, Switch, createMemo, type ComponentProps, type JSX } from "solid-js"
import { ProgressCircle } from "@opencode-ai/ui/progress-circle"
import { ProgressCircleV2 } from "@opencode-ai/ui/v2/progress-circle-v2"
import { Button } from "@opencode-ai/ui/button"
import { IconButtonV2 } from "@opencode-ai/ui/v2/icon-button-v2"
import { TooltipV2 } from "@opencode-ai/ui/v2/tooltip-v2"
import { createMediaQuery } from "@solid-primitives/media"
@@ -14,9 +15,11 @@ import { useSDK } from "@/context/sdk"
import { getSessionContext } from "@/components/session/session-context-metrics"
import { useSessionLayout } from "@/pages/session/session-layout"
import { createSessionTabs } from "@/pages/session/helpers"
import { useSettings } from "@/context/settings"
interface SessionContextUsageProps {
variant?: "button" | "indicator"
buttonAppearance?: "default" | "v2"
placement?: ComponentProps<typeof TooltipV2>["placement"]
}
@@ -45,16 +48,18 @@ export function SessionContextUsage(props: SessionContextUsageProps) {
const layout = useLayout()
const language = useLanguage()
const sdk = useSDK()
const settings = useSettings()
const providers = useProviders(() => sdk().directory)
const { params, tabs, view } = useSessionLayout()
const isDesktop = createMediaQuery("(min-width: 768px)")
const variant = createMemo(() => props.variant ?? "button")
const buttonAppearance = createMemo(() => props.buttonAppearance ?? "default")
const tabState = createSessionTabs({
tabs,
pathFromTab: file.pathFromTab,
normalizeTab: (tab) => (tab.startsWith("file://") ? file.tab(tab) : tab),
fileBrowser: () => isDesktop() && !!params.id,
fileBrowser: () => settings.general.newLayoutDesigns() && isDesktop() && !!params.id,
})
const messages = createMemo(() => (params.id ? (sync().data.message[params.id] ?? []) : []))
const info = createMemo(() => (params.id ? sync().session.get(params.id) : undefined))
@@ -133,9 +138,9 @@ export function SessionContextUsage(props: SessionContextUsageProps) {
return (
<Show when={params.id}>
<TooltipV2 value={tooltipValue()} placement={props.placement ?? "top"} shift={-8}>
<Show
when={variant() === "indicator"}
fallback={
<Switch>
<Match when={variant() === "indicator"}>{circle()}</Match>
<Match when={buttonAppearance() === "v2"}>
<IconButtonV2
type="button"
variant="ghost-muted"
@@ -144,10 +149,19 @@ export function SessionContextUsage(props: SessionContextUsageProps) {
onClick={openContext}
aria-label={language.t("context.usage.view")}
/>
}
>
{circle()}
</Show>
</Match>
<Match when={true}>
<Button
type="button"
variant="ghost"
class="size-6"
onClick={openContext}
aria-label={language.t("context.usage.view")}
>
{circle()}
</Button>
</Match>
</Switch>
</TooltipV2>
</Show>
)
+2 -1
View File
@@ -1,5 +1,6 @@
export { SessionHeader } from "./session-header"
export { SessionContextTab } from "./session-context-tab"
export { FileVisual } from "./session-sortable-tab"
export { SortableTab, FileVisual } from "./session-sortable-tab"
export { SortableTabV2 } from "./session-sortable-tab-v2"
export { SortableTerminalTab } from "./session-sortable-terminal-tab"
export { NewSessionView } from "./session-new-view"
@@ -1,7 +1,14 @@
import { Show } from "solid-js"
import { createMemo, Show } from "solid-js"
import type { JSX } from "solid-js"
import { createSortable } from "@thisbeyond/solid-dnd"
import { FileIcon } from "@opencode-ai/ui/file-icon"
import { IconButton } from "@opencode-ai/ui/icon-button"
import { TooltipKeybind } from "@opencode-ai/ui/tooltip"
import { Tabs } from "@opencode-ai/ui/tabs"
import { getFilename } from "@opencode-ai/core/util/path"
import { useFile } from "@/context/file"
import { useLanguage } from "@/context/language"
import { useCommand } from "@/context/command"
export function FileVisual(props: { path: string; active?: boolean; temporary?: boolean }): JSX.Element {
return (
@@ -21,3 +28,51 @@ export function FileVisual(props: { path: string; active?: boolean; temporary?:
</div>
)
}
export function SortableTab(props: {
tab: string
temporary?: boolean
onTabClose: (tab: string) => void
onTabDoubleClick?: (tab: string) => void
}): JSX.Element {
const file = useFile()
const language = useLanguage()
const command = useCommand()
const sortable = createSortable(props.tab)
const path = createMemo(() => file.pathFromTab(props.tab))
const content = createMemo(() => {
const value = path()
if (!value) return
return <FileVisual path={value} temporary={props.temporary} />
})
return (
<div use:sortable class="h-full flex items-center" classList={{ "opacity-0": sortable.isActiveDraggable }}>
<div class="relative">
<Tabs.Trigger
value={props.tab}
closeButton={
<TooltipKeybind
title={language.t("common.closeTab")}
keybind={command.keybind("tab.close")}
placement="bottom"
gutter={10}
>
<IconButton
icon="close-small"
variant="ghost"
class="h-5 w-5"
onClick={() => props.onTabClose(props.tab)}
aria-label={language.t("common.closeTab")}
/>
</TooltipKeybind>
}
hideCloseButton
onMiddleClick={() => props.onTabClose(props.tab)}
onDblClick={() => props.onTabDoubleClick?.(props.tab)}
>
<Show when={content()}>{(value) => value()}</Show>
</Tabs.Trigger>
</div>
</div>
)
}
@@ -4,13 +4,20 @@ import { createStore } from "solid-js/store"
import { useSortable } from "@dnd-kit/solid/sortable"
import { IconButton } from "@opencode-ai/ui/icon-button"
import { Tabs } from "@opencode-ai/ui/tabs"
import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu"
import { Icon } from "@opencode-ai/ui/icon"
import { MenuV2 } from "@opencode-ai/ui/v2/menu-v2"
import { isDefaultTitle as isDefaultTerminalTitle } from "@/context/terminal-title"
import { useTerminal, type LocalPTY } from "@/context/terminal"
import { useLanguage } from "@/context/language"
import { focusTerminalById } from "@/pages/session/helpers"
export function SortableTerminalTabV2(props: { terminal: LocalPTY; index: number; onClose?: () => void }): JSX.Element {
export function SortableTerminalTabV2(props: {
terminal: LocalPTY
index: number
newLayout: boolean
onClose?: () => void
}): JSX.Element {
const terminal = useTerminal()
const language = useLanguage()
const sortable = useSortable({
@@ -24,6 +31,8 @@ export function SortableTerminalTabV2(props: { terminal: LocalPTY; index: number
const [store, setStore] = createStore({
editing: false,
title: props.terminal.title,
menuOpen: false,
menuPosition: { x: 0, y: 0 },
blurEnabled: false,
})
let input: HTMLInputElement | undefined
@@ -97,6 +106,12 @@ export function SortableTerminalTabV2(props: { terminal: LocalPTY; index: number
}
}
const menu = (e: MouseEvent) => {
e.preventDefault()
setStore("menuPosition", { x: e.clientX, y: e.clientY })
setStore("menuOpen", true)
}
createEffect(() => {
if (!store.editing) return
if (!input) return
@@ -115,75 +130,155 @@ export function SortableTerminalTabV2(props: { terminal: LocalPTY; index: number
})
return (
<div ref={sortable.ref} class="h-full flex items-center outline-none focus:outline-none focus-visible:outline-none">
<MenuV2.Context>
<MenuV2.Context.Trigger class="relative" as="div">
<Tabs.Trigger
value={props.terminal.id}
onMouseDown={(e) => {
// Switch on mousedown to shave the press-release delay off tab switches.
if (e.button !== 0) return
if (store.editing) return
focus()
}}
onClick={(e) => {
// Mouse navigation already happened on mousedown; detail 0 means keyboard activation.
if (e.detail > 0) return
focus()
}}
closeButton={
<IconButton
icon="close-small"
variant="ghost"
class="h-5 w-5"
onClick={(e) => {
e.stopPropagation()
close()
}}
aria-label={language.t("terminal.close")}
/>
}
hideCloseButton
onMiddleClick={close}
>
<span
class="truncate"
data-slot="terminal-tab-title"
onDblClick={edit}
classList={{ invisible: store.editing }}
<div
ref={sortable.ref}
class="outline-none focus:outline-none focus-visible:outline-none"
classList={{
"h-full flex items-center": props.newLayout,
"h-full": !props.newLayout,
}}
>
<Show
when={props.newLayout}
fallback={
<div class="relative h-full">
<Tabs.Trigger
value={props.terminal.id}
onClick={focus}
onMouseDown={(e) => e.preventDefault()}
onContextMenu={menu}
class="!shadow-none"
classes={{
button: "border-0 outline-none focus:outline-none focus-visible:outline-none !shadow-none !ring-0",
}}
closeButton={
<IconButton
icon="close"
variant="ghost"
onClick={(e) => {
e.stopPropagation()
close()
}}
aria-label={language.t("terminal.close")}
/>
}
>
{label()}
</span>
</Tabs.Trigger>
<Show when={store.editing}>
<div class="absolute inset-0 flex items-center bg-v2-background-bg-layer-01 z-10 pointer-events-auto rounded-[6px] shadow-[inset_0_0_0_0.5px_var(--v2-border-border-muted)] px-2">
<input
ref={input}
type="text"
value={store.title}
onInput={(e) => setStore("title", e.currentTarget.value)}
onBlur={save}
onKeyDown={keydown}
onMouseDown={(e) => e.stopPropagation()}
class="bg-transparent border-none outline-none min-w-0 flex-1 p-0 text-[13px] leading-4 tracking-[-0.04px] text-v2-text-text-base [font-weight:440] [font-variation-settings:'slnt'_0] [font-variant-numeric:tabular-nums]"
/>
</div>
</Show>
</MenuV2.Context.Trigger>
<MenuV2.Context.Portal>
<MenuV2.Context.Content
onCloseAutoFocus={(e) => {
if (!editRequested) return
e.preventDefault()
editRequested = false
requestAnimationFrame(() => edit())
}}
>
<MenuV2.Item onSelect={() => (editRequested = true)}>{language.t("common.rename")}</MenuV2.Item>
<MenuV2.Item onSelect={close}>{language.t("common.close")}</MenuV2.Item>
</MenuV2.Context.Content>
</MenuV2.Context.Portal>
</MenuV2.Context>
<span onDblClick={edit} classList={{ invisible: store.editing }}>
{label()}
</span>
</Tabs.Trigger>
<Show when={store.editing}>
<div class="absolute inset-0 flex items-center px-3 bg-muted z-10 pointer-events-auto">
<input
ref={input}
type="text"
value={store.title}
onInput={(e) => setStore("title", e.currentTarget.value)}
onBlur={save}
onKeyDown={keydown}
onMouseDown={(e) => e.stopPropagation()}
class="bg-transparent border-none outline-none text-sm min-w-0 flex-1"
/>
</div>
</Show>
<DropdownMenu open={store.menuOpen} onOpenChange={(open) => setStore("menuOpen", open)}>
<DropdownMenu.Portal>
<DropdownMenu.Content
class="fixed"
style={{
left: `${store.menuPosition.x}px`,
top: `${store.menuPosition.y}px`,
}}
onCloseAutoFocus={(e) => {
if (!editRequested) return
e.preventDefault()
editRequested = false
requestAnimationFrame(() => edit())
}}
>
<DropdownMenu.Item onSelect={() => (editRequested = true)}>
<Icon name="edit" class="w-4 h-4 mr-2" />
{language.t("common.rename")}
</DropdownMenu.Item>
<DropdownMenu.Item onSelect={close}>
<Icon name="close" class="w-4 h-4 mr-2" />
{language.t("common.close")}
</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Portal>
</DropdownMenu>
</div>
}
>
<MenuV2.Context>
<MenuV2.Context.Trigger class="relative" as="div">
<Tabs.Trigger
value={props.terminal.id}
onMouseDown={(e) => {
// Switch on mousedown to shave the press-release delay off tab switches.
if (e.button !== 0) return
if (store.editing) return
focus()
}}
onClick={(e) => {
// Mouse navigation already happened on mousedown; detail 0 means keyboard activation.
if (e.detail > 0) return
focus()
}}
closeButton={
<IconButton
icon="close-small"
variant="ghost"
class="h-5 w-5"
onClick={(e) => {
e.stopPropagation()
close()
}}
aria-label={language.t("terminal.close")}
/>
}
hideCloseButton
onMiddleClick={close}
>
<span
class="truncate"
data-slot="terminal-tab-title"
onDblClick={edit}
classList={{ invisible: store.editing }}
>
{label()}
</span>
</Tabs.Trigger>
<Show when={store.editing}>
<div class="absolute inset-0 flex items-center bg-v2-background-bg-layer-01 z-10 pointer-events-auto rounded-[6px] shadow-[inset_0_0_0_0.5px_var(--v2-border-border-muted)] px-2">
<input
ref={input}
type="text"
value={store.title}
onInput={(e) => setStore("title", e.currentTarget.value)}
onBlur={save}
onKeyDown={keydown}
onMouseDown={(e) => e.stopPropagation()}
class="bg-transparent border-none outline-none min-w-0 flex-1 p-0 text-[13px] leading-4 tracking-[-0.04px] text-v2-text-text-base [font-weight:440] [font-variation-settings:'slnt'_0] [font-variant-numeric:tabular-nums]"
/>
</div>
</Show>
</MenuV2.Context.Trigger>
<MenuV2.Context.Portal>
<MenuV2.Context.Content
onCloseAutoFocus={(e) => {
if (!editRequested) return
e.preventDefault()
editRequested = false
requestAnimationFrame(() => edit())
}}
>
<MenuV2.Item onSelect={() => (editRequested = true)}>{language.t("common.rename")}</MenuV2.Item>
<MenuV2.Item onSelect={close}>{language.t("common.close")}</MenuV2.Item>
</MenuV2.Context.Content>
</MenuV2.Context.Portal>
</MenuV2.Context>
</Show>
</div>
)
}
@@ -0,0 +1,193 @@
import type { JSX } from "solid-js"
import { Show, createEffect, onCleanup } from "solid-js"
import { createStore } from "solid-js/store"
import { createSortable } from "@thisbeyond/solid-dnd"
import { IconButton } from "@opencode-ai/ui/icon-button"
import { Tabs } from "@opencode-ai/ui/tabs"
import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu"
import { Icon } from "@opencode-ai/ui/icon"
import { isDefaultTitle as isDefaultTerminalTitle } from "@/context/terminal-title"
import { useTerminal, type LocalPTY } from "@/context/terminal"
import { useLanguage } from "@/context/language"
import { focusTerminalById } from "@/pages/session/helpers"
export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () => void }): JSX.Element {
const terminal = useTerminal()
const language = useLanguage()
const sortable = createSortable(props.terminal.id)
const [store, setStore] = createStore({
editing: false,
title: props.terminal.title,
menuOpen: false,
menuPosition: { x: 0, y: 0 },
blurEnabled: false,
})
let input: HTMLInputElement | undefined
let blurFrame: number | undefined
let editRequested = false
const isDefaultTitle = () => {
const number = props.terminal.titleNumber
if (!Number.isFinite(number) || number <= 0) return false
return isDefaultTerminalTitle(props.terminal.title, number)
}
const label = () => {
language.locale()
if (props.terminal.title && !isDefaultTitle()) return props.terminal.title
const number = props.terminal.titleNumber
if (Number.isFinite(number) && number > 0) return language.t("terminal.title.numbered", { number })
if (props.terminal.title) return props.terminal.title
return language.t("terminal.title")
}
const close = () => {
const count = terminal.all().length
void terminal.close(props.terminal.id)
if (count === 1) {
props.onClose?.()
}
}
const focus = () => {
if (store.editing) return
if (document.activeElement instanceof HTMLElement) document.activeElement.blur()
focusTerminalById(props.terminal.id)
}
const edit = (e?: Event) => {
if (e) {
e.stopPropagation()
e.preventDefault()
}
setStore("blurEnabled", false)
setStore("title", props.terminal.title)
setStore("editing", true)
}
const save = () => {
if (!store.blurEnabled) return
const value = store.title.trim()
if (value && value !== props.terminal.title) {
terminal.update({ id: props.terminal.id, title: value })
}
setStore("editing", false)
}
const keydown = (e: KeyboardEvent) => {
if (e.key === "Enter") {
e.preventDefault()
save()
return
}
if (e.key === "Escape") {
e.preventDefault()
setStore("editing", false)
}
}
const menu = (e: MouseEvent) => {
e.preventDefault()
setStore("menuPosition", { x: e.clientX, y: e.clientY })
setStore("menuOpen", true)
}
createEffect(() => {
if (!store.editing) return
if (!input) return
input.focus()
input.select()
if (blurFrame !== undefined) cancelAnimationFrame(blurFrame)
blurFrame = requestAnimationFrame(() => {
blurFrame = undefined
setStore("blurEnabled", true)
})
})
onCleanup(() => {
if (blurFrame === undefined) return
cancelAnimationFrame(blurFrame)
})
return (
<div
use:sortable
class="outline-none focus:outline-none focus-visible:outline-none"
classList={{
"h-full": true,
"opacity-0": sortable.isActiveDraggable,
}}
>
<div class="relative h-full">
<Tabs.Trigger
value={props.terminal.id}
onClick={focus}
onMouseDown={(e) => e.preventDefault()}
onContextMenu={menu}
class="!shadow-none"
classes={{
button: "border-0 outline-none focus:outline-none focus-visible:outline-none !shadow-none !ring-0",
}}
closeButton={
<IconButton
icon="close"
variant="ghost"
onClick={(e) => {
e.stopPropagation()
close()
}}
aria-label={language.t("terminal.close")}
/>
}
>
<span onDblClick={edit} classList={{ invisible: store.editing }}>
{label()}
</span>
</Tabs.Trigger>
<Show when={store.editing}>
<div class="absolute inset-0 flex items-center px-3 bg-muted z-10 pointer-events-auto">
<input
ref={input}
type="text"
value={store.title}
onInput={(e) => setStore("title", e.currentTarget.value)}
onBlur={save}
onKeyDown={keydown}
onMouseDown={(e) => e.stopPropagation()}
class="bg-transparent border-none outline-none text-sm min-w-0 flex-1"
/>
</div>
</Show>
<DropdownMenu open={store.menuOpen} onOpenChange={(open) => setStore("menuOpen", open)}>
<DropdownMenu.Portal>
<DropdownMenu.Content
class="fixed"
style={{
left: `${store.menuPosition.x}px`,
top: `${store.menuPosition.y}px`,
}}
onCloseAutoFocus={(e) => {
if (!editRequested) return
e.preventDefault()
editRequested = false
requestAnimationFrame(() => edit())
}}
>
<DropdownMenu.Item onSelect={() => (editRequested = true)}>
<Icon name="edit" class="w-4 h-4 mr-2" />
{language.t("common.rename")}
</DropdownMenu.Item>
<DropdownMenu.Item onSelect={close}>
<Icon name="close" class="w-4 h-4 mr-2" />
{language.t("common.close")}
</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Portal>
</DropdownMenu>
</div>
</div>
)
}
@@ -124,13 +124,7 @@ export const SettingsProvidersV2: Component<{
.get({ integrationID: providerID, location })
.then(async (integration) => {
const credentials = integration.data?.connections.filter((item) => item.type === "credential") ?? []
if (credentials.length === 0) {
showToast({
title: language.t("common.requestFailed"),
description: language.t("provider.disconnect.toast.noCredentials.description", { provider: name }),
})
return
}
if (credentials.length === 0) throw new Error(`No removable credentials found for ${name}`)
await Promise.all(
credentials.map((credential) => serverSdk.api.credential.remove({ credentialID: credential.id, location })),
)
@@ -141,11 +135,9 @@ export const SettingsProvidersV2: Component<{
description: language.t("provider.disconnect.toast.disconnected.description", { provider: name }),
})
})
.catch(() => {
showToast({
title: language.t("common.requestFailed"),
description: language.t("provider.disconnect.toast.failed.description", { provider: name }),
})
.catch((err: unknown) => {
const message = err instanceof Error ? err.message : String(err)
showToast({ title: language.t("common.requestFailed"), description: message })
})
}
+4 -2
View File
@@ -255,8 +255,10 @@ export const Terminal = (props: TerminalProps) => {
if (!variant?.seeds && !variant?.palette) return fallback
const resolved = resolveThemeVariant(variant, mode === "dark")
const text = resolved["text-stronger"] ?? fallback.foreground
const background =
resolveV2Token(resolveThemeVariantV2(variant, mode === "dark"), "v2-background-bg-base") ?? fallback.background
const background = settings.general.newLayoutDesigns()
? (resolveV2Token(resolveThemeVariantV2(variant, mode === "dark"), "v2-background-bg-base") ??
fallback.background)
: (resolved["background-stronger"] ?? fallback.background)
const alpha = mode === "dark" ? 0.25 : 0.2
const base = text.startsWith("#") ? (text as HexColor) : (fallback.foreground as HexColor)
const selectionBackground = withAlpha(base, alpha)
+18 -8
View File
@@ -11,7 +11,11 @@ import {
untrack,
} from "solid-js"
import { createStore } from "solid-js/store"
import { useLocation, useNavigate } from "@solidjs/router"
import { useLocation, useNavigate, useParams } from "@solidjs/router"
import { IconButton } from "@opencode-ai/ui/icon-button"
import { Icon } from "@opencode-ai/ui/icon"
import { Button } from "@opencode-ai/ui/button"
import { Tooltip, TooltipKeybind } from "@opencode-ai/ui/tooltip"
import { IconButtonV2 } from "@opencode-ai/ui/v2/icon-button-v2"
import { Icon as IconV2 } from "@opencode-ai/ui/v2/icon"
import { KeybindV2 } from "@opencode-ai/ui/v2/keybind-v2"
@@ -28,13 +32,14 @@ import { TitlebarTabStrip } from "@/components/titlebar-tab-strip"
import { makeEventListener } from "@solid-primitives/event-listener"
import { createMediaQuery } from "@solid-primitives/media"
import { readSessionTabsRemovedDetail, SESSION_TABS_REMOVED_EVENT } from "@/components/titlebar-session-events"
import { useGlobal } from "@/context/global"
import { ServerConnection } from "@/context/servers"
import { useGlobal, useServerCtx } from "@/context/global"
import { ServerConnection, useServers } from "@/context/servers"
import { tabKey, useTabs } from "@/context/tabs"
import type { PromptSession } from "@/context/prompt"
import "./titlebar.css"
import { newTabTooltipKeybind } from "./command-tooltip-keybind"
const legacyTitlebarHeight = 40
const v2TitlebarHeight = 36
const minTitlebarZoom = 0.25
const windowsControlsBaseWidth = 138 // 3 native Windows caption buttons at 46px each.
@@ -60,10 +65,12 @@ export function Titlebar(props: { update?: TitlebarUpdate; debugTools?: { visibl
const command = useCommand()
const language = useLanguage()
const settings = useSettings()
const servers = useServers()
const navigate = useNavigate()
const location = useLocation()
const useV2Titlebar = createMemo(() => settings.general.newLayoutDesigns())
const mobile = createMediaQuery("(max-width: 767px)")
const bottom = createMemo(() => mobile() && settings.general.mobileTitlebarPosition() === "bottom")
const bottom = createMemo(() => useV2Titlebar() && mobile() && settings.general.mobileTitlebarPosition() === "bottom")
const mac = createMemo(() => platform.platform === "desktop" && platform.os === "macos")
const windows = createMemo(() => platform.platform === "desktop" && platform.os === "windows")
@@ -72,8 +79,9 @@ export function Titlebar(props: { update?: TitlebarUpdate; debugTools?: { visibl
const zoom = () => platform.webviewZoom?.() ?? 1
const titlebarZoom = () => (windows() ? Math.max(zoom(), minTitlebarZoom) : zoom())
const minHeight = () => {
if (mac()) return `${v2TitlebarHeight / zoom()}px`
if (windows()) return `${v2TitlebarHeight / Math.min(titlebarZoom(), 1)}px`
const height = useV2Titlebar() ? v2TitlebarHeight : legacyTitlebarHeight
if (mac()) return `${height / zoom()}px`
if (windows()) return `${height / Math.min(titlebarZoom(), 1)}px`
return undefined
}
const windowsControlsWidth = () => `${windowsControlsBaseWidth / Math.max(titlebarZoom(), 1)}px`
@@ -145,9 +153,11 @@ export function Titlebar(props: { update?: TitlebarUpdate; debugTools?: { visibl
return (
<header
data-slot="titlebar-v2"
data-slot={useV2Titlebar() ? "titlebar-v2" : undefined}
classList={{
"shrink-0 relative flex flex-row h-9 bg-v2-background-bg-deep overflow-visible": true,
"shrink-0 relative flex flex-row": true,
"h-9 bg-v2-background-bg-deep overflow-visible": useV2Titlebar(),
"h-10 bg-background-base overflow-hidden": !useV2Titlebar(),
"order-last": bottom(),
}}
style={{
-9
View File
@@ -220,14 +220,6 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont
}
const plural = (key: PluralKey, count: number, params?: Record<string, string | number | boolean>) =>
pluralForm(key, pluralCategory(intl(), count), { ...params, count })
const backgroundTasks = (shells: number, subagents: number, mode: "move" | "running") => {
const shell = shells ? plural("session.background.shell", shells, { count: shells }) : undefined
const subagent = subagents ? plural("session.background.subagent", subagents, { count: subagents }) : undefined
const tasks =
shell && subagent ? t("session.background.combine", { first: shell, second: subagent }) : (shell ?? subagent)
if (!tasks) return ""
return t(mode === "move" ? "session.background.moveTasks" : "session.background.inBackground", { tasks })
}
const label = (value: Locale) => DESKTOP_NATIVE_LABELS[value]
@@ -259,7 +251,6 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont
t,
plural,
pluralForm,
backgroundTasks,
setLocale(next: Locale) {
setStore("locale", normalizeLocale(next))
},
+5 -1
View File
@@ -5,6 +5,7 @@ import { createMemo, createResource, createRoot, getOwner, onCleanup } from "sol
import { requireServerKey } from "@/utils/session-route"
import { ServerConnection } from "./servers"
import { useServerSDK } from "./server-sdk"
import { useSettings } from "./settings"
import { useSDK } from "./sdk"
import { useTabs, type Tab } from "./tabs"
import type { ServerScope } from "@/utils/server-scope"
@@ -79,6 +80,7 @@ export const { use: usePrompt, provider: PromptProvider } = createSimpleContext(
const [search] = useSearchParams<{ draftId?: string }>()
const serverSDK = useServerSDK()
const tabs = useTabs()
const settings = useSettings()
const cache = new Map<string, PromptCacheEntry>()
const disposeAll = () => {
@@ -104,7 +106,9 @@ export const { use: usePrompt, provider: PromptProvider } = createSimpleContext(
const scope = (): PromptScope =>
search.draftId ? { draftID: search.draftId } : { dir: base64Encode(sdk().directory), id: params.id }
const load = (scope: PromptScope, target?: { server?: ServerConnection.Key; scope: ServerScope }) => {
const current = selectPromptTab(tabs.store, scope, target?.server ?? serverKey())
const current = settings.general.newLayoutDesigns()
? selectPromptTab(tabs.store, scope, target?.server ?? serverKey())
: undefined
if (current) return createTabPromptState(tabs, current, target?.scope ?? serverSDK.scope, scope)
const key = target ? `${target.scope}:${scopeKey(scope)}` : scopeKey(scope)
+58 -1
View File
@@ -1,6 +1,18 @@
import { describe, expect, test } from "bun:test"
import type { OpenCodeEvent } from "@opencode-ai/client/promise"
import { adaptServerEvent } from "./server-sdk"
import { adaptServerEvent, coalesceServerEvents, resumeStreamAfterPageShow } from "./server-sdk"
describe("resumeStreamAfterPageShow", () => {
test("restarts a stream only after a back-forward cache restore", () => {
let starts = 0
const start = () => starts++
resumeStreamAfterPageShow({ persisted: false } as PageTransitionEvent, start)
resumeStreamAfterPageShow({ persisted: true } as PageTransitionEvent, start)
expect(starts).toBe(1)
})
})
describe("adaptServerEvent", () => {
test("preserves current permission requests", () => {
@@ -31,3 +43,48 @@ describe("adaptServerEvent", () => {
})
})
})
describe("current event buffering", () => {
const delta = (id: string, value: string, ordinal = 0) =>
adaptServerEvent({
id,
created: 1,
type: "session.text.delta",
location: { directory: "/repo" },
data: { sessionID: "ses", assistantMessageID: "msg", ordinal, delta: value },
} as OpenCodeEvent)
test("merges adjacent text deltas for the same message and ordinal", () => {
const result = coalesceServerEvents([delta("evt_1", "hello "), delta("evt_2", "world")])
expect(result).toHaveLength(1)
expect(result[0]?.current).toMatchObject({ id: "evt_2", data: { delta: "hello world" } })
expect(result[0]?.properties).toMatchObject({ delta: "hello world" })
})
test("coalesces current tool input deltas by tool ID", () => {
const current = (eventID: string, id: string, delta: string) =>
adaptServerEvent({
id: eventID,
created: 1,
type: "session.tool.input.delta",
location: { directory: "/repo" },
data: { sessionID: "ses", assistantMessageID: "msg", id, delta },
} as OpenCodeEvent)
const result = coalesceServerEvents([
current("evt_1", "call_1", "{"),
current("evt_2", "call_1", "}"),
current("evt_3", "call_2", "[]"),
])
expect(result).toHaveLength(2)
expect(result[0]?.current).toMatchObject({ id: "evt_2", data: { id: "call_1", delta: "{}" } })
expect(result[1]?.current).toMatchObject({ id: "evt_3", data: { id: "call_2", delta: "[]" } })
})
test("preserves boundaries between distinct delta streams", () => {
const events = [delta("evt_1", "a"), delta("evt_2", "b", 1), delta("evt_3", "c")]
expect(coalesceServerEvents(events).map((event) => event.current?.id)).toEqual(["evt_1", "evt_2", "evt_3"])
})
})
+274 -21
View File
@@ -1,8 +1,9 @@
import type { OpenCodeEvent } from "@opencode-ai/client/promise"
import { createClientConnection, type ClientConnectionStatus } from "@opencode-ai/client/solid"
import type { Event } from "@/types"
import { createGlobalEmitter } from "@solid-primitives/event-bus"
import { type Accessor, onCleanup } from "solid-js"
import { makeEventListener } from "@solid-primitives/event-listener"
import { type Accessor, batch, onCleanup, onMount } from "solid-js"
import { createStore } from "solid-js/store"
import { createApiForServer, type ServerApi } from "@/utils/server"
import { usePlatform } from "./platform"
import { ServerConnection } from "./servers"
@@ -11,15 +12,78 @@ import { ServerScope } from "@/utils/server-scope"
import { useServer } from "./server"
export type ServerEvent = Event & { id?: string; current?: OpenCodeEvent }
type ServerEventMap = { [Type in ServerEvent["type"]]: Extract<ServerEvent, { type: Type }> }
type CurrentDelta = Extract<
OpenCodeEvent,
{ type: "session.text.delta" | "session.reasoning.delta" | "session.tool.input.delta" | "session.compaction.delta" }
>
export function adaptServerEvent(event: OpenCodeEvent): ServerEvent {
return { id: event.id, type: event.type, properties: event.data, current: event } as ServerEvent
}
type ServerEventMap = { [Type in ServerEvent["type"]]: Extract<ServerEvent, { type: Type }> }
export function coalesceServerEvents(events: ServerEvent[]) {
const output: ServerEvent[] = []
events.forEach((event) => {
const current = currentDelta(event.current)
if (current) {
const previous = output[output.length - 1]
const prior = currentDelta(previous?.current)
if (
previous &&
prior &&
prior.location?.directory === current.location?.directory &&
currentDeltaKey(prior) === currentDeltaKey(current)
) {
const fragment = currentDeltaFragment(prior) + currentDeltaFragment(current)
const data =
current.type === "session.compaction.delta"
? { ...current.data, text: fragment }
: { ...current.data, delta: fragment }
output[output.length - 1] = {
...event,
properties: data,
current: { ...current, data } as CurrentDelta,
} as ServerEvent
return
}
output.push(event)
return
}
output.push(event)
})
return output
}
function currentDelta(event: OpenCodeEvent | undefined): CurrentDelta | undefined {
if (
event?.type === "session.text.delta" ||
event?.type === "session.reasoning.delta" ||
event?.type === "session.tool.input.delta" ||
event?.type === "session.compaction.delta"
)
return event
}
function currentDeltaKey(event: CurrentDelta) {
if (event.type === "session.tool.input.delta")
return `${event.type}:${event.data.sessionID}:${event.data.assistantMessageID}:${event.data.id}`
if (event.type === "session.compaction.delta") return `${event.type}:${event.data.sessionID}`
return `${event.type}:${event.data.sessionID}:${event.data.assistantMessageID}:${event.data.ordinal}`
}
function currentDeltaFragment(event: CurrentDelta) {
return event.type === "session.compaction.delta" ? event.data.text : event.data.delta
}
export function resumeStreamAfterPageShow(event: PageTransitionEvent, start: () => unknown) {
if (!event.persisted) return
start()
}
type ServerEventEmitter = ReturnType<typeof createGlobalEmitter<ServerEventMap>>
type ServerLocationEventEmitter = ReturnType<typeof createGlobalEmitter<{ [directory: string]: ServerEvent }>>
export type ServerConnectionStatus = ClientConnectionStatus
export type ServerConnectionStatus = "connecting" | "connected" | "reconnecting"
type ServerSDKBase = {
server: ServerConnection.Any
scope: ServerScope
@@ -41,38 +105,227 @@ type ServerSDKBase = {
function createServerSdkContextBase(server: ServerConnection.Any, scope: ServerScope): ServerSDKBase {
const platform = usePlatform()
const api = createApiForServer({ server: server.http, fetch: platform.fetch })
const abort = new AbortController()
const eventFetch = (() => {
if (!platform.fetch || !server) return
try {
const url = new URL(server.http.url)
const loopback = url.hostname === "localhost" || url.hostname === "127.0.0.1" || url.hostname === "::1"
if (url.protocol === "http:" && !loopback) return platform.fetch
} catch {
return
}
})()
const eventApi = createApiForServer({ server: server.http, fetch: eventFetch })
const emitter = createGlobalEmitter<ServerEventMap>()
const locations = createGlobalEmitter<{ [directory: string]: ServerEvent }>()
const connection = createClientConnection(api, {
flushInterval: 16,
pageLifecycle: true,
onEvent(event) {
const adapted = adaptServerEvent(event)
emitter.emit(adapted.type, adapted)
const directory = event.location?.directory
if (directory) locations.emit(directory, adapted)
},
log: {
info(message, data) {
if (message !== "event stream disconnected") return
console.info("[global-sdk] event stream disconnected", { url: server.http.url, ...data })
},
},
const FLUSH_FRAME_MS = 16
const STREAM_YIELD_MS = 8
const CONNECT_TIMEOUT_MS = 2_000
const RECONNECT_DELAY_MS = 1_000
let queue: ServerEvent[] = []
let buffer: ServerEvent[] = []
let timer: ReturnType<typeof setTimeout> | undefined
let last = 0
function flush() {
if (timer) clearTimeout(timer)
timer = undefined
if (queue.length === 0) return
const events = queue
queue = buffer
buffer = events
queue.length = 0
last = Date.now()
const output = coalesceServerEvents(events)
batch(() => {
output.forEach((event) => {
emitter.emit(event.type, event)
const directory = event.current?.location?.directory
if (directory) locations.emit(directory, event)
})
})
buffer.length = 0
}
function schedule() {
if (timer) return
const elapsed = Date.now() - last
timer = setTimeout(flush, Math.max(0, FLUSH_FRAME_MS - elapsed))
}
function publish(event: OpenCodeEvent) {
queue.push(adaptServerEvent(event))
schedule()
}
function wait(delay: number, signal: AbortSignal) {
return new Promise<void>((resolve) => {
const timer = setTimeout(done, delay)
signal.addEventListener("abort", done, { once: true })
function done() {
clearTimeout(timer)
signal.removeEventListener("abort", done)
resolve()
}
})
}
let attempt: AbortController | undefined
let run: Promise<void> | undefined
let started = false
let generation = 0
const [connection, setConnection] = createStore<{
status: ServerConnectionStatus
attempt: number
error?: string
}>({ status: "connecting", attempt: 0 })
async function connect(signal: AbortSignal): Promise<{ error: unknown; connectedAt: number | undefined }> {
let connectedAt: number | undefined
// Bound the initial handshake and tie this request to the stream lifetime.
const request = new AbortController()
const cancel = () => request.abort(signal.reason)
const timeout = setTimeout(() => request.abort(new Error("Timed out connecting to server")), CONNECT_TIMEOUT_MS)
signal.addEventListener("abort", cancel, { once: true })
try {
// Open the event stream and validate its initial handshake.
const iterator = eventApi.event.subscribe({ signal: request.signal })[Symbol.asyncIterator]()
const first = await iterator.next()
if (signal.aborted) return { error: undefined, connectedAt }
if (first.done) {
const error =
request.signal.reason instanceof Error ? request.signal.reason : new Error("Event stream disconnected")
return { error, connectedAt }
}
if (first.value.type !== "server.connected")
return { error: new Error("Event stream did not start with server.connected"), connectedAt }
// Publish the connected state before forwarding live events.
clearTimeout(timeout)
publish(first.value)
connectedAt = Date.now()
setConnection({ status: "connected", attempt: 0, error: undefined })
// Forward events until the stream closes or this connection is cancelled.
let yielded = Date.now()
while (!signal.aborted) {
const event = await iterator.next()
if (signal.aborted) return { error: undefined, connectedAt }
if (event.done) return { error: new Error("Event stream disconnected"), connectedAt }
publish(event.value)
if (Date.now() - yielded < STREAM_YIELD_MS) continue
yielded = Date.now()
await wait(0, signal)
}
return { error: undefined, connectedAt }
} catch (error) {
return { error, connectedAt }
} finally {
request.abort()
clearTimeout(timeout)
signal.removeEventListener("abort", cancel)
}
}
async function runStream(active: number) {
let retries = 0
// oxlint-disable-next-line no-unmodified-loop-condition -- stop() changes the lifecycle flags and aborts the active request
while (!abort.signal.aborted && started && generation === active) {
setConnection({ status: retries === 0 ? "connecting" : "reconnecting", attempt: retries, error: undefined })
const controller = new AbortController()
attempt = controller
const onAbort = () => controller.abort()
abort.signal.addEventListener("abort", onAbort)
const result = await connect(controller.signal)
abort.signal.removeEventListener("abort", onAbort)
if (abort.signal.aborted || !started || generation !== active) {
if (attempt === controller) attempt = undefined
return
}
if (result.connectedAt !== undefined && Date.now() - result.connectedAt >= 1_000) retries = 0
retries += 1
const message =
result.error === undefined
? undefined
: result.error instanceof Error
? result.error.message
: String(result.error)
console.info("[global-sdk] event stream disconnected", {
url: server.http.url,
fetch: eventFetch ? "platform" : "webview",
attempt: retries,
error: message,
})
setConnection({ status: "reconnecting", attempt: retries, error: message })
await wait(RECONNECT_DELAY_MS, controller.signal)
if (attempt === controller) attempt = undefined
}
}
function start() {
if (started) return run
started = true
const active = ++generation
const previous = run
const current = (async () => {
if (previous) await previous
await runStream(active)
})().finally(() => {
if (run !== current) return
run = undefined
flush()
})
run = current
return run
}
function stop() {
started = false
generation++
attempt?.abort()
}
onMount(() => {
makeEventListener(window, "pagehide", stop)
makeEventListener(window, "pageshow", (event) => resumeStreamAfterPageShow(event, start))
void start()
})
onCleanup(() => {
stop()
abort.abort()
if (timer) clearTimeout(timer)
timer = undefined
queue = []
buffer = []
emitter.clear()
locations.clear()
})
const api = createApiForServer({ server: server.http, fetch: platform.fetch })
return {
server,
scope,
url: server.http.url,
api,
connection,
connection: {
status: () => connection.status,
attempt: () => connection.attempt,
error: () => connection.error,
},
event: {
on: emitter.on.bind(emitter),
listen: emitter.listen.bind(emitter),
@@ -255,7 +255,7 @@ describe("v2 session reducer", () => {
type: "system",
text: "Changed instructions",
description: "Instructions updated: agents",
metadata: { notice: "instructions", instructionSources: ["agents"] },
metadata: undefined,
time: { created: 1 },
},
])
@@ -146,7 +146,7 @@ export function createV2SessionReducer() {
type: "system",
text: event.data.text,
description: `Instructions updated: ${Object.keys(event.data.delta).join(", ")}`,
metadata: { ...event.metadata, notice: "instructions", instructionSources: Object.keys(event.data.delta) },
metadata: event.metadata,
time: { created: event.created },
})
case "session.synthetic":
+1
View File
@@ -254,6 +254,7 @@ export const { use: useSettings, provider: SettingsProvider } = createSimpleCont
setMobileTitlebarPosition(value: "top" | "bottom") {
setStore("general", "mobileTitlebarPosition", value)
},
newLayoutDesigns: () => true,
},
visibility: {
fileTree: showFileTree,
+19 -87
View File
@@ -502,6 +502,19 @@ export const dict = {
"wsl.onboarding.desktopVersion": "ዴስክቶፕ {{version}}",
"wsl.onboarding.versionMismatch": "የተጫነው ሥሪት ከዴስክቶፕ መተግበሪያ ሥሪት ጋር አይዛመድም።",
"wsl.onboarding.adding": "በማከል ላይ...",
"help.tabs.toast.ariaLabel": "ትሮችን በማስተዋወቅ ላይ። ስራዎን እና ንቁ ክፍለ ጊዜዎን በትሮች ያደራጁ",
"help.tabs.toast.dismiss": "የትርኮችን መረጃ አሰናብት",
"help.tabs.title": "ትሮችን በማስተዋወቅ ላይ",
"help.tabs.description": "ሥራዎን እና ንቁ ክፍለ ጊዜዎችን በትሮች ያደራጁ",
"help.tabs.date": "ሐምሌ 14",
"help.tabs.introduction": "OpenCode ዴስክቶፕ አሁን በትሮች ዙሪያ ነው የተሰራው።",
"help.tabs.sessions":
"አዲስ ክፍለ ጊዜ በትሩ ውስጥ ጀምር፣ወይም ከማንኛቸውም ፕሮጄክቶችህ ነባር ክፍለ ጊዜ ክፈት። አዲስ ነገር ሲጀምሩ አዲስ ትር ይክፈቱ፣ እና ሲጨርሱ ይዝጉት።",
"help.tabs.organize": "ትንሽ ትሮችን መክፈት ንቁ ክፍለ ጊዜዎችን ማደራጀት ቀላል ያደርገዋል። ትሮችን በአካባቢያቸው ለማቆየት ካሰቡ የማይረሳ ነገርን እንደገና ይሰይሙ።",
"help.tabs.home": "ሁሉንም ክፍለ ጊዜዎችዎን እና ፕሮጀክቶችዎን በአዲሱ የመነሻ ማያ ገጽ ላይ ያገኛሉ። ክፍለ ጊዜ መምረጥ በትር ውስጥ ይከፍታል።",
"help.tabs.persistence": "መተግበሪያውን እንደገና ሲከፍቱት ትሮችዎ አሁንም ክፍት ናቸው።",
"help.tabs.worktrees":
"አዲሱ ንድፍ እስካሁን Git Worktreesን አይደግፍም፣ በቅርቡ ይመጣል። ስለዚህ የቀደመውን አቀማመጥ በመጠቀም መቀጠል ከፈለግክ በቅንብሮች ውስጥ በአቀማመጦች መካከል መቀያየር ትችላለህ። አዲሱ አቀማመጥ በጥቂት ሳምንታት ውስጥ ዘላቂ እንደሚሆን ብቻ ያስታውሱ።",
"server.row.noUsername": "የተጠቃሚ ስም የለም",
"dialog.project.edit.title": "ፕሮጀክት አርትዕ",
"dialog.project.edit.name": "ስም",
@@ -933,6 +946,12 @@ export const dict = {
"settings.general.row.shellToolPartsExpanded.description": "የሼል መሣሪያ ክፍሎችን በጊዜ መስመር በነባሪነት ያሳዩ",
"settings.general.row.editToolPartsExpanded.title": "የመሳሪያ ክፍሎችን ዘርጋ",
"settings.general.row.editToolPartsExpanded.description": "በጊዜ መስመር በነባሪነት የተዘረጉትን የመሳሪያ ክፍሎችን አርትዕ፣ ጻፍ እና ጠጋኝ አሳይ",
"settings.general.row.newInterface.title": "አዲስ አቀማመጥ",
"settings.general.row.newInterface.badge": "አዲስ",
"settings.general.row.newInterface.description": "አዲሱን ትሮች እና የቤት አቀማመጥ ይጠቀሙ። ለተወሰነ ጊዜ በአቀማመጦች መካከል ይቀያይሩ።",
"settings.general.row.newInterfaceNotice.title": "አሁን አዲስ አቀማመጥ እየተጠቀሙ ነው",
"settings.general.row.newInterfaceNotice.description": "የቀድሞው አቀማመጥ ከአሁን በኋላ አይገኝም",
"settings.general.row.newInterfaceNotice.dismiss": "አሰናብት",
"settings.general.row.pinchZoom.title": "ለማጉላት ቆንጥጦ",
"settings.general.row.pinchZoom.description": "ትራክፓድ መቆንጠጥ እና የCtrl-ማሸብለል ምልክቶችን እንዲያሳድጉ ፍቀድ",
"settings.general.row.wayland.title": "ቤተኛ Wayland",
@@ -1108,91 +1127,4 @@ export const dict = {
"workspace.reset.archived.many": "{{count}} ክፍለ-ጊዜዎች በማህደር ይቀመጣሉ።",
"workspace.reset.note": "ይህ workspaceን ከነባሪው ቅርንጫፍ ጋር እንዲመሳሰል ዳግም ያስጀምረዋል።",
"dialog.usageExceeded.dontShowAgain": "እንደገና አታሳይ",
"toast.migration.failed.title": "የውሂብ ፍልሰት አልተሳካም",
"session.background.moveTasks": "{{tasks}}ን ወደ ዳራ አንቀሳቅስ",
"session.background.inBackground": "{{tasks}} በዳራ እየሄደ ነው",
"session.background.combine": "{{first}} እና {{second}}",
"session.background.shell.one": "{{count}} ሼል",
"session.background.shell.other": "{{count}} ሼሎች",
"session.background.subagent.one": "{{count}} ንዑስ ወኪል",
"session.background.subagent.other": "{{count}} ንዑስ ወኪሎች",
"command.session.background": "ወደ ዳራ አንቀሳቅስ",
"session.timeline.notice.finished": "{{actor}} ጨርሷል",
"session.timeline.notice.failed": "{{actor}} አልተሳካም",
"session.timeline.notice.cancelled": "{{actor}} ተሰርዟል",
"settings.tab.preferences": "ምርጫዎች",
"settings.tab.notifications": "ማሳወቂያዎች",
"settings.tab.projects": "ፕሮጀክቶች",
"settings.tab.extensions": "ቅጥያዎች",
"settings.preferences.description": "ምርጫዎችን፣ ገጽታን እና ነባሪ ባህሪን ያብጁ",
"settings.appearance.description": "ገጽታን እና ቅርጸ ቁምፊዎችን ያብጁ",
"settings.notifications.description": "ማሳወቂያዎች መቼ እንደሚደርሱዎት እና ድምፆች መቼ እንደሚሰሙ ይምረጡ",
"settings.shortcuts.description": "ለተለመዱ ድርጊቶች አቋራጮችን ያብጁ",
"settings.servers.description": "የአገልጋይ ግንኙነቶችን ያስተዳድሩ",
"settings.projects.title": "ፕሮጀክቶች",
"settings.projects.description": "በዚህ አገልጋይ ላይ የፕሮጀክት ቅንብሮችን ያስተዳድሩ",
"settings.projects.empty": "ምንም ፕሮጀክት አልተገኘም",
"settings.projects.server.all": "ሁሉም አገልጋዮች",
"settings.mcps.description": "የModel Context Protocol (MCP) አገልጋዮችን እና መሣሪያዎችን ያስተዳድሩ",
"settings.extensions.description": "በዚህ አገልጋይ ላይ የሚገኙ ቅጥያዎችን ያስተዳድሩ",
"settings.extensions.tab.mcps": "MCPs",
"settings.extensions.tab.skills": "ችሎታዎች",
"settings.extensions.availableAll": "ለሁሉም ፕሮጀክቶች ይገኛል",
"settings.extensions.manageConfig": "በopencode.json ውስጥ ያስተዳድሩ",
"settings.extensions.addSkills": "ችሎታዎችን እንዴት ማከል እንደሚቻል",
"dialog.server.authenticate.title": "ማንነትን ያረጋግጡ",
"project.settings.general.description": "የፕሮጀክት ስምን እና ገጽታን ያስተዳድሩ",
"project.settings.scripts": "ስክሪፕቶች",
"project.settings.scripts.description": "ለዚህ ፕሮጀክት ስክሪፕቶችን ያዋቅሩ",
"project.settings.extensions.description": "ለዚህ ፕሮጀክት የሚገኙ ቅጥያዎችን ይመልከቱ",
"project.settings.extensions.tab.lsps": "LSPs",
"project.settings.extensions.added": "ወደዚህ ፕሮጀክት ታክሏል",
"project.settings.extensions.shared": "ከሁሉም ፕሮጀክቶች ጋር የተጋራ",
"project.settings.extensions.lsp.detected": "የተገኙ የቋንቋ አገልጋዮች",
"project.settings.extensions.lsp.description": "ከፋይል ዓይነቶች በራስ-ሰር የተገኘ",
"project.settings.extensions.setupRequired": "ማዋቀር ያስፈልጋል",
"settings.general.section.general": "አጠቃላይ",
"common.viewAll": "ሁሉንም ይመልከቱ",
"session.new.workspace.local.tooltip": "የአሁኑን checkout ይጠቀሙ",
"session.new.workspace.new.tooltip": "የተለየ checkout ይፍጠሩ",
"session.new.workspace.fromBranch": "ከ{{branch}}",
"session.new.workspace.trigger.tooltip": "ክፍለ ጊዜው የት እንደሚሄድ ይምረጡ",
"session.new.workspace.search.placeholder": "Workspace-ዎችን ይፈልጉ",
"settings.tab.workspaces": "Workspace-ዎች",
"settings.workspaces.filter.all": "ሁሉም ፕሮጀክቶች",
"settings.workspaces.empty": "ምንም workspace የለም",
"settings.workspaces.count.one": "{{count}} workspace",
"settings.workspaces.count.other": "{{count}} workspace-ዎች",
"settings.workspaces.sessions.one": "በ{{project}} ውስጥ {{count}} ክፍለ ጊዜ",
"settings.workspaces.sessions.other": "በ{{project}} ውስጥ {{count}} ክፍለ ጊዜዎች",
"settings.workspaces.lastActiveSession": "የመጨረሻው ንቁ ክፍለ ጊዜ",
"settings.workspaces.deleteAll": "ሁሉንም workspace-ዎች ሰርዝ",
"settings.workspaces.deleteAll.confirm": "ሁሉንም {{count}} workspace-ዎች ይሰረዙ?",
"settings.workspaces.delete.warning": "የworkspace ማውጫው እና ቅርንጫፉ፣ ከዚህ በታች የሚታዩ ያልተዋሃዱ ለውጦችን ጨምሮ፣ እስከመጨረሻው ይወገዳሉ።",
"settings.workspaces.deleteAll.warning":
"በ{{project}} ውስጥ ያሉት {{count}} የተመረጡ workspace-ዎች እያንዳንዳቸው ንጹህ፣ እንቅስቃሴ-አልባ እና የተገናኘ ክፍለ ጊዜ ከሌላቸው ብቻ እስከመጨረሻው ይወገዳሉ።",
"settings.workspaces.delete.blocked.active": "ንቁው workspace ሊሰረዝ አይችልም።",
"settings.workspaces.delete.blocked.linked": "የተገናኙ ክፍለ ጊዜዎች ይቀራሉ፣ ነገር ግን የሥራ ማውጫቸው እስከመጨረሻው ይወገዳል።",
"settings.workspaces.default.title": "ነባሪ አካባቢ",
"settings.workspaces.default.description": "አዲስ ክፍለ ጊዜዎች የት እንደሚጀምሩ ይምረጡ",
"settings.workspaces.default.lastUsed": "በእያንዳንዱ ፕሮጀክት ለመጨረሻ ጊዜ ያገለገለ",
"settings.workspaces.default.local": "አካባቢያዊ ማውጫ",
"settings.workspaces.default.new": "አዲስ workspace",
"workspace.move.title": "ወደ workspace አንቀሳቅስ",
"workspace.move.menu.title": "ክፍለ ጊዜን አንቀሳቅስ ወደ",
"workspace.move.failed": "ክፍለ ጊዜን ማንቀሳቀስ አልተሳካም",
"workspace.lifecycle.creating": "Workspace በመፍጠር ላይ",
"workspace.lifecycle.created": "Workspace ተፈጥሯል",
"workspace.lifecycle.starting": "ክፍለ ጊዜ በመጀመር ላይ",
"workspace.onboarding.title": "ክፍለ ጊዜዎችን በworkspace-ዎች ለዩ",
"workspace.onboarding.description": "እያንዳንዱ የራሱ checkout ስላለው በአካባቢያዊ ማከማቻዎ ላይ ምንም ነገር ጣልቃ አይገባም",
"workspace.lifecycle.moving": "ወደ workspace በማንቀሳቀስ ላይ",
"workspace.lifecycle.set": "Workspace ተዘጋጅቷል",
"session.summary.title": "የክፍለ ጊዜ ዝርዝሮች",
"session.summary.noBranch": "ቅርንጫፍ የለም",
"session.summary.basedOn": "በ{{branch}} ላይ የተመሰረተ",
"provider.disconnect.toast.noCredentials.description": "ለ{{provider}} ሊወገድ የሚችል የማረጋገጫ መረጃ አልተገኘም።",
"provider.disconnect.toast.failed.description": "{{provider}}ን ማቋረጥ አልተሳካም።",
"session.timeline.notice.instructionsUpdated": "መመሪያዎች ዘምነዋል፡ {{sources}}",
"session.timeline.notice.restart": "ከዳግም ማስጀመር በኋላ በመቀጠል ላይ",
}
+22 -105
View File
@@ -508,6 +508,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "سطح المكتب {{version}}",
"wsl.onboarding.versionMismatch": "لا يتطابق الإصدار المثبت مع إصدار تطبيق سطح المكتب.",
"wsl.onboarding.adding": "جارٍ الإضافة...",
"help.tabs.toast.ariaLabel": "نقدّم علامات التبويب. نظّم عملك وجلساتك النشطة باستخدام علامات التبويب",
"help.tabs.toast.dismiss": "إغلاق معلومات علامات التبويب",
"help.tabs.title": "نقدّم علامات التبويب",
"help.tabs.description": "نظّم عملك وجلساتك النشطة باستخدام علامات التبويب",
"help.tabs.date": "14 يوليو",
"help.tabs.introduction": "أصبح OpenCode Desktop الآن قائمًا على علامات التبويب.",
"help.tabs.sessions":
"ابدأ جلسة جديدة في علامة تبويب، أو افتح جلسة حالية من أي من مشاريعك. افتح علامة تبويب جديدة عندما تبدأ عملاً جديدًا، وأغلقها عند الانتهاء.",
"help.tabs.organize":
"يسهّل إبقاء بضع علامات تبويب مفتوحة تنظيم جلساتك النشطة. أعد تسمية علامات التبويب بأسماء يسهل تذكرها إذا كنت تنوي إبقاءها مفتوحة.",
"help.tabs.home":
"ستجد جميع جلساتك ومشاريعك في شاشة الصفحة الرئيسية الجديدة. يؤدي تحديد جلسة إلى فتحها في علامة تبويب.",
"help.tabs.persistence": "عندما تعيد فتح التطبيق، تظل علامات تبويبك مفتوحة.",
"help.tabs.worktrees":
"لا يدعم التصميم الجديد أشجار عمل Git حتى الآن، وستتوفر قريبًا. لذلك، إذا كنت تفضل مواصلة استخدام التخطيط السابق، فيمكنك التبديل بين التخطيطات في الإعدادات. ضع في اعتبارك أن التخطيط الجديد سيصبح دائمًا خلال بضعة أسابيع.",
"dialog.project.edit.title": "تحرير المشروع",
"dialog.project.edit.name": "الاسم",
"dialog.project.edit.icon": "أيقونة",
@@ -874,6 +889,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "توسيع أجزاء أداة edit",
"settings.general.row.editToolPartsExpanded.description":
"إظهار أجزاء أدوات edit و write و patch موسعة بشكل افتراضي في الشريط الزمني",
"settings.general.row.newInterface.title": "التخطيط الجديد",
"settings.general.row.newInterface.badge": "جديد",
"settings.general.row.newInterface.description":
"استخدم علامات التبويب الجديدة وتخطيط الصفحة الرئيسية. يمكنك التبديل بين التخطيطات لفترة محدودة.",
"settings.general.row.newInterfaceNotice.title": "أنت تستخدم الآن التخطيط الجديد",
"settings.general.row.newInterfaceNotice.description": "التخطيط السابق لم يعد متاحًا",
"settings.general.row.newInterfaceNotice.dismiss": "إهمال",
"settings.general.row.pinchZoom.title": "التكبير بالمقاربة والمباعدة",
"settings.general.row.pinchZoom.description":
"السماح بإيماءات مقاربة الأصابع ومباعدتها على لوحة التعقب والتمرير مع الضغط على Ctrl للتكبير",
@@ -1146,109 +1168,4 @@ export const dict = {
"error.childStore.persistedProjectIconCreateFailed": "فشل إنشاء أيقونة المشروع الدائمة",
"error.childStore.storeCreateFailed": "فشل إنشاء المخزن",
"terminal.connectionLost.abnormalClose": "تم إغلاق WebSocket بشكل غير طبيعي: {{code}}",
"toast.migration.failed.title": "فشل ترحيل البيانات",
"session.background.moveTasks": "نقل \u2068{{tasks}}\u2069 إلى الخلفية",
"session.background.inBackground": "تشغيل \u2068{{tasks}}\u2069 في الخلفية",
"session.background.combine": "\u2068{{first}}\u2069 و\u2068{{second}}\u2069",
"session.background.shell.zero": "أوامر shell: {{count}}",
"session.background.shell.one": "{{count}} أمر shell",
"session.background.shell.two": "عدد أوامر shell: {{count}}",
"session.background.shell.few": "{{count}} أوامر shell",
"session.background.shell.many": "{{count}} أمر shell",
"session.background.shell.other": "أوامر shell: {{count}}",
"session.background.subagent.zero": "الوكلاء الفرعيون: {{count}}",
"session.background.subagent.one": "{{count}} وكيل فرعي",
"session.background.subagent.two": "عدد الوكلاء الفرعيين: {{count}}",
"session.background.subagent.few": "{{count}} وكلاء فرعيين",
"session.background.subagent.many": "{{count}} وكيلاً فرعيًا",
"session.background.subagent.other": "الوكلاء الفرعيون: {{count}}",
"command.session.background": "نقل إلى الخلفية",
"session.timeline.notice.finished": "انتهى \u2068{{actor}}\u2069",
"session.timeline.notice.failed": "فشل \u2068{{actor}}\u2069",
"session.timeline.notice.cancelled": "أُلغي \u2068{{actor}}\u2069",
"settings.tab.preferences": "التفضيلات",
"settings.tab.notifications": "الإشعارات",
"settings.tab.projects": "المشاريع",
"settings.tab.extensions": "الملحقات",
"settings.preferences.description": "تخصيص التفضيلات والسمة والسلوك الافتراضي",
"settings.appearance.description": "تخصيص السمة والخطوط",
"settings.notifications.description": "اختر متى تتلقى الإشعارات وتسمع الأصوات",
"settings.shortcuts.description": "تخصيص اختصارات الإجراءات الشائعة",
"settings.servers.description": "إدارة اتصالات الخوادم",
"settings.projects.title": "المشاريع",
"settings.projects.description": "إدارة إعدادات المشاريع على هذا الخادم",
"settings.projects.empty": "لم يتم العثور على مشاريع",
"settings.projects.server.all": "كل الخوادم",
"settings.mcps.description": "إدارة خوادم وأدوات بروتوكول سياق النموذج (MCP)",
"settings.extensions.description": "إدارة الملحقات المتاحة على هذا الخادم",
"settings.extensions.tab.mcps": "خوادم MCP",
"settings.extensions.tab.skills": "المهارات",
"settings.extensions.availableAll": "متاحة لكل المشاريع",
"settings.extensions.manageConfig": "إدارة في opencode.json",
"settings.extensions.addSkills": "كيفية إضافة المهارات",
"dialog.server.authenticate.title": "المصادقة",
"project.settings.general.description": "إدارة اسم المشروع ومظهره",
"project.settings.scripts": "البرامج النصية",
"project.settings.scripts.description": "تكوين البرامج النصية لهذا المشروع",
"project.settings.extensions.description": "عرض الملحقات المتاحة لهذا المشروع",
"project.settings.extensions.tab.lsps": "خوادم LSP",
"project.settings.extensions.added": "مضافة إلى هذا المشروع",
"project.settings.extensions.shared": "مشتركة مع كل المشاريع",
"project.settings.extensions.lsp.detected": "خوادم اللغة المكتشفة",
"project.settings.extensions.lsp.description": "تُكتشف تلقائيًا من أنواع الملفات",
"project.settings.extensions.setupRequired": "الإعداد مطلوب",
"settings.general.section.general": "عام",
"common.viewAll": "عرض الكل",
"session.new.workspace.local.tooltip": "استخدام نسخة العمل الحالية",
"session.new.workspace.new.tooltip": "إنشاء نسخة عمل معزولة",
"session.new.workspace.fromBranch": "من \u2068{{branch}}\u2069",
"session.new.workspace.trigger.tooltip": "حدد مكان تشغيل الجلسة",
"session.new.workspace.search.placeholder": "البحث في مساحات العمل",
"settings.tab.workspaces": "مساحات العمل",
"settings.workspaces.filter.all": "كل المشاريع",
"settings.workspaces.empty": "لا توجد مساحات عمل",
"settings.workspaces.count.zero": "مساحات العمل: {{count}}",
"settings.workspaces.count.one": "{{count}} مساحة عمل",
"settings.workspaces.count.two": "عدد مساحات العمل: {{count}}",
"settings.workspaces.count.few": "{{count}} مساحات عمل",
"settings.workspaces.count.many": "{{count}} مساحة عمل",
"settings.workspaces.count.other": "مساحات العمل: {{count}}",
"settings.workspaces.sessions.zero": "الجلسات في \u2068{{project}}\u2069: {{count}}",
"settings.workspaces.sessions.one": "{{count}} جلسة في \u2068{{project}}\u2069",
"settings.workspaces.sessions.two": "عدد الجلسات في \u2068{{project}}\u2069: {{count}}",
"settings.workspaces.sessions.few": "{{count}} جلسات في \u2068{{project}}\u2069",
"settings.workspaces.sessions.many": "{{count}} جلسة في \u2068{{project}}\u2069",
"settings.workspaces.sessions.other": "الجلسات في \u2068{{project}}\u2069: {{count}}",
"settings.workspaces.lastActiveSession": "آخر جلسة نشطة",
"settings.workspaces.deleteAll": "حذف كل مساحات العمل",
"settings.workspaces.deleteAll.confirm": "حذف مساحات العمل كلها وعددها {{count}}؟",
"settings.workspaces.delete.warning":
"سيُحذف دليل مساحة العمل وفرعها نهائيًا، بما في ذلك أي تغييرات غير مدمجة موضحة أدناه.",
"settings.workspaces.deleteAll.warning":
"ستُحذف مساحات العمل المحددة وعددها {{count}} في \u2068{{project}}\u2069 نهائيًا فقط إذا كانت كلها نظيفة وغير نشطة ولا ترتبط بأي جلسات.",
"settings.workspaces.delete.blocked.active": "لا يمكن حذف مساحة العمل النشطة.",
"settings.workspaces.delete.blocked.linked": "ستبقى الجلسات المرتبطة، لكن دليل عملها سيُحذف نهائيًا.",
"settings.workspaces.default.title": "البيئة الافتراضية",
"settings.workspaces.default.description": "اختر مكان بدء الجلسات الجديدة",
"settings.workspaces.default.lastUsed": "آخر استخدام لكل مشروع",
"settings.workspaces.default.local": "الدليل المحلي",
"settings.workspaces.default.new": "مساحة عمل جديدة",
"workspace.move.title": "نقل إلى مساحة عمل",
"workspace.move.menu.title": "نقل الجلسة إلى",
"workspace.move.failed": "فشل نقل الجلسة",
"workspace.lifecycle.creating": "جارٍ إنشاء مساحة العمل",
"workspace.lifecycle.created": "تم إنشاء مساحة العمل",
"workspace.lifecycle.starting": "جارٍ بدء الجلسة",
"workspace.onboarding.title": "عزل الجلسات باستخدام مساحات العمل",
"workspace.onboarding.description": "تحصل كل جلسة على نسخة عمل خاصة بها، فلا يتداخل شيء مع مستودعك المحلي",
"workspace.lifecycle.moving": "جارٍ النقل إلى مساحة العمل",
"workspace.lifecycle.set": "تم تعيين مساحة العمل",
"session.summary.title": "تفاصيل الجلسة",
"session.summary.noBranch": "لا يوجد فرع",
"session.summary.basedOn": "استنادًا إلى \u2068{{branch}}\u2069",
"provider.disconnect.toast.noCredentials.description":
"لم يتم العثور على بيانات اعتماد قابلة للإزالة لـ \u2068{{provider}}\u2069.",
"provider.disconnect.toast.failed.description": "فشل قطع الاتصال بـ \u2068{{provider}}\u2069.",
"session.timeline.notice.instructionsUpdated": "تم تحديث التعليمات: \u2068{{sources}}\u2069",
"session.timeline.notice.restart": "المتابعة بعد إعادة التشغيل",
}
+22 -90
View File
@@ -513,6 +513,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "masaüstü {{version}}",
"wsl.onboarding.versionMismatch": "Quraşdırılmış versiya masaüstü proqram versiyasına uyğun gəlmir.",
"wsl.onboarding.adding": "Əlavə edilir...",
"help.tabs.toast.ariaLabel": "Tablarla tanışlıq. İşinizi və aktiv sessiyalarınızı tablarla təşkil edin",
"help.tabs.toast.dismiss": "Tablar haqqında məlumatı bağla",
"help.tabs.title": "Tablarla tanışlıq",
"help.tabs.description": "İşinizi və aktiv sessiyalarınızı tablarla təşkil edin",
"help.tabs.date": "14 iyul",
"help.tabs.introduction": "OpenCode Desktop indi tablar əsasında qurulub.",
"help.tabs.sessions":
"Yeni sessiyanı tabda başladın və ya layihələrinizdən mövcud sessiyanı açın. Yeni işə başlayanda yeni tab açın, işi bitirdikdə isə onu bağlayın.",
"help.tabs.organize":
"Bir neçə tabı açıq saxlamaq aktiv sessiyalarınızı təşkil etməyi asanlaşdırır. Onları saxlamağı planlaşdırırsınızsa, tablara yadda qalan adlar verin.",
"help.tabs.home":
"Bütün sessiya və layihələrinizi yeni Ana səhifədə tapa bilərsiniz. Sessiyanı seçdikdə o, tabda açılır.",
"help.tabs.persistence": "Tətbiqi yenidən açdıqda tablarınız açıq qalır.",
"help.tabs.worktrees":
"Yeni dizayn hələ Git Worktrees-i dəstəkləmir, lakin bu imkan tezliklə əlavə olunacaq. Əvvəlki tərtibatdan istifadə etməyə davam etmək istəyirsinizsə, Tənzimləmələrdə tərtibatlar arasında keçid edə bilərsiniz. Nəzərə alın ki, yeni tərtibat bir neçə həftədən sonra daimi olacaq.",
"server.row.noUsername": "istifadəçi adı yoxdur",
"dialog.project.edit.title": "Layihəni redaktə et",
"dialog.project.edit.name": "Ad",
@@ -966,6 +981,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Redaktə alət hissələrini genişlət",
"settings.general.row.editToolPartsExpanded.description":
"Zaman xəttində redaktə, yazma və patch alət hissələrini standart olaraq genişlədilmiş göstər",
"settings.general.row.newInterface.title": "Yeni tərtibat",
"settings.general.row.newInterface.badge": "Yeni",
"settings.general.row.newInterface.description":
"Yeni tab və ana səhifə tərtibatından istifadə edin. Məhdud müddət ərzində tərtibatlar arasında keçid edin.",
"settings.general.row.newInterfaceNotice.title": "İndi yeni tərtibatdan istifadə edirsiniz",
"settings.general.row.newInterfaceNotice.description": "Əvvəlki tərtibat artıq mövcud deyil",
"settings.general.row.newInterfaceNotice.dismiss": "Rədd et",
"settings.general.row.pinchZoom.title": "Böyütmək üçün çimdikləyin",
"settings.general.row.pinchZoom.description":
"Trekpadda çimdikləmə və Ctrl-sürüşdürmə jestləri ilə miqyaslamağa icazə verin",
@@ -1143,94 +1165,4 @@ export const dict = {
"workspace.reset.archived.one": "1 sessiya arxivlənəcək.",
"workspace.reset.archived.many": "{{count}} sessiya arxivlənəcək.",
"workspace.reset.note": "Bu iş sahəsini standart branch ilə uyğunlaşdırmaq üçün sıfırlayacaq.",
"toast.migration.failed.title": "Məlumat miqrasiyası uğursuz oldu",
"session.background.moveTasks": "{{tasks}} arxa plana keçir",
"session.background.inBackground": "{{tasks}} arxa planda işləyir",
"session.background.combine": "{{first}} və {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shell",
"session.background.subagent.one": "{{count}} alt agent",
"session.background.subagent.other": "{{count}} alt agent",
"command.session.background": "Arxa plana keçir",
"session.timeline.notice.finished": "{{actor}} tamamlandı",
"session.timeline.notice.failed": "{{actor}} uğursuz oldu",
"session.timeline.notice.cancelled": "{{actor}} ləğv edildi",
"settings.tab.preferences": "Tərcihlər",
"settings.tab.notifications": "Bildirişlər",
"settings.tab.projects": "Layihələr",
"settings.tab.extensions": "Genişləndirmələr",
"settings.preferences.description": "Tərcihləri, mövzunu və standart davranışı fərdiləşdirin",
"settings.appearance.description": "Mövzunu və şriftləri fərdiləşdirin",
"settings.notifications.description": "Bildirişlərin nə vaxt alınacağını və səslərin nə vaxt səslənəcəyini seçin",
"settings.shortcuts.description": "Ümumi əməliyyatlar üçün qısayolları fərdiləşdirin",
"settings.servers.description": "Server bağlantılarını idarə edin",
"settings.projects.title": "Layihələr",
"settings.projects.description": "Bu serverdə layihə tənzimləmələrini idarə edin",
"settings.projects.empty": "Layihə tapılmadı",
"settings.projects.server.all": "Bütün serverlər",
"settings.mcps.description": "Model Context Protocol (MCP) serverlərini və alətlərini idarə edin",
"settings.extensions.description": "Bu serverdə mövcud olan genişləndirmələri idarə edin",
"settings.extensions.tab.mcps": "MCP-lər",
"settings.extensions.tab.skills": "Bacarıqlar",
"settings.extensions.availableAll": "Bütün layihələr üçün mövcuddur",
"settings.extensions.manageConfig": "opencode.json-da idarə edin",
"settings.extensions.addSkills": "Bacarıqları necə əlavə etməli",
"dialog.server.authenticate.title": "Autentifikasiya",
"project.settings.general.description": "Layihənin adını və görünüşünü idarə edin",
"project.settings.scripts": "Skriptlər",
"project.settings.scripts.description": "Bu layihə üçün skriptləri konfiqurasiya edin",
"project.settings.extensions.description": "Bu layihə üçün mövcud genişləndirmələrə baxın",
"project.settings.extensions.tab.lsps": "LSP-lər",
"project.settings.extensions.added": "Bu layihəyə əlavə edilib",
"project.settings.extensions.shared": "Bütün layihələrlə paylaşılıb",
"project.settings.extensions.lsp.detected": "Aşkarlanmış dil serverləri",
"project.settings.extensions.lsp.description": "Fayl növlərindən avtomatik aşkarlanır",
"project.settings.extensions.setupRequired": "Quraşdırma tələb olunur",
"settings.general.section.general": "Ümumi",
"common.viewAll": "Hamısına bax",
"session.new.workspace.local.tooltip": "Cari checkout-dan istifadə et",
"session.new.workspace.new.tooltip": "Təcrid olunmuş checkout yarat",
"session.new.workspace.fromBranch": "{{branch}} branch-indən",
"session.new.workspace.trigger.tooltip": "Sessiyanın harada işləyəcəyini seçin",
"session.new.workspace.search.placeholder": "İş sahələrini axtar",
"settings.tab.workspaces": "İş sahələri",
"settings.workspaces.filter.all": "Bütün layihələr",
"settings.workspaces.empty": "İş sahəsi yoxdur",
"settings.workspaces.count.one": "{{count}} iş sahəsi",
"settings.workspaces.count.other": "{{count}} iş sahəsi",
"settings.workspaces.sessions.one": "{{project}} layihəsində {{count}} sessiya",
"settings.workspaces.sessions.other": "{{project}} layihəsində {{count}} sessiya",
"settings.workspaces.lastActiveSession": "Son aktiv sessiya",
"settings.workspaces.deleteAll": "Bütün iş sahələrini sil",
"settings.workspaces.deleteAll.confirm": "Bütün {{count}} iş sahəsi silinsin?",
"settings.workspaces.delete.warning":
"İş sahəsi qovluğu və branch, aşağıda göstərilən birləşdirilməmiş dəyişikliklər də daxil olmaqla, həmişəlik silinəcək.",
"settings.workspaces.deleteAll.warning":
"{{project}} layihəsində seçilmiş {{count}} iş sahəsi yalnız hər biri təmiz, qeyri-aktiv və əlaqəli sessiyasız olduqda həmişəlik silinəcək.",
"settings.workspaces.delete.blocked.active": "Aktiv iş sahəsi silinə bilməz.",
"settings.workspaces.delete.blocked.linked":
"Əlaqəli sessiyalar qalacaq, lakin onların iş qovluğu həmişəlik silinəcək.",
"settings.workspaces.default.title": "Standart mühit",
"settings.workspaces.default.description": "Yeni sessiyaların harada başlayacağını seçin",
"settings.workspaces.default.lastUsed": "Hər layihə üzrə son istifadə edilən",
"settings.workspaces.default.local": "Yerli qovluq",
"settings.workspaces.default.new": "Yeni iş sahəsi",
"workspace.move.title": "İş sahəsinə köçür",
"workspace.move.menu.title": "Sessiyanı buraya köçür",
"workspace.move.failed": "Sessiyanı köçürmək mümkün olmadı",
"workspace.lifecycle.creating": "İş sahəsi yaradılır",
"workspace.lifecycle.created": "İş sahəsi yaradıldı",
"workspace.lifecycle.starting": "Sessiya başladılır",
"workspace.onboarding.title": "Sessiyaları iş sahələri ilə təcrid edin",
"workspace.onboarding.description":
"Hər birinin öz checkout-u var, buna görə heç nə yerli repozitoriyanıza müdaxilə etmir",
"workspace.lifecycle.moving": "İş sahəsinə köçürülür",
"workspace.lifecycle.set": "İş sahəsi təyin edildi",
"session.summary.title": "Sessiya detalları",
"session.summary.noBranch": "Branch yoxdur",
"session.summary.basedOn": "{{branch}} əsasında",
"provider.disconnect.toast.noCredentials.description": "{{provider}} üçün silinə bilən giriş məlumatı tapılmadı.",
"provider.disconnect.toast.failed.description": "{{provider}} bağlantısını kəsmək mümkün olmadı.",
"session.timeline.notice.instructionsUpdated": "Təlimatlar yeniləndi: {{sources}}",
"session.timeline.notice.restart": "Yenidən başlatmadan sonra davam edir",
}
+22 -91
View File
@@ -512,6 +512,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "работен плот {{version}}",
"wsl.onboarding.versionMismatch": "Инсталираната версия не съответства на версията на настолното приложение.",
"wsl.onboarding.adding": "Добавяне...",
"help.tabs.toast.ariaLabel": "Представяме ви раздели. Организирайте работата и активните си сесии с раздели",
"help.tabs.toast.dismiss": "Отхвърляне на информация за раздели",
"help.tabs.title": "Представяме ви раздели",
"help.tabs.description": "Организирайте работата и активните си сесии с раздели",
"help.tabs.date": "14 юли",
"help.tabs.introduction": "OpenCode Desktop вече е изграден около раздели.",
"help.tabs.sessions":
"Започнете нова сесия в раздел или отворете съществуваща сесия от някой от вашите проекти. Отворете нов раздел, когато започвате нещо ново, и го затворете, когато сте готови.",
"help.tabs.organize":
"Поддържането на няколко раздела отворени улеснява организирането на вашите активни сесии. Преименувайте раздели на нещо запомнящо се, ако планирате да ги запазите.",
"help.tabs.home":
"Ще намерите всичките си сесии и проекти на новия начален екран. Избирането на сесия я отваря в раздел.",
"help.tabs.persistence": "Когато отворите отново приложението, вашите раздели са все още отворени.",
"help.tabs.worktrees":
"Новият дизайн все още не поддържа Git Worktrees, идва скоро. Така че, ако предпочитате да продължите да използвате предишното оформление, можете да превключвате между оформления в Настройки. Само имайте предвид, че новото оформление ще стане постоянно след няколко седмици.",
"server.row.noUsername": "няма потребителско име",
"dialog.project.edit.title": "Редактиране на проекта",
"dialog.project.edit.name": "Име",
@@ -964,6 +979,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Разгънете части за редактиране на инструмента",
"settings.general.row.editToolPartsExpanded.description":
"Показване на части от инструмента за редактиране, писане и корекция, разширени по подразбиране във времевата линия",
"settings.general.row.newInterface.title": "Ново оформление",
"settings.general.row.newInterface.badge": "Нов",
"settings.general.row.newInterface.description":
"Използвайте новите раздели и началното оформление. Превключвайте между оформления за ограничено време.",
"settings.general.row.newInterfaceNotice.title": "Вече използвате ново оформление",
"settings.general.row.newInterfaceNotice.description": "Предишното оформление вече не е налично",
"settings.general.row.newInterfaceNotice.dismiss": "Отхвърляне",
"settings.general.row.pinchZoom.title": "Щипнете, за да увеличите",
"settings.general.row.pinchZoom.description":
"Разрешаване на жестове с щипване и Ctrl-превъртане на тракпада за мащабиране",
@@ -1145,95 +1167,4 @@ export const dict = {
"workspace.reset.archived.many": "{{count}} сесии ще бъдат архивирани.",
"workspace.reset.note": "Това ще нулира работното пространство, за да съответства на клона по подразбиране.",
"dialog.usageExceeded.dontShowAgain": "Не показвай отново",
"provider.disconnect.toast.noCredentials.description":
"Няма намерени подвижни идентификационни данни за {{provider}}.",
"provider.disconnect.toast.failed.description": "Неуспешно прекъсване на връзката {{provider}}.",
"toast.migration.failed.title": "Мигрирането на данни не бе успешно",
"session.background.moveTasks": "Преместете {{tasks}} на заден план",
"session.background.inBackground": "Работи {{tasks}} във фонов режим",
"session.background.combine": "{{first}} и {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shell-а",
"session.background.subagent.one": "{{count}} субагент",
"session.background.subagent.other": "{{count}} субагенти",
"command.session.background": "Преместване на заден план",
"session.timeline.notice.finished": "{{actor}} приключи",
"session.timeline.notice.failed": "{{actor}} неуспешно",
"session.timeline.notice.cancelled": "{{actor}} отменен",
"session.timeline.notice.instructionsUpdated": "Актуализирани инструкции: {{sources}}",
"session.timeline.notice.restart": "Продължава след рестартиране",
"settings.tab.preferences": "Предпочитания",
"settings.tab.notifications": "Известия",
"settings.tab.projects": "Проекти",
"settings.tab.extensions": "Разширения",
"settings.preferences.description": "Персонализирайте предпочитанията и темата и поведението по подразбиране",
"settings.appearance.description": "Персонализирайте темата и шрифтовете",
"settings.notifications.description": "Изберете кога да получавате известия и да чувате звуци",
"settings.shortcuts.description": "Персонализирайте преки пътища за обичайни действия",
"settings.servers.description": "Управлявайте връзките със сървъра",
"settings.projects.title": "Проекти",
"settings.projects.description": "Управление на настройките на проекта на този сървър",
"settings.projects.empty": "Няма намерени проекти",
"settings.projects.server.all": "Всички сървъри",
"settings.mcps.description": "Управление на сървъри и инструменти на протокола за контекст на модела (MCP).",
"settings.extensions.description": "Управление на разширенията, налични на този сървър",
"settings.extensions.tab.mcps": "MCPs",
"settings.extensions.tab.skills": "Умения",
"settings.extensions.availableAll": "Предлага се за всички проекти",
"settings.extensions.manageConfig": "Управление в opencode.json",
"settings.extensions.addSkills": "Как да добавите умения",
"dialog.server.authenticate.title": "Удостоверяване",
"project.settings.general.description": "Управлявайте името и външния вид на проекта",
"project.settings.scripts": "Скриптове",
"project.settings.scripts.description": "Конфигуриране на скриптове за този проект",
"project.settings.extensions.description": "Вижте разширенията, налични за този проект",
"project.settings.extensions.tab.lsps": "LSPs",
"project.settings.extensions.added": "Добавен към този проект",
"project.settings.extensions.shared": "Споделено с всички проекти",
"project.settings.extensions.lsp.detected": "Открити езикови сървъри",
"project.settings.extensions.lsp.description": "Автоматично разпознаване от типове файлове",
"project.settings.extensions.setupRequired": "Изисква се настройка",
"settings.general.section.general": "Общи",
"common.viewAll": "Вижте всички",
"session.new.workspace.local.tooltip": "Използвайте текущото работно копие",
"session.new.workspace.new.tooltip": "Създайте изолирано работно копие",
"session.new.workspace.fromBranch": "от {{branch}}",
"session.new.workspace.trigger.tooltip": "Изберете къде да стартирате сесията",
"session.new.workspace.search.placeholder": "Търсете работни пространства",
"settings.tab.workspaces": "Работни пространства",
"settings.workspaces.filter.all": "Всички проекти",
"settings.workspaces.empty": "Няма работни пространства",
"settings.workspaces.count.one": "{{count}} работно пространство",
"settings.workspaces.count.other": "{{count}} работни пространства",
"settings.workspaces.sessions.one": "{{count}} сесия в {{project}}",
"settings.workspaces.sessions.other": "{{count}} сесии в {{project}}",
"settings.workspaces.lastActiveSession": "Последна активна сесия",
"settings.workspaces.deleteAll": "Изтрийте всички работни области",
"settings.workspaces.deleteAll.confirm": "Да се ​​изтрият ли всички {{count}} работни пространства?",
"settings.workspaces.delete.warning":
"Директорията и клонът на работното пространство ще бъдат премахнати за постоянно, включително всички необединени промени, показани по-долу.",
"settings.workspaces.deleteAll.warning":
"Избраните {{count}} работни пространства в {{project}} ще бъдат премахнати за постоянно само ако всяко е чисто, неактивно и няма свързани сесии.",
"settings.workspaces.delete.blocked.active": "Активното работно пространство не може да бъде изтрито.",
"settings.workspaces.delete.blocked.linked":
"Свързаните сесии ще останат, но тяхната работна директория ще бъде премахната за постоянно.",
"settings.workspaces.default.title": "Среда по подразбиране",
"settings.workspaces.default.description": "Изберете къде започват новите сесии",
"settings.workspaces.default.lastUsed": "Последно използвано за проект",
"settings.workspaces.default.local": "Локален указател",
"settings.workspaces.default.new": "Ново работно пространство",
"workspace.move.title": "Преместете се в работното пространство",
"workspace.move.menu.title": "Преместване на сесията към",
"workspace.move.failed": "Преместването на сесията не бе успешно",
"workspace.lifecycle.creating": "Създаване на работно пространство",
"workspace.lifecycle.created": "Работното пространство е създадено",
"workspace.lifecycle.starting": "Начална сесия",
"workspace.onboarding.title": "Изолирайте сесиите с работни пространства",
"workspace.onboarding.description":
"Всяко получава собствено работно копие, така че нищо да не пречи на локалното ви хранилище",
"workspace.lifecycle.moving": "Преминаване към работното пространство",
"workspace.lifecycle.set": "Работното пространство е зададено",
"session.summary.title": "Подробности за сесията",
"session.summary.noBranch": "Няма клон",
"session.summary.basedOn": "Въз основа на {{branch}}",
}
+22 -91
View File
@@ -509,6 +509,21 @@ export const dict: Record<string, string> = {
"wsl.onboarding.desktopVersion": "ডেস্কটপ {{version}}",
"wsl.onboarding.versionMismatch": "ইনস্টল করা সংস্করণ ডেস্কটপ অ্যাপ সংস্করণের সাথে মেলে না।",
"wsl.onboarding.adding": "যোগ করা হচ্ছে...",
"help.tabs.toast.ariaLabel": "ট্যাব চালু করা হচ্ছে। ট্যাব দিয়ে আপনার কাজ এবং সক্রিয় সেশনগুলি সংগঠিত করুন",
"help.tabs.toast.dismiss": "ট্যাব তথ্য খারিজ",
"help.tabs.title": "ট্যাব চালু করা হচ্ছে",
"help.tabs.description": "ট্যাব দিয়ে আপনার কাজ এবং সক্রিয় সেশনগুলি সংগঠিত করুন",
"help.tabs.date": "14 জুলাই",
"help.tabs.introduction": "OpenCode ডেস্কটপ এখন ট্যাবের চারপাশে তৈরি।",
"help.tabs.sessions":
"একটি ট্যাবে একটি নতুন সেশন শুরু করুন, বা আপনার যেকোনো প্রকল্প থেকে একটি বিদ্যমান সেশন খুলুন৷ আপনি যখন নতুন কিছু শুরু করছেন তখন একটি নতুন ট্যাব খুলুন এবং আপনার কাজ শেষ হলে এটি বন্ধ করুন।",
"help.tabs.organize":
"কয়েকটি ট্যাব খোলা রাখলে আপনার সক্রিয় সেশনগুলি সংগঠিত করা সহজ হয়৷ ট্যাবগুলিকে স্মরণীয় কিছুতে পুনঃনামকরণ করুন যদি আপনি সেগুলিকে কাছাকাছি রাখার পরিকল্পনা করেন৷",
"help.tabs.home":
"আপনি নতুন হোম স্ক্রিনে আপনার সমস্ত সেশন এবং প্রকল্পগুলি খুঁজে পাবেন৷ একটি সেশন নির্বাচন করা এটি একটি ট্যাবে খোলে।",
"help.tabs.persistence": "আপনি যখন অ্যাপটি আবার খুলবেন, তখনও আপনার ট্যাবগুলি খোলা থাকবে৷",
"help.tabs.worktrees":
"নতুন ডিজাইন এখনও Git Worktrees সমর্থন করে না, এটি শীঘ্রই আসছে। সুতরাং আপনি যদি পূর্ববর্তী লেআউটটি ব্যবহার করা চালিয়ে যেতে চান তবে আপনি সেটিংসে লেআউটগুলির মধ্যে স্যুইচ করতে পারেন৷ শুধু মনে রাখবেন যে নতুন লেআউট কয়েক সপ্তাহের মধ্যে স্থায়ী হয়ে যাবে।",
"server.row.noUsername": "ব্যবহারকারীর নাম নেই",
"dialog.project.edit.title": "প্রকল্প সম্পাদনা করুন",
"dialog.project.edit.name": "নাম",
@@ -951,6 +966,13 @@ export const dict: Record<string, string> = {
"settings.general.row.editToolPartsExpanded.title": "সম্পাদনা টুল অংশ প্রসারিত করুন",
"settings.general.row.editToolPartsExpanded.description":
"টাইমলাইনে ডিফল্টরূপে প্রসারিত সম্পাদনা, লিখুন এবং প্যাচ টুল অংশগুলি দেখান৷",
"settings.general.row.newInterface.title": "নতুন লেআউট",
"settings.general.row.newInterface.badge": "নতুন",
"settings.general.row.newInterface.description":
"নতুন ট্যাব এবং হোম লেআউট ব্যবহার করুন. একটি সীমিত সময়ের জন্য লেআউটগুলির মধ্যে স্যুইচ করুন৷",
"settings.general.row.newInterfaceNotice.title": "আপনি এখন নতুন লেআউট ব্যবহার করছেন",
"settings.general.row.newInterfaceNotice.description": "আগের লেআউট আর উপলব্ধ নেই৷",
"settings.general.row.newInterfaceNotice.dismiss": "খারিজ",
"settings.general.row.pinchZoom.title": "জুম করতে চিমটি করুন",
"settings.general.row.pinchZoom.description": "ট্র্যাকপ্যাড পিঞ্চ এবং Ctrl - স্ক্রোল অঙ্গভঙ্গি জুম করার অনুমতি দিন",
"settings.general.row.wayland.title": "স্থানীয় Wayland ব্যবহার করুন",
@@ -1127,95 +1149,4 @@ export const dict: Record<string, string> = {
"workspace.reset.archived.many": "{{count}} সেশন আর্কাইভ করা হবে।",
"workspace.reset.note": "এটি ডিফল্ট শাখার সাথে মেলে ওয়ার্কস্পেস রিসেট করবে।",
"dialog.usageExceeded.dontShowAgain": "আবার দেখাবেন না",
"toast.migration.failed.title": "ডেটা মাইগ্রেশন ব্যর্থ হয়েছে",
"session.background.moveTasks": "{{tasks}} ব্যাকগ্রাউন্ডে সরান",
"session.background.inBackground": "{{tasks}} ব্যাকগ্রাউন্ডে চলছে",
"session.background.combine": "{{first}} এবং {{second}}",
"session.background.shell.one": "{{count}}টি শেল",
"session.background.shell.other": "{{count}}টি শেল",
"session.background.subagent.one": "{{count}}টি সাব-এজেন্ট",
"session.background.subagent.other": "{{count}}টি সাব-এজেন্ট",
"command.session.background": "ব্যাকগ্রাউন্ডে সরান",
"session.timeline.notice.finished": "{{actor}} শেষ করেছে",
"session.timeline.notice.failed": "{{actor}} ব্যর্থ হয়েছে",
"session.timeline.notice.cancelled": "{{actor}} বাতিল হয়েছে",
"settings.tab.preferences": "পছন্দসমূহ",
"settings.tab.notifications": "বিজ্ঞপ্তি",
"settings.tab.projects": "প্রকল্প",
"settings.tab.extensions": "এক্সটেনশন",
"settings.preferences.description": "পছন্দ, থিম এবং ডিফল্ট আচরণ কাস্টমাইজ করুন",
"settings.appearance.description": "থিম এবং ফন্ট কাস্টমাইজ করুন",
"settings.notifications.description": "কখন বিজ্ঞপ্তি পাবেন ও শব্দ শুনবেন তা বেছে নিন",
"settings.shortcuts.description": "সাধারণ কাজের শর্টকাট কাস্টমাইজ করুন",
"settings.servers.description": "সার্ভার সংযোগ পরিচালনা করুন",
"settings.projects.title": "প্রকল্প",
"settings.projects.description": "এই সার্ভারের প্রকল্প সেটিংস পরিচালনা করুন",
"settings.projects.empty": "কোনো প্রকল্প পাওয়া যায়নি",
"settings.projects.server.all": "সব সার্ভার",
"settings.mcps.description": "Model Context Protocol (MCP) সার্ভার ও টুল পরিচালনা করুন",
"settings.extensions.description": "এই সার্ভারে উপলভ্য এক্সটেনশন পরিচালনা করুন",
"settings.extensions.tab.mcps": "MCPs",
"settings.extensions.tab.skills": "স্কিল",
"settings.extensions.availableAll": "সব প্রকল্পে উপলভ্য",
"settings.extensions.manageConfig": "opencode.json-এ পরিচালনা করুন",
"settings.extensions.addSkills": "স্কিল যোগ করার নিয়ম",
"dialog.server.authenticate.title": "প্রমাণীকরণ",
"project.settings.general.description": "প্রকল্পের নাম ও চেহারা পরিচালনা করুন",
"project.settings.scripts": "স্ক্রিপ্ট",
"project.settings.scripts.description": "এই প্রকল্পের স্ক্রিপ্ট কনফিগার করুন",
"project.settings.extensions.description": "এই প্রকল্পে উপলভ্য এক্সটেনশন দেখুন",
"project.settings.extensions.tab.lsps": "LSPs",
"project.settings.extensions.added": "এই প্রকল্পে যোগ করা হয়েছে",
"project.settings.extensions.shared": "সব প্রকল্পের সঙ্গে শেয়ার করা",
"project.settings.extensions.lsp.detected": "শনাক্ত করা ল্যাঙ্গুয়েজ সার্ভার",
"project.settings.extensions.lsp.description": "ফাইলের ধরন থেকে স্বয়ংক্রিয়ভাবে শনাক্ত করা",
"project.settings.extensions.setupRequired": "সেটআপ প্রয়োজন",
"settings.general.section.general": "সাধারণ",
"common.viewAll": "সব দেখুন",
"session.new.workspace.local.tooltip": "বর্তমান চেকআউট ব্যবহার করুন",
"session.new.workspace.new.tooltip": "আলাদা চেকআউট তৈরি করুন",
"session.new.workspace.fromBranch": "{{branch}} থেকে",
"session.new.workspace.trigger.tooltip": "সেশন কোথায় চলবে তা নির্বাচন করুন",
"session.new.workspace.search.placeholder": "ওয়ার্কস্পেস খুঁজুন",
"settings.tab.workspaces": "ওয়ার্কস্পেস",
"settings.workspaces.filter.all": "সব প্রকল্প",
"settings.workspaces.empty": "কোনো ওয়ার্কস্পেস নেই",
"settings.workspaces.count.one": "{{count}}টি ওয়ার্কস্পেস",
"settings.workspaces.count.other": "{{count}}টি ওয়ার্কস্পেস",
"settings.workspaces.sessions.one": "{{project}}-এ {{count}}টি সেশন",
"settings.workspaces.sessions.other": "{{project}}-এ {{count}}টি সেশন",
"settings.workspaces.lastActiveSession": "সর্বশেষ সক্রিয় সেশন",
"settings.workspaces.deleteAll": "সব ওয়ার্কস্পেস মুছুন",
"settings.workspaces.deleteAll.confirm": "সব {{count}}টি ওয়ার্কস্পেস মুছবেন?",
"settings.workspaces.delete.warning":
"নিচে দেখানো একীভূত না হওয়া পরিবর্তনসহ ওয়ার্কস্পেস ডিরেক্টরি ও ব্রাঞ্চ স্থায়ীভাবে মুছে যাবে।",
"settings.workspaces.deleteAll.warning":
"{{project}}-এর নির্বাচিত {{count}}টি ওয়ার্কস্পেসের প্রতিটি পরিষ্কার, নিষ্ক্রিয় এবং কোনো সেশনের সঙ্গে যুক্ত না থাকলেই স্থায়ীভাবে মুছে যাবে।",
"settings.workspaces.delete.blocked.active": "সক্রিয় ওয়ার্কস্পেস মোছা যাবে না।",
"settings.workspaces.delete.blocked.linked":
"যুক্ত সেশনগুলো থাকবে, তবে তাদের কার্যকরী ডিরেক্টরি স্থায়ীভাবে মুছে যাবে।",
"settings.workspaces.default.title": "ডিফল্ট পরিবেশ",
"settings.workspaces.default.description": "নতুন সেশন কোথায় শুরু হবে তা বেছে নিন",
"settings.workspaces.default.lastUsed": "প্রতি প্রকল্পে সর্বশেষ ব্যবহৃত",
"settings.workspaces.default.local": "স্থানীয় ডিরেক্টরি",
"settings.workspaces.default.new": "নতুন ওয়ার্কস্পেস",
"workspace.move.title": "ওয়ার্কস্পেসে সরান",
"workspace.move.menu.title": "সেশন এখানে সরান",
"workspace.move.failed": "সেশন সরানো ব্যর্থ হয়েছে",
"workspace.lifecycle.creating": "ওয়ার্কস্পেস তৈরি হচ্ছে",
"workspace.lifecycle.created": "ওয়ার্কস্পেস তৈরি হয়েছে",
"workspace.lifecycle.starting": "সেশন শুরু হচ্ছে",
"workspace.onboarding.title": "ওয়ার্কস্পেস দিয়ে সেশন আলাদা রাখুন",
"workspace.onboarding.description":
"প্রতিটি নিজস্ব চেকআউট পায়, তাই আপনার স্থানীয় রিপোজিটরিতে কোনো হস্তক্ষেপ হয় না",
"workspace.lifecycle.moving": "ওয়ার্কস্পেসে সরানো হচ্ছে",
"workspace.lifecycle.set": "ওয়ার্কস্পেস সেট করা হয়েছে",
"session.summary.title": "সেশনের বিবরণ",
"session.summary.noBranch": "কোনো ব্রাঞ্চ নেই",
"session.summary.basedOn": "{{branch}}-এর ভিত্তিতে",
"provider.disconnect.toast.noCredentials.description":
"{{provider}}-এর জন্য অপসারণযোগ্য কোনো শংসাপত্র পাওয়া যায়নি।",
"provider.disconnect.toast.failed.description": "{{provider}}-এর সংযোগ বিচ্ছিন্ন করা যায়নি।",
"session.timeline.notice.instructionsUpdated": "নির্দেশনা আপডেট হয়েছে: {{sources}}",
"session.timeline.notice.restart": "পুনরায় চালু হওয়ার পর অব্যাহত রয়েছে",
}
+22 -95
View File
@@ -511,6 +511,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "desktop {{version}}",
"wsl.onboarding.versionMismatch": "A versão instalada não corresponde à versão do aplicativo para desktop.",
"wsl.onboarding.adding": "Adicionando...",
"help.tabs.toast.ariaLabel": "Apresentamos as abas. Organize seu trabalho e suas sessões ativas com abas",
"help.tabs.toast.dismiss": "Dispensar informações sobre as abas",
"help.tabs.title": "Apresentamos as abas",
"help.tabs.description": "Organize seu trabalho e suas sessões ativas com abas",
"help.tabs.date": "14 de julho",
"help.tabs.introduction": "Agora, o OpenCode Desktop é organizado em abas.",
"help.tabs.sessions":
"Inicie uma nova sessão em uma aba ou abra uma sessão existente de qualquer um dos seus projetos. Abra uma nova aba quando começar algo novo e feche-a quando terminar.",
"help.tabs.organize":
"Manter algumas abas abertas facilita a organização das sessões ativas. Renomeie as abas com nomes fáceis de lembrar se pretende mantê-las abertas.",
"help.tabs.home":
"Você encontrará todas as suas sessões e projetos na nova tela Início. Ao selecionar uma sessão, ela será aberta em uma aba.",
"help.tabs.persistence": "Quando você reabrir o aplicativo, suas abas ainda estarão abertas.",
"help.tabs.worktrees":
"O novo design ainda não oferece suporte a Git Worktrees, mas esse recurso estará disponível em breve. Se preferir continuar usando o layout anterior, você poderá alternar entre os layouts nas Configurações. Lembre-se apenas de que o novo layout se tornará permanente em algumas semanas.",
"dialog.project.edit.title": "Editar projeto",
"dialog.project.edit.name": "Nome",
"dialog.project.edit.icon": "Ícone",
@@ -879,6 +894,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Expandir partes da ferramenta de edição",
"settings.general.row.editToolPartsExpanded.description":
"Mostrar partes das ferramentas de edição, escrita e patch expandidas por padrão na linha do tempo",
"settings.general.row.newInterface.title": "Novo layout",
"settings.general.row.newInterface.badge": "Novo",
"settings.general.row.newInterface.description":
"Use as novas abas e o layout da página inicial. Alterne entre os layouts por tempo limitado.",
"settings.general.row.newInterfaceNotice.title": "Agora você está usando o novo layout",
"settings.general.row.newInterfaceNotice.description": "O layout anterior não está mais disponível",
"settings.general.row.newInterfaceNotice.dismiss": "Descartar",
"settings.general.row.pinchZoom.title": "Zoom com gesto de pinça",
"settings.general.row.pinchZoom.description":
"Permitir gestos de pinça no trackpad e de Ctrl+rolagem para aplicar zoom",
@@ -1156,99 +1178,4 @@ export const dict = {
"error.childStore.persistedProjectIconCreateFailed": "Falha ao criar ícone de projeto persistente",
"error.childStore.storeCreateFailed": "Falha ao criar armazenamento",
"terminal.connectionLost.abnormalClose": "WebSocket fechado anormalmente: {{code}}",
"provider.disconnect.toast.noCredentials.description": "Nenhuma credencial removível encontrada para {{provider}}.",
"provider.disconnect.toast.failed.description": "Falha ao desconectar {{provider}}.",
"toast.migration.failed.title": "Falha na migração de dados",
"session.background.moveTasks": "Mova {{tasks}} para segundo plano",
"session.background.inBackground": "Executando {{tasks}} em segundo plano",
"session.background.combine": "{{first}} e {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shells",
"session.background.subagent.one": "{{count}} subagente",
"session.background.subagent.other": "{{count}} subagentes",
"command.session.background": "Mover para segundo plano",
"session.timeline.notice.finished": "{{actor}} finalizado",
"session.timeline.notice.failed": "{{actor}} falhou",
"session.timeline.notice.cancelled": "{{actor}} cancelado",
"session.timeline.notice.instructionsUpdated": "Instruções atualizadas: {{sources}}",
"session.timeline.notice.restart": "Continuando após reiniciar",
"settings.tab.preferences": "Preferências",
"settings.tab.notifications": "Notificações",
"settings.tab.projects": "Projetos",
"settings.tab.extensions": "Extensões",
"settings.preferences.description": "Personalize preferências, tema e comportamento padrão",
"settings.appearance.description": "Personalize tema e fontes",
"settings.notifications.description": "Escolha quando receber notificações e ouvir sons",
"settings.shortcuts.description": "Personalize atalhos para ações comuns",
"settings.servers.description": "Gerenciar conexões de servidor",
"settings.projects.title": "Projetos",
"settings.projects.description": "Gerencie as configurações do projeto neste servidor",
"settings.projects.empty": "Nenhum projeto encontrado",
"settings.projects.server.all": "Todos os servidores",
"settings.mcps.description": "Gerenciar servidores e ferramentas do Model Context Protocol (MCP)",
"settings.extensions.description": "Gerenciar extensões disponíveis neste servidor",
"settings.extensions.tab.mcps": "MCP",
"settings.extensions.tab.skills": "Habilidades",
"settings.extensions.availableAll": "Disponível para todos os projetos",
"settings.extensions.manageConfig": "Gerenciar em opencode.json",
"settings.extensions.addSkills": "Como adicionar habilidades",
"dialog.server.authenticate.title": "Autenticar",
"project.settings.general.description": "Gerenciar o nome e a aparência do projeto",
"project.settings.scripts": "Roteiros",
"project.settings.scripts.description": "Configurar scripts para este projeto",
"project.settings.extensions.description": "Ver extensões disponíveis para este projeto",
"project.settings.extensions.tab.lsps": "LSPs",
"project.settings.extensions.added": "Adicionado a este projeto",
"project.settings.extensions.shared": "Compartilhado com todos os projetos",
"project.settings.extensions.lsp.detected": "Servidores de linguagem detectados",
"project.settings.extensions.lsp.description": "Detectado automaticamente em tipos de arquivo",
"project.settings.extensions.setupRequired": "Configuração necessária",
"settings.general.section.general": "Em geral",
"common.viewAll": "Ver tudo",
"session.new.workspace.local.tooltip": "Usar checkout atual",
"session.new.workspace.new.tooltip": "Criar checkout isolado",
"session.new.workspace.fromBranch": "de {{branch}}",
"session.new.workspace.trigger.tooltip": "Selecione onde executar a sessão",
"session.new.workspace.search.placeholder": "Pesquisar espaços de trabalho",
"settings.tab.workspaces": "Espaços de trabalho",
"settings.workspaces.filter.all": "Todos os projetos",
"settings.workspaces.empty": "Sem espaços de trabalho",
"settings.workspaces.count.one": "Espaço de trabalho {{count}}",
"settings.workspaces.count.other": "Espaços de trabalho {{count}}",
"settings.workspaces.sessions.one": "Sessão {{count}} em {{project}}",
"settings.workspaces.sessions.other": "Sessões {{count}} em {{project}}",
"settings.workspaces.lastActiveSession": "Última sessão ativa",
"settings.workspaces.deleteAll": "Excluir todos os espaços de trabalho",
"settings.workspaces.deleteAll.confirm": "Excluir todos os espaços de trabalho {{count}}?",
"settings.workspaces.delete.warning":
"O diretório e a ramificação do espaço de trabalho serão removidos permanentemente, incluindo quaisquer alterações não mescladas mostradas abaixo.",
"settings.workspaces.deleteAll.warning":
"Os espaços de trabalho selecionados {{count}} em {{project}} serão removidos permanentemente somente se cada um estiver limpo, inativo e não tiver sessões vinculadas.",
"settings.workspaces.delete.blocked.active": "O espaço de trabalho ativo não pode ser excluído.",
"settings.workspaces.delete.blocked.linked":
"As sessões vinculadas permanecerão, mas seu diretório de trabalho será removido permanentemente.",
"settings.workspaces.default.title": "Ambiente padrão",
"settings.workspaces.default.description": "Escolha onde as novas sessões começam",
"settings.workspaces.default.lastUsed": "Última utilização por projeto",
"settings.workspaces.default.local": "Diretório local",
"settings.workspaces.default.new": "Novo espaço de trabalho",
"workspace.move.title": "Mover para o espaço de trabalho",
"workspace.move.menu.title": "Mover sessão para",
"workspace.move.failed": "Falha ao mover sessão",
"workspace.lifecycle.creating": "Criando espaço de trabalho",
"workspace.lifecycle.created": "Espaço de trabalho criado",
"workspace.lifecycle.starting": "Iniciando sessão",
"workspace.onboarding.title": "Isolar sessões com espaços de trabalho",
"workspace.onboarding.description":
"Cada um recebe seu próprio checkout, então nada interfere no seu repositório local",
"workspace.lifecycle.moving": "Movendo para o espaço de trabalho",
"workspace.lifecycle.set": "Espaço de trabalho definido",
"session.summary.title": "Detalhes da sessão",
"session.summary.noBranch": "Sem branch",
"session.summary.basedOn": "Baseado em {{branch}}",
"session.background.shell.many": "{{count}} shells",
"session.background.subagent.many": "{{count}} subagentes",
"settings.workspaces.count.many": "{{count}} espaços de trabalho",
"settings.workspaces.sessions.many": "{{count}} sessões em {{project}}",
}
+23 -93
View File
@@ -540,6 +540,22 @@ export const dict = {
"wsl.onboarding.versionMismatch": "Instalirana verzija ne odgovara verziji desktop aplikacije.",
"wsl.onboarding.adding": "Dodavanje...",
"help.tabs.toast.ariaLabel": "Predstavljamo kartice. Organizuj svoj rad i aktivne sesije pomoću kartica",
"help.tabs.toast.dismiss": "Odbaci informacije o karticama",
"help.tabs.title": "Predstavljamo kartice",
"help.tabs.description": "Organizuj svoj rad i aktivne sesije pomoću kartica",
"help.tabs.date": "14. juli",
"help.tabs.introduction": "OpenCode Desktop sada je organizovan oko kartica.",
"help.tabs.sessions":
"Započni novu sesiju u kartici ili otvori postojeću sesiju iz bilo kojeg projekta. Otvori novu karticu kada započinješ nešto novo, a zatvori je kada završiš.",
"help.tabs.organize":
"Nekoliko otvorenih kartica olakšava organizovanje aktivnih sesija. Preimenuj kartice tako da ih možeš lako prepoznati ako ih namjeravaš zadržati.",
"help.tabs.home":
"Sve svoje sesije i projekte pronaći ćeš na novom početnom ekranu. Odabirom sesije ona se otvara u kartici.",
"help.tabs.persistence": "Kada ponovo otvoriš aplikaciju, tvoje kartice ostaju otvorene.",
"help.tabs.worktrees":
"Novi dizajn još ne podržava Git Worktrees, ali podrška stiže uskoro. Ako želiš nastaviti koristiti prethodni raspored, možeš mijenjati rasporede u Postavkama. Imaj na umu da će novi raspored za nekoliko sedmica postati trajan.",
"dialog.project.edit.title": "Uredi projekat",
"dialog.project.edit.name": "Naziv",
"dialog.project.edit.icon": "Ikonica",
@@ -942,6 +958,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Proširi dijelove alata za uređivanje",
"settings.general.row.editToolPartsExpanded.description":
"Prikaži dijelove alata za uređivanje, pisanje i patch podrazumijevano proširene na vremenskoj traci",
"settings.general.row.newInterface.title": "Novi raspored",
"settings.general.row.newInterface.badge": "Novo",
"settings.general.row.newInterface.description":
"Koristi nove kartice i raspored početne stranice. Ograničeno vrijeme možeš se prebacivati između rasporeda.",
"settings.general.row.newInterfaceNotice.title": "Sada koristiš novi raspored",
"settings.general.row.newInterfaceNotice.description": "Prethodni raspored više nije dostupan",
"settings.general.row.newInterfaceNotice.dismiss": "Odbaci",
"settings.general.row.pinchZoom.title": "Zumiranje štipanjem",
"settings.general.row.pinchZoom.description":
"Dozvoli zumiranje gestom štipanja na dodirnoj ploči i pomoću Ctrl-pomjeranja",
@@ -1231,97 +1254,4 @@ export const dict = {
"error.childStore.persistedProjectIconCreateFailed": "Nije uspjelo kreiranje trajne ikone projekta",
"error.childStore.storeCreateFailed": "Nije uspjelo kreiranje skladišta",
"terminal.connectionLost.abnormalClose": "WebSocket zatvoren nenormalno: {{code}}",
"provider.disconnect.toast.noCredentials.description": "Nisu pronađeni uklonjivi akreditivi za {{provider}}.",
"provider.disconnect.toast.failed.description": "Prekid veze {{provider}} nije uspio.",
"toast.migration.failed.title": "Migracija podataka nije uspjela",
"session.background.moveTasks": "Premjestite {{tasks}} u pozadinu",
"session.background.inBackground": "Pokretanje {{tasks}} u pozadini",
"session.background.combine": "{{first}} i {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shellova",
"session.background.subagent.one": "{{count}} subagent",
"session.background.subagent.other": "{{count}} subagenti",
"command.session.background": "Premjesti u pozadinu",
"session.timeline.notice.finished": "{{actor}} završeno",
"session.timeline.notice.failed": "{{actor}} nije uspio",
"session.timeline.notice.cancelled": "{{actor}} otkazan",
"session.timeline.notice.instructionsUpdated": "Ažurirana uputstva: {{sources}}",
"session.timeline.notice.restart": "Nastavak nakon ponovnog pokretanja",
"settings.tab.preferences": "Postavke",
"settings.tab.notifications": "Obavještenja",
"settings.tab.projects": "Projekti",
"settings.tab.extensions": "Ekstenzije",
"settings.preferences.description": "Prilagodite postavke i temu i zadano ponašanje",
"settings.appearance.description": "Prilagodite temu i fontove",
"settings.notifications.description": "Odaberite kada ćete primati obavještenja i čuti zvukove",
"settings.shortcuts.description": "Prilagodite prečice za uobičajene radnje",
"settings.servers.description": "Upravljajte serverskim vezama",
"settings.projects.title": "Projekti",
"settings.projects.description": "Upravljajte postavkama projekta na ovom serveru",
"settings.projects.empty": "Nije pronađen nijedan projekat",
"settings.projects.server.all": "Svi serveri",
"settings.mcps.description": "Upravljajte serverima i alatima Model Context Protocol (MCP).",
"settings.extensions.description": "Upravljajte ekstenzijama dostupnim na ovom serveru",
"settings.extensions.tab.mcps": "MCP-ovi",
"settings.extensions.tab.skills": "Vještine",
"settings.extensions.availableAll": "Dostupan za sve projekte",
"settings.extensions.manageConfig": "Upravljajte u opencode.json",
"settings.extensions.addSkills": "Kako dodati vještine",
"dialog.server.authenticate.title": "Autentificiraj",
"project.settings.general.description": "Upravljajte imenom i izgledom projekta",
"project.settings.scripts": "Skripte",
"project.settings.scripts.description": "Konfigurirajte skripte za ovaj projekat",
"project.settings.extensions.description": "Pogledajte proširenja dostupna za ovaj projekat",
"project.settings.extensions.tab.lsps": "LSP-ovi",
"project.settings.extensions.added": "Dodato ovom projektu",
"project.settings.extensions.shared": "Dijeljeno sa svim projektima",
"project.settings.extensions.lsp.detected": "Otkriveni jezički serveri",
"project.settings.extensions.lsp.description": "Automatski otkriveno prema tipovima datoteka",
"project.settings.extensions.setupRequired": "Potrebna je konfiguracija",
"settings.general.section.general": "Opšte",
"common.viewAll": "Pogledaj sve",
"session.new.workspace.local.tooltip": "Koristi trenutnu radnu kopiju",
"session.new.workspace.new.tooltip": "Kreiraj izolovanu radnu kopiju",
"session.new.workspace.fromBranch": "od {{branch}}",
"session.new.workspace.trigger.tooltip": "Odaberite gdje želite pokrenuti sesiju",
"session.new.workspace.search.placeholder": "Pretražite radne prostore",
"settings.tab.workspaces": "Radni prostori",
"settings.workspaces.filter.all": "Svi projekti",
"settings.workspaces.empty": "Nema radnih prostora",
"settings.workspaces.count.one": "{{count}} radni prostor",
"settings.workspaces.count.other": "{{count}} radni prostori",
"settings.workspaces.sessions.one": "{{count}} sesija u {{project}}",
"settings.workspaces.sessions.other": "{{count}} sesije u {{project}}",
"settings.workspaces.lastActiveSession": "Zadnja aktivna sesija",
"settings.workspaces.deleteAll": "Izbrišite sve radne prostore",
"settings.workspaces.deleteAll.confirm": "Izbrisati sve {{count}} radne prostore?",
"settings.workspaces.delete.warning":
"Direktorij i grana radnog prostora će biti trajno uklonjeni, uključujući sve nespojene promjene prikazane u nastavku.",
"settings.workspaces.deleteAll.warning":
"{{count}} odabrani radni prostori u {{project}} će biti trajno uklonjeni samo ako je svaki čist, neaktivan i nema povezanih sesija.",
"settings.workspaces.delete.blocked.active": "Aktivni radni prostor se ne može izbrisati.",
"settings.workspaces.delete.blocked.linked":
"Povezane sesije će ostati, ali će njihov radni direktorij biti trajno uklonjen.",
"settings.workspaces.default.title": "Zadano okruženje",
"settings.workspaces.default.description": "Odaberite gdje počinju nove sesije",
"settings.workspaces.default.lastUsed": "Posljednje korišteno po projektu",
"settings.workspaces.default.local": "Lokalni imenik",
"settings.workspaces.default.new": "Novi radni prostor",
"workspace.move.title": "Premjestite se u radni prostor",
"workspace.move.menu.title": "Premjesti sesiju na",
"workspace.move.failed": "Premještanje sesije nije uspjelo",
"workspace.lifecycle.creating": "Kreiranje radnog prostora",
"workspace.lifecycle.created": "Radni prostor kreiran",
"workspace.lifecycle.starting": "Početak sesije",
"workspace.onboarding.title": "Izolirajte sesije s radnim prostorima",
"workspace.onboarding.description": "Svaka dobija vlastitu radnu kopiju, tako da ništa ne ometa lokalni repozitorij",
"workspace.lifecycle.moving": "Prelazak u radni prostor",
"workspace.lifecycle.set": "Radni prostor postavljen",
"session.summary.title": "Detalji sesije",
"session.summary.noBranch": "Nema grane",
"session.summary.basedOn": "Zasnovano na {{branch}}",
"session.background.shell.few": "{{count}} shella",
"session.background.subagent.few": "{{count}} subagenta",
"settings.workspaces.count.few": "{{count}} radna prostora",
"settings.workspaces.sessions.few": "{{count}} sesije u {{project}}",
}
+23 -94
View File
@@ -511,6 +511,22 @@ export const dict = {
"wsl.onboarding.desktopVersion": "escriptori {{version}}",
"wsl.onboarding.versionMismatch": "La versió instal·lada no coincideix amb la versió de l'aplicació d'escriptori.",
"wsl.onboarding.adding": "S'està afegint...",
"help.tabs.toast.ariaLabel":
"Presentació de les pestanyes. Organitza el teu treball i les sessions actives amb pestanyes",
"help.tabs.toast.dismiss": "Ignora la informació de les pestanyes",
"help.tabs.title": "Presentació de les pestanyes",
"help.tabs.description": "Organitza el teu treball i les sessions actives amb pestanyes",
"help.tabs.date": "14 de juliol",
"help.tabs.introduction": "OpenCode L'escriptori ara està construït al voltant de pestanyes.",
"help.tabs.sessions":
"Inicieu una sessió nova en una pestanya o obriu una sessió existent des de qualsevol dels vostres projectes. Obre una pestanya nova quan comencis una cosa nova i tanca-la quan hagis acabat.",
"help.tabs.organize":
"Mantenir unes quantes pestanyes obertes facilita l'organització de les sessions actives. Canvieu el nom de les pestanyes a alguna cosa memorable si teniu previst mantenir-les.",
"help.tabs.home":
"Trobareu totes les sessions i els projectes a la nova pantalla d'inici. En seleccionar una sessió, s'obre en una pestanya.",
"help.tabs.persistence": "Quan torneu a obrir l'aplicació, les vostres pestanyes encara estan obertes.",
"help.tabs.worktrees":
"El nou disseny encara no és compatible amb Git Worktrees, arribarà aviat. Per tant, si preferiu continuar utilitzant el disseny anterior, podeu canviar entre els dissenys a Configuració. Tingueu en compte que el nou disseny esdevindrà permanent d'aquí a unes setmanes.",
"server.row.noUsername": "sense nom d'usuari",
"dialog.project.edit.title": "Edita el projecte",
"dialog.project.edit.name": "Nom",
@@ -964,6 +980,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Amplieu les parts d'eina d'edició",
"settings.general.row.editToolPartsExpanded.description":
"Mostra les parts de l'eina d'edició, escriptura i pedaç ampliades de manera predeterminada a la línia de temps",
"settings.general.row.newInterface.title": "Nou disseny",
"settings.general.row.newInterface.badge": "Nou",
"settings.general.row.newInterface.description":
"Utilitzeu les noves pestanyes i el disseny de la casa. Canvia entre dissenys durant un temps limitat.",
"settings.general.row.newInterfaceNotice.title": "Ara esteu utilitzant un disseny nou",
"settings.general.row.newInterfaceNotice.description": "El disseny anterior ja no està disponible",
"settings.general.row.newInterfaceNotice.dismiss": "Descartar",
"settings.general.row.pinchZoom.title": "Pessigueu per fer zoom",
"settings.general.row.pinchZoom.description":
"Permet que els gestos de pessigar el ratolí tàctil i de desplaçament Ctrl s'ampliïn",
@@ -1122,50 +1145,6 @@ export const dict = {
"session.delete.confirm": 'Voleu suprimir la sessió "{{name}}"?',
"session.delete.button": "Suprimeix la sessió",
"workspace.new": "Nou espai de treball",
"common.viewAll": "Mostra-ho tot",
"session.new.workspace.local.tooltip": "Utilitza el checkout actual",
"session.new.workspace.new.tooltip": "Crea un checkout aïllat",
"session.new.workspace.fromBranch": "des de {{branch}}",
"session.new.workspace.trigger.tooltip": "Selecciona on s'executarà la sessió",
"session.new.workspace.search.placeholder": "Cerca espais de treball",
"settings.tab.workspaces": "Espais de treball",
"settings.workspaces.filter.all": "Tots els projectes",
"settings.workspaces.empty": "No hi ha espais de treball",
"settings.workspaces.count.one": "{{count}} espai de treball",
"settings.workspaces.count.many": "{{count}} d'espais de treball",
"settings.workspaces.count.other": "{{count}} espais de treball",
"settings.workspaces.sessions.one": "{{count}} sessió a {{project}}",
"settings.workspaces.sessions.many": "{{count}} de sessions a {{project}}",
"settings.workspaces.sessions.other": "{{count}} sessions a {{project}}",
"settings.workspaces.lastActiveSession": "Última sessió activa",
"settings.workspaces.deleteAll": "Suprimeix tots els espais de treball",
"settings.workspaces.deleteAll.confirm": "Voleu suprimir els {{count}} espais de treball?",
"settings.workspaces.delete.warning":
"El directori i la branca de l'espai de treball se suprimiran permanentment, inclosos els canvis no fusionats que es mostren a continuació.",
"settings.workspaces.deleteAll.warning":
"Els {{count}} espais de treball seleccionats de {{project}} se suprimiran permanentment només si tots estan nets, inactius i no tenen sessions enllaçades.",
"settings.workspaces.delete.blocked.active": "L'espai de treball actiu no es pot suprimir.",
"settings.workspaces.delete.blocked.linked":
"Les sessions enllaçades es conservaran, però el seu directori de treball se suprimirà permanentment.",
"settings.workspaces.default.title": "Entorn predeterminat",
"settings.workspaces.default.description": "Trieu on s'inicien les sessions noves",
"settings.workspaces.default.lastUsed": "Últim utilitzat per projecte",
"settings.workspaces.default.local": "Directori local",
"settings.workspaces.default.new": "Espai de treball nou",
"workspace.move.title": "Mou a un espai de treball",
"workspace.move.menu.title": "Mou la sessió a",
"workspace.move.failed": "No s'ha pogut moure la sessió",
"workspace.lifecycle.creating": "S'està creant l'espai de treball",
"workspace.lifecycle.created": "S'ha creat l'espai de treball",
"workspace.lifecycle.starting": "S'està iniciant la sessió",
"workspace.onboarding.title": "Aïlla les sessions amb espais de treball",
"workspace.onboarding.description":
"Cadascuna té el seu propi checkout, de manera que res no interfereix amb el repositori local",
"workspace.lifecycle.moving": "S'està movent a l'espai de treball",
"workspace.lifecycle.set": "Espai de treball establert",
"session.summary.title": "Detalls de la sessió",
"session.summary.noBranch": "Sense branca",
"session.summary.basedOn": "Basat en {{branch}}",
"workspace.type.local": "locals",
"workspace.type.sandbox": "caixa de sorra",
"workspace.create.failed.title": "No s'ha pogut crear l'espai de treball",
@@ -1191,54 +1170,4 @@ export const dict = {
"workspace.reset.archived.many": "{{count}} sessions s'arxivaran.",
"workspace.reset.note": "Això restablirà l'espai de treball perquè coincideixi amb la branca predeterminada.",
"dialog.usageExceeded.dontShowAgain": "No ho tornis a mostrar",
"provider.disconnect.toast.noCredentials.description": "No s'han trobat credencials eliminables per a {{provider}}.",
"provider.disconnect.toast.failed.description": "No s'ha pogut desconnectar {{provider}}.",
"toast.migration.failed.title": "La migració de dades ha fallat",
"session.background.moveTasks": "Mou {{tasks}} al segon pla",
"session.background.inBackground": "S'està executant {{tasks}} en segon pla",
"session.background.combine": "{{first}} i {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shells",
"session.background.shell.many": "{{count}} shells",
"session.background.subagent.one": "{{count}} subagent",
"session.background.subagent.other": "{{count}} subagents",
"session.background.subagent.many": "{{count}} subagents",
"command.session.background": "Mou al segon pla",
"session.timeline.notice.finished": "{{actor}} ha acabat",
"session.timeline.notice.failed": "{{actor}} ha fallat",
"session.timeline.notice.cancelled": "{{actor}} s'ha cancel·lat",
"session.timeline.notice.instructionsUpdated": "Instruccions actualitzades: {{sources}}",
"session.timeline.notice.restart": "Es continua després de reiniciar",
"settings.tab.preferences": "Preferències",
"settings.tab.notifications": "Notificacions",
"settings.tab.projects": "Projectes",
"settings.tab.extensions": "Extensions",
"settings.preferences.description": "Personalitzeu les preferències, el tema i el comportament predeterminat",
"settings.appearance.description": "Personalitzeu el tema i els tipus de lletra",
"settings.notifications.description": "Trieu quan voleu rebre notificacions i sentir sons",
"settings.shortcuts.description": "Personalitzeu les dreceres per a les accions habituals",
"settings.servers.description": "Gestioneu les connexions als servidors",
"settings.projects.title": "Projectes",
"settings.projects.description": "Gestioneu la configuració dels projectes d'aquest servidor",
"settings.projects.empty": "No s'ha trobat cap projecte",
"settings.projects.server.all": "Tots els servidors",
"settings.mcps.description": "Gestioneu els servidors i les eines del Model Context Protocol (MCP)",
"settings.extensions.description": "Gestioneu les extensions disponibles en aquest servidor",
"settings.extensions.tab.mcps": "MCP",
"settings.extensions.tab.skills": "Habilitats",
"settings.extensions.availableAll": "Disponible per a tots els projectes",
"settings.extensions.manageConfig": "Gestiona-ho a opencode.json",
"settings.extensions.addSkills": "Com afegir habilitats",
"dialog.server.authenticate.title": "Autentica",
"project.settings.general.description": "Gestioneu el nom i l'aparença del projecte",
"project.settings.scripts": "Scripts",
"project.settings.scripts.description": "Configureu els scripts d'aquest projecte",
"project.settings.extensions.description": "Consulteu les extensions disponibles per a aquest projecte",
"project.settings.extensions.tab.lsps": "LSP",
"project.settings.extensions.added": "Afegit a aquest projecte",
"project.settings.extensions.shared": "Compartit amb tots els projectes",
"project.settings.extensions.lsp.detected": "Servidors de llenguatge detectats",
"project.settings.extensions.lsp.description": "Detectats automàticament segons els tipus de fitxer",
"project.settings.extensions.setupRequired": "Cal configurar-ho",
"settings.general.section.general": "General",
}
+22 -98
View File
@@ -509,6 +509,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "desktop {{version}}",
"wsl.onboarding.versionMismatch": "Nainstalovaná verze neodpovídá verzi aplikace pro stolní počítače.",
"wsl.onboarding.adding": "Přidávání...",
"help.tabs.toast.ariaLabel": "Představujeme karty. Uspořádejte si práci a aktivní relace pomocí karet",
"help.tabs.toast.dismiss": "Zavřít informace o kartách",
"help.tabs.title": "Představujeme karty",
"help.tabs.description": "Uspořádejte si práci a aktivní relace pomocí karet",
"help.tabs.date": "14. července",
"help.tabs.introduction": "OpenCode Plocha je nyní postavena na kartách.",
"help.tabs.sessions":
"Začněte novou relaci na kartě nebo otevřete existující relaci z libovolného z vašich projektů. Když začínáte s něčím novým, otevřete novou kartu a po dokončení ji zavřete.",
"help.tabs.organize":
"Ponechání několika otevřených karet usnadňuje organizaci aktivních relací. Přejmenujte karty na něco zapamatovatelného, pokud si je plánujete ponechat.",
"help.tabs.home":
"Všechny relace a projekty najdete na nové domovské obrazovce. Výběrem relace ji otevřete na kartě.",
"help.tabs.persistence": "Když aplikaci znovu otevřete, vaše karty jsou stále otevřené.",
"help.tabs.worktrees":
"Nový design zatím nepodporuje Git Worktrees, brzy bude k dispozici. Pokud tedy chcete pokračovat v používání předchozího rozložení, můžete mezi rozloženími přepínat v Nastavení. Jen mějte na paměti, že nové rozložení se za několik týdnů stane trvalým.",
"server.row.noUsername": "žádné uživatelské jméno",
"dialog.project.edit.title": "Upravit projekt",
"dialog.project.edit.name": "Jméno",
@@ -960,6 +975,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Rozbalte části nástroje pro úpravy",
"settings.general.row.editToolPartsExpanded.description":
"Ve výchozím nastavení zobrazit na časové ose rozbalené části nástroje pro úpravy, zápis a opravy",
"settings.general.row.newInterface.title": "Nové rozložení",
"settings.general.row.newInterface.badge": "Nové",
"settings.general.row.newInterface.description":
"Použijte nové karty a domovské rozvržení. Přepínejte mezi rozvrženími po omezenou dobu.",
"settings.general.row.newInterfaceNotice.title": "Nyní používáte nové rozvržení",
"settings.general.row.newInterfaceNotice.description": "Předchozí rozložení již není k dispozici",
"settings.general.row.newInterfaceNotice.dismiss": "Odmítnout",
"settings.general.row.pinchZoom.title": "Stažením prstů přiblížíte",
"settings.general.row.pinchZoom.description": "Povolit přiblížení pomocí gest trackpadu a gesta Ctrl posouvání",
"settings.general.row.wayland.title": "Použít nativní Wayland",
@@ -1138,102 +1160,4 @@ export const dict = {
"workspace.reset.archived.many": "{{count}} relací bude archivováno.",
"workspace.reset.note": "Tím se pracovní prostor resetuje tak, aby odpovídal výchozí větvi.",
"dialog.usageExceeded.dontShowAgain": "Znovu nezobrazovat",
"provider.disconnect.toast.noCredentials.description":
"Pro {{provider}} nebyly nalezeny žádné vyměnitelné přihlašovací údaje.",
"provider.disconnect.toast.failed.description": "Odpojení {{provider}} se nezdařilo.",
"toast.migration.failed.title": "Migrace dat se nezdařila",
"session.background.moveTasks": "Přesuňte {{tasks}} na pozadí",
"session.background.inBackground": "Na pozadí běží {{tasks}}",
"session.background.combine": "{{first}} a {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shellů",
"session.background.subagent.one": "Subagent {{count}}",
"session.background.subagent.other": "Subagenti {{count}}",
"command.session.background": "Přesuňte se na pozadí",
"session.timeline.notice.finished": "{{actor}} dokončeno",
"session.timeline.notice.failed": "{{actor}} se nezdařilo",
"session.timeline.notice.cancelled": "{{actor}} zrušeno",
"session.timeline.notice.instructionsUpdated": "Aktualizované pokyny: {{sources}}",
"session.timeline.notice.restart": "Pokračuje po restartu",
"settings.tab.preferences": "Předvolby",
"settings.tab.notifications": "Oznámení",
"settings.tab.projects": "Projekty",
"settings.tab.extensions": "Rozšíření",
"settings.preferences.description": "Přizpůsobte předvolby a motiv a výchozí chování",
"settings.appearance.description": "Přizpůsobte si motiv a písma",
"settings.notifications.description": "Vyberte, kdy chcete dostávat oznámení a slyšet zvuky",
"settings.shortcuts.description": "Přizpůsobte si zkratky pro běžné akce",
"settings.servers.description": "Správa připojení k serveru",
"settings.projects.title": "Projekty",
"settings.projects.description": "Spravujte nastavení projektu na tomto serveru",
"settings.projects.empty": "Nebyly nalezeny žádné projekty",
"settings.projects.server.all": "Všechny servery",
"settings.mcps.description": "Správa serverů a nástrojů Model Context Protocol (MCP).",
"settings.extensions.description": "Spravujte rozšíření dostupná na tomto serveru",
"settings.extensions.tab.mcps": "MCP",
"settings.extensions.tab.skills": "Dovednosti",
"settings.extensions.availableAll": "Dostupné pro všechny projekty",
"settings.extensions.manageConfig": "Spravujte v opencode.json",
"settings.extensions.addSkills": "Jak přidat dovednosti",
"dialog.server.authenticate.title": "Ověřit",
"project.settings.general.description": "Spravujte název a vzhled projektu",
"project.settings.scripts": "Skripty",
"project.settings.scripts.description": "Nakonfigurujte skripty pro tento projekt",
"project.settings.extensions.description": "Zobrazit rozšíření dostupná pro tento projekt",
"project.settings.extensions.tab.lsps": "LSP",
"project.settings.extensions.added": "Přidáno do tohoto projektu",
"project.settings.extensions.shared": "Sdíleno se všemi projekty",
"project.settings.extensions.lsp.detected": "Zjištěné jazykové servery",
"project.settings.extensions.lsp.description": "Automaticky zjištěno z typů souborů",
"project.settings.extensions.setupRequired": "Je vyžadováno nastavení",
"settings.general.section.general": "Obecné",
"common.viewAll": "Zobrazit vše",
"session.new.workspace.local.tooltip": "Použít aktuální pracovní kopii",
"session.new.workspace.new.tooltip": "Vytvořit izolovanou pracovní kopii",
"session.new.workspace.fromBranch": "od {{branch}}",
"session.new.workspace.trigger.tooltip": "Vyberte, kde chcete relaci spustit",
"session.new.workspace.search.placeholder": "Prohledejte pracovní prostory",
"settings.tab.workspaces": "Pracovní prostory",
"settings.workspaces.filter.all": "Všechny projekty",
"settings.workspaces.empty": "Žádné pracovní prostory",
"settings.workspaces.count.one": "Pracovní plocha {{count}}",
"settings.workspaces.count.other": "Pracovní prostory {{count}}",
"settings.workspaces.sessions.one": "Relace {{count}} v {{project}}",
"settings.workspaces.sessions.other": "Relace {{count}} v {{project}}",
"settings.workspaces.lastActiveSession": "Poslední aktivní relace",
"settings.workspaces.deleteAll": "Smazat všechny pracovní prostory",
"settings.workspaces.deleteAll.confirm": "Smazat všechny pracovní prostory {{count}}?",
"settings.workspaces.delete.warning":
"Adresář a větev pracovního prostoru budou trvale odstraněny, včetně všech nesloučených změn zobrazených níže.",
"settings.workspaces.deleteAll.warning":
"Vybrané pracovní prostory {{count}} v {{project}} budou trvale odstraněny, pouze pokud jsou čisté, neaktivní a nemají žádné propojené relace.",
"settings.workspaces.delete.blocked.active": "Aktivní pracovní prostor nelze smazat.",
"settings.workspaces.delete.blocked.linked":
"Propojené relace zůstanou, ale jejich pracovní adresář bude trvale odstraněn.",
"settings.workspaces.default.title": "Výchozí prostředí",
"settings.workspaces.default.description": "Vyberte, kde začínají nové relace",
"settings.workspaces.default.lastUsed": "Naposledy použito na projekt",
"settings.workspaces.default.local": "Místní adresář",
"settings.workspaces.default.new": "Nový pracovní prostor",
"workspace.move.title": "Přesuňte se do pracovního prostoru",
"workspace.move.menu.title": "Přesunout relaci do",
"workspace.move.failed": "Přesun relace se nezdařil",
"workspace.lifecycle.creating": "Vytváření pracovního prostoru",
"workspace.lifecycle.created": "Pracovní prostor vytvořen",
"workspace.lifecycle.starting": "Zahájení relace",
"workspace.onboarding.title": "Izolujte relace s pracovními prostory",
"workspace.onboarding.description": "Každá získá vlastní pracovní kopii, takže nic nezasahuje do místního repozitáře",
"workspace.lifecycle.moving": "Přesun do pracovního prostoru",
"workspace.lifecycle.set": "Pracovní prostor nastaven",
"session.summary.title": "Podrobnosti relace",
"session.summary.noBranch": "Žádná větev",
"session.summary.basedOn": "Na základě {{branch}}",
"session.background.shell.few": "{{count}} shelly",
"session.background.shell.many": "{{count}} shellů",
"session.background.subagent.few": "{{count}} podagenti",
"session.background.subagent.many": "{{count}} subagentů",
"settings.workspaces.count.few": "{{count}} pracovní plochy",
"settings.workspaces.count.many": "{{count}} pracovních míst",
"settings.workspaces.sessions.few": "{{count}} sezení v {{project}}",
"settings.workspaces.sessions.many": "{{count}} relací v {{project}}",
}
+22 -90
View File
@@ -834,6 +834,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Udvid edit-værktøjsdele",
"settings.general.row.editToolPartsExpanded.description":
"Vis edit-, write- og patch-værktøjsdele udvidet som standard i tidslinjen",
"settings.general.row.newInterface.title": "Nyt layout",
"settings.general.row.newInterface.badge": "Ny",
"settings.general.row.newInterface.description":
"Brug de nye faner og startsidens layout. Du kan skifte mellem layoutene i en begrænset periode.",
"settings.general.row.newInterfaceNotice.title": "Du bruger nu det nye layout",
"settings.general.row.newInterfaceNotice.description": "Det tidligere layout er ikke længere tilgængeligt",
"settings.general.row.newInterfaceNotice.dismiss": "Afvis",
"settings.general.row.pinchZoom.title": "Knib for at zoome",
"settings.general.row.pinchZoom.description": "Tillad knibebevægelser på pegefeltet og Ctrl-rulning for at zoome",
"settings.general.row.wayland.title": "Brug indbygget Wayland",
@@ -1223,94 +1230,19 @@ export const dict = {
"command.logs.export": "Eksportér logfiler",
"provider.disconnect.toast.noCredentials.description":
"Der blev ikke fundet nogen flytbare legitimationsoplysninger for {{provider}}.",
"provider.disconnect.toast.failed.description": "Kunne ikke afbryde {{provider}}.",
"toast.migration.failed.title": "Datamigrering mislykkedes",
"session.background.moveTasks": "Flyt {{tasks}} til baggrunden",
"session.background.inBackground": "Kører {{tasks}} i baggrunden",
"session.background.combine": "{{first}} og {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shells",
"session.background.subagent.one": "{{count}} subagent",
"session.background.subagent.other": "{{count}} subagenter",
"command.session.background": "Flyt til baggrunden",
"session.timeline.notice.finished": "{{actor}} færdig",
"session.timeline.notice.failed": "{{actor}} mislykkedes",
"session.timeline.notice.cancelled": "{{actor}} annulleret",
"session.timeline.notice.instructionsUpdated": "Instruktioner opdateret: {{sources}}",
"session.timeline.notice.restart": "Fortsætter efter genstart",
"settings.tab.preferences": "Præferencer",
"settings.tab.notifications": "Meddelelser",
"settings.tab.projects": "Projekter",
"settings.tab.extensions": "Udvidelser",
"settings.preferences.description": "Tilpas præferencer og tema og standardadfærd",
"settings.appearance.description": "Tilpas tema og skrifttyper",
"settings.notifications.description": "Vælg, hvornår du vil modtage notifikationer og høre lyde",
"settings.shortcuts.description": "Tilpas genveje til almindelige handlinger",
"settings.servers.description": "Administrer serverforbindelser",
"settings.projects.title": "Projekter",
"settings.projects.description": "Administrer projektindstillinger på denne server",
"settings.projects.empty": "Ingen projekter fundet",
"settings.projects.server.all": "Alle servere",
"settings.mcps.description": "Administrer Model Context Protocol (MCP) servere og værktøjer",
"settings.extensions.description": "Administrer udvidelser, der er tilgængelige på denne server",
"settings.extensions.tab.mcps": "MCP'er",
"settings.extensions.tab.skills": "Færdigheder",
"settings.extensions.availableAll": "Tilgængelig til alle projekter",
"settings.extensions.manageConfig": "Administrer i opencode.json",
"settings.extensions.addSkills": "Sådan tilføjer du færdigheder",
"dialog.server.authenticate.title": "Godkend",
"project.settings.general.description": "Administrer projektnavn og udseende",
"project.settings.scripts": "Scripts",
"project.settings.scripts.description": "Konfigurer scripts til dette projekt",
"project.settings.extensions.description": "Se tilgængelige udvidelser til dette projekt",
"project.settings.extensions.tab.lsps": "LSP'er",
"project.settings.extensions.added": "Tilføjet til dette projekt",
"project.settings.extensions.shared": "Deles med alle projekter",
"project.settings.extensions.lsp.detected": "Detekterede sprogservere",
"project.settings.extensions.lsp.description": "Auto-detekteret fra filtyper",
"project.settings.extensions.setupRequired": "Opsætning påkrævet",
"settings.general.section.general": "Generel",
"common.viewAll": "Se alle",
"session.new.workspace.local.tooltip": "Brug det aktuelle checkout",
"session.new.workspace.new.tooltip": "Opret et isoleret checkout",
"session.new.workspace.fromBranch": "fra {{branch}}",
"session.new.workspace.trigger.tooltip": "Vælg, hvor sessionen skal køres",
"session.new.workspace.search.placeholder": "Søg i arbejdsområder",
"settings.tab.workspaces": "Arbejdsrum",
"settings.workspaces.filter.all": "Alle projekter",
"settings.workspaces.empty": "Ingen arbejdsområder",
"settings.workspaces.count.one": "{{count}} arbejdsområde",
"settings.workspaces.count.other": "{{count}} arbejdsområder",
"settings.workspaces.sessions.one": "{{count}} session i {{project}}",
"settings.workspaces.sessions.other": "{{count}}-sessioner i {{project}}",
"settings.workspaces.lastActiveSession": "Sidste aktive session",
"settings.workspaces.deleteAll": "Slet alle arbejdsområder",
"settings.workspaces.deleteAll.confirm": "Vil du slette alle {{count}}-arbejdsområder?",
"settings.workspaces.delete.warning":
"Arbejdsområdets bibliotek og filial vil blive permanent fjernet, inklusive eventuelle ikke-sammenflettede ændringer vist nedenfor.",
"settings.workspaces.deleteAll.warning":
"De {{count}} valgte arbejdsområder i {{project}} vil kun blive permanent fjernet, hvis hver af dem er rene, inaktive og ikke har nogen linkede sessioner.",
"settings.workspaces.delete.blocked.active": "Det aktive arbejdsområde kan ikke slettes.",
"settings.workspaces.delete.blocked.linked":
"Linkede sessioner forbliver, men deres arbejdsmappe vil blive permanent fjernet.",
"settings.workspaces.default.title": "Standard miljø",
"settings.workspaces.default.description": "Vælg, hvor nye sessioner starter",
"settings.workspaces.default.lastUsed": "Sidst brugt pr. projekt",
"settings.workspaces.default.local": "Lokal vejviser",
"settings.workspaces.default.new": "Nyt arbejdsrum",
"workspace.move.title": "Flyt til arbejdsområdet",
"workspace.move.menu.title": "Flyt session til",
"workspace.move.failed": "Sessionen kunne ikke flyttes",
"workspace.lifecycle.creating": "Oprettelse af arbejdsrum",
"workspace.lifecycle.created": "Arbejdsområde oprettet",
"workspace.lifecycle.starting": "Start session",
"workspace.onboarding.title": "Isoler sessioner med arbejdsområder",
"workspace.onboarding.description": "Hver får sit eget checkout, så intet forstyrrer dit lokale repository",
"workspace.lifecycle.moving": "Flytter til arbejdsområde",
"workspace.lifecycle.set": "Arbejdsområde angivet",
"session.summary.title": "Session detaljer",
"session.summary.noBranch": "Ingen gren",
"session.summary.basedOn": "Baseret på {{branch}}",
"help.tabs.toast.ariaLabel": "Introduktion til faner. Organiser dit arbejde og dine aktive sessioner med faner",
"help.tabs.toast.dismiss": "Luk oplysninger om faner",
"help.tabs.title": "Introduktion til faner",
"help.tabs.description": "Organiser dit arbejde og dine aktive sessioner med faner",
"help.tabs.date": "14. juli",
"help.tabs.introduction": "OpenCode Desktop er nu bygget op omkring faner.",
"help.tabs.sessions":
"Start en ny session i en fane, eller åbn en eksisterende session fra et af dine projekter. Åbn en ny fane, når du går i gang med noget nyt, og luk den, når du er færdig.",
"help.tabs.organize":
"Når du holder nogle få faner åbne, er det nemmere at organisere dine aktive sessioner. Giv fanerne navne, der er nemme at huske, hvis du vil beholde dem.",
"help.tabs.home":
"Du finder alle dine sessioner og projekter på den nye startskærm. Når du vælger en session, åbnes den i en fane.",
"help.tabs.persistence": "Dine faner er stadig åbne, når du åbner appen igen.",
"help.tabs.worktrees":
"Det nye design understøtter endnu ikke Git Worktrees, men understøttelsen kommer snart. Hvis du foretrækker at fortsætte med det tidligere layout, kan du skifte mellem layoutene under Indstillinger. Bemærk, at det nye layout bliver permanent om nogle få uger.",
}
+22 -92
View File
@@ -788,6 +788,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Edit-Tool-Abschnitte ausklappen",
"settings.general.row.editToolPartsExpanded.description":
"Edit-, Write- und Patch-Tool-Abschnitte standardmäßig in der Timeline ausgeklappt anzeigen",
"settings.general.row.newInterface.title": "Neues Layout",
"settings.general.row.newInterface.badge": "Neu",
"settings.general.row.newInterface.description":
"Verwenden Sie die neuen Tabs und das Startseitenlayout. Für begrenzte Zeit können Sie zwischen den Layouts wechseln.",
"settings.general.row.newInterfaceNotice.title": "Sie verwenden jetzt das neue Layout",
"settings.general.row.newInterfaceNotice.description": "Das vorherige Layout ist nicht mehr verfügbar",
"settings.general.row.newInterfaceNotice.dismiss": "Verwerfen",
"settings.general.row.pinchZoom.title": "Zoom per Fingergeste",
"settings.general.row.pinchZoom.description": "Zoomen per Zwei-Finger- und Ctrl-Scroll-Geste erlauben",
"settings.general.row.wayland.title": "Natives Wayland verwenden",
@@ -1160,96 +1167,19 @@ export const dict = {
"desktop.picker.error.notSelected": "Im Auswahldialog wurde keine Datei ausgewählt",
"desktop.picker.error.sizeLimit": "Die ausgewählten Anhänge überschreiten das Limit von {{limit}} MB",
"command.logs.export": "Protokolle exportieren",
"provider.disconnect.toast.noCredentials.description":
"Für {{provider}} wurden keine entfernbaren Anmeldeinformationen gefunden.",
"provider.disconnect.toast.failed.description": "{{provider}} konnte nicht getrennt werden.",
"toast.migration.failed.title": "Die Datenmigration ist fehlgeschlagen",
"session.background.moveTasks": "Verschieben Sie {{tasks}} in den Hintergrund",
"session.background.inBackground": "Läuft {{tasks}} im Hintergrund",
"session.background.combine": "{{first}} und {{second}}",
"session.background.shell.one": "{{count}}-Shell",
"session.background.shell.other": "{{count}} Shells",
"session.background.subagent.one": "{{count}}-Subagent",
"session.background.subagent.other": "{{count}}-Subagenten",
"command.session.background": "In den Hintergrund wechseln",
"session.timeline.notice.finished": "{{actor}} fertig",
"session.timeline.notice.failed": "{{actor}} ist fehlgeschlagen",
"session.timeline.notice.cancelled": "{{actor}} abgebrochen",
"session.timeline.notice.instructionsUpdated": "Aktualisierte Anleitung: {{sources}}",
"session.timeline.notice.restart": "Fortsetzung nach Neustart",
"settings.tab.preferences": "Präferenzen",
"settings.tab.notifications": "Benachrichtigungen",
"settings.tab.projects": "Projekte",
"settings.tab.extensions": "Erweiterungen",
"settings.preferences.description": "Passen Sie Einstellungen, Design und Standardverhalten an",
"settings.appearance.description": "Passen Sie Design und Schriftarten an",
"settings.notifications.description": "Wählen Sie aus, wann Sie Benachrichtigungen erhalten und Töne hören möchten",
"settings.shortcuts.description": "Passen Sie Verknüpfungen für häufige Aktionen an",
"settings.servers.description": "Serververbindungen verwalten",
"settings.projects.title": "Projekte",
"settings.projects.description": "Projekteinstellungen auf diesem Server verwalten",
"settings.projects.empty": "Keine Projekte gefunden",
"settings.projects.server.all": "Alle Server",
"settings.mcps.description": "Verwalten Sie Model Context Protocol (MCP)-Server und -Tools",
"settings.extensions.description": "Verwalten Sie die auf diesem Server verfügbaren Erweiterungen",
"settings.extensions.tab.mcps": "MCPs",
"settings.extensions.tab.skills": "Fähigkeiten",
"settings.extensions.availableAll": "Verfügbar für alle Projekte",
"settings.extensions.manageConfig": "Verwalten Sie in opencode.json",
"settings.extensions.addSkills": "So fügen Sie Fähigkeiten hinzu",
"dialog.server.authenticate.title": "Authentifizieren",
"project.settings.general.description": "Verwalten Sie den Namen und das Erscheinungsbild des Projekts",
"project.settings.scripts": "Skripte",
"project.settings.scripts.description": "Konfigurieren Sie Skripte für dieses Projekt",
"project.settings.extensions.description": "Für dieses Projekt verfügbare Erweiterungen anzeigen",
"project.settings.extensions.tab.lsps": "LSPs",
"project.settings.extensions.added": "Zu diesem Projekt hinzugefügt",
"project.settings.extensions.shared": "Mit allen Projekten geteilt",
"project.settings.extensions.lsp.detected": "Erkannte Sprachserver",
"project.settings.extensions.lsp.description": "Wird anhand der Dateitypen automatisch erkannt",
"project.settings.extensions.setupRequired": "Einrichtung erforderlich",
"settings.general.section.general": "Allgemein",
"common.viewAll": "Alle anzeigen",
"session.new.workspace.local.tooltip": "Aktuellen Checkout verwenden",
"session.new.workspace.new.tooltip": "Isolierten Checkout erstellen",
"session.new.workspace.fromBranch": "von {{branch}}",
"session.new.workspace.trigger.tooltip": "Wählen Sie aus, wo die Sitzung ausgeführt werden soll",
"session.new.workspace.search.placeholder": "Arbeitsbereiche durchsuchen",
"settings.tab.workspaces": "Arbeitsbereiche",
"settings.workspaces.filter.all": "Alle Projekte",
"settings.workspaces.empty": "Keine Arbeitsbereiche",
"settings.workspaces.count.one": "{{count}}-Arbeitsbereich",
"settings.workspaces.count.other": "{{count}} Arbeitsbereiche",
"settings.workspaces.sessions.one": "{{count}}-Sitzung in {{project}}",
"settings.workspaces.sessions.other": "{{count}}-Sitzungen in {{project}}",
"settings.workspaces.lastActiveSession": "Letzte aktive Sitzung",
"settings.workspaces.deleteAll": "Löschen Sie alle Arbeitsbereiche",
"settings.workspaces.deleteAll.confirm": "Alle {{count}}-Arbeitsbereiche löschen?",
"settings.workspaces.delete.warning":
"Das Arbeitsbereichsverzeichnis und der Zweig werden dauerhaft entfernt, einschließlich aller unten aufgeführten nicht zusammengeführten Änderungen.",
"settings.workspaces.deleteAll.warning":
"Die von {{count}} ausgewählten Arbeitsbereiche in {{project}} werden nur dann dauerhaft entfernt, wenn jeder sauber und inaktiv ist und keine verknüpften Sitzungen aufweist.",
"settings.workspaces.delete.blocked.active": "Der aktive Arbeitsbereich kann nicht gelöscht werden.",
"settings.workspaces.delete.blocked.linked":
"Verknüpfte Sitzungen bleiben bestehen, ihr Arbeitsverzeichnis wird jedoch dauerhaft entfernt.",
"settings.workspaces.default.title": "Standardumgebung",
"settings.workspaces.default.description": "Wählen Sie, wo neue Sitzungen beginnen",
"settings.workspaces.default.lastUsed": "Zuletzt pro Projekt verwendet",
"settings.workspaces.default.local": "Lokales Verzeichnis",
"settings.workspaces.default.new": "Neuer Arbeitsbereich",
"workspace.move.title": "Wechseln Sie zum Arbeitsbereich",
"workspace.move.menu.title": "Sitzung verschieben nach",
"workspace.move.failed": "Sitzung konnte nicht verschoben werden",
"workspace.lifecycle.creating": "Arbeitsbereich erstellen",
"workspace.lifecycle.created": "Arbeitsbereich erstellt",
"workspace.lifecycle.starting": "Beginn der Sitzung",
"workspace.onboarding.title": "Isolieren Sie Sitzungen mit Arbeitsbereichen",
"workspace.onboarding.description":
"Jeder erhält seinen eigenen Checkout, sodass Ihr lokales Repository nicht beeinträchtigt wird",
"workspace.lifecycle.moving": "In Arbeitsbereich verschieben",
"workspace.lifecycle.set": "Arbeitsbereich eingestellt",
"session.summary.title": "Sitzungsdetails",
"session.summary.noBranch": "Kein Branch",
"session.summary.basedOn": "Basierend auf {{branch}}",
"help.tabs.toast.ariaLabel": "Neu: Tabs. Organisieren Sie Ihre Arbeit und aktiven Sitzungen mithilfe von Tabs",
"help.tabs.toast.dismiss": "Informationen zu Tabs schließen",
"help.tabs.title": "Neu: Tabs",
"help.tabs.description": "Organisieren Sie Ihre Arbeit und aktiven Sitzungen mithilfe von Tabs",
"help.tabs.date": "14. Juli",
"help.tabs.introduction": "OpenCode Desktop basiert jetzt auf Tabs.",
"help.tabs.sessions":
"Starten Sie eine neue Sitzung in einem Tab oder öffnen Sie eine vorhandene Sitzung aus einem Ihrer Projekte. Öffnen Sie einen neuen Tab, wenn Sie etwas Neues beginnen, und schließen Sie ihn, wenn Sie fertig sind.",
"help.tabs.organize":
"Wenn Sie einige Tabs geöffnet lassen, können Sie Ihre aktiven Sitzungen leichter organisieren. Benennen Sie Tabs einprägsam, wenn Sie sie länger behalten möchten.",
"help.tabs.home":
"Auf der neuen Startseite finden Sie alle Ihre Sitzungen und Projekte. Wenn Sie eine Sitzung auswählen, wird sie in einem Tab geöffnet.",
"help.tabs.persistence": "Wenn Sie die App erneut öffnen, sind Ihre Tabs weiterhin geöffnet.",
"help.tabs.worktrees":
"Das neue Design unterstützt Git-Worktrees noch nicht. Diese Funktion folgt in Kürze. Wenn Sie das bisherige Layout vorerst weiterverwenden möchten, können Sie in den Einstellungen zwischen den Layouts wechseln. Beachten Sie jedoch, dass das neue Layout in einigen Wochen dauerhaft verwendet wird.",
} satisfies Partial<Record<Keys, string>>
+23 -91
View File
@@ -515,6 +515,22 @@ export const dict = {
"wsl.onboarding.desktopVersion": "ޑެސްކްޓޮޕް {{version}} އެވެ",
"wsl.onboarding.versionMismatch": "އިންސްޓޯލް ކޮށްފައިވާ ވަރޝަން ޑެސްކްޓޮޕް އެޕް ވަރޝަން އާއި އެއްގޮތެއް ނުވެއެވެ.",
"wsl.onboarding.adding": "އިތުރުކުރަނީ...",
"help.tabs.toast.ariaLabel":
"Tabs ތަޢާރަފްކުރުން. ޓެބްތަކާއެކު ތިމާގެ މަސައްކަތާއި އެކްޓިވް ސެޝަންތައް އިންތިޒާމުކުރުން",
"help.tabs.toast.dismiss": "Tabs ގެ މައުލޫމާތު ބާތިލްކުރުން",
"help.tabs.title": "Tabs ތަޢާރަފްކުރުން",
"help.tabs.description": "ޓެބްތަކާއެކު ތިމާގެ މަސައްކަތާއި އެކްޓިވް ސެޝަންތައް އިންތިޒާމުކުރުން",
"help.tabs.date": "ޖުލައި 14",
"help.tabs.introduction": "OpenCode Desktop މިހާރު ބިނާކޮށްފައިވަނީ ޓެބްތަކުގެ ވަށައިގެންނެވެ.",
"help.tabs.sessions":
"ޓެބެއްގައި އާ ސެޝަނެއް ފަށާ، ނުވަތަ ތިމާގެ އެއްވެސް ޕްރޮޖެކްޓަކުން މިހާރު ހުރި ސެޝަނެއް ހުޅުވާށެވެ. އާ ކަމެއް ފެށުމުން އާ ޓެބެއް ހުޅުވާ، އަދި ނިމުމުން ބަންދު ކުރާށެވެ.",
"help.tabs.organize":
"މަދު ޓެބްތަކެއް ހުޅުވާފައި ބެހެއްޓުމުން އެކްޓިވް ސެޝަންތައް އިންތިޒާމު ކުރުމަށް ފަސޭހަވެގެންދެއެވެ. ޓެބްތައް ވަށައިގެން ބެހެއްޓުމަށް ރާވާނަމަ ހަނދާން އާވާ އެއްޗަކަށް ބަދަލުކޮށްލާށެވެ.",
"help.tabs.home":
"ތިބާގެ ހުރިހާ ސެޝަންތަކާއި ޕްރޮޖެކްޓްތައް އާ Home ސްކްރީނުން ފެންނާނެއެވެ. ސެޝަނެއް ހޮވުމުން ޓެބެއްގައި ހުޅުވޭނެއެވެ.",
"help.tabs.persistence": "އެޕް އަލުން ހުޅުވާލުމުން އަދިވެސް ޓެބްތައް ހުޅުވާފައި ހުރެއެވެ.",
"help.tabs.worktrees":
"އާ ޑިޒައިން އިން އަދި Git ވޯކްޓްރީސް އަށް ސަޕޯޓް ނުކުރާއިރު، ވަރަށް އަވަހަށް އަންނާނެ އެވެ. އެހެންކަމުން ކުރީގެ ލޭއައުޓް ބޭނުންކުރުން ކުރިއަށް ގެންދަން ބޭނުންނަމަ ސެޓިންގްސްގައިވާ ލޭއައުޓްތަކުގެ މެދުގައި ބަދަލުވެވޭނެއެވެ. ހަމައެކަނި ހަނދާނުގައި ބަހައްޓަންވީ އާ ލޭއައުޓް ދެތިން ހަފްތާއެއްހާ ދުވަހުގެ ތެރޭގައި ދާއިމީ ވެގެންދާނެ ކަމެވެ.",
"server.row.noUsername": "ޔޫޒަރނޭމް އެއް ނެތެވެ",
"dialog.project.edit.title": "އެޑިޓް ޕްރޮޖެކްޓް",
"dialog.project.edit.name": "ނަން",
@@ -969,6 +985,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "އެޑިޓް ޓޫލްގެ ބައިތައް ފުޅާކުރުން",
"settings.general.row.editToolPartsExpanded.description":
"ޓައިމްލައިންގައި ޑިފޯލްޓްކޮށް ފުޅާކޮށްފައިވާ އެޑިޓް، ރައިޓް، އަދި ޕެޗް ޓޫލް ބައިތައް ދައްކާށެވެ",
"settings.general.row.newInterface.title": "އާ ލޭއައުޓެއް",
"settings.general.row.newInterface.badge": "އާ",
"settings.general.row.newInterface.description":
"އާ ޓެބްތަކާއި ހޯމް ލޭއައުޓް ބޭނުން ކުރާށެވެ. ލޭއައުޓްތަކުގެ މެދުގައި ވަކި މުއްދަތަކަށް ބަދަލުވުން.",
"settings.general.row.newInterfaceNotice.title": "މިހާރު ތިޔަ ބޭނުން ކުރަނީ އާ ލޭއައުޓެކެވެ",
"settings.general.row.newInterfaceNotice.description": "ކުރީގެ ލޭއައުޓް މިހާރު ނުލިބެއެވެ",
"settings.general.row.newInterfaceNotice.dismiss": "ދުރުކޮށްލުން",
"settings.general.row.pinchZoom.title": "ޒޫމް ކުރަން ޕިންޗް ކޮށްލާށެވެ",
"settings.general.row.pinchZoom.description":
"ޓްރެކްޕެޑް ޕިންޗް އަދި Ctrl-ސްކްރޯލް ޖެޝަރސް ޒޫމް ކުރުމަށް ހުއްދަ ދިނުން",
@@ -1151,95 +1174,4 @@ export const dict = {
"workspace.reset.archived.many": "{{count}} ސެޝަންތައް އަރުޝީފް ކުރެވޭނެއެވެ.",
"workspace.reset.note": "މިއީ ޑިފޯލްޓް ބްރާންޗާ އެއްގޮތްވާ ގޮތަށް ވޯކްސްޕޭސް ރީސެޓް ކުރާނެ ކަމެކެވެ.",
"dialog.usageExceeded.dontShowAgain": "އަލުން ނުދައްކާ",
"provider.disconnect.toast.noCredentials.description":
"{{provider}} އަށް ނައްތާލެވޭ އެއްވެސް ކްރެޑެންޝަލެއް ނުފެނުނެވެ.",
"provider.disconnect.toast.failed.description": "{{provider}} ޑިސްކަނެކްޓް ނުކުރެވުނެވެ.",
"toast.migration.failed.title": "ޑޭޓާ މައިގްރޭޝަން ފެއިލްވެއްޖެއެވެ",
"session.background.moveTasks": "{{tasks}} ބެކްގްރައުންޑަށް ބަދަލުކުރާށެވެ",
"session.background.inBackground": "{{tasks}} ބެކްގްރައުންޑްގައި ހިނގަމުންދެއެވެ",
"session.background.combine": "{{first}} އަދި {{second}}",
"session.background.shell.one": "{{count}} ޝެލް",
"session.background.shell.other": "{{count}} ޝެލްތައް",
"session.background.subagent.one": "{{count}} ސަބް އޭޖެންޓް",
"session.background.subagent.other": "{{count}} ސަބް އޭޖެންޓުން",
"command.session.background": "ބެކްގްރައުންޑަށް ބަދަލުކުރުން",
"session.timeline.notice.finished": "{{actor}} ނިންމައިފިއެވެ",
"session.timeline.notice.failed": "{{actor}} ފެއިލްވެއްޖެއެވެ",
"session.timeline.notice.cancelled": "{{actor}} ކެންސަލްވެއްޖެއެވެ",
"session.timeline.notice.instructionsUpdated": "އިންސްޓްރަކްޝަންތައް އަޕްޑޭޓްވެއްޖެ: {{sources}}",
"session.timeline.notice.restart": "ރީސްޓާޓްވުމަށްފަހު ކުރިއަށް ގެންދެއެވެ",
"settings.tab.preferences": "ޕްރެފަރެންސްތައް",
"settings.tab.notifications": "ނޮޓިފިކޭޝަންތައް",
"settings.tab.projects": "ޕްރޮޖެކްޓްތައް",
"settings.tab.extensions": "އެކްސްޓެންޝަންތައް",
"settings.preferences.description": "ޕްރެފަރެންސް، ތީމް އަދި ޑިފޯލްޓް ސުލޫކު ކަސްޓަމައިޒް ކުރާށެވެ",
"settings.appearance.description": "ތީމް އަދި ފޮންޓްތައް ކަސްޓަމައިޒް ކުރާށެވެ",
"settings.notifications.description": "ނޮޓިފިކޭޝަން ލިބޭ އަދި އަޑު އިވޭ ވަގުތު ހޮވާށެވެ",
"settings.shortcuts.description": "އާންމު އެކްޝަންތަކުގެ ޝޯޓްކަޓްތައް ކަސްޓަމައިޒް ކުރާށެވެ",
"settings.servers.description": "ސަރވަރ ކަނެކްޝަންތައް މެނޭޖްކުރާށެވެ",
"settings.projects.title": "ޕްރޮޖެކްޓްތައް",
"settings.projects.description": "މި ސަރވަރުގައި ޕްރޮޖެކްޓް ސެޓިންގްސް މެނޭޖްކުރާށެވެ",
"settings.projects.empty": "އެއްވެސް ޕްރޮޖެކްޓެއް ނުފެނުނެވެ",
"settings.projects.server.all": "ހުރިހާ ސަރވަރުތައް",
"settings.mcps.description": "Model Context Protocol (MCP) ސަރވަރތަކާއި ޓޫލްތައް މެނޭޖްކުރާށެވެ",
"settings.extensions.description": "މި ސަރވަރުގައި ލިބެންހުރި އެކްސްޓެންޝަންތައް މެނޭޖްކުރާށެވެ",
"settings.extensions.tab.mcps": "MCPs",
"settings.extensions.tab.skills": "ހުނަރުތައް",
"settings.extensions.availableAll": "ހުރިހާ ޕްރޮޖެކްޓަކަށް ލިބެންހުރި",
"settings.extensions.manageConfig": "opencode.json ގައި މެނޭޖްކުރާށެވެ",
"settings.extensions.addSkills": "ހުނަރުތައް އިތުރުކުރާނެ ގޮތް",
"dialog.server.authenticate.title": "އޮތެންޓިކޭޓް ކުރާށެވެ",
"project.settings.general.description": "ޕްރޮޖެކްޓްގެ ނަމާއި މަލަމަތި މެނޭޖްކުރާށެވެ",
"project.settings.scripts": "ސްކްރިޕްޓްތައް",
"project.settings.scripts.description": "މި ޕްރޮޖެކްޓަށް ސްކްރިޕްޓްތައް ކޮންފިގަރކުރާށެވެ",
"project.settings.extensions.description": "މި ޕްރޮޖެކްޓަށް ލިބެންހުރި އެކްސްޓެންޝަންތައް ބަލާށެވެ",
"project.settings.extensions.tab.lsps": "LSPs",
"project.settings.extensions.added": "މި ޕްރޮޖެކްޓަށް އިތުރުކޮށްފައި",
"project.settings.extensions.shared": "ހުރިހާ ޕްރޮޖެކްޓާއެކު ހިއްސާކޮށްފައި",
"project.settings.extensions.lsp.detected": "ފާހަގަކުރެވުނު ލޭންގުއޭޖް ސަރވަރތައް",
"project.settings.extensions.lsp.description": "ފައިލް ބާވަތްތަކުން އޮޓޮމެޓިކުން ފާހަގަކޮށްފައި",
"project.settings.extensions.setupRequired": "ސެޓަޕް ބޭނުންވެއެވެ",
"settings.general.section.general": "އާންމު",
"common.viewAll": "ހުރިހާ އެއްޗެއް ބަލާށެވެ",
"session.new.workspace.local.tooltip": "މިހާރުގެ ޗެކްއައުޓް ބޭނުންކުރާށެވެ",
"session.new.workspace.new.tooltip": "ވަކި ޗެކްއައުޓެއް އުފައްދާށެވެ",
"session.new.workspace.fromBranch": "{{branch}} އިން",
"session.new.workspace.trigger.tooltip": "ސެޝަން ހިންގާނެ ތަން ހޮވާށެވެ",
"session.new.workspace.search.placeholder": "ވޯކްސްޕޭސްތައް ހޯދާށެވެ",
"settings.tab.workspaces": "ވޯކްސްޕޭސްތައް",
"settings.workspaces.filter.all": "ހުރިހާ ޕްރޮޖެކްޓްތައް",
"settings.workspaces.empty": "އެއްވެސް ވޯކްސްޕޭސެއް ނެތެވެ",
"settings.workspaces.count.one": "{{count}} ވޯކްސްޕޭސް",
"settings.workspaces.count.other": "{{count}} ވޯކްސްޕޭސްތައް",
"settings.workspaces.sessions.one": "{{project}} ގައި {{count}} ސެޝަން",
"settings.workspaces.sessions.other": "{{project}} ގައި {{count}} ސެޝަންތައް",
"settings.workspaces.lastActiveSession": "ފަހުގެ އެކްޓިވް ސެޝަން",
"settings.workspaces.deleteAll": "ހުރިހާ ވޯކްސްޕޭސްތައް ފުހެލާށެވެ",
"settings.workspaces.deleteAll.confirm": "ހުރިހާ {{count}} ވޯކްސްޕޭސް ފުހެލަންތަ؟",
"settings.workspaces.delete.warning":
"ތިރީގައި ދައްކާ މާޖްނުކުރެވި ހުރި ބަދަލުތަކާއެކު ވޯކްސްޕޭސް ޑައިރެކްޓަރީ އަދި ބްރާންޗް ދާއިމީކޮށް ނައްތާލެވޭނެއެވެ.",
"settings.workspaces.deleteAll.warning":
"{{project}} ގައި ހޮވާފައިވާ {{count}} ވޯކްސްޕޭސް، ކޮންމެ ވޯކްސްޕޭސެއް ސާފު، އިނެކްޓިވް، އަދި ލިންކްވެފައިވާ ސެޝަނެއް ނެތްނަމަ އެކަނި ދާއިމީކޮށް ނައްތާލެވޭނެއެވެ.",
"settings.workspaces.delete.blocked.active": "އެކްޓިވް ވޯކްސްޕޭސް ފުހެލެވޭނެ ގޮތެއް ނެތެވެ.",
"settings.workspaces.delete.blocked.linked":
"ލިންކްވެފައިވާ ސެޝަންތައް ހުންނާނެ، ނަމަވެސް އޭގެ ވޯކިންގ ޑައިރެކްޓަރީ ދާއިމީކޮށް ނައްތާލެވޭނެއެވެ.",
"settings.workspaces.default.title": "ޑިފޯލްޓް މާޙައުލު",
"settings.workspaces.default.description": "އާ ސެޝަންތައް ފަށާނެ ތަން ހޮވާށެވެ",
"settings.workspaces.default.lastUsed": "ކޮންމެ ޕްރޮޖެކްޓަކަށް ވަކިން ފަހުން ބޭނުންކުރި",
"settings.workspaces.default.local": "ލޯކަލް ޑައިރެކްޓަރީ",
"settings.workspaces.default.new": "އާ ވޯކްސްޕޭސް",
"workspace.move.title": "ވޯކްސްޕޭސަށް ބަދަލުކުރާށެވެ",
"workspace.move.menu.title": "ސެޝަން ބަދަލުކުރާ ތަން",
"workspace.move.failed": "ސެޝަން ބަދަލު ނުކުރެވުނެވެ",
"workspace.lifecycle.creating": "ވޯކްސްޕޭސް އުފައްދަމުން",
"workspace.lifecycle.created": "ވޯކްސްޕޭސް އުފެދިއްޖެއެވެ",
"workspace.lifecycle.starting": "ސެޝަން ފަށަމުން",
"workspace.onboarding.title": "ވޯކްސްޕޭސްތަކުން ސެޝަންތައް ވަކިކޮށް ބަހައްޓާށެވެ",
"workspace.onboarding.description":
"ކޮންމެ ސެޝަނަކަށް ވަކި ޗެކްއައުޓެއް ލިބޭތީ ތިޔަ ލޯކަލް ރިޕޮޒިޓަރީއަށް އެއްވެސް ހުރަހެއް ނާޅާނެއެވެ",
"workspace.lifecycle.moving": "ވޯކްސްޕޭސަށް ބަދަލުކުރަމުން",
"workspace.lifecycle.set": "ވޯކްސްޕޭސް ސެޓްވެއްޖެއެވެ",
"session.summary.title": "ސެޝަންގެ ތަފްޞީލު",
"session.summary.noBranch": "އެއްވެސް ބްރާންޗެއް ނެތެވެ",
"session.summary.basedOn": "{{branch}} އަށް ބިނާކޮށް",
}
+24 -90
View File
@@ -514,6 +514,23 @@ export const dict: Record<string, string> = {
"wsl.onboarding.desktopVersion": "ཌེཀསི་ཊོཔ་ {{version}}",
"wsl.onboarding.versionMismatch": "གཞི་བཙུགས་འབད་ཡོད་པའི་ཐོན་རིམ་འདི་ ཌེཀསི་ཊོཔ་ཨེཔ་ཐོན་རིམ་དང་མཐུན་སྒྲིག་མི་འབད།",
"wsl.onboarding.adding": "ཁ་སྐོང་བརྐྱབ་དོ།",
"help.tabs.toast.ariaLabel":
"མཆོང་ལྡེ་ཚུ་ངོ་སྤྲོད་འབད་དོ། མཆོང་ལྡེ་ཚུ་དང་གཅིག་ཁར་ ཁྱོད་རའི་ལཱ་དང་ ཤུགས་ལྡན་ལཱ་ཡུན་ཚུ་ གོ་སྒྲིག་འབད།",
"help.tabs.toast.dismiss": "མཆོང་ལྡེ་བརྡ་དོན་བཏོན་གཏང་།",
"help.tabs.title": "མཆོང་ལྡེ་ངོ་སྤྲོད་འབད་དོ།",
"help.tabs.description": "མཆོང་ལྡེ་ཚུ་དང་གཅིག་ཁར་ ཁྱོད་རའི་ལཱ་དང་ ཤུགས་ལྡན་ལཱ་ཡུན་ཚུ་ གོ་སྒྲིག་འབད།",
"help.tabs.date": "སྤྱི་ཟླ་༧ པའི་ཚེས་༡༤།",
"help.tabs.introduction": "OpenCode ཌེཀསི་ཊོཔ་འདི་ད་ལྟོ་མཆོང་ལྡེ་ཚུ་གི་མཐའ་འཁོར་ལུ་བཟོ་བསྐྲུན་འབད་ཡོདཔ་ཨིན།",
"help.tabs.sessions":
"མཆོང་ལྡེ་ཅིག་ནང་ལཱ་ཡུན་གསརཔ་འགོ་བཙུགས་ ཡང་ན་ ཁྱོད་རའི་ལས་འགུལ་གང་རུང་ཅིག་ལས་ ད་ལྟོ་ཡོད་པའི་ལཱ་ཡུན་ཅིག་ཁ་ཕྱེ། ཁྱོད་ཀྱིས་ག་ཅི་ཡང་གསརཔ་འགོ་བཙུགས་པའི་སྐབས་ མཆོང་ལྡེ་གསརཔ་ཅིག་ཁ་ཕྱེ་ཞིནམ་ལས་ ཁྱོད་ཀྱིས་འབད་ཚརཝ་ད་ ཁ་བསྡམས།",
"help.tabs.organize":
"མཆོང་ལྡེ་དག་པ་ཅིག་ཁ་ཕྱེ་བཞག་མི་འདི་གིས་ ཁྱོད་རའི་ཤུགས་ལྡན་ལཱ་ཡུན་ཚུ་གོ་རིམ་སྒྲིག་ནི་ལུ་འཇམ་ཏོང་ཏོ་བཟོཝ་ཨིན། ཁྱོད་ཀྱིས་ མཆོང་ལྡེ་ཚུ་ མཐའ་འཁོར་ལུ་བཞག་ནི་གི་འཆར་གཞི་བརྩམས་ཏེ་ཡོད་པ་ཅིན་ དྲན་འཛིན་ཅན་གྱི་ཅ་ལ་ཅིག་ལུ་ མིང་བསྒྱུར་འབད།",
"help.tabs.home":
"ཁྱོད་ཀྱིས་ ཁྱོད་རའི་ལཱ་ཡུན་དང་ལས་འགུལ་ཚུ་ཆ་མཉམ་ ཁྱིམ་གྱི་གསལ་གཞི་གསརཔ་གུ་མཐོང་ཚུགས། ལཱ་ཡུན་ཅིག་སེལ་འཐུ་འབད་མི་འདི་གིས་ མཆོང་ལྡེ་ཅིག་ནང་ཁ་ཕྱེཝ་ཨིན།",
"help.tabs.persistence":
"ཁྱོད་ཀྱིས་གློག་རིམ་འདི་ལོག་ཁ་ཕྱེ་བའི་སྐབས་ ཁྱོད་ཀྱི་མཆོང་ལྡེ་ཚུ་ད་ལྟོ་ཡང་ཁ་ཕྱེ་སྟེ་ཡོདཔ་ཨིན།",
"help.tabs.worktrees":
"བཟོ་བཀོད་གསརཔ་འདི་གིས་ ད་ལྟོ་ཡང་ Git Worktrees ལུ་རྒྱབ་སྐྱོར་མི་འབད་ འདི་མགྱོགས་པ་རང་འོང་ནི་ཨིན། དེ་འབདཝ་ལས་ ཁྱོད་ཀྱིས་ ཧེ་མའི་སྒྲིག་བཀོད་འདི་འཕྲོ་མཐུད་ལག་ལེན་འཐབ་དགོ་པ་ཅིན་ ཁྱོད་ཀྱིས་ སྒྲིག་སྟངས་ཚུ་ནང་ སྒྲིག་བཀོད་ཚུ་གི་བར་ན་ སོར་བསྒྱུར་འབད་ཚུགས། བདུན་ཕྲག་དག་པ་ཅིག་གི་ནང་འཁོད་ལུ་ བཀོད་སྒྲིག་གསརཔ་འདི་ གཏན་འཇགས་འགྱོ་འོང་ཟེར་ སེམས་ཁར་བཞག་དགོ།",
"server.row.noUsername": "སྤྱོད་མིང་མེད།",
"dialog.project.edit.title": "ཞུན་དག་ལས་གཞི།",
"dialog.project.edit.name": "མིང",
@@ -972,6 +989,13 @@ export const dict: Record<string, string> = {
"settings.general.row.editToolPartsExpanded.title": "ཞུན་དག་ལག་ཆས་ཆ་ཤས་ཚུ་རྒྱ་བསྐྱེད་འབད།",
"settings.general.row.editToolPartsExpanded.description":
"དུས་ཚོད་གྲལ་ཐིག་ནང་སྔོན་སྒྲིག་གིས་རྒྱ་བསྐྱེད་འབད་ཡོད་པའི་ཞུན་དག་དང་འབྲི་ནི་ དེ་ལས་ཐབས་འཕྲུལ་གྱི་ལག་ཆས་ཆ་ཤས་ཚུ་སྟོན།",
"settings.general.row.newInterface.title": "བཀོད་སྒྲིག་གསརཔ།",
"settings.general.row.newInterface.badge": "གསརཔ",
"settings.general.row.newInterface.description":
"མཆོང་ལྡེ་གསརཔ་ཚུ་དང་ཁྱིམ་སྒྲིག་བཀོད་ཚུ་ལག་ལེན་འཐབ། དུས་ཚོད་ཚད་ཅིག་གི་དོན་ལུ་ སྒྲིག་བཀོད་ཚུ་གི་བར་ན་ སོར་བསྒྱུར་འབད།",
"settings.general.row.newInterfaceNotice.title": "ད་ཁྱོད་ཀྱིས་སྒྲིག་བཀོད་གསརཔ་ལག་ལེན་འཐབ་དོ།",
"settings.general.row.newInterfaceNotice.description": "ཧེ་མའི་སྒྲིག་བཀོད་འདི་ ད་ལས་ཕར་འཐོབ་མི་ཚུགས།",
"settings.general.row.newInterfaceNotice.dismiss": "ཁུངས༌མེད༌བརྩི༌ནི",
"settings.general.row.pinchZoom.title": "རྒྱས་ཟུམ་འབད་ནི་ལུ་ ཨེབ་གཏང་།",
"settings.general.row.pinchZoom.description": "ཊེག་པེཌི་པིནཆི་དང་ Ctrl-བཤུད་སྒྲིལ་བརྡ་མཚོན་ཚུ་རྒྱས་ཟུམ་འབད་བཅུག།",
"settings.general.row.wayland.title": "ས་གནས་ཀྱི་ Waylandལག་ལེན་འཐབ།",
@@ -1153,95 +1177,5 @@ export const dict: Record<string, string> = {
"workspace.reset.archived.one": "ལཱ་ཡུན་ ༡ གཏན་མཛོད་ནང་བཞག་འོང་།",
"workspace.reset.archived.many": "{{count}} ལཱ་ཡུན་ཚུ་ཡིག་མཛོད་ནང་བཞག་འོང་།",
"workspace.reset.note": "འདི་གིས་ སྔོན་སྒྲིག་ཡན་ལག་མཐུན་སྒྲིག་འབད་ནི་ལུ་ ལཱ་གི་ས་སྒོ་འདི་སླར་སྒྲིག་འབད་འོང་།",
"toast.migration.failed.title": "གནས་སྡུད་གནས་སྤོ་འཐུས་ཤོར་བྱུང་ཡོདཔ།",
"session.background.moveTasks": "{{tasks}} རྒྱབ་ཁར་སྤོ།",
"session.background.inBackground": "{{tasks}} རྒྱབ་ཁར་གཡོག་བཀོལ་དོ།",
"session.background.combine": "{{first}} དང་ {{second}}",
"session.background.shell.one": "{{count}} Shell",
"session.background.shell.other": "{{count}} Shell",
"session.background.subagent.one": "{{count}} ཡན་ལག་ལས་ཚབ།",
"session.background.subagent.other": "{{count}} ཡན་ལག་ལས་ཚབ།",
"command.session.background": "རྒྱབ་ཁར་སྤོ།",
"session.timeline.notice.finished": "{{actor}} མཇུག་བསྡུ་ཡོདཔ།",
"session.timeline.notice.failed": "{{actor}} འཐུས་ཤོར་བྱུང་ཡོདཔ།",
"session.timeline.notice.cancelled": "{{actor}} ཆ་མེད་བཏང་ཡོདཔ།",
"settings.tab.preferences": "དགའ་གདམ་ཚུ།",
"settings.tab.notifications": "བརྡ་བསྐུལ་ཚུ།",
"settings.tab.projects": "ལས་གཞི་ཚུ།",
"settings.tab.extensions": "རྒྱ་བསྐྱེད་ཚུ།",
"settings.preferences.description": "དགའ་གདམ་དང་ བརྗོད་དོན་ དེ་ལས་ སྔོན་སྒྲིག་སྤྱོད་ལམ་སྲོལ་སྒྲིག་འབད།",
"settings.appearance.description": "བརྗོད་དོན་དང་ཡིག་གཟུགས་ཚུ་སྲོལ་སྒྲིག་འབད།",
"settings.notifications.description": "བརྡ་བསྐུལ་ནམ་ཐོབ་ནི་དང་ སྒྲ་ནམ་གོ་ནི་ཨིན་ན་གདམ་ཁ་རྐྱབས།",
"settings.shortcuts.description": "སྤྱིར་བཏང་བྱ་བ་ཚུ་གི་མགྱོགས་ཐབས་སྲོལ་སྒྲིག་འབད།",
"settings.servers.description": "སར་བར་མཐུད་ལམ་ཚུ་འཛིན་སྐྱོང་འཐབ།",
"settings.projects.title": "ལས་གཞི་ཚུ།",
"settings.projects.description": "སར་བར་འདི་གུ་ལས་གཞིའི་སྒྲིག་སྟངས་ཚུ་འཛིན་སྐྱོང་འཐབ།",
"settings.projects.empty": "ལས་གཞི་འཚོལ་མ་ཐོབ།",
"settings.projects.server.all": "སར་བར་ཆ་མཉམ།",
"settings.mcps.description": "Model Context Protocol (MCP) སར་བར་དང་ལག་ཆས་ཚུ་འཛིན་སྐྱོང་འཐབ།",
"settings.extensions.description": "སར་བར་འདི་གུ་འཐོབ་ཚུགས་པའི་རྒྱ་བསྐྱེད་ཚུ་འཛིན་སྐྱོང་འཐབ།",
"settings.extensions.tab.mcps": "MCPs",
"settings.extensions.tab.skills": "རིག་རྩལ་ཚུ།",
"settings.extensions.availableAll": "ལས་གཞི་ཆ་མཉམ་ལུ་འཐོབ་ཚུགས།",
"settings.extensions.manageConfig": "opencode.json ནང་འཛིན་སྐྱོང་འཐབ།",
"settings.extensions.addSkills": "རིག་རྩལ་ཚུ་ག་དེ་སྦེ་ཁ་སྐོང་རྐྱབ་ནི་ཨིན་ན།",
"dialog.server.authenticate.title": "བདེན་བཤད་འབད།",
"project.settings.general.description": "ལས་གཞིའི་མིང་དང་བཟོ་དབྱིབས་འཛིན་སྐྱོང་འཐབ།",
"project.settings.scripts": "ཡིག་ཚུགས་ཚུ།",
"project.settings.scripts.description": "ལས་གཞི་འདི་གི་ཡིག་ཚུགས་ཚུ་རིམ་སྒྲིག་འབད།",
"project.settings.extensions.description": "ལས་གཞི་འདི་ལུ་འཐོབ་ཚུགས་པའི་རྒྱ་བསྐྱེད་ཚུ་བལྟ།",
"project.settings.extensions.tab.lsps": "LSPs",
"project.settings.extensions.added": "ལས་གཞི་འདི་ལུ་ཁ་སྐོང་བརྐྱབ་ཡོདཔ།",
"project.settings.extensions.shared": "ལས་གཞི་ཆ་མཉམ་དང་གཅིག་ཁར་རུབ་སྤྱོད་འབད་ཡོདཔ།",
"project.settings.extensions.lsp.detected": "སྐྱོན་འཛིན་འབད་ཡོད་པའི་སྐད་ཡིག་སར་བར་ཚུ།",
"project.settings.extensions.lsp.description": "ཡིག་སྣོད་དབྱེ་བ་ལས་རང་བཞིན་གྱིས་སྐྱོན་འཛིན་འབད་ཡོདཔ།",
"project.settings.extensions.setupRequired": "གཞི་སྒྲིག་དགོཔ་ཨིན།",
"settings.general.section.general": "སྤྱིར་བཏང་།",
"common.viewAll": "ཆ་མཉམ་བལྟ།",
"session.new.workspace.local.tooltip": "ད་ལྟོའི་ checkout ལག་ལེན་འཐབ།",
"session.new.workspace.new.tooltip": "checkout སོ་སོ་ཅིག་གསར་བསྐྲུན་འབད།",
"session.new.workspace.fromBranch": "{{branch}} ལས།",
"session.new.workspace.trigger.tooltip": "ལཱ་ཡུན་ག་ཏེ་གཡོག་བཀོལ་ནི་ཨིན་ན་སེལ་འཐུ་འབད།",
"session.new.workspace.search.placeholder": "ལཱ་གི་ས་སྒོ་ཚུ་འཚོལ་ཞིབ་འབད།",
"settings.tab.workspaces": "ལཱ་གི་ས་སྒོ་ཚུ།",
"settings.workspaces.filter.all": "ལས་གཞི་ཆ་མཉམ།",
"settings.workspaces.empty": "ལཱ་གི་ས་སྒོ་མེད།",
"settings.workspaces.count.one": "{{count}} ལཱ་གི་ས་སྒོ།",
"settings.workspaces.count.other": "{{count}} ལཱ་གི་ས་སྒོ།",
"settings.workspaces.sessions.one": "{{project}} ནང་ {{count}} ལཱ་ཡུན།",
"settings.workspaces.sessions.other": "{{project}} ནང་ {{count}} ལཱ་ཡུན།",
"settings.workspaces.lastActiveSession": "མཇུག་གི་ཤུགས་ལྡན་ལཱ་ཡུན།",
"settings.workspaces.deleteAll": "ལཱ་གི་ས་སྒོ་ཆ་མཉམ་བཏོན་གཏང་།",
"settings.workspaces.deleteAll.confirm": "ལཱ་གི་ས་སྒོ་ {{count}} ཆ་མཉམ་བཏོན་གཏང་ནི་ཨིན་ན?",
"settings.workspaces.delete.warning":
"འོག་ལུ་སྟོན་ཡོད་པའི་མཉམ་བསྡོམས་མ་འབད་བའི་བསྒྱུར་བཅོས་ཚུ་རྩིས་ཏེ་ ལཱ་གི་ས་སྒོའི་སྣོད་ཐོ་དང་ཡན་ལག་གཏན་འཇགས་སྦེ་རྩ་བསྐྲད་གཏང་འོང་།",
"settings.workspaces.deleteAll.warning":
"{{project}} ནང་སེལ་འཐུ་འབད་ཡོད་པའི་ལཱ་གི་ས་སྒོ་ {{count}} འདི་ རེ་རེ་བཞིན་གཙང་མ་དང་ ཤུགས་མེད་ དེ་ལས་ འབྲེལ་མཐུད་ལཱ་ཡུན་མེད་པ་ཅིན་རྐྱངམ་ཅིག་ གཏན་འཇགས་སྦེ་རྩ་བསྐྲད་གཏང་འོང་།",
"settings.workspaces.delete.blocked.active": "ཤུགས་ལྡན་ལཱ་གི་ས་སྒོ་འདི་བཏོན་གཏང་མི་ཚུགས།",
"settings.workspaces.delete.blocked.linked":
"འབྲེལ་མཐུད་ལཱ་ཡུན་ཚུ་བཞག་འོང་ དེ་འབདཝ་ད་ དེ་ཚུ་གི་ལཱ་འབད་སའི་སྣོད་ཐོ་གཏན་འཇགས་སྦེ་རྩ་བསྐྲད་གཏང་འོང་།",
"settings.workspaces.default.title": "སྔོན་སྒྲིག་མཐའ་འཁོར།",
"settings.workspaces.default.description": "ལཱ་ཡུན་གསརཔ་ཚུ་ག་ཏེ་འགོ་བཙུགས་ནི་ཨིན་ན་གདམ་ཁ་རྐྱབས།",
"settings.workspaces.default.lastUsed": "ལས་གཞི་རེ་ལུ་མཇུག་ལག་ལེན་འཐབ་མི།",
"settings.workspaces.default.local": "ས་གནས་ཀྱི་སྣོད་ཐོ།",
"settings.workspaces.default.new": "ལཱ་གི་ས་སྒོ་གསརཔ།",
"workspace.move.title": "ལཱ་གི་ས་སྒོ་ལུ་སྤོ།",
"workspace.move.menu.title": "ལཱ་ཡུན་སྤོ་ས།",
"workspace.move.failed": "ལཱ་ཡུན་སྤོ་མ་ཚུགས།",
"workspace.lifecycle.creating": "ལཱ་གི་ས་སྒོ་གསར་བསྐྲུན་འབད་དོ།",
"workspace.lifecycle.created": "ལཱ་གི་ས་སྒོ་གསར་བསྐྲུན་འབད་ཡོདཔ།",
"workspace.lifecycle.starting": "ལཱ་ཡུན་འགོ་བཙུགས་དོ།",
"workspace.onboarding.title": "ལཱ་ཡུན་ཚུ་ལཱ་གི་ས་སྒོ་དང་གཅིག་ཁར་སོ་སོར་བཞག།",
"workspace.onboarding.description":
"རེ་རེ་ལུ་ checkout སོ་སོ་ཡོདཔ་ལས་ ཁྱོད་ཀྱི་ས་གནས་ཀྱི་མཛོད་ཁང་ལུ་ག་ནི་ཡང་བར་ཆད་མི་འབྱུང་།",
"workspace.lifecycle.moving": "ལཱ་གི་ས་སྒོ་ལུ་སྤོ་དོ།",
"workspace.lifecycle.set": "ལཱ་གི་ས་སྒོ་གཞི་སྒྲིག་འབད་ཡོདཔ།",
"session.summary.title": "ལཱ་ཡུན་ཁ་གསལ།",
"session.summary.noBranch": "ཡན་ལག་མེད།",
"session.summary.basedOn": "{{branch}} གུ་གཞི་བཞག་ཡོདཔ།",
"provider.disconnect.toast.noCredentials.description": "{{provider}} གི་བཏོན་གཏང་བཏུབ་པའི་ངོ་རྟགས་འཚོལ་མ་ཐོབ།",
"provider.disconnect.toast.failed.description": "{{provider}} མཐུད་ལམ་བཏོག་མ་ཚུགས།",
"session.timeline.notice.instructionsUpdated": "བཀོད་རྒྱ་ཚུ་དུས་མཐུན་བཟོ་ཡོདཔ།: {{sources}}",
"session.timeline.notice.restart": "ལོག་འགོ་བཙུགས་པའི་ཤུལ་ལས་འཕྲོ་མཐུད་དོ།",
"dialog.usageExceeded.dontShowAgain": "ལོག་སྟེ་མ་སྟོན།",
}
+22 -91
View File
@@ -511,6 +511,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "επιτραπέζιος υπολογιστής {{version}}",
"wsl.onboarding.versionMismatch": "Η εγκατεστημένη έκδοση δεν ταιριάζει με την έκδοση της εφαρμογής για υπολογιστές.",
"wsl.onboarding.adding": "Προσθήκη...",
"help.tabs.toast.ariaLabel": "Εισαγωγή καρτελών. Οργανώστε την εργασία και τις ενεργές συνεδρίες σας με καρτέλες",
"help.tabs.toast.dismiss": "Παράβλεψη πληροφοριών καρτελών",
"help.tabs.title": "Εισαγωγή καρτελών",
"help.tabs.description": "Οργανώστε την εργασία και τις ενεργές συνεδρίες σας με καρτέλες",
"help.tabs.date": "14 Ιουλίου",
"help.tabs.introduction": "OpenCode Η επιφάνεια εργασίας είναι πλέον χτισμένη γύρω από καρτέλες.",
"help.tabs.sessions":
"Ξεκινήστε μια νέα συνεδρία σε μια καρτέλα ή ανοίξτε μια υπάρχουσα περίοδο λειτουργίας από οποιοδήποτε από τα έργα σας. Ανοίξτε μια νέα καρτέλα όταν ξεκινάτε κάτι νέο και κλείστε την όταν τελειώσετε.",
"help.tabs.organize":
"Διατηρώντας μερικές καρτέλες ανοιχτές διευκολύνετε την οργάνωση των ενεργών συνεδριών σας. Μετονομάστε τις καρτέλες σε κάτι αξιομνημόνευτο, αν σκοπεύετε να τις διατηρήσετε.",
"help.tabs.home":
"Θα βρείτε όλες τις συνεδρίες και τα έργα σας στη νέα Αρχική οθόνη. Η επιλογή μιας συνεδρίας ανοίγει σε μια καρτέλα.",
"help.tabs.persistence": "Όταν ανοίγετε ξανά την εφαρμογή, οι καρτέλες σας είναι ακόμα ανοιχτές.",
"help.tabs.worktrees":
"Η νέα σχεδίαση δεν υποστηρίζει ακόμα Git Worktrees, θα είναι σύντομα διαθέσιμη. Επομένως, εάν προτιμάτε να συνεχίσετε να χρησιμοποιείτε την προηγούμενη διάταξη, μπορείτε να κάνετε εναλλαγή μεταξύ των διατάξεων στις Ρυθμίσεις. Απλώς έχετε κατά νου ότι η νέα διάταξη θα γίνει μόνιμη σε λίγες εβδομάδες.",
"server.row.noUsername": "χωρίς όνομα χρήστη",
"dialog.project.edit.title": "Επεξεργασία έργου",
"dialog.project.edit.name": "Όνομα",
@@ -969,6 +984,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Ανάπτυξη τμημάτων εργαλείου επεξεργασίας",
"settings.general.row.editToolPartsExpanded.description":
"Εμφάνιση τμημάτων του εργαλείου επεξεργασίας, εγγραφής και ενημέρωσης κώδικα που έχουν αναπτυχθεί από προεπιλογή στη γραμμή χρόνου",
"settings.general.row.newInterface.title": "Νέα διάταξη",
"settings.general.row.newInterface.badge": "Νέο",
"settings.general.row.newInterface.description":
"Χρησιμοποιήστε τις νέες καρτέλες και τη διάταξη του σπιτιού. Εναλλαγή μεταξύ των διατάξεων για περιορισμένο χρονικό διάστημα.",
"settings.general.row.newInterfaceNotice.title": "Χρησιμοποιείτε τώρα νέα διάταξη",
"settings.general.row.newInterfaceNotice.description": "Η προηγούμενη διάταξη δεν είναι πλέον διαθέσιμη",
"settings.general.row.newInterfaceNotice.dismiss": "Παράβλεψη",
"settings.general.row.pinchZoom.title": "Τσιμπήστε για μεγέθυνση",
"settings.general.row.pinchZoom.description":
"Να επιτρέπεται η μεγέθυνση των χειρονομιών τσιμπήματος και κύλισης Ctrl",
@@ -1123,48 +1145,6 @@ export const dict = {
"session.delete.confirm": 'Διαγραφή συνεδρίας "{{name}}";',
"session.delete.button": "Διαγραφή συνεδρίας",
"workspace.new": "Νέος χώρος εργασίας",
"common.viewAll": "Προβολή όλων",
"session.new.workspace.local.tooltip": "Χρήση του τρέχοντος checkout",
"session.new.workspace.new.tooltip": "Δημιουργία απομονωμένου checkout",
"session.new.workspace.fromBranch": "από {{branch}}",
"session.new.workspace.trigger.tooltip": "Επιλέξτε πού θα εκτελεστεί η συνεδρία",
"session.new.workspace.search.placeholder": "Αναζήτηση χώρων εργασίας",
"settings.tab.workspaces": "Χώροι εργασίας",
"settings.workspaces.filter.all": "Όλα τα έργα",
"settings.workspaces.empty": "Δεν υπάρχουν χώροι εργασίας",
"settings.workspaces.count.one": "{{count}} χώρος εργασίας",
"settings.workspaces.count.other": "{{count}} χώροι εργασίας",
"settings.workspaces.sessions.one": "{{count}} συνεδρία στο {{project}}",
"settings.workspaces.sessions.other": "{{count}} συνεδρίες στο {{project}}",
"settings.workspaces.lastActiveSession": "Τελευταία ενεργή συνεδρία",
"settings.workspaces.deleteAll": "Διαγραφή όλων των χώρων εργασίας",
"settings.workspaces.deleteAll.confirm": "Διαγραφή και των {{count}} χώρων εργασίας;",
"settings.workspaces.delete.warning":
"Ο κατάλογος και ο κλάδος του χώρου εργασίας θα διαγραφούν οριστικά, μαζί με τυχόν μη συγχωνευμένες αλλαγές που εμφανίζονται παρακάτω.",
"settings.workspaces.deleteAll.warning":
"Οι {{count}} επιλεγμένοι χώροι εργασίας στο {{project}} θα διαγραφούν οριστικά μόνο αν είναι όλοι καθαροί, ανενεργοί και χωρίς συνδεδεμένες συνεδρίες.",
"settings.workspaces.delete.blocked.active": "Ο ενεργός χώρος εργασίας δεν μπορεί να διαγραφεί.",
"settings.workspaces.delete.blocked.linked":
"Οι συνδεδεμένες συνεδρίες θα διατηρηθούν, αλλά ο κατάλογος εργασίας τους θα διαγραφεί οριστικά.",
"settings.workspaces.default.title": "Προεπιλεγμένο περιβάλλον",
"settings.workspaces.default.description": "Επιλέξτε πού θα ξεκινούν οι νέες συνεδρίες",
"settings.workspaces.default.lastUsed": "Τελευταίο χρησιμοποιημένο ανά έργο",
"settings.workspaces.default.local": "Τοπικός κατάλογος",
"settings.workspaces.default.new": "Νέος χώρος εργασίας",
"workspace.move.title": "Μετακίνηση σε χώρο εργασίας",
"workspace.move.menu.title": "Μετακίνηση συνεδρίας σε",
"workspace.move.failed": "Αποτυχία μετακίνησης συνεδρίας",
"workspace.lifecycle.creating": "Δημιουργία χώρου εργασίας",
"workspace.lifecycle.created": "Ο χώρος εργασίας δημιουργήθηκε",
"workspace.lifecycle.starting": "Έναρξη συνεδρίας",
"workspace.onboarding.title": "Απομονώστε συνεδρίες με χώρους εργασίας",
"workspace.onboarding.description":
"Κάθε συνεδρία έχει το δικό της checkout, ώστε να μην επηρεάζεται το τοπικό αποθετήριο",
"workspace.lifecycle.moving": "Μετακίνηση σε χώρο εργασίας",
"workspace.lifecycle.set": "Ο χώρος εργασίας ορίστηκε",
"session.summary.title": "Λεπτομέρειες συνεδρίας",
"session.summary.noBranch": "Χωρίς κλάδο",
"session.summary.basedOn": "Βασίζεται στον κλάδο {{branch}}",
"workspace.type.local": "τοπικό",
"workspace.type.sandbox": "απομονωμένο περιβάλλον",
"workspace.create.failed.title": "Αποτυχία δημιουργίας χώρου εργασίας",
@@ -1190,53 +1170,4 @@ export const dict = {
"workspace.reset.archived.many": "{{count}} θα αρχειοθετηθούν οι περίοδοι σύνδεσης.",
"workspace.reset.note": "Αυτό θα επαναφέρει τον χώρο εργασίας ώστε να ταιριάζει με τον προεπιλεγμένο κλάδο.",
"dialog.usageExceeded.dontShowAgain": "Να μην εμφανιστεί ξανά",
"provider.disconnect.toast.noCredentials.description":
"Δεν βρέθηκαν διαπιστευτήρια που μπορούν να αφαιρεθούν για τον πάροχο {{provider}}.",
"provider.disconnect.toast.failed.description": "Αποτυχία αποσύνδεσης του παρόχου {{provider}}.",
"toast.migration.failed.title": "Η μετεγκατάσταση δεδομένων απέτυχε",
"session.background.moveTasks": "Μετακίνηση {{tasks}} στο παρασκήνιο",
"session.background.inBackground": "Εκτέλεση {{tasks}} στο παρασκήνιο",
"session.background.combine": "{{first}} και {{second}}",
"session.background.shell.one": "{{count}} κέλυφος",
"session.background.shell.other": "{{count}} κελύφη",
"session.background.subagent.one": "{{count}} υποπράκτορας",
"session.background.subagent.other": "{{count}} υποπράκτορες",
"command.session.background": "Μετακίνηση στο παρασκήνιο",
"session.timeline.notice.finished": "Ο χρήστης {{actor}} ολοκλήρωσε",
"session.timeline.notice.failed": "Ο χρήστης {{actor}} απέτυχε",
"session.timeline.notice.cancelled": "Ο χρήστης {{actor}} ακυρώθηκε",
"session.timeline.notice.instructionsUpdated": "Οι οδηγίες ενημερώθηκαν: {{sources}}",
"session.timeline.notice.restart": "Συνέχεια μετά την επανεκκίνηση",
"settings.tab.preferences": "Προτιμήσεις",
"settings.tab.notifications": "Ειδοποιήσεις",
"settings.tab.projects": "Έργα",
"settings.tab.extensions": "Επεκτάσεις",
"settings.preferences.description": "Προσαρμογή προτιμήσεων, θέματος και προεπιλεγμένης συμπεριφοράς",
"settings.appearance.description": "Προσαρμογή θέματος και γραμματοσειρών",
"settings.notifications.description": "Επιλέξτε πότε θα λαμβάνετε ειδοποιήσεις και θα ακούτε ήχους",
"settings.shortcuts.description": "Προσαρμογή συντομεύσεων για συνηθισμένες ενέργειες",
"settings.servers.description": "Διαχείριση συνδέσεων διακομιστή",
"settings.projects.title": "Έργα",
"settings.projects.description": "Διαχείριση ρυθμίσεων έργων σε αυτόν τον διακομιστή",
"settings.projects.empty": "Δεν βρέθηκαν έργα",
"settings.projects.server.all": "Όλοι οι διακομιστές",
"settings.mcps.description": "Διαχείριση διακομιστών και εργαλείων Model Context Protocol (MCP)",
"settings.extensions.description": "Διαχείριση επεκτάσεων που είναι διαθέσιμες σε αυτόν τον διακομιστή",
"settings.extensions.tab.mcps": "MCP",
"settings.extensions.tab.skills": "Δεξιότητες",
"settings.extensions.availableAll": "Διαθέσιμο σε όλα τα έργα",
"settings.extensions.manageConfig": "Διαχείριση στο opencode.json",
"settings.extensions.addSkills": "Πώς να προσθέσετε δεξιότητες",
"dialog.server.authenticate.title": "Έλεγχος ταυτότητας",
"project.settings.general.description": "Διαχείριση ονόματος και εμφάνισης έργου",
"project.settings.scripts": "Σενάρια",
"project.settings.scripts.description": "Διαμόρφωση σεναρίων για αυτό το έργο",
"project.settings.extensions.description": "Προβολή επεκτάσεων που είναι διαθέσιμες σε αυτό το έργο",
"project.settings.extensions.tab.lsps": "LSP",
"project.settings.extensions.added": "Προστέθηκε σε αυτό το έργο",
"project.settings.extensions.shared": "Κοινόχρηστο με όλα τα έργα",
"project.settings.extensions.lsp.detected": "Εντοπισμένοι διακομιστές γλώσσας",
"project.settings.extensions.lsp.description": "Αυτόματος εντοπισμός από τους τύπους αρχείων",
"project.settings.extensions.setupRequired": "Απαιτείται ρύθμιση",
"settings.general.section.general": "Γενικά",
}
+22 -4
View File
@@ -210,8 +210,6 @@ export const dict = {
"provider.disconnect.toast.disconnected.title": "{{provider}} disconnected",
"provider.disconnect.toast.disconnected.description": "{{provider}} models are no longer available.",
"provider.disconnect.toast.noCredentials.description": "No removable credentials found for {{provider}}.",
"provider.disconnect.toast.failed.description": "Failed to disconnect {{provider}}.",
"model.tag.free": "Free",
"model.tag.latest": "Latest",
@@ -449,6 +447,21 @@ export const dict = {
"wsl.onboarding.versionMismatch": "Installed version does not match the desktop app version.",
"wsl.onboarding.adding": "Adding...",
"help.tabs.toast.ariaLabel": "Introducing Tabs. Organize your work and active sessions with tabs",
"help.tabs.toast.dismiss": "Dismiss Tabs information",
"help.tabs.title": "Introducing Tabs",
"help.tabs.description": "Organize your work and active sessions with tabs",
"help.tabs.date": "July 14",
"help.tabs.introduction": "OpenCode Desktop is now built around tabs.",
"help.tabs.sessions":
"Start a new session in a tab, or open an existing session from any of your projects. Open a new tab when you're starting something new, and close it when you're done.",
"help.tabs.organize":
"Keeping a few tabs open makes it easier to organize your active sessions. Rename tabs to something memorable if you plan to keep them around.",
"help.tabs.home":
"You'll find all your sessions and projects on the new Home screen. Selecting a session opens it in a tab.",
"help.tabs.persistence": "When you reopen the app, your tabs are still open.",
"help.tabs.worktrees":
"The new design does not support Git Worktrees yet, it's coming soon. So if you'd prefer to continue using the previous layout, you can switch between layouts in Settings. Just keep in mind that the new layout will become permanent in a few weeks.",
"server.row.noUsername": "no username",
"dialog.project.edit.title": "Edit project",
@@ -672,8 +685,6 @@ export const dict = {
"session.timeline.notice.finished": "{{actor}} finished",
"session.timeline.notice.failed": "{{actor}} failed",
"session.timeline.notice.cancelled": "{{actor}} cancelled",
"session.timeline.notice.instructionsUpdated": "Instructions updated: {{sources}}",
"session.timeline.notice.restart": "Continuing after restart",
"session.error.serverConnection": "Can't connect to this server",
"session.review.filesChanged": "Files Changed {{count}}",
"session.review.change.one": "Change",
@@ -984,6 +995,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Expand edit tool parts",
"settings.general.row.editToolPartsExpanded.description":
"Show edit, write, and patch tool parts expanded by default in the timeline",
"settings.general.row.newInterface.title": "New layout",
"settings.general.row.newInterface.badge": "New",
"settings.general.row.newInterface.description":
"Use the new tabs and home layout. Switch between layouts for a limited time.",
"settings.general.row.newInterfaceNotice.title": "You're now using new layout",
"settings.general.row.newInterfaceNotice.description": "The previous layout is no longer available",
"settings.general.row.newInterfaceNotice.dismiss": "Dismiss",
"settings.general.row.pinchZoom.title": "Pinch to zoom",
"settings.general.row.pinchZoom.description": "Allow trackpad pinch and Ctrl-scroll gestures to zoom",
+23 -95
View File
@@ -541,6 +541,22 @@ export const dict = {
"wsl.onboarding.versionMismatch": "La versión instalada no coincide con la versión de la aplicación de escritorio.",
"wsl.onboarding.adding": "Añadiendo...",
"help.tabs.toast.ariaLabel": "Presentamos las pestañas. Organiza tu trabajo y las sesiones activas con pestañas",
"help.tabs.toast.dismiss": "Descartar información sobre las pestañas",
"help.tabs.title": "Presentamos las pestañas",
"help.tabs.description": "Organiza tu trabajo y las sesiones activas con pestañas",
"help.tabs.date": "14 de julio",
"help.tabs.introduction": "OpenCode Desktop ahora se organiza en torno a pestañas.",
"help.tabs.sessions":
"Inicia una nueva sesión en una pestaña o abre una sesión existente de cualquiera de tus proyectos. Abre una pestaña nueva cuando empieces algo nuevo y ciérrala cuando termines.",
"help.tabs.organize":
"Mantener algunas pestañas abiertas facilita la organización de las sesiones activas. Cambia el nombre de las pestañas por uno fácil de recordar si piensas conservarlas.",
"help.tabs.home":
"Encontrarás todas tus sesiones y proyectos en la nueva pantalla Inicio. Al seleccionar una sesión, se abre en una pestaña.",
"help.tabs.persistence": "Cuando vuelvas a abrir la aplicación, las pestañas seguirán abiertas.",
"help.tabs.worktrees":
"El nuevo diseño aún no admite Git Worktrees, pero estarán disponibles pronto. Si prefieres seguir usando el diseño anterior, puedes cambiar de diseño en Ajustes. Ten en cuenta que el nuevo diseño será permanente dentro de unas semanas.",
"dialog.project.edit.title": "Editar proyecto",
"dialog.project.edit.name": "Nombre",
"dialog.project.edit.icon": "Icono",
@@ -949,6 +965,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Expandir partes de la herramienta de edición",
"settings.general.row.editToolPartsExpanded.description":
"Mostrar las partes de las herramientas de edición, escritura y parcheado expandidas por defecto en la línea de tiempo",
"settings.general.row.newInterface.title": "Nuevo diseño",
"settings.general.row.newInterface.badge": "Nuevo",
"settings.general.row.newInterface.description":
"Usa las nuevas pestañas y el diseño de la página de inicio. Durante un tiempo limitado, puedes cambiar entre los diseños.",
"settings.general.row.newInterfaceNotice.title": "Ahora estás usando el nuevo diseño",
"settings.general.row.newInterfaceNotice.description": "El diseño anterior ya no está disponible",
"settings.general.row.newInterfaceNotice.dismiss": "Descartar",
"settings.general.row.pinchZoom.title": "Pellizcar para ampliar",
"settings.general.row.pinchZoom.description":
"Permitir ampliar con el gesto de pellizco del panel táctil y con Ctrl + desplazamiento",
@@ -1239,99 +1262,4 @@ export const dict = {
"error.childStore.persistedProjectIconCreateFailed": "Error al crear icono de proyecto persistente",
"error.childStore.storeCreateFailed": "Error al crear almacén",
"terminal.connectionLost.abnormalClose": "WebSocket cerrado anormalmente: {{code}}",
"provider.disconnect.toast.noCredentials.description": "No se encontraron credenciales extraíbles para {{provider}}.",
"provider.disconnect.toast.failed.description": "No se pudo desconectar {{provider}}.",
"toast.migration.failed.title": "La migración de datos falló",
"session.background.moveTasks": "Mover {{tasks}} al fondo",
"session.background.inBackground": "Ejecutando {{tasks}} en segundo plano",
"session.background.combine": "{{first}} y {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shells",
"session.background.subagent.one": "{{count}} subagente",
"session.background.subagent.other": "{{count}} subagentes",
"command.session.background": "Pasar al fondo",
"session.timeline.notice.finished": "{{actor}} terminado",
"session.timeline.notice.failed": "{{actor}} falló",
"session.timeline.notice.cancelled": "{{actor}} cancelado",
"session.timeline.notice.instructionsUpdated": "Instrucciones actualizadas: {{sources}}",
"session.timeline.notice.restart": "Continuando después del reinicio",
"settings.tab.preferences": "Preferencias",
"settings.tab.notifications": "Notificaciones",
"settings.tab.projects": "Proyectos",
"settings.tab.extensions": "Extensiones",
"settings.preferences.description": "Personalizar preferencias y tema y comportamiento predeterminado",
"settings.appearance.description": "Personaliza el tema y las fuentes",
"settings.notifications.description": "Elige cuándo recibir notificaciones y escuchar sonidos",
"settings.shortcuts.description": "Personaliza atajos para acciones comunes",
"settings.servers.description": "Administrar conexiones de servidor",
"settings.projects.title": "Proyectos",
"settings.projects.description": "Administrar la configuración del proyecto en este servidor",
"settings.projects.empty": "No se encontraron proyectos",
"settings.projects.server.all": "Todos los servidores",
"settings.mcps.description": "Administrar servidores y herramientas de Model Context Protocol (MCP)",
"settings.extensions.description": "Administrar extensiones disponibles en este servidor",
"settings.extensions.tab.mcps": "MCP",
"settings.extensions.tab.skills": "Habilidades",
"settings.extensions.availableAll": "Disponible para todos los proyectos",
"settings.extensions.manageConfig": "Administrar en opencode.json",
"settings.extensions.addSkills": "Cómo agregar habilidades",
"dialog.server.authenticate.title": "Autenticar",
"project.settings.general.description": "Administrar el nombre y la apariencia del proyecto",
"project.settings.scripts": "Guiones",
"project.settings.scripts.description": "Configurar scripts para este proyecto",
"project.settings.extensions.description": "Ver extensiones disponibles para este proyecto",
"project.settings.extensions.tab.lsps": "LSP",
"project.settings.extensions.added": "Agregado a este proyecto",
"project.settings.extensions.shared": "Compartido con todos los proyectos.",
"project.settings.extensions.lsp.detected": "Servidores de idiomas detectados",
"project.settings.extensions.lsp.description": "Detectado automáticamente a partir de tipos de archivos",
"project.settings.extensions.setupRequired": "Configuración requerida",
"settings.general.section.general": "General",
"common.viewAll": "Ver todo",
"session.new.workspace.local.tooltip": "Usar el checkout actual",
"session.new.workspace.new.tooltip": "Crear un checkout aislado",
"session.new.workspace.fromBranch": "de {{branch}}",
"session.new.workspace.trigger.tooltip": "Seleccione dónde ejecutar la sesión",
"session.new.workspace.search.placeholder": "Buscar espacios de trabajo",
"settings.tab.workspaces": "Espacios de trabajo",
"settings.workspaces.filter.all": "Todos los proyectos",
"settings.workspaces.empty": "Sin espacios de trabajo",
"settings.workspaces.count.one": "Espacio de trabajo {{count}}",
"settings.workspaces.count.other": "Espacios de trabajo {{count}}",
"settings.workspaces.sessions.one": "Sesión {{count}} en {{project}}",
"settings.workspaces.sessions.other": "Sesiones {{count}} en {{project}}",
"settings.workspaces.lastActiveSession": "Última sesión activa",
"settings.workspaces.deleteAll": "Eliminar todos los espacios de trabajo",
"settings.workspaces.deleteAll.confirm": "¿Eliminar todos los espacios de trabajo {{count}}?",
"settings.workspaces.delete.warning":
"El directorio y la rama del espacio de trabajo se eliminarán permanentemente, incluidos los cambios no combinados que se muestran a continuación.",
"settings.workspaces.deleteAll.warning":
"Los espacios de trabajo seleccionados {{count}} en {{project}} se eliminarán permanentemente solo si cada uno está limpio, inactivo y no tiene sesiones vinculadas.",
"settings.workspaces.delete.blocked.active": "El espacio de trabajo activo no se puede eliminar.",
"settings.workspaces.delete.blocked.linked":
"Las sesiones vinculadas permanecerán, pero su directorio de trabajo se eliminará permanentemente.",
"settings.workspaces.default.title": "Entorno predeterminado",
"settings.workspaces.default.description": "Elige dónde comienzan las nuevas sesiones",
"settings.workspaces.default.lastUsed": "Último usado por proyecto",
"settings.workspaces.default.local": "directorio local",
"settings.workspaces.default.new": "Nuevo espacio de trabajo",
"workspace.move.title": "Mover al espacio de trabajo",
"workspace.move.menu.title": "Mover sesión a",
"workspace.move.failed": "No se pudo mover la sesión",
"workspace.lifecycle.creating": "Creando espacio de trabajo",
"workspace.lifecycle.created": "Espacio de trabajo creado",
"workspace.lifecycle.starting": "Iniciando sesión",
"workspace.onboarding.title": "Aislar sesiones con espacios de trabajo",
"workspace.onboarding.description":
"Cada uno tiene su propio pago, por lo que nada interfiere con su repositorio local.",
"workspace.lifecycle.moving": "Moverse al espacio de trabajo",
"workspace.lifecycle.set": "Espacio de trabajo establecido",
"session.summary.title": "Detalles de la sesión",
"session.summary.noBranch": "Sin rama",
"session.summary.basedOn": "Basado en {{branch}}",
"session.background.shell.many": "{{count}} shells",
"session.background.subagent.many": "{{count}} subagentes",
"settings.workspaces.count.many": "{{count}} espacios de trabajo",
"settings.workspaces.sessions.many": "{{count}} sesiones en {{project}}",
}
+21 -89
View File
@@ -507,6 +507,20 @@ export const dict = {
"wsl.onboarding.desktopVersion": "töölaud {{version}}",
"wsl.onboarding.versionMismatch": "Installitud versioon ei ühti töölauarakenduse versiooniga.",
"wsl.onboarding.adding": "Lisamine...",
"help.tabs.toast.ariaLabel": "Tutvustame vahekaarte. Korraldage oma tööd ja aktiivseid seansse vahekaartide abil",
"help.tabs.toast.dismiss": "Loobu vahelehtede teabest",
"help.tabs.title": "Tutvustame vahekaarte",
"help.tabs.description": "Korraldage oma tööd ja aktiivseid seansse vahekaartide abil",
"help.tabs.date": "14. juuli",
"help.tabs.introduction": "OpenCode Töölaud on nüüd üles ehitatud vahekaartide ümber.",
"help.tabs.sessions":
"Alustage vahekaardil uut seanssi või avage mis tahes projektist olemasolev seanss. Kui alustate midagi uut, avage uus vaheleht ja sulgege see, kui olete lõpetanud.",
"help.tabs.organize":
"Mõne vahelehe avatuna hoidmine muudab aktiivsete seansside korraldamise lihtsamaks. Nimetage vahekaardid ümber millekski meeldejäävaks, kui kavatsete need alles jätta.",
"help.tabs.home": "Kõik seansid ja projektid leiate uuelt avalehelt. Seansi valimine avab selle vahekaardil.",
"help.tabs.persistence": "Kui avate rakenduse uuesti, on teie vahelehed endiselt avatud.",
"help.tabs.worktrees":
"Uus disain ei toeta veel Git tööpuud, see on peagi saadaval. Seega, kui eelistate jätkata eelmise paigutuse kasutamist, saate seadetes küljendusi vahetada. Pidage vaid meeles, et uus paigutus muutub mõne nädala pärast püsivaks.",
"server.row.noUsername": "kasutajanime pole",
"dialog.project.edit.title": "Redigeeri projekti",
"dialog.project.edit.name": "Nimi",
@@ -951,6 +965,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Laiendage tööriista osade redigeerimist",
"settings.general.row.editToolPartsExpanded.description":
"Kuva ajaskaalal vaikimisi laiendatud redigeerimis-, kirjutamis- ja paigatööriistade osad",
"settings.general.row.newInterface.title": "Uus paigutus",
"settings.general.row.newInterface.badge": "Uus",
"settings.general.row.newInterface.description":
"Kasutage uusi vahekaarte ja avalehe paigutust. Lülituge piiratud aja jooksul paigutuste vahel.",
"settings.general.row.newInterfaceNotice.title": "Kasutate nüüd uut paigutust",
"settings.general.row.newInterfaceNotice.description": "Eelmine paigutus pole enam saadaval",
"settings.general.row.newInterfaceNotice.dismiss": "Loobu",
"settings.general.row.pinchZoom.title": "Suumimiseks näpistage",
"settings.general.row.pinchZoom.description": "Lubage suumimiseks puuteplaadi kokkusurumine ja Ctrl-kerimine",
"settings.general.row.wayland.title": "Kasuta omakeelset Wayland",
@@ -1102,47 +1123,6 @@ export const dict = {
"session.delete.confirm": 'Kas kustutada seanss "{{name}}"?',
"session.delete.button": "Kustuta seanss",
"workspace.new": "Uus tööruum",
"common.viewAll": "Kuva kõik",
"session.new.workspace.local.tooltip": "Kasuta praegust väljavõtet",
"session.new.workspace.new.tooltip": "Loo eraldatud väljavõte",
"session.new.workspace.fromBranch": "harust {{branch}}",
"session.new.workspace.trigger.tooltip": "Vali, kus seanss käivitada",
"session.new.workspace.search.placeholder": "Otsi tööruume",
"settings.tab.workspaces": "Tööruumid",
"settings.workspaces.filter.all": "Kõik projektid",
"settings.workspaces.empty": "Tööruume pole",
"settings.workspaces.count.one": "{{count}} tööruum",
"settings.workspaces.count.other": "{{count}} tööruumi",
"settings.workspaces.sessions.one": "{{count}} seanss projektis {{project}}",
"settings.workspaces.sessions.other": "{{count}} seanssi projektis {{project}}",
"settings.workspaces.lastActiveSession": "Viimane aktiivne seanss",
"settings.workspaces.deleteAll": "Kustuta kõik tööruumid",
"settings.workspaces.deleteAll.confirm": "Kas kustutada kõik {{count}} tööruumi?",
"settings.workspaces.delete.warning":
"Tööruumi kataloog ja haru eemaldatakse jäädavalt koos kõigi allpool näidatud ühendamata muudatustega.",
"settings.workspaces.deleteAll.warning":
"Projekti {{project}} valitud {{count}} tööruumi eemaldatakse jäädavalt ainult siis, kui kõik on puhtad, passiivsed ja ilma lingitud seanssideta.",
"settings.workspaces.delete.blocked.active": "Aktiivset tööruumi ei saa kustutada.",
"settings.workspaces.delete.blocked.linked":
"Lingitud seansid säilivad, kuid nende töökataloog eemaldatakse jäädavalt.",
"settings.workspaces.default.title": "Vaikekeskkond",
"settings.workspaces.default.description": "Vali, kus uued seansid algavad",
"settings.workspaces.default.lastUsed": "Viimati kasutatud projekti kohta",
"settings.workspaces.default.local": "Kohalik kataloog",
"settings.workspaces.default.new": "Uus tööruum",
"workspace.move.title": "Teisalda tööruumi",
"workspace.move.menu.title": "Teisalda seanss asukohta",
"workspace.move.failed": "Seansi teisaldamine ebaõnnestus",
"workspace.lifecycle.creating": "Tööruumi loomine",
"workspace.lifecycle.created": "Tööruum loodud",
"workspace.lifecycle.starting": "Seansi käivitamine",
"workspace.onboarding.title": "Eralda seansid tööruumidega",
"workspace.onboarding.description": "Igal seansil on oma väljavõte, nii et miski ei sega kohalikku hoidlat",
"workspace.lifecycle.moving": "Tööruumi teisaldamine",
"workspace.lifecycle.set": "Tööruum määratud",
"session.summary.title": "Seansi üksikasjad",
"session.summary.noBranch": "Haru puudub",
"session.summary.basedOn": "Põhineb harul {{branch}}",
"workspace.type.local": "kohalik",
"workspace.type.sandbox": "liivakast",
"workspace.create.failed.title": "Tööruumi loomine ebaõnnestus",
@@ -1168,52 +1148,4 @@ export const dict = {
"workspace.reset.archived.many": "{{count}} seanssi arhiivitakse.",
"workspace.reset.note": "See lähtestab tööruumi, et see vastaks vaikeharule.",
"dialog.usageExceeded.dontShowAgain": "Ära kuva enam",
"provider.disconnect.toast.noCredentials.description": "Pakkuja {{provider}} jaoks ei leitud eemaldatavaid mandaate.",
"provider.disconnect.toast.failed.description": "Pakkuja {{provider}} ühenduse katkestamine ebaõnnestus.",
"toast.migration.failed.title": "Andmete migreerimine ebaõnnestus",
"session.background.moveTasks": "Teisalda {{tasks}} taustale",
"session.background.inBackground": "{{tasks}} töötab taustal",
"session.background.combine": "{{first}} ja {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shelli",
"session.background.subagent.one": "{{count}} alamagent",
"session.background.subagent.other": "{{count}} alamagenti",
"command.session.background": "Teisalda taustale",
"session.timeline.notice.finished": "{{actor}} lõpetas",
"session.timeline.notice.failed": "{{actor}} ebaõnnestus",
"session.timeline.notice.cancelled": "{{actor}} tühistati",
"session.timeline.notice.instructionsUpdated": "Juhised uuendatud: {{sources}}",
"session.timeline.notice.restart": "Jätkamine pärast taaskäivitamist",
"settings.tab.preferences": "Eelistused",
"settings.tab.notifications": "Teavitused",
"settings.tab.projects": "Projektid",
"settings.tab.extensions": "Laiendused",
"settings.preferences.description": "Kohandage eelistusi, teemat ja vaikekäitumist",
"settings.appearance.description": "Kohandage teemat ja fonte",
"settings.notifications.description": "Valige, millal teavitusi saada ja helisid kuulda",
"settings.shortcuts.description": "Kohandage levinud toimingute otseteid",
"settings.servers.description": "Hallake serveriühendusi",
"settings.projects.title": "Projektid",
"settings.projects.description": "Hallake selle serveri projektisätteid",
"settings.projects.empty": "Projekte ei leitud",
"settings.projects.server.all": "Kõik serverid",
"settings.mcps.description": "Hallake Model Context Protocoli (MCP) servereid ja tööriistu",
"settings.extensions.description": "Hallake selles serveris saadaolevaid laiendusi",
"settings.extensions.tab.mcps": "MCP-d",
"settings.extensions.tab.skills": "Oskused",
"settings.extensions.availableAll": "Saadaval kõigile projektidele",
"settings.extensions.manageConfig": "Halda failis opencode.json",
"settings.extensions.addSkills": "Kuidas oskusi lisada",
"dialog.server.authenticate.title": "Autendi",
"project.settings.general.description": "Hallake projekti nime ja välimust",
"project.settings.scripts": "Skriptid",
"project.settings.scripts.description": "Seadistage selle projekti skripte",
"project.settings.extensions.description": "Vaadake selle projekti jaoks saadaolevaid laiendusi",
"project.settings.extensions.tab.lsps": "LSP-d",
"project.settings.extensions.added": "Lisatud sellesse projekti",
"project.settings.extensions.shared": "Jagatud kõigi projektidega",
"project.settings.extensions.lsp.detected": "Tuvastatud keeleserverid",
"project.settings.extensions.lsp.description": "Automaatselt tuvastatud failitüüpide järgi",
"project.settings.extensions.setupRequired": "Vajab seadistamist",
"settings.general.section.general": "Üldine",
}
+22 -90
View File
@@ -509,6 +509,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "دسکتاپ {{version}}",
"wsl.onboarding.versionMismatch": "نسخه نصب شده با نسخه برنامه دسکتاپ مطابقت ندارد.",
"wsl.onboarding.adding": "در حال افزودن...",
"help.tabs.toast.ariaLabel": "معرفی Tabs. جلسات کاری و فعال خود را با برگه ها سازماندهی کنید",
"help.tabs.toast.dismiss": "نادیده گرفتن اطلاعات Tabs",
"help.tabs.title": "معرفی Tabs",
"help.tabs.description": "جلسات کاری و فعال خود را با برگه ها سازماندهی کنید",
"help.tabs.date": "14 جولای",
"help.tabs.introduction": "OpenCode Desktop اکنون در اطراف زبانه ها ساخته شده است.",
"help.tabs.sessions":
"یک جلسه جدید در یک برگه شروع کنید یا یک جلسه موجود را از هر یک از پروژه های خود باز کنید. وقتی کار جدیدی را شروع می کنید یک برگه جدید باز کنید و وقتی کارتان تمام شد آن را ببندید.",
"help.tabs.organize":
"باز نگه داشتن چند برگه، سازماندهی جلسات فعال خود را آسان تر می کند. اگر قصد دارید برگه‌ها را به چیزی به یاد ماندنی تغییر دهید.",
"help.tabs.home":
"همه جلسه‌ها و پروژه‌های خود را در صفحه خانه جدید خواهید دید. با انتخاب هر جلسه، آن جلسه در یک زبانه باز می‌شود.",
"help.tabs.persistence": "وقتی برنامه را دوباره باز می‌کنید، برگه‌های شما همچنان باز هستند.",
"help.tabs.worktrees":
"طراحی جدید هنوز از Git Worktrees پشتیبانی نمی کند، به زودی ارائه می شود. بنابراین اگر ترجیح می‌دهید به استفاده از طرح‌بندی قبلی ادامه دهید، می‌توانید بین طرح‌بندی‌ها در تنظیمات جابجا شوید. فقط به خاطر داشته باشید که طرح جدید تا چند هفته دیگر دائمی می شود.",
"server.row.noUsername": "بدون نام کاربری",
"dialog.project.edit.title": "ویرایش پروژه",
"dialog.project.edit.name": "نام",
@@ -952,6 +967,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "بخش‌های ابزار ویرایش را گسترش دهید",
"settings.general.row.editToolPartsExpanded.description":
"بخش‌های ابزار ویرایش، نوشتن و وصله را که به‌طور پیش‌فرض در جدول زمانی گسترش یافته‌اند، نمایش دهید",
"settings.general.row.newInterface.title": "چیدمان جدید",
"settings.general.row.newInterface.badge": "جدید",
"settings.general.row.newInterface.description":
"از برگه ها و طرح خانه جدید استفاده کنید. برای مدت زمان محدودی بین طرح‌بندی‌ها جابه‌جا شوید.",
"settings.general.row.newInterfaceNotice.title": "اکنون در حال استفاده از طرح بندی جدید هستید",
"settings.general.row.newInterfaceNotice.description": "طرح قبلی دیگر در دسترس نیست",
"settings.general.row.newInterfaceNotice.dismiss": "رد کردن",
"settings.general.row.pinchZoom.title": "برای بزرگنمایی، خرج کردن",
"settings.general.row.pinchZoom.description": "به ژست‌های پیمایشی Ctrl و حرکت‌های پد لمسی اجازه بزرگ‌نمایی بدهید",
"settings.general.row.wayland.title": "از Wayland بومی استفاده کنید",
@@ -1130,94 +1152,4 @@ export const dict = {
"workspace.reset.archived.many": "جلسات {{count}} بایگانی خواهد شد.",
"workspace.reset.note": "این کار فضای کاری را برای مطابقت با شاخه پیش فرض بازنشانی می کند.",
"dialog.usageExceeded.dontShowAgain": "دیگر نشان نده",
"toast.migration.failed.title": "انتقال داده‌ها ناموفق بود",
"session.background.moveTasks": "انتقال \u2068{{tasks}}\u2069 به پس‌زمینه",
"session.background.inBackground": "اجرای \u2068{{tasks}}\u2069 در پس‌زمینه",
"session.background.combine": "\u2068{{first}}\u2069 و \u2068{{second}}\u2069",
"session.background.shell.one": "{{count}} پوسته",
"session.background.shell.other": "{{count}} پوسته",
"session.background.subagent.one": "{{count}} عامل فرعی",
"session.background.subagent.other": "{{count}} عامل فرعی",
"command.session.background": "انتقال به پس‌زمینه",
"session.timeline.notice.finished": "اجرای \u2068{{actor}}\u2069 پایان یافت",
"session.timeline.notice.failed": "اجرای \u2068{{actor}}\u2069 ناموفق بود",
"session.timeline.notice.cancelled": "اجرای \u2068{{actor}}\u2069 لغو شد",
"settings.tab.preferences": "ترجیحات",
"settings.tab.notifications": "اعلان‌ها",
"settings.tab.projects": "پروژه‌ها",
"settings.tab.extensions": "افزونه‌ها",
"settings.preferences.description": "سفارشی‌سازی ترجیحات، پوسته و رفتار پیش‌فرض",
"settings.appearance.description": "سفارشی‌سازی پوسته و قلم‌ها",
"settings.notifications.description": "انتخاب زمان دریافت اعلان‌ها و پخش صداها",
"settings.shortcuts.description": "سفارشی‌سازی میانبرهای کارهای رایج",
"settings.servers.description": "مدیریت اتصال‌های سرور",
"settings.projects.title": "پروژه‌ها",
"settings.projects.description": "مدیریت تنظیمات پروژه در این سرور",
"settings.projects.empty": "پروژه‌ای یافت نشد",
"settings.projects.server.all": "همه سرورها",
"settings.mcps.description": "مدیریت سرورها و ابزارهای پروتکل زمینه مدل (MCP)",
"settings.extensions.description": "مدیریت افزونه‌های موجود در این سرور",
"settings.extensions.tab.mcps": "MCPها",
"settings.extensions.tab.skills": "مهارت‌ها",
"settings.extensions.availableAll": "در دسترس همه پروژه‌ها",
"settings.extensions.manageConfig": "مدیریت در opencode.json",
"settings.extensions.addSkills": "نحوه افزودن مهارت‌ها",
"dialog.server.authenticate.title": "احراز هویت",
"project.settings.general.description": "مدیریت نام و ظاهر پروژه",
"project.settings.scripts": "اسکریپت‌ها",
"project.settings.scripts.description": "پیکربندی اسکریپت‌های این پروژه",
"project.settings.extensions.description": "مشاهده افزونه‌های موجود برای این پروژه",
"project.settings.extensions.tab.lsps": "LSPها",
"project.settings.extensions.added": "افزوده‌شده به این پروژه",
"project.settings.extensions.shared": "مشترک با همه پروژه‌ها",
"project.settings.extensions.lsp.detected": "سرورهای زبان شناسایی‌شده",
"project.settings.extensions.lsp.description": "شناسایی خودکار بر اساس نوع فایل‌ها",
"project.settings.extensions.setupRequired": "نیازمند راه‌اندازی",
"settings.general.section.general": "عمومی",
"common.viewAll": "مشاهده همه",
"session.new.workspace.local.tooltip": "استفاده از نسخه کاری فعلی",
"session.new.workspace.new.tooltip": "ایجاد نسخه کاری ایزوله",
"session.new.workspace.fromBranch": "از \u2068{{branch}}\u2069",
"session.new.workspace.trigger.tooltip": "محل اجرای جلسه را انتخاب کنید",
"session.new.workspace.search.placeholder": "جستجوی فضاهای کاری",
"settings.tab.workspaces": "فضاهای کاری",
"settings.workspaces.filter.all": "همه پروژه‌ها",
"settings.workspaces.empty": "فضای کاری وجود ندارد",
"settings.workspaces.count.one": "{{count}} فضای کاری",
"settings.workspaces.count.other": "{{count}} فضای کاری",
"settings.workspaces.sessions.one": "{{count}} جلسه در \u2068{{project}}\u2069",
"settings.workspaces.sessions.other": "{{count}} جلسه در \u2068{{project}}\u2069",
"settings.workspaces.lastActiveSession": "آخرین جلسه فعال",
"settings.workspaces.deleteAll": "حذف همه فضاهای کاری",
"settings.workspaces.deleteAll.confirm": "همه {{count}} فضای کاری حذف شوند؟",
"settings.workspaces.delete.warning":
"شاخه و پوشه فضای کاری برای همیشه حذف می‌شوند؛ از جمله تغییرات ادغام‌نشده‌ای که در زیر نشان داده شده‌اند.",
"settings.workspaces.deleteAll.warning":
"{{count}} فضای کاری انتخاب‌شده در \u2068{{project}}\u2069 تنها در صورتی برای همیشه حذف می‌شوند که همگی پاک و غیرفعال باشند و جلسه پیوندشده‌ای نداشته باشند.",
"settings.workspaces.delete.blocked.active": "فضای کاری فعال را نمی‌توان حذف کرد.",
"settings.workspaces.delete.blocked.linked":
"جلسه‌های پیوندشده باقی می‌مانند، اما پوشه کاری آن‌ها برای همیشه حذف می‌شود.",
"settings.workspaces.default.title": "محیط پیش‌فرض",
"settings.workspaces.default.description": "محل شروع جلسه‌های جدید را انتخاب کنید",
"settings.workspaces.default.lastUsed": "آخرین مورد استفاده در هر پروژه",
"settings.workspaces.default.local": "پوشه محلی",
"settings.workspaces.default.new": "فضای کاری جدید",
"workspace.move.title": "انتقال به فضای کاری",
"workspace.move.menu.title": "انتقال جلسه به",
"workspace.move.failed": "انتقال جلسه ناموفق بود",
"workspace.lifecycle.creating": "در حال ایجاد فضای کاری",
"workspace.lifecycle.created": "فضای کاری ایجاد شد",
"workspace.lifecycle.starting": "در حال شروع جلسه",
"workspace.onboarding.title": "جداسازی جلسه‌ها با فضاهای کاری",
"workspace.onboarding.description": "هر جلسه نسخه کاری خودش را دارد، بنابراین چیزی با مخزن محلی شما تداخل نمی‌کند",
"workspace.lifecycle.moving": "در حال انتقال به فضای کاری",
"workspace.lifecycle.set": "فضای کاری تنظیم شد",
"session.summary.title": "جزئیات جلسه",
"session.summary.noBranch": "بدون شاخه",
"session.summary.basedOn": "بر پایه \u2068{{branch}}\u2069",
"provider.disconnect.toast.noCredentials.description":
"اطلاعات ورود قابل حذفی برای \u2068{{provider}}\u2069 یافت نشد.",
"provider.disconnect.toast.failed.description": "قطع اتصال از \u2068{{provider}}\u2069 ناموفق بود.",
"session.timeline.notice.instructionsUpdated": "دستورالعمل‌ها به‌روزرسانی شدند: \u2068{{sources}}\u2069",
"session.timeline.notice.restart": "ادامه پس از راه‌اندازی مجدد",
}
+22 -91
View File
@@ -870,6 +870,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Laajenna muokkaustyökalun osat",
"settings.general.row.editToolPartsExpanded.description":
"Näytä muokkaus-, kirjoitus- ja paikkaustyökalun osat oletusarvoisesti laajennettuina aikajanalla",
"settings.general.row.newInterface.title": "Uusi asettelu",
"settings.general.row.newInterface.badge": "Uusi",
"settings.general.row.newInterface.description":
"Käytä uusia välilehtiä ja etusivun asettelua. Vaihda asettelujen välillä rajoitetun ajan.",
"settings.general.row.newInterfaceNotice.title": "Käytät nyt uutta asettelua",
"settings.general.row.newInterfaceNotice.description": "Edellinen asettelu ei ole enää käytettävissä",
"settings.general.row.newInterfaceNotice.dismiss": "Hylkää",
"settings.general.row.pinchZoom.title": "Zoomaa nipistämällä",
"settings.general.row.pinchZoom.description": "Salli zoomaus ohjauslevyn nipistyseleellä ja Ctrl-vierityksellä",
"settings.general.row.wayland.title": "Käytä alkuperäistä Waylandia",
@@ -1143,95 +1150,19 @@ export const dict = {
"desktop.picker.error.notSelected": "Tiedostovalitsimessa ei valittu tiedostoa",
"desktop.picker.error.sizeLimit": "Valitut liitteet ylittävät {{limit}} Mt:n rajan",
"command.logs.export": "Vie lokit",
"provider.disconnect.toast.noCredentials.description":
"{{provider}}:lle ei löytynyt irrotettavia kirjautumistietoja.",
"provider.disconnect.toast.failed.description": "{{provider}}:n irrottaminen epäonnistui.",
"toast.migration.failed.title": "Tietojen siirto epäonnistui",
"session.background.moveTasks": "Siirrä {{tasks}} taustalle",
"session.background.inBackground": "{{tasks}} käynnissä taustalla",
"session.background.combine": "{{first}} ja {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shelliä",
"session.background.subagent.one": "{{count}} aliagentti",
"session.background.subagent.other": "{{count}} aliagenttia",
"command.session.background": "Siirrä taustalle",
"session.timeline.notice.finished": "{{actor}} valmis",
"session.timeline.notice.failed": "{{actor}} epäonnistui",
"session.timeline.notice.cancelled": "{{actor}} peruutettu",
"session.timeline.notice.instructionsUpdated": "Ohjeet päivitetty: {{sources}}",
"session.timeline.notice.restart": "Jatkuu uudelleenkäynnistyksen jälkeen",
"settings.tab.preferences": "Asetukset",
"settings.tab.notifications": "Ilmoitukset",
"settings.tab.projects": "Projektit",
"settings.tab.extensions": "Laajennukset",
"settings.preferences.description": "Mukauta asetuksia ja teemaa ja oletuskäyttäytymistä",
"settings.appearance.description": "Mukauta teemaa ja fontteja",
"settings.notifications.description": "Valitse, milloin haluat vastaanottaa ilmoituksia ja kuulla ääniä",
"settings.shortcuts.description": "Mukauta yleisten toimintojen pikakuvakkeita",
"settings.servers.description": "Hallinnoi palvelinyhteyksiä",
"settings.projects.title": "Projektit",
"settings.projects.description": "Hallinnoi tämän palvelimen projektiasetuksia",
"settings.projects.empty": "Projekteja ei löytynyt",
"settings.projects.server.all": "Kaikki palvelimet",
"settings.mcps.description": "Hallitse Model Context Protocol (MCP) -palvelimia ja -työkaluja",
"settings.extensions.description": "Hallinnoi tällä palvelimella saatavilla olevia laajennuksia",
"settings.extensions.tab.mcps": "MCP:t",
"settings.extensions.tab.skills": "Taidot",
"settings.extensions.availableAll": "Saatavilla kaikkiin projekteihin",
"settings.extensions.manageConfig": "Hallinnoi osoitteessa opencode.json",
"settings.extensions.addSkills": "Kuinka lisätä taitoja",
"dialog.server.authenticate.title": "Todentaa",
"project.settings.general.description": "Hallitse projektin nimeä ja ulkoasua",
"project.settings.scripts": "Käsikirjoitukset",
"project.settings.scripts.description": "Määritä komentosarjat tälle projektille",
"project.settings.extensions.description": "Näytä tämän projektin saatavilla olevat laajennukset",
"project.settings.extensions.tab.lsps": "LSP:t",
"project.settings.extensions.added": "Lisätty tähän projektiin",
"project.settings.extensions.shared": "Jaettu kaikkien projektien kanssa",
"project.settings.extensions.lsp.detected": "Havaitut kielipalvelimet",
"project.settings.extensions.lsp.description": "Havaittu automaattisesti tiedostotyypeistä",
"project.settings.extensions.setupRequired": "Asennus vaaditaan",
"settings.general.section.general": "Kenraali",
"common.viewAll": "Näytä kaikki",
"session.new.workspace.local.tooltip": "Käytä nykyistä checkoutia",
"session.new.workspace.new.tooltip": "Luo erillinen checkout",
"session.new.workspace.fromBranch": "alkaen {{branch}}",
"session.new.workspace.trigger.tooltip": "Valitse, missä istunto suoritetaan",
"session.new.workspace.search.placeholder": "Hae työtiloja",
"settings.tab.workspaces": "Työtilat",
"settings.workspaces.filter.all": "Kaikki projektit",
"settings.workspaces.empty": "Ei työtiloja",
"settings.workspaces.count.one": "{{count}} työtila",
"settings.workspaces.count.other": "{{count}} työtilat",
"settings.workspaces.sessions.one": "{{count}}-istunto {{project}}:ssä",
"settings.workspaces.sessions.other": "{{count}}-istunnot {{project}}:ssä",
"settings.workspaces.lastActiveSession": "Viimeinen aktiivinen istunto",
"settings.workspaces.deleteAll": "Poista kaikki työtilat",
"settings.workspaces.deleteAll.confirm": "Poistetaanko kaikki {{count}}-työtilat?",
"settings.workspaces.delete.warning":
"Työtilan hakemisto ja haara poistetaan pysyvästi, mukaan lukien alla näkyvät yhdistämättömät muutokset.",
"settings.workspaces.deleteAll.warning":
"{{count}}:n valitut työtilat {{project}}:ssä poistetaan pysyvästi vain, jos jokainen on puhdas, ei-aktiivinen eikä siinä ole linkitettyjä istuntoja.",
"settings.workspaces.delete.blocked.active": "Aktiivista työtilaa ei voi poistaa.",
"settings.workspaces.delete.blocked.linked":
"Linkitetyt istunnot säilyvät, mutta niiden työhakemisto poistetaan pysyvästi.",
"settings.workspaces.default.title": "Oletusympäristö",
"settings.workspaces.default.description": "Valitse, missä uudet istunnot alkavat",
"settings.workspaces.default.lastUsed": "Viimeksi käytetty projektia kohti",
"settings.workspaces.default.local": "Paikallinen hakemisto",
"settings.workspaces.default.new": "Uusi työtila",
"workspace.move.title": "Siirrä työtilaan",
"workspace.move.menu.title": "Siirrä istunto kohteeseen",
"workspace.move.failed": "Istunnon siirtäminen epäonnistui",
"workspace.lifecycle.creating": "Työtilan luominen",
"workspace.lifecycle.created": "Työtila luotu",
"workspace.lifecycle.starting": "Aloitetaan istunto",
"workspace.onboarding.title": "Eristä istunnot työtiloilla",
"workspace.onboarding.description": "Jokainen saa oman checkoutin, joten mikään ei häiritse paikallista säilöäsi",
"workspace.lifecycle.moving": "Siirretään työtilaan",
"workspace.lifecycle.set": "Työtila asetettu",
"session.summary.title": "Istunnon tiedot",
"session.summary.noBranch": "Ei haaraa",
"session.summary.basedOn": "Perustuu haaraan {{branch}}",
"help.tabs.toast.ariaLabel": "Esittelyssä välilehdet. Järjestä työsi ja aktiiviset istuntosi välilehtien avulla",
"help.tabs.toast.dismiss": "Sulje välilehtien tiedot",
"help.tabs.title": "Esittelyssä välilehdet",
"help.tabs.description": "Järjestä työsi ja aktiiviset istuntosi välilehtien avulla",
"help.tabs.date": "14. heinäkuuta",
"help.tabs.introduction": "OpenCode Desktop perustuu nyt välilehtiin.",
"help.tabs.sessions":
"Aloita uusi istunto välilehdessä tai avaa olemassa oleva istunto mistä tahansa projektistasi. Avaa uusi välilehti, kun aloitat jotain uutta, ja sulje se, kun olet valmis.",
"help.tabs.organize":
"Muutaman välilehden pitäminen avoinna helpottaa aktiivisten istuntojen järjestämistä. Nimeä välilehdet helposti muistettaviksi, jos aiot pitää ne avoinna.",
"help.tabs.home":
"Kaikki istuntosi ja projektisi ovat uudessa etusivunäkymässä. Istunnon valitseminen avaa sen välilehteen.",
"help.tabs.persistence": "Kun avaat sovelluksen uudelleen, välilehtesi ovat yhä avoinna.",
"help.tabs.worktrees":
"Uusi ulkoasu ei vielä tue Git-työpuita, mutta tuki on tulossa pian. Jos haluat jatkaa aiemman ulkoasun käyttöä, voit vaihtaa ulkoasua asetuksissa. Huomaa kuitenkin, että uudesta ulkoasusta tulee pysyvä muutaman viikon kuluttua.",
}
+22 -90
View File
@@ -508,6 +508,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "skriviborð {{version}}",
"wsl.onboarding.versionMismatch": "Innsetta útgávan passar ikki til skriviborðsappiútgávuna.",
"wsl.onboarding.adding": "Leggi til...",
"help.tabs.toast.ariaLabel": "Innleiðing av flikum. Skipa títt arbeiði og virknu setur við flikum",
"help.tabs.toast.dismiss": "Vís frá upplýsingum um fliparnar",
"help.tabs.title": "Innleiðing av flikum",
"help.tabs.description": "Skipa títt arbeiði og virknu setur við flikum",
"help.tabs.date": "14. juli Kl.",
"help.tabs.introduction": "OpenCode Skrivaraborð er nú bygt rundan um flikar.",
"help.tabs.sessions":
"Byrja eina nýggja setu í einum flipa, ella opna eina verandi setu frá nøkrum av tínum verkætlanum. Lat ein nýggjan flipa upp, tá tú byrjar okkurt nýtt, og lat hann aftur, tá tú ert liðugur.",
"help.tabs.organize":
"At hava nakrar fáar flikar opnar ger tað lættari at skipa tínar virknu setur. Umnevna fliparnar til okkurt minniligt, um tú ætlar at hava teir við.",
"help.tabs.home":
"Tú finnur allar setur og verkætlanir á nýggja heimaskíggjanum. Velur tú eina setu, verður hon latin upp í einum flipa.",
"help.tabs.persistence": "Tá tú letur appina upp aftur, eru tínir flikar enn opnir.",
"help.tabs.worktrees":
"Nýggja sniðið stuðlar ikki Git Worktrees enn, tað kemur skjótt. So um tú heldur vilt halda fram at brúka fyrru uppsetingina, kanst tú skifta millum uppsetingar í Innstillingum. Havi bara í huga, at nýggja uppsetingin verður varandi um nakrar vikur.",
"server.row.noUsername": "einki brúkaranavn",
"dialog.project.edit.title": "Rætta verkætlan",
"dialog.project.edit.name": "Navn",
@@ -952,6 +967,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Víðka rætta tólpartar",
"settings.general.row.editToolPartsExpanded.description":
"Vís rætta, skriva og lappa tólpartar víðkaðir sum standard á tíðarlinjuni",
"settings.general.row.newInterface.title": "Nýggj uppseting",
"settings.general.row.newInterface.badge": "Nýtt",
"settings.general.row.newInterface.description":
"Brúka nýggju fliparnar og heimauppsetingina. Skift millum uppsetingar í eina avmarkaða tíð.",
"settings.general.row.newInterfaceNotice.title": "Tú brúkar nú nýggja uppseting",
"settings.general.row.newInterfaceNotice.description": "Fyrra uppsetingin er ikki tøk longur",
"settings.general.row.newInterfaceNotice.dismiss": "Loysa úr starvi",
"settings.general.row.pinchZoom.title": "Klíp fyri at zooma",
"settings.general.row.pinchZoom.description": "Loyva trackpad-klípi og Ctrl-rullubendingum at zooma",
"settings.general.row.wayland.title": "Brúka innfødd Wayland",
@@ -1104,47 +1126,6 @@ export const dict = {
"session.delete.confirm": 'Strika setuna "{{name}}"?',
"session.delete.button": "Strika setu",
"workspace.new": "Nýtt workspace",
"common.viewAll": "Vís øll",
"session.new.workspace.local.tooltip": "Brúka núverandi checkout",
"session.new.workspace.new.tooltip": "Stovna avbyrgdan checkout",
"session.new.workspace.fromBranch": "frá {{branch}}",
"session.new.workspace.trigger.tooltip": "Vel, hvar setan skal koyra",
"session.new.workspace.search.placeholder": "Leita eftir workspaces",
"settings.tab.workspaces": "Workspaces",
"settings.workspaces.filter.all": "Allar verkætlanir",
"settings.workspaces.empty": "Eingi workspaces",
"settings.workspaces.count.one": "{{count}} workspace",
"settings.workspaces.count.other": "{{count}} workspaces",
"settings.workspaces.sessions.one": "{{count}} seta í {{project}}",
"settings.workspaces.sessions.other": "{{count}} setur í {{project}}",
"settings.workspaces.lastActiveSession": "Seinasta virkna seta",
"settings.workspaces.deleteAll": "Strika øll workspaces",
"settings.workspaces.deleteAll.confirm": "Strika øll {{count}} workspaces?",
"settings.workspaces.delete.warning":
"Workspace-mappan og greinin verða strikaðar fyri altíð, eisini ósamanlagdar broytingar, sum síggjast niðanfyri.",
"settings.workspaces.deleteAll.warning":
"Tey {{count}} valdu workspaces í {{project}} verða bert strikað fyri altíð, um øll eru rein, óvirkin og uttan knýttar setur.",
"settings.workspaces.delete.blocked.active": "Virkna workspace kann ikki strikast.",
"settings.workspaces.delete.blocked.linked":
"Knýttar setur verða varðveittar, men arbeiðsmappan hjá teimum verður strikað fyri altíð.",
"settings.workspaces.default.title": "Forsett umhvørvi",
"settings.workspaces.default.description": "Vel, hvar nýggjar setur byrja",
"settings.workspaces.default.lastUsed": "Seinast brúkt fyri hvørja verkætlan",
"settings.workspaces.default.local": "Lokal mappa",
"settings.workspaces.default.new": "Nýtt workspace",
"workspace.move.title": "Flyt til workspace",
"workspace.move.menu.title": "Flyt setu til",
"workspace.move.failed": "Tað eydnaðist ikki at flyta setuna",
"workspace.lifecycle.creating": "Stovnar workspace",
"workspace.lifecycle.created": "Workspace stovnað",
"workspace.lifecycle.starting": "Byrjar setu",
"workspace.onboarding.title": "Avbyrg setur við workspaces",
"workspace.onboarding.description": "Hvør seta fær sítt egna checkout, so einki órógvar lokalu goymsluna",
"workspace.lifecycle.moving": "Flytur til workspace",
"workspace.lifecycle.set": "Workspace sett",
"session.summary.title": "Setuupplýsingar",
"session.summary.noBranch": "Eingin grein",
"session.summary.basedOn": "Grundað á {{branch}}",
"workspace.type.local": "lokalt",
"workspace.type.sandbox": "sandkassi",
"workspace.create.failed.title": "Tað eydnaðist ikki at stovna workspace",
@@ -1170,53 +1151,4 @@ export const dict = {
"workspace.reset.archived.many": "{{count}} setur verða arkiveraðar.",
"workspace.reset.note": "Hetta nullstillar workspace til at passa til forsettu greinina.",
"dialog.usageExceeded.dontShowAgain": "Vís ikki aftur",
"provider.disconnect.toast.noCredentials.description":
"Eingi trúnaðarupplýsingar, ið kunnu strikast, funnar fyri {{provider}}.",
"provider.disconnect.toast.failed.description": "Tað eydnaðist ikki at slíta sambandið við {{provider}}.",
"toast.migration.failed.title": "Dataflytingin miseydnaðist",
"session.background.moveTasks": "Flyt {{tasks}} í bakgrundina",
"session.background.inBackground": "Koyrir {{tasks}} í bakgrundini",
"session.background.combine": "{{first}} og {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shell",
"session.background.subagent.one": "{{count}} undiragentur",
"session.background.subagent.other": "{{count}} undiragentar",
"command.session.background": "Flyt í bakgrundina",
"session.timeline.notice.finished": "{{actor}} varð liðugur",
"session.timeline.notice.failed": "{{actor}} miseydnaðist",
"session.timeline.notice.cancelled": "{{actor}} varð avlýstur",
"session.timeline.notice.instructionsUpdated": "Vegleiðingar dagførdar: {{sources}}",
"session.timeline.notice.restart": "Heldur fram eftir endurbyrjan",
"settings.tab.preferences": "Sertokkar",
"settings.tab.notifications": "Fráboðanir",
"settings.tab.projects": "Verkætlanir",
"settings.tab.extensions": "Víðkanir",
"settings.preferences.description": "Tillaga sertokkar, tema og vanliga atferð",
"settings.appearance.description": "Tillaga tema og skriftsløg",
"settings.notifications.description": "Vel nær tú vilt fáa fráboðanir og hoyra ljóð",
"settings.shortcuts.description": "Tillaga snarvegir til vanligar gerðir",
"settings.servers.description": "Umsit ambætarasambond",
"settings.projects.title": "Verkætlanir",
"settings.projects.description": "Umsit verkætlanarinnstillingar á hesum ambætaranum",
"settings.projects.empty": "Ongar verkætlanir funnar",
"settings.projects.server.all": "Allir ambætarar",
"settings.mcps.description": "Umsit Model Context Protocol (MCP) ambætarar og tól",
"settings.extensions.description": "Umsit víðkanir, sum eru tøkar á hesum ambætaranum",
"settings.extensions.tab.mcps": "MCP-ar",
"settings.extensions.tab.skills": "Førleikar",
"settings.extensions.availableAll": "Tøkt fyri allar verkætlanir",
"settings.extensions.manageConfig": "Umsit í opencode.json",
"settings.extensions.addSkills": "Hvussu førleikar verða lagdir afturat",
"dialog.server.authenticate.title": "Samgilda",
"project.settings.general.description": "Umsit verkætlanarnavn og útsjónd",
"project.settings.scripts": "Skript",
"project.settings.scripts.description": "Set skript upp fyri hesa verkætlanina",
"project.settings.extensions.description": "Vís víðkanir, sum eru tøkar fyri hesa verkætlanina",
"project.settings.extensions.tab.lsps": "LSP-ar",
"project.settings.extensions.added": "Lagt afturat hesi verkætlanini",
"project.settings.extensions.shared": "Deilt við allar verkætlanir",
"project.settings.extensions.lsp.detected": "Uppdagaðir málambætarar",
"project.settings.extensions.lsp.description": "Sjálvvirkandi uppdagað eftir fíluslagi",
"project.settings.extensions.setupRequired": "Uppseting krevst",
"settings.general.section.general": "Alment",
}
+23 -96
View File
@@ -515,6 +515,22 @@ export const dict = {
"wsl.onboarding.desktopVersion": "application de bureau {{version}}",
"wsl.onboarding.versionMismatch": "La version installée ne correspond pas à celle de l'application de bureau.",
"wsl.onboarding.adding": "Ajout...",
"help.tabs.toast.ariaLabel":
"Présentation des onglets. Organisez votre travail et vos sessions actives à l'aide d'onglets",
"help.tabs.toast.dismiss": "Ignorer les informations sur les onglets",
"help.tabs.title": "Présentation des onglets",
"help.tabs.description": "Organisez votre travail et vos sessions actives à l'aide d'onglets",
"help.tabs.date": "14 juillet",
"help.tabs.introduction": "OpenCode Desktop s'articule désormais autour d'onglets.",
"help.tabs.sessions":
"Démarrez une nouvelle session dans un onglet ou ouvrez une session existante depuis l'un de vos projets. Ouvrez un nouvel onglet lorsque vous commencez une nouvelle tâche et fermez-le une fois celle-ci terminée.",
"help.tabs.organize":
"Garder quelques onglets ouverts facilite l'organisation de vos sessions actives. Si vous comptez les conserver, renommez-les pour pouvoir les reconnaître facilement.",
"help.tabs.home":
"Vous trouverez toutes vos sessions et tous vos projets sur le nouvel écran d'accueil. La sélection d'une session l'ouvre dans un onglet.",
"help.tabs.persistence": "Lorsque vous rouvrez l'application, vos onglets sont toujours ouverts.",
"help.tabs.worktrees":
"La nouvelle interface ne prend pas encore en charge les arbres de travail Git, mais cette fonctionnalité sera bientôt disponible. Si vous préférez continuer à utiliser la mise en page précédente, vous pouvez changer de mise en page dans les paramètres. N'oubliez pas que la nouvelle mise en page deviendra définitive dans quelques semaines.",
"dialog.project.edit.title": "Modifier le projet",
"dialog.project.edit.name": "Nom",
"dialog.project.edit.icon": "Icône",
@@ -885,6 +901,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Développer les parties de l'outil edit",
"settings.general.row.editToolPartsExpanded.description":
"Afficher les parties des outils edit, write et patch développées par défaut dans la chronologie",
"settings.general.row.newInterface.title": "Nouvelle mise en page",
"settings.general.row.newInterface.badge": "Nouveau",
"settings.general.row.newInterface.description":
"Utilisez les nouveaux onglets et la mise en page de l'accueil. Vous pouvez alterner entre les mises en page pendant une durée limitée.",
"settings.general.row.newInterfaceNotice.title": "Vous utilisez maintenant la nouvelle mise en page",
"settings.general.row.newInterfaceNotice.description": "La mise en page précédente n'est plus disponible",
"settings.general.row.newInterfaceNotice.dismiss": "Ignorer",
"settings.general.row.pinchZoom.title": "Pincer pour zoomer",
"settings.general.row.pinchZoom.description":
"Autoriser les gestes de pincement du pavé tactile et Ctrl-défilement pour zoomer",
@@ -1173,100 +1196,4 @@ export const dict = {
"titlebar.update": "Mettre à jour",
"titlebar.updateVersion": "Mettre à jour {{version}}",
"provider.disconnect.toast.noCredentials.description":
"Aucune information d'identification amovible trouvée pour {{provider}}.",
"provider.disconnect.toast.failed.description": "Échec de la déconnexion de {{provider}}.",
"toast.migration.failed.title": "Échec de la migration des données",
"session.background.moveTasks": "Déplacer {{tasks}} en arrière-plan",
"session.background.inBackground": "Exécution de {{tasks}} en arrière-plan",
"session.background.combine": "{{first}} et {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shells",
"session.background.subagent.one": "{{count}} sous-agent",
"session.background.subagent.other": "{{count}} sous-agents",
"command.session.background": "Passer en arrière-plan",
"session.timeline.notice.finished": "{{actor}} terminé",
"session.timeline.notice.failed": "Échec du {{actor}}",
"session.timeline.notice.cancelled": "{{actor}} annulé",
"session.timeline.notice.instructionsUpdated": "Instructions mises à jour : {{sources}}",
"session.timeline.notice.restart": "Continuer après le redémarrage",
"settings.tab.preferences": "Préférences",
"settings.tab.notifications": "Notifications",
"settings.tab.projects": "Projets",
"settings.tab.extensions": "Extensions",
"settings.preferences.description": "Personnaliser les préférences, le thème et le comportement par défaut",
"settings.appearance.description": "Personnaliser le thème et les polices",
"settings.notifications.description": "Choisissez quand recevoir des notifications et entendre des sons",
"settings.shortcuts.description": "Personnaliser les raccourcis pour les actions courantes",
"settings.servers.description": "Gérer les connexions au serveur",
"settings.projects.title": "Projets",
"settings.projects.description": "Gérer les paramètres du projet sur ce serveur",
"settings.projects.empty": "Aucun projet trouvé",
"settings.projects.server.all": "Tous les serveurs",
"settings.mcps.description": "Gérer les serveurs et les outils Model Context Protocol (MCP)",
"settings.extensions.description": "Gérer les extensions disponibles sur ce serveur",
"settings.extensions.tab.mcps": "MCP",
"settings.extensions.tab.skills": "Compétences",
"settings.extensions.availableAll": "Disponible pour tous les projets",
"settings.extensions.manageConfig": "Gérer dans opencode.json",
"settings.extensions.addSkills": "Comment ajouter des compétences",
"dialog.server.authenticate.title": "Authentifier",
"project.settings.general.description": "Gérer le nom et l'apparence du projet",
"project.settings.scripts": "Scripts",
"project.settings.scripts.description": "Configurer des scripts pour ce projet",
"project.settings.extensions.description": "Afficher les extensions disponibles pour ce projet",
"project.settings.extensions.tab.lsps": "LSP",
"project.settings.extensions.added": "Ajouté à ce projet",
"project.settings.extensions.shared": "Partagé avec tous les projets",
"project.settings.extensions.lsp.detected": "Serveurs de langue détectés",
"project.settings.extensions.lsp.description": "Détection automatique à partir des types de fichiers",
"project.settings.extensions.setupRequired": "Configuration requise",
"settings.general.section.general": "Général",
"common.viewAll": "Voir tout",
"session.new.workspace.local.tooltip": "Utiliser le checkout actuel",
"session.new.workspace.new.tooltip": "Créer un checkout isolé",
"session.new.workspace.fromBranch": "de {{branch}}",
"session.new.workspace.trigger.tooltip": "Sélectionnez où exécuter la session",
"session.new.workspace.search.placeholder": "Rechercher des espaces de travail",
"settings.tab.workspaces": "Espaces de travail",
"settings.workspaces.filter.all": "Tous les projets",
"settings.workspaces.empty": "Aucun espace de travail",
"settings.workspaces.count.one": "Espace de travail {{count}}",
"settings.workspaces.count.other": "Espaces de travail {{count}}",
"settings.workspaces.sessions.one": "Séance {{count}} dans {{project}}",
"settings.workspaces.sessions.other": "Séances {{count}} dans {{project}}",
"settings.workspaces.lastActiveSession": "Dernière session active",
"settings.workspaces.deleteAll": "Supprimer tous les espaces de travail",
"settings.workspaces.deleteAll.confirm": "Supprimer tous les espaces de travail {{count}} ?",
"settings.workspaces.delete.warning":
"Le répertoire et la branche de l'espace de travail seront définitivement supprimés, y compris toutes les modifications non fusionnées indiquées ci-dessous.",
"settings.workspaces.deleteAll.warning":
"Les espaces de travail sélectionnés {{count}} dans {{project}} seront définitivement supprimés uniquement si chacun est propre, inactif et n'a aucune session liée.",
"settings.workspaces.delete.blocked.active": "L'espace de travail actif ne peut pas être supprimé.",
"settings.workspaces.delete.blocked.linked":
"Les sessions liées resteront, mais leur répertoire de travail sera définitivement supprimé.",
"settings.workspaces.default.title": "Environnement par défaut",
"settings.workspaces.default.description": "Choisissez où commencent les nouvelles sessions",
"settings.workspaces.default.lastUsed": "Dernière utilisation par projet",
"settings.workspaces.default.local": "Annuaire local",
"settings.workspaces.default.new": "Nouvel espace de travail",
"workspace.move.title": "Déplacer vers l'espace de travail",
"workspace.move.menu.title": "Déplacer la séance vers",
"workspace.move.failed": "Échec du déplacement de la session",
"workspace.lifecycle.creating": "Création d'un espace de travail",
"workspace.lifecycle.created": "Espace de travail créé",
"workspace.lifecycle.starting": "Démarrage de la session",
"workspace.onboarding.title": "Isoler les sessions avec des espaces de travail",
"workspace.onboarding.description":
"Chacun a sa propre extraction, donc rien n'interfère avec votre référentiel local",
"workspace.lifecycle.moving": "Passer à l'espace de travail",
"workspace.lifecycle.set": "Espace de travail défini",
"session.summary.title": "Détails de la session",
"session.summary.noBranch": "Aucune branche",
"session.summary.basedOn": "Basé sur {{branch}}",
"session.background.shell.many": "{{count}} shells",
"session.background.subagent.many": "{{count}} sous-agents",
"settings.workspaces.count.many": "{{count}} espaces de travail",
"settings.workspaces.sessions.many": "{{count}} sessions dans {{project}}",
}
+20 -6
View File
@@ -505,6 +505,20 @@ export const dict = {
"wsl.onboarding.desktopVersion": "גרסת שולחן העבודה: {{version}}",
"wsl.onboarding.versionMismatch": "הגרסה המותקנת אינה תואמת את גרסת האפליקציה לשולחן העבודה.",
"wsl.onboarding.adding": "מוסיף...",
"help.tabs.toast.ariaLabel": "היכרות עם כרטיסיות. ארגן את העבודה וההפעלות הפעילות שלך עם כרטיסיות",
"help.tabs.toast.dismiss": "סגור מידע על כרטיסיות",
"help.tabs.title": "היכרות עם כרטיסיות",
"help.tabs.description": "ארגן את העבודה וההפעלות הפעילות שלך עם כרטיסיות",
"help.tabs.date": "14 ביולי",
"help.tabs.introduction": "OpenCode Desktop בנוי כעת סביב כרטיסיות.",
"help.tabs.sessions":
"התחל הפעלה חדשה בכרטיסייה, או פתח הפעלה קיימת מכל אחד מהפרויקטים שלך. פתח כרטיסייה חדשה כשאתה מתחיל משהו חדש, וסגור אותה כשתסיים.",
"help.tabs.organize":
"שמירה על מספר כרטיסיות פתוחות מקלה על ארגון ההפעלות הפעילות שלך. שנה את שמות הכרטיסיות למשהו בלתי נשכח אם אתה מתכנן לשמור אותן בסביבה.",
"help.tabs.home": "תמצא את כל ההפעלות והפרויקטים שלך במסך הבית החדש. בחירת הפעלה פותחת אותה בכרטיסייה.",
"help.tabs.persistence": "כאשר אתה פותח מחדש את האפליקציה, הכרטיסיות שלך עדיין פתוחות.",
"help.tabs.worktrees":
"העיצוב החדש עדיין אינו תומך בסביבות עבודה של Git, אך התמיכה תתווסף בקרוב. אם ברצונך להמשיך להשתמש בפריסה הקודמת, אפשר לעבור בין הפריסות בהגדרות. חשוב לזכור שהפריסה החדשה תהפוך לקבועה בעוד מספר שבועות.",
"server.row.noUsername": "ללא שם משתמש",
"dialog.project.edit.title": "ערוך פרויקט",
"dialog.project.edit.name": "שם",
@@ -984,6 +998,12 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "הרחבת מקטעי כלי העריכה",
"settings.general.row.editToolPartsExpanded.description":
"הצג חלקי כלי עריכה, כתיבה ותיקון מורחבים כברירת מחדל בציר הזמן",
"settings.general.row.newInterface.title": "פריסה חדשה",
"settings.general.row.newInterface.badge": "חדש",
"settings.general.row.newInterface.description": "השתמש בכרטיסיות החדשות ובפריסת הבית. מעבר בין פריסות לזמן מוגבל.",
"settings.general.row.newInterfaceNotice.title": "אתה משתמש כעת בפריסה חדשה",
"settings.general.row.newInterfaceNotice.description": "הפריסה הקודמת אינה זמינה יותר",
"settings.general.row.newInterfaceNotice.dismiss": "סגור",
"settings.general.row.pinchZoom.title": "שינוי גודל באמצעות צביטה",
"settings.general.row.pinchZoom.description": "מתן אפשרות לשינוי גודל באמצעות צביטה במשטח המגע או גלילה עם Ctrl",
"settings.general.row.wayland.title": "השתמש ב-Wayland מקורי",
@@ -1205,10 +1225,4 @@ export const dict = {
"settings.workspaces.sessions.two": "{{count}} הפעלות ב-{{project}}",
"session.background.shell.two": "{{count}} פקודות מעטפת",
"session.background.subagent.two": "{{count}} סוכני משנה",
"toast.migration.failed.title": "העברת הנתונים נכשלה",
"provider.disconnect.toast.noCredentials.description":
"לא נמצאו פרטי התחברות שניתן להסיר עבור \u2068{{provider}}\u2069.",
"provider.disconnect.toast.failed.description": "הניתוק של \u2068{{provider}}\u2069 נכשל.",
"session.timeline.notice.instructionsUpdated": "ההוראות עודכנו: \u2068{{sources}}\u2069",
"session.timeline.notice.restart": "ממשיך לאחר הפעלה מחדש",
}
+21 -90
View File
@@ -516,6 +516,20 @@ export const dict = {
"wsl.onboarding.desktopVersion": "डेस्कटॉप {{version}}",
"wsl.onboarding.versionMismatch": "इंस्टॉल किया गया संस्करण डेस्कटॉप ऐप संस्करण से मेल नहीं खाता।",
"wsl.onboarding.adding": "जोड़ा जा रहा है...",
"help.tabs.toast.ariaLabel": "टैब प्रस्तुत हैं। टैब की सहायता से अपना काम और सक्रिय सेशन व्यवस्थित करें",
"help.tabs.toast.dismiss": "टैब की जानकारी हटाएँ",
"help.tabs.title": "टैब प्रस्तुत हैं",
"help.tabs.description": "टैब की सहायता से अपना काम और सक्रिय सेशन व्यवस्थित करें",
"help.tabs.date": "14 जुलाई",
"help.tabs.introduction": "OpenCode Desktop अब टैब पर आधारित है।",
"help.tabs.sessions":
"किसी टैब में नया सेशन शुरू करें या अपने किसी भी प्रोजेक्ट से मौजूदा सेशन खोलें। कुछ नया शुरू करते समय नया टैब खोलें और काम पूरा होने पर उसे बंद कर दें।",
"help.tabs.organize":
"कुछ टैब खुले रखने से सक्रिय सेशन व्यवस्थित करना आसान होता है। यदि आप टैब खुले रखना चाहते हैं, तो उन्हें कोई याद रहने वाला नाम दें।",
"help.tabs.home": "आपके सभी सेशन और प्रोजेक्ट नई होम स्क्रीन पर मिलेंगे। किसी सेशन को चुनने पर वह टैब में खुलता है।",
"help.tabs.persistence": "ऐप दोबारा खोलने पर भी आपके टैब खुले रहते हैं।",
"help.tabs.worktrees":
"नया डिज़ाइन अभी Git Worktrees का समर्थन नहीं करता है, यह सुविधा जल्द आ रही है। इसलिए यदि आप पिछले लेआउट का उपयोग जारी रखना चाहते हैं, तो सेटिंग्स में लेआउट के बीच स्विच कर सकते हैं। ध्यान रखें कि नया लेआउट कुछ सप्ताह में स्थायी हो जाएगा।",
"server.row.noUsername": "कोई उपयोगकर्ता नाम नहीं",
"dialog.project.edit.title": "प्रोजेक्ट संपादित करें",
"dialog.project.edit.name": "नाम",
@@ -963,6 +977,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "संपादन टूल भागों का विस्तार करें",
"settings.general.row.editToolPartsExpanded.description":
"टाइमलाइन में डिफ़ॉल्ट रूप से विस्तारित संपादित करें, लिखें और पैच टूल पार्ट्स दिखाएं",
"settings.general.row.newInterface.title": "नया लेआउट",
"settings.general.row.newInterface.badge": "नया",
"settings.general.row.newInterface.description":
"नए टैब और होम लेआउट का उपयोग करें. सीमित समय के लिए लेआउट के बीच स्विच करें।",
"settings.general.row.newInterfaceNotice.title": "अब आप नए लेआउट का उपयोग कर रहे हैं",
"settings.general.row.newInterfaceNotice.description": "पिछला लेआउट अब उपलब्ध नहीं है",
"settings.general.row.newInterfaceNotice.dismiss": "हटाएँ",
"settings.general.row.pinchZoom.title": "ज़ूम करने के लिए पिंच करें",
"settings.general.row.pinchZoom.description": "ट्रैकपैड पिंच और Ctrl-स्क्रॉल जेस्चर को ज़ूम करने की अनुमति दें",
"settings.general.row.wayland.title": "नेटिव Wayland का उपयोग करें",
@@ -1139,94 +1160,4 @@ export const dict = {
"workspace.reset.archived.one": "1 सेशन संग्रहित किया जाएगा।",
"workspace.reset.archived.many": "{{count}} सेशन संग्रहित किए जाएँगे।",
"workspace.reset.note": "यह डिफ़ॉल्ट शाखा से मिलान करने के लिए वर्कस्पेस को रीसेट कर देगा।",
"toast.migration.failed.title": "डेटा माइग्रेशन विफल रहा",
"session.background.moveTasks": "{{tasks}} को बैकग्राउंड में ले जाएँ",
"session.background.inBackground": "बैकग्राउंड में चल रहे कार्य: {{tasks}}",
"session.background.combine": "{{first}} और {{second}}",
"session.background.shell.one": "{{count}} शेल",
"session.background.shell.other": "{{count}} शेल",
"session.background.subagent.one": "{{count}} सबएजेंट",
"session.background.subagent.other": "{{count}} सबएजेंट",
"command.session.background": "बैकग्राउंड में ले जाएँ",
"session.timeline.notice.finished": "{{actor}} ने पूरा किया",
"session.timeline.notice.failed": "{{actor}} विफल रहा",
"session.timeline.notice.cancelled": "{{actor}} रद्द हुआ",
"settings.tab.preferences": "प्राथमिकताएँ",
"settings.tab.notifications": "सूचनाएँ",
"settings.tab.projects": "प्रोजेक्ट",
"settings.tab.extensions": "एक्सटेंशन",
"settings.preferences.description": "प्राथमिकताएँ, थीम और डिफ़ॉल्ट व्यवहार कस्टमाइज़ करें",
"settings.appearance.description": "थीम और फ़ॉन्ट कस्टमाइज़ करें",
"settings.notifications.description": "चुनें कि सूचनाएँ कब मिलें और ध्वनियाँ कब सुनाई दें",
"settings.shortcuts.description": "सामान्य कार्रवाइयों के शॉर्टकट कस्टमाइज़ करें",
"settings.servers.description": "सर्वर कनेक्शन प्रबंधित करें",
"settings.projects.title": "प्रोजेक्ट",
"settings.projects.description": "इस सर्वर पर प्रोजेक्ट सेटिंग्स प्रबंधित करें",
"settings.projects.empty": "कोई प्रोजेक्ट नहीं मिला",
"settings.projects.server.all": "सभी सर्वर",
"settings.mcps.description": "Model Context Protocol (MCP) सर्वर और टूल प्रबंधित करें",
"settings.extensions.description": "इस सर्वर पर उपलब्ध एक्सटेंशन प्रबंधित करें",
"settings.extensions.tab.mcps": "MCPs",
"settings.extensions.tab.skills": "कौशल",
"settings.extensions.availableAll": "सभी प्रोजेक्ट के लिए उपलब्ध",
"settings.extensions.manageConfig": "opencode.json में प्रबंधित करें",
"settings.extensions.addSkills": "कौशल कैसे जोड़ें",
"dialog.server.authenticate.title": "प्रमाणित करें",
"project.settings.general.description": "प्रोजेक्ट का नाम और स्वरूप प्रबंधित करें",
"project.settings.scripts": "स्क्रिप्ट",
"project.settings.scripts.description": "इस प्रोजेक्ट के लिए स्क्रिप्ट कॉन्फ़िगर करें",
"project.settings.extensions.description": "इस प्रोजेक्ट के लिए उपलब्ध एक्सटेंशन देखें",
"project.settings.extensions.tab.lsps": "LSPs",
"project.settings.extensions.added": "इस प्रोजेक्ट में जोड़ा गया",
"project.settings.extensions.shared": "सभी प्रोजेक्ट के साथ साझा",
"project.settings.extensions.lsp.detected": "पहचाने गए भाषा सर्वर",
"project.settings.extensions.lsp.description": "फ़ाइल प्रकारों से स्वतः पहचाने गए",
"project.settings.extensions.setupRequired": "सेटअप आवश्यक है",
"settings.general.section.general": "सामान्य",
"common.viewAll": "सभी देखें",
"session.new.workspace.local.tooltip": "वर्तमान चेकआउट का उपयोग करें",
"session.new.workspace.new.tooltip": "अलग चेकआउट बनाएँ",
"session.new.workspace.fromBranch": "{{branch}} से",
"session.new.workspace.trigger.tooltip": "चुनें कि सेशन कहाँ चलाना है",
"session.new.workspace.search.placeholder": "वर्कस्पेस खोजें",
"settings.tab.workspaces": "वर्कस्पेस",
"settings.workspaces.filter.all": "सभी प्रोजेक्ट",
"settings.workspaces.empty": "कोई वर्कस्पेस नहीं",
"settings.workspaces.count.one": "{{count}} वर्कस्पेस",
"settings.workspaces.count.other": "{{count}} वर्कस्पेस",
"settings.workspaces.sessions.one": "{{project}} में {{count}} सेशन",
"settings.workspaces.sessions.other": "{{project}} में {{count}} सेशन",
"settings.workspaces.lastActiveSession": "अंतिम सक्रिय सेशन",
"settings.workspaces.deleteAll": "सभी वर्कस्पेस हटाएँ",
"settings.workspaces.deleteAll.confirm": "सभी {{count}} वर्कस्पेस हटाएँ?",
"settings.workspaces.delete.warning":
"नीचे दिखाए गए मर्ज न किए गए परिवर्तनों सहित वर्कस्पेस निर्देशिका और शाखा स्थायी रूप से हटा दी जाएगी।",
"settings.workspaces.deleteAll.warning":
"{{project}} में चुने गए {{count}} वर्कस्पेस तभी स्थायी रूप से हटेंगे जब प्रत्येक साफ़, निष्क्रिय और किसी सेशन से जुड़ा न हो।",
"settings.workspaces.delete.blocked.active": "सक्रिय वर्कस्पेस हटाया नहीं जा सकता।",
"settings.workspaces.delete.blocked.linked":
"जुड़े सेशन बने रहेंगे, लेकिन उनकी कार्यशील निर्देशिका स्थायी रूप से हटा दी जाएगी।",
"settings.workspaces.default.title": "डिफ़ॉल्ट परिवेश",
"settings.workspaces.default.description": "चुनें कि नए सेशन कहाँ शुरू हों",
"settings.workspaces.default.lastUsed": "हर प्रोजेक्ट में अंतिम बार उपयोग किया गया",
"settings.workspaces.default.local": "स्थानीय निर्देशिका",
"settings.workspaces.default.new": "नया वर्कस्पेस",
"workspace.move.title": "वर्कस्पेस में ले जाएँ",
"workspace.move.menu.title": "सेशन यहाँ ले जाएँ",
"workspace.move.failed": "सेशन ले जाने में विफल",
"workspace.lifecycle.creating": "वर्कस्पेस बनाया जा रहा है",
"workspace.lifecycle.created": "वर्कस्पेस बनाया गया",
"workspace.lifecycle.starting": "सेशन शुरू हो रहा है",
"workspace.onboarding.title": "वर्कस्पेस से सेशन अलग रखें",
"workspace.onboarding.description":
"हर सेशन को अपना चेकआउट मिलता है, इसलिए आपकी स्थानीय रिपॉजिटरी में कोई हस्तक्षेप नहीं होता",
"workspace.lifecycle.moving": "वर्कस्पेस में ले जाया जा रहा है",
"workspace.lifecycle.set": "वर्कस्पेस सेट किया गया",
"session.summary.title": "सेशन विवरण",
"session.summary.noBranch": "कोई शाखा नहीं",
"session.summary.basedOn": "{{branch}} पर आधारित",
"provider.disconnect.toast.noCredentials.description": "{{provider}} के लिए हटाने योग्य कोई क्रेडेंशियल नहीं मिला।",
"provider.disconnect.toast.failed.description": "{{provider}} से डिस्कनेक्ट करने में विफल।",
"session.timeline.notice.instructionsUpdated": "निर्देश अपडेट किए गए: {{sources}}",
"session.timeline.notice.restart": "पुनः आरंभ होने के बाद जारी है",
}
+22 -93
View File
@@ -513,6 +513,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "radna površina {{version}}",
"wsl.onboarding.versionMismatch": "Instalirana verzija ne odgovara verziji aplikacije za stolna računala.",
"wsl.onboarding.adding": "Dodavanje...",
"help.tabs.toast.ariaLabel": "Predstavljamo Tabs. Organizirajte svoj rad i aktivne sesije pomoću kartica",
"help.tabs.toast.dismiss": "Odbaci Tab informacije",
"help.tabs.title": "Predstavljamo Tabs",
"help.tabs.description": "Organizirajte svoj rad i aktivne sesije pomoću kartica",
"help.tabs.date": "14. srpnja",
"help.tabs.introduction": "Radna površina OpenCode sada je izgrađena oko kartica.",
"help.tabs.sessions":
"Započnite novu sesiju na kartici ili otvorite postojeću sesiju iz bilo kojeg od svojih projekata. Otvorite novu karticu kada započnete nešto novo i zatvorite je kada završite.",
"help.tabs.organize":
"Održavanje nekoliko otvorenih kartica olakšava organiziranje vaših aktivnih sesija. Preimenujte kartice u nešto nezaboravno ako ih planirate zadržati.",
"help.tabs.home":
"Sve svoje sesije i projekte pronaći ćete na novom Home zaslonu. Odabirom sesije otvara se u kartici.",
"help.tabs.persistence": "Kada ponovno otvorite aplikaciju, vaše kartice su i dalje otvorene.",
"help.tabs.worktrees":
"Novi dizajn još ne podržava Git Worktrees, uskoro će biti dostupan. Dakle, ako biste radije nastavili koristiti prethodni izgled, možete se prebacivati između izgleda u Postavkama. Samo imajte na umu da će novi izgled postati trajan za nekoliko tjedana.",
"server.row.noUsername": "nema korisničkog imena",
"dialog.project.edit.title": "Uredi projekt",
"dialog.project.edit.name": "Ime",
@@ -965,6 +980,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Proširi uređivanje dijelova alata",
"settings.general.row.editToolPartsExpanded.description":
"Prikažite dijelove alata za uređivanje, pisanje i zakrpe prema zadanim postavkama na vremenskoj traci",
"settings.general.row.newInterface.title": "Novi izgled",
"settings.general.row.newInterface.badge": "Novi",
"settings.general.row.newInterface.description":
"Koristite nove kartice i početni izgled. Prebacivanje između izgleda na ograničeno vrijeme.",
"settings.general.row.newInterfaceNotice.title": "Sada koristite novi izgled",
"settings.general.row.newInterfaceNotice.description": "Prethodni izgled više nije dostupan",
"settings.general.row.newInterfaceNotice.dismiss": "Odbaciti",
"settings.general.row.pinchZoom.title": "Stisnite prste za zumiranje",
"settings.general.row.pinchZoom.description":
"Za zumiranje dopustite prstohvat dodirne površine i Ctrl pokrete pomicanja",
@@ -1143,97 +1165,4 @@ export const dict = {
"workspace.reset.archived.many": "{{count}} sesije će biti arhivirane.",
"workspace.reset.note": "Ovo će resetirati radni prostor kako bi odgovarao zadanoj grani.",
"dialog.usageExceeded.dontShowAgain": "Ne prikazuj ponovno",
"provider.disconnect.toast.noCredentials.description": "Nisu pronađene uklonjive vjerodajnice za {{provider}}.",
"provider.disconnect.toast.failed.description": "Odspajanje {{provider}} nije uspjelo.",
"toast.migration.failed.title": "Migracija podataka nije uspjela",
"session.background.moveTasks": "Premjesti {{tasks}} u pozadinu",
"session.background.inBackground": "Pokretanje {{tasks}} u pozadini",
"session.background.combine": "{{first}} i {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shellova",
"session.background.subagent.one": "{{count}} subagent",
"session.background.subagent.other": "{{count}} subagenti",
"command.session.background": "Premjesti u pozadinu",
"session.timeline.notice.finished": "{{actor}} završio",
"session.timeline.notice.failed": "{{actor}} nije uspio",
"session.timeline.notice.cancelled": "{{actor}} otkazan",
"session.timeline.notice.instructionsUpdated": "Upute ažurirane: {{sources}}",
"session.timeline.notice.restart": "Nastavak nakon ponovnog pokretanja",
"settings.tab.preferences": "Postavke",
"settings.tab.notifications": "Obavijesti",
"settings.tab.projects": "Projekti",
"settings.tab.extensions": "Ekstenzije",
"settings.preferences.description": "Prilagodite postavke i temu i zadano ponašanje",
"settings.appearance.description": "Prilagodite temu i fontove",
"settings.notifications.description": "Odaberite kada želite primati obavijesti i čuti zvukove",
"settings.shortcuts.description": "Prilagodite prečace za uobičajene radnje",
"settings.servers.description": "Upravljanje vezama poslužitelja",
"settings.projects.title": "Projekti",
"settings.projects.description": "Upravljanje postavkama projekta na ovom poslužitelju",
"settings.projects.empty": "Nema pronađenih projekata",
"settings.projects.server.all": "Svi poslužitelji",
"settings.mcps.description": "Upravljanje poslužiteljima i alatima Model Context Protocol (MCP).",
"settings.extensions.description": "Upravljajte proširenjima dostupnim na ovom poslužitelju",
"settings.extensions.tab.mcps": "MCP-ovi",
"settings.extensions.tab.skills": "Vještine",
"settings.extensions.availableAll": "Dostupno za sve projekte",
"settings.extensions.manageConfig": "Upravljanje u opencode.json",
"settings.extensions.addSkills": "Kako dodati vještine",
"dialog.server.authenticate.title": "Autentificirati",
"project.settings.general.description": "Upravljanje imenom i izgledom projekta",
"project.settings.scripts": "Skripte",
"project.settings.scripts.description": "Konfigurirajte skripte za ovaj projekt",
"project.settings.extensions.description": "Pogledajte proširenja dostupna za ovaj projekt",
"project.settings.extensions.tab.lsps": "LSP-ovi",
"project.settings.extensions.added": "Dodano ovom projektu",
"project.settings.extensions.shared": "Dijeli se sa svim projektima",
"project.settings.extensions.lsp.detected": "Otkriveni jezični poslužitelji",
"project.settings.extensions.lsp.description": "Automatski otkriveno iz vrsta datoteka",
"project.settings.extensions.setupRequired": "Potrebna postavka",
"settings.general.section.general": "Općenito",
"common.viewAll": "Pogledaj sve",
"session.new.workspace.local.tooltip": "Upotrijebi trenutačnu radnu kopiju",
"session.new.workspace.new.tooltip": "Stvori izoliranu radnu kopiju",
"session.new.workspace.fromBranch": "od {{branch}}",
"session.new.workspace.trigger.tooltip": "Odaberite gdje želite pokrenuti sesiju",
"session.new.workspace.search.placeholder": "Pretražite radne prostore",
"settings.tab.workspaces": "Radni prostori",
"settings.workspaces.filter.all": "Svi projekti",
"settings.workspaces.empty": "Nema radnih prostora",
"settings.workspaces.count.one": "{{count}} radni prostor",
"settings.workspaces.count.other": "{{count}} radni prostori",
"settings.workspaces.sessions.one": "{{count}} sesija u {{project}}",
"settings.workspaces.sessions.other": "{{count}} sesije u {{project}}",
"settings.workspaces.lastActiveSession": "Zadnja aktivna sesija",
"settings.workspaces.deleteAll": "Izbriši sve radne prostore",
"settings.workspaces.deleteAll.confirm": "Izbrisati sve radne prostore {{count}}?",
"settings.workspaces.delete.warning":
"Direktorij i grana radnog prostora bit će trajno uklonjeni, uključujući sve nespojene promjene prikazane u nastavku.",
"settings.workspaces.deleteAll.warning":
"{{count}} odabrani radni prostori u {{project}} bit će trajno uklonjeni samo ako je svaki čist, neaktivan i nema povezanih sesija.",
"settings.workspaces.delete.blocked.active": "Aktivni radni prostor ne može se izbrisati.",
"settings.workspaces.delete.blocked.linked":
"Povezane sesije će ostati, ali će njihov radni direktorij biti trajno uklonjen.",
"settings.workspaces.default.title": "Zadano okruženje",
"settings.workspaces.default.description": "Odaberite gdje počinju nove sesije",
"settings.workspaces.default.lastUsed": "Zadnje korišteno po projektu",
"settings.workspaces.default.local": "Lokalni imenik",
"settings.workspaces.default.new": "Novi radni prostor",
"workspace.move.title": "Prijeđite na radni prostor",
"workspace.move.menu.title": "Premjesti sesiju na",
"workspace.move.failed": "Premještanje sesije nije uspjelo",
"workspace.lifecycle.creating": "Stvaranje radnog prostora",
"workspace.lifecycle.created": "Radni prostor stvoren",
"workspace.lifecycle.starting": "Početak sesije",
"workspace.onboarding.title": "Izolirajte sesije s radnim prostorima",
"workspace.onboarding.description": "Svaka dobiva vlastitu radnu kopiju, tako da ništa ne ometa lokalni repozitorij",
"workspace.lifecycle.moving": "Prelazak na radni prostor",
"workspace.lifecycle.set": "Radni prostor postavljen",
"session.summary.title": "Detalji sesije",
"session.summary.noBranch": "Nema grane",
"session.summary.basedOn": "Na temelju {{branch}}",
"session.background.shell.few": "{{count}} shella",
"session.background.subagent.few": "{{count}} subagenta",
"settings.workspaces.count.few": "{{count}} radna prostora",
"settings.workspaces.sessions.few": "{{count}} sesije u {{project}}",
}
+22 -90
View File
@@ -513,6 +513,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "asztali {{version}}",
"wsl.onboarding.versionMismatch": "A telepített verzió nem egyezik az asztali alkalmazás verziójával.",
"wsl.onboarding.adding": "Hozzáadás...",
"help.tabs.toast.ariaLabel": "Bemutatjuk a Tab-ket. A lapokkal megszervezheti munkáját és aktív munkameneteit",
"help.tabs.toast.dismiss": "Tabs információ elvetése",
"help.tabs.title": "Bemutatjuk a Tab-ket",
"help.tabs.description": "A lapokkal megszervezheti munkáját és aktív munkameneteit",
"help.tabs.date": "július 14",
"help.tabs.introduction": "A OpenCode Desktop mostantól lapokra épül.",
"help.tabs.sessions":
"Indítson új munkamenetet egy lapon, vagy nyisson meg egy meglévő munkamenetet bármelyik projektből. Nyisson meg egy új lapot, amikor valami újat kezd, és zárja be, ha végzett.",
"help.tabs.organize":
"Néhány lap nyitva tartása megkönnyíti az aktív munkamenetek megszervezését. Nevezze át a lapokat valami emlékezetesre, ha azt tervezi, hogy megtartja őket.",
"help.tabs.home":
"Minden munkamenetét és projektjét megtalálja az új Home képernyőn. Ha kiválaszt egy munkamenetet, az egy lapon nyílik meg.",
"help.tabs.persistence": "Amikor újra megnyitja az alkalmazást, a lapok továbbra is nyitva maradnak.",
"help.tabs.worktrees":
"Az új kialakítás még nem támogatja a Git Worktrees-t, hamarosan megjelenik. Ha tehát szeretné folytatni az előző elrendezést, a Beállításokban válthat az elrendezések között. Ne feledje, hogy az új elrendezés néhány héten belül állandóvá válik.",
"server.row.noUsername": "nincs felhasználónév",
"dialog.project.edit.title": "Projekt szerkesztése",
"dialog.project.edit.name": "Név",
@@ -964,6 +979,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "A Szerkesztőeszköz részei kibontása",
"settings.general.row.editToolPartsExpanded.description":
"Az idővonalon alapértelmezés szerint kibontott szerkesztési, írási és javítási eszközrészek megjelenítése",
"settings.general.row.newInterface.title": "Új elrendezés",
"settings.general.row.newInterface.badge": "Új",
"settings.general.row.newInterface.description":
"Használja az új lapokat és a kezdőlap elrendezését. Váltás az elrendezések között korlátozott ideig.",
"settings.general.row.newInterfaceNotice.title": "Most új elrendezést használ",
"settings.general.row.newInterfaceNotice.description": "Az előző elrendezés már nem elérhető",
"settings.general.row.newInterfaceNotice.dismiss": "Elvetés",
"settings.general.row.pinchZoom.title": "Csípje össze a nagyításhoz",
"settings.general.row.pinchZoom.description":
"Engedélyezze az érintőpad összecsípését és a Ctrl-görgetést a nagyításhoz",
@@ -1120,47 +1142,6 @@ export const dict = {
"session.delete.confirm": "Delete „{{name}}” munkamenet?",
"session.delete.button": "Delete munkamenet",
"workspace.new": "Új munkaterület",
"common.viewAll": "Összes megtekintése",
"session.new.workspace.local.tooltip": "A jelenlegi checkout használata",
"session.new.workspace.new.tooltip": "Elkülönített checkout létrehozása",
"session.new.workspace.fromBranch": "innen: {{branch}}",
"session.new.workspace.trigger.tooltip": "Válassza ki, hol fusson a munkamenet",
"session.new.workspace.search.placeholder": "Munkaterületek keresése",
"settings.tab.workspaces": "Munkaterületek",
"settings.workspaces.filter.all": "Minden projekt",
"settings.workspaces.empty": "Nincsenek munkaterületek",
"settings.workspaces.count.one": "{{count}} munkaterület",
"settings.workspaces.count.other": "{{count}} munkaterület",
"settings.workspaces.sessions.one": "{{count}} munkamenet a(z) {{project}} projektben",
"settings.workspaces.sessions.other": "{{count}} munkamenet a(z) {{project}} projektben",
"settings.workspaces.lastActiveSession": "Legutóbbi aktív munkamenet",
"settings.workspaces.deleteAll": "Összes munkaterület törlése",
"settings.workspaces.deleteAll.confirm": "Törli mind a(z) {{count}} munkaterületet?",
"settings.workspaces.delete.warning":
"A munkaterület könyvtára és ága véglegesen törlődik, beleértve az alább látható nem egyesített módosításokat is.",
"settings.workspaces.deleteAll.warning":
"A(z) {{project}} projekt {{count}} kijelölt munkaterülete csak akkor törlődik véglegesen, ha mindegyik tiszta, inaktív, és nincs hozzá kapcsolt munkamenet.",
"settings.workspaces.delete.blocked.active": "Az aktív munkaterület nem törölhető.",
"settings.workspaces.delete.blocked.linked":
"A kapcsolt munkamenetek megmaradnak, de a munkakönyvtáruk véglegesen törlődik.",
"settings.workspaces.default.title": "Alapértelmezett környezet",
"settings.workspaces.default.description": "Válassza ki, hol induljanak az új munkamenetek",
"settings.workspaces.default.lastUsed": "Projektenként legutóbb használt",
"settings.workspaces.default.local": "Helyi könyvtár",
"settings.workspaces.default.new": "Új munkaterület",
"workspace.move.title": "Áthelyezés munkaterületre",
"workspace.move.menu.title": "Munkamenet áthelyezése ide:",
"workspace.move.failed": "Nem sikerült áthelyezni a munkamenetet",
"workspace.lifecycle.creating": "Munkaterület létrehozása",
"workspace.lifecycle.created": "Munkaterület létrehozva",
"workspace.lifecycle.starting": "Munkamenet indítása",
"workspace.onboarding.title": "Munkamenetek elkülönítése munkaterületekkel",
"workspace.onboarding.description": "Mindegyik saját checkoutot kap, így semmi sem zavarja a helyi adattárat",
"workspace.lifecycle.moving": "Áthelyezés munkaterületre",
"workspace.lifecycle.set": "Munkaterület beállítva",
"session.summary.title": "Munkamenet részletei",
"session.summary.noBranch": "Nincs ág",
"session.summary.basedOn": "Alapja: {{branch}}",
"workspace.type.local": "helyi",
"workspace.type.sandbox": "homokozó",
"workspace.create.failed.title": "Nem sikerült létrehozni a munkaterületet",
@@ -1186,53 +1167,4 @@ export const dict = {
"workspace.reset.archived.many": "A {{count}} munkamenetek archiválva lesznek.",
"workspace.reset.note": "Ezzel visszaállítja a munkaterületet, hogy megfeleljen az alapértelmezett ágnak.",
"dialog.usageExceeded.dontShowAgain": "Ne jelenjen meg újra",
"provider.disconnect.toast.noCredentials.description":
"Nem találhatók eltávolítható hitelesítő adatok a következőhöz: {{provider}}.",
"provider.disconnect.toast.failed.description": "Nem sikerült leválasztani a következőt: {{provider}}.",
"toast.migration.failed.title": "Az adatok áttelepítése nem sikerült",
"session.background.moveTasks": "{{tasks}} áthelyezése a háttérbe",
"session.background.inBackground": "{{tasks}} futtatása a háttérben",
"session.background.combine": "{{first}} és {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shell",
"session.background.subagent.one": "{{count}} alügynök",
"session.background.subagent.other": "{{count}} alügynök",
"command.session.background": "Áthelyezés a háttérbe",
"session.timeline.notice.finished": "{{actor}} befejezte",
"session.timeline.notice.failed": "{{actor}} művelete sikertelen",
"session.timeline.notice.cancelled": "{{actor}} művelete megszakítva",
"session.timeline.notice.instructionsUpdated": "Utasítások frissítve: {{sources}}",
"session.timeline.notice.restart": "Folytatás újraindítás után",
"settings.tab.preferences": "Beállítások",
"settings.tab.notifications": "Értesítések",
"settings.tab.projects": "Projektek",
"settings.tab.extensions": "Bővítmények",
"settings.preferences.description": "A beállítások, a téma és az alapértelmezett viselkedés testreszabása",
"settings.appearance.description": "A téma és a betűtípusok testreszabása",
"settings.notifications.description": "Válassza ki, mikor kapjon értesítéseket és halljon hangokat",
"settings.shortcuts.description": "A gyakori műveletek billentyűparancsainak testreszabása",
"settings.servers.description": "Szerverkapcsolatok kezelése",
"settings.projects.title": "Projektek",
"settings.projects.description": "A projektek beállításainak kezelése ezen a szerveren",
"settings.projects.empty": "Nem találhatók projektek",
"settings.projects.server.all": "Minden szerver",
"settings.mcps.description": "A Model Context Protocol (MCP) szervereinek és eszközeinek kezelése",
"settings.extensions.description": "A szerveren elérhető bővítmények kezelése",
"settings.extensions.tab.mcps": "MCP-k",
"settings.extensions.tab.skills": "Készségek",
"settings.extensions.availableAll": "Minden projekt számára elérhető",
"settings.extensions.manageConfig": "Kezelés az opencode.json fájlban",
"settings.extensions.addSkills": "Készségek hozzáadása",
"dialog.server.authenticate.title": "Hitelesítés",
"project.settings.general.description": "A projekt nevének és megjelenésének kezelése",
"project.settings.scripts": "Szkriptek",
"project.settings.scripts.description": "Szkriptek beállítása ehhez a projekthez",
"project.settings.extensions.description": "A projekthez elérhető bővítmények megtekintése",
"project.settings.extensions.tab.lsps": "LSP-k",
"project.settings.extensions.added": "Hozzáadva ehhez a projekthez",
"project.settings.extensions.shared": "Minden projekttel megosztva",
"project.settings.extensions.lsp.detected": "Észlelt nyelvi szerverek",
"project.settings.extensions.lsp.description": "Automatikusan észlelve a fájltípusok alapján",
"project.settings.extensions.setupRequired": "Beállítás szükséges",
"settings.general.section.general": "Általános",
}
+22 -88
View File
@@ -511,6 +511,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "աշխատասեղանի {{version}}",
"wsl.onboarding.versionMismatch": "Տեղադրված տարբերակը չի համապատասխանում աշխատասեղանի հավելվածի տարբերակին։",
"wsl.onboarding.adding": "Ավելացվում է...",
"help.tabs.toast.ariaLabel": "Ներկայացնում ենք ներդիրները։ Կազմակերպեք ձեր աշխատանքը և ակտիվ նիստերը ներդիրներով",
"help.tabs.toast.dismiss": "Փակել ներդիրների տեղեկությունները",
"help.tabs.title": "Ներկայացնում ենք ներդիրները",
"help.tabs.description": "Կազմակերպեք ձեր աշխատանքը և ակտիվ նիստերը ներդիրներով",
"help.tabs.date": "հուլիսի 14",
"help.tabs.introduction": "OpenCode Desktop-ն այժմ կառուցված է ներդիրների շուրջ։",
"help.tabs.sessions":
"Սկսեք նոր նիստ ներդիրում կամ բացեք գոյություն ունեցող նիստը ձեր ցանկացած նախագծից: Բացեք նոր ներդիր, երբ ինչ-որ նոր բան եք սկսում, և փակեք այն, երբ ավարտեք:",
"help.tabs.organize":
"Մի քանի ներդիր բաց պահելը հեշտացնում է ձեր ակտիվ նիստերի կազմակերպումը։ Վերանվանեք ներդիրները հիշարժան որևէ բանի, եթե նախատեսում եք դրանք պահել:",
"help.tabs.home":
"Դուք կգտնեք ձեր բոլոր նիստերն ու նախագծերը նոր Հիմնական էկրանին։ Ընտրելով նիստը՝ այն բացվում է ներդիրում:",
"help.tabs.persistence": "Երբ վերաբացեք հավելվածը, ձեր ներդիրները դեռ բաց են։",
"help.tabs.worktrees":
"Նոր դիզայնը դեռ չի աջակցում Git Worktrees-ին, այն շուտով կլինի: Այսպիսով, եթե նախընտրում եք շարունակել օգտագործել նախորդ դասավորությունը, կարող եք անցնել դասավորությունների միջև Կարգավորումներում: Պարզապես հիշեք, որ նոր դասավորությունը կդառնա մշտական ​​մի քանի շաբաթից:",
"server.row.noUsername": "առանց օգտվողի անուն",
"dialog.project.edit.title": "Խմբագրել նախագիծը",
"dialog.project.edit.name": "Անուն",
@@ -961,6 +976,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Ընդարձակել խմբագրման գործիքի մասերը",
"settings.general.row.editToolPartsExpanded.description":
"Ցուցադրել խմբագրման, գրելու և կարկատելու գործիքի մասերը, որոնք լռելյայն ընդլայնվել են ժամանակացույցում",
"settings.general.row.newInterface.title": "Նոր դասավորություն",
"settings.general.row.newInterface.badge": "Նոր",
"settings.general.row.newInterface.description":
"Օգտագործեք նոր ներդիրները և տան դասավորությունը։ Անցեք դասավորությունների միջև սահմանափակ ժամանակով:",
"settings.general.row.newInterfaceNotice.title": "Դուք այժմ օգտագործում եք նոր դասավորություն",
"settings.general.row.newInterfaceNotice.description": "Նախորդ դասավորությունն այլևս հասանելի չէ",
"settings.general.row.newInterfaceNotice.dismiss": "Փակել",
"settings.general.row.pinchZoom.title": "Սեղմեք՝ խոշորացնելու համար",
"settings.general.row.pinchZoom.description": "Թույլատրել մատնաչափի սեղմումը և Ctrl-scroll ժեստերը մեծացնելու համար",
"settings.general.row.wayland.title": "Օգտագործել բնիկ Wayland",
@@ -1140,92 +1162,4 @@ export const dict = {
"workspace.reset.archived.many": "{{count}} նիստերը կարխիվացվեն։",
"workspace.reset.note": "Սա կվերակայի աշխատանքային տարածքը, որպեսզի համապատասխանի լռելյայն ճյուղին:",
"dialog.usageExceeded.dontShowAgain": "Այլևս չցուցադրել",
"toast.migration.failed.title": "Տվյալների տեղափոխումը ձախողվեց",
"session.background.moveTasks": "{{tasks}}-ը տեղափոխել հետին պլան",
"session.background.inBackground": "{{tasks}}-ը գործարկվում է հետին պլանում",
"session.background.combine": "{{first}} և {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shell",
"session.background.subagent.one": "{{count}} ենթագործակալ",
"session.background.subagent.other": "{{count}} ենթագործակալ",
"command.session.background": "Տեղափոխել հետին պլան",
"session.timeline.notice.finished": "{{actor}}-ն ավարտեց",
"session.timeline.notice.failed": "{{actor}}-ը ձախողվեց",
"session.timeline.notice.cancelled": "{{actor}}-ը չեղարկվեց",
"settings.tab.preferences": "Նախընտրություններ",
"settings.tab.notifications": "Ծանուցումներ",
"settings.tab.projects": "Նախագծեր",
"settings.tab.extensions": "Ընդլայնումներ",
"settings.preferences.description": "Կարգավորեք նախընտրությունները, թեման և լռելյայն վարքագիծը",
"settings.appearance.description": "Կարգավորեք թեման և տառատեսակները",
"settings.notifications.description": "Ընտրեք՝ երբ ստանալ ծանուցումներ և լսել ձայներ",
"settings.shortcuts.description": "Կարգավորեք տարածված գործողությունների դյուրանցումները",
"settings.servers.description": "Կառավարեք սերվերների կապերը",
"settings.projects.title": "Նախագծեր",
"settings.projects.description": "Կառավարեք նախագծի կարգավորումները այս սերվերում",
"settings.projects.empty": "Նախագծեր չեն գտնվել",
"settings.projects.server.all": "Բոլոր սերվերները",
"settings.mcps.description": "Կառավարեք Model Context Protocol (MCP) սերվերներն ու գործիքները",
"settings.extensions.description": "Կառավարեք այս սերվերում հասանելի ընդլայնումները",
"settings.extensions.tab.mcps": "MCP-ներ",
"settings.extensions.tab.skills": "Հմտություններ",
"settings.extensions.availableAll": "Հասանելի է բոլոր նախագծերին",
"settings.extensions.manageConfig": "Կառավարել opencode.json-ում",
"settings.extensions.addSkills": "Ինչպես ավելացնել հմտություններ",
"dialog.server.authenticate.title": "Նույնականացում",
"project.settings.general.description": "Կառավարեք նախագծի անունն ու տեսքը",
"project.settings.scripts": "Սկրիպտներ",
"project.settings.scripts.description": "Կարգավորեք այս նախագծի սկրիպտները",
"project.settings.extensions.description": "Դիտեք այս նախագծին հասանելի ընդլայնումները",
"project.settings.extensions.tab.lsps": "LSP-ներ",
"project.settings.extensions.added": "Ավելացված է այս նախագծին",
"project.settings.extensions.shared": "Համօգտագործվում է բոլոր նախագծերի հետ",
"project.settings.extensions.lsp.detected": "Հայտնաբերված լեզվային սերվերներ",
"project.settings.extensions.lsp.description": "Ինքնաշխատ հայտնաբերվում է ֆայլերի տեսակներից",
"project.settings.extensions.setupRequired": "Կարգավորում է պահանջվում",
"settings.general.section.general": "Ընդհանուր",
"common.viewAll": "Դիտել բոլորը",
"session.new.workspace.local.tooltip": "Օգտագործել ընթացիկ checkout-ը",
"session.new.workspace.new.tooltip": "Ստեղծել մեկուսացված checkout",
"session.new.workspace.fromBranch": "{{branch}} ճյուղից",
"session.new.workspace.trigger.tooltip": "Ընտրեք՝ որտեղ գործարկել նիստը",
"session.new.workspace.search.placeholder": "Փնտրել աշխատանքային տարածքներ",
"settings.tab.workspaces": "Աշխատանքային տարածքներ",
"settings.workspaces.filter.all": "Բոլոր նախագծերը",
"settings.workspaces.empty": "Աշխատանքային տարածքներ չկան",
"settings.workspaces.count.one": "{{count}} աշխատանքային տարածք",
"settings.workspaces.count.other": "{{count}} աշխատանքային տարածք",
"settings.workspaces.sessions.one": "{{count}} նիստ {{project}} նախագծում",
"settings.workspaces.sessions.other": "{{count}} նիստ {{project}} նախագծում",
"settings.workspaces.lastActiveSession": "Վերջին ակտիվ նիստը",
"settings.workspaces.deleteAll": "Ջնջել բոլոր աշխատանքային տարածքները",
"settings.workspaces.deleteAll.confirm": "Ջնջե՞լ բոլոր {{count}} աշխատանքային տարածքները",
"settings.workspaces.delete.warning":
"Աշխատանքային տարածքի պանակը և ճյուղը ընդմիշտ կհեռացվեն՝ ներառյալ ստորև ցուցադրված չմիավորված փոփոխությունները։",
"settings.workspaces.deleteAll.warning":
"{{project}} նախագծի ընտրված {{count}} աշխատանքային տարածքները ընդմիշտ կհեռացվեն միայն եթե յուրաքանչյուրն անփոփոխ է, ոչ ակտիվ և չունի կապված նիստեր։",
"settings.workspaces.delete.blocked.active": "Ակտիվ աշխատանքային տարածքը չի կարող ջնջվել։",
"settings.workspaces.delete.blocked.linked": "Կապված նիստերը կմնան, բայց դրանց աշխատանքային պանակը ընդմիշտ կհեռացվի։",
"settings.workspaces.default.title": "Լռելյայն միջավայր",
"settings.workspaces.default.description": "Ընտրեք՝ որտեղ են սկսվում նոր նիստերը",
"settings.workspaces.default.lastUsed": "Վերջին օգտագործվածը՝ ըստ նախագծի",
"settings.workspaces.default.local": "Տեղական պանակ",
"settings.workspaces.default.new": "Նոր աշխատանքային տարածք",
"workspace.move.title": "Տեղափոխել աշխատանքային տարածք",
"workspace.move.menu.title": "Նիստը տեղափոխել՝",
"workspace.move.failed": "Չհաջողվեց տեղափոխել նիստը",
"workspace.lifecycle.creating": "Աշխատանքային տարածքը ստեղծվում է",
"workspace.lifecycle.created": "Աշխատանքային տարածքը ստեղծվեց",
"workspace.lifecycle.starting": "Նիստը մեկնարկում է",
"workspace.onboarding.title": "Մեկուսացրեք նիստերը աշխատանքային տարածքներով",
"workspace.onboarding.description": "Յուրաքանչյուրն ունի իր checkout-ը, ուստի ոչինչ չի խանգարում ձեր տեղական պահոցին",
"workspace.lifecycle.moving": "Տեղափոխվում է աշխատանքային տարածք",
"workspace.lifecycle.set": "Աշխատանքային տարածքը սահմանվեց",
"session.summary.title": "Նիստի մանրամասներ",
"session.summary.noBranch": "Ճյուղ չկա",
"session.summary.basedOn": "Հիմնված է {{branch}} ճյուղի վրա",
"provider.disconnect.toast.noCredentials.description": "{{provider}}-ի համար հեռացվող հավատարմագրեր չեն գտնվել։",
"provider.disconnect.toast.failed.description": "Չհաջողվեց անջատել {{provider}}-ը։",
"session.timeline.notice.instructionsUpdated": "Հրահանգները թարմացվեցին՝ {{sources}}",
"session.timeline.notice.restart": "Շարունակվում է վերագործարկումից հետո",
}
+21 -92
View File
@@ -308,9 +308,6 @@ export const dict = {
"provider.disconnect.toast.disconnected.title": "{{provider}} terputus",
"provider.disconnect.toast.disconnected.description": "Model {{provider}} tidak lagi tersedia.",
"provider.disconnect.toast.noCredentials.description":
"Tidak ditemukan kredensial yang dapat dihapus untuk {{provider}}.",
"provider.disconnect.toast.failed.description": "Gagal memutuskan {{provider}}.",
"model.tag.free": "Gratis",
"model.tag.latest": "Terbaru",
@@ -549,6 +546,20 @@ export const dict = {
"wsl.onboarding.versionMismatch": "Versi terinstal tidak cocok dengan versi aplikasi desktop.",
"wsl.onboarding.adding": "Menambahkan...",
"help.tabs.toast.ariaLabel": "Memperkenalkan Tab. Atur pekerjaan dan sesi aktif Anda dengan tab",
"help.tabs.toast.dismiss": "Tutup informasi tentang Tab",
"help.tabs.title": "Memperkenalkan Tab",
"help.tabs.description": "Atur pekerjaan dan sesi aktif Anda dengan tab",
"help.tabs.date": "14 Juli",
"help.tabs.introduction": "OpenCode Desktop kini dirancang dengan tab sebagai pusatnya.",
"help.tabs.sessions":
"Mulai sesi baru di tab, atau buka sesi yang sudah ada dari proyek Anda. Buka tab baru saat Anda memulai sesuatu yang baru, lalu tutup setelah selesai.",
"help.tabs.organize":
"Membiarkan beberapa tab tetap terbuka memudahkan Anda mengatur sesi aktif. Ganti nama tab agar mudah diingat jika Anda berencana mempertahankannya.",
"help.tabs.home": "Semua sesi dan proyek Anda tersedia di layar Beranda baru. Memilih sesi akan membukanya di tab.",
"help.tabs.persistence": "Saat Anda membuka kembali aplikasi, tab Anda tetap terbuka.",
"help.tabs.worktrees":
"Desain baru belum mendukung Git Worktrees, tetapi dukungan tersebut akan segera hadir. Jika Anda ingin tetap menggunakan tata letak sebelumnya, Anda dapat beralih antartata letak di Pengaturan. Perlu diingat bahwa tata letak baru akan menjadi permanen dalam beberapa minggu.",
"server.row.noUsername": "tanpa nama pengguna",
"dialog.project.edit.title": "Sunting proyek",
@@ -667,7 +678,6 @@ export const dict = {
"toast.session.listFailed.title": "Gagal memuat sesi untuk {{project}}",
"toast.project.reloadFailed.title": "Gagal memuat ulang {{project}}",
"toast.migration.failed.title": "Migrasi data gagal",
"toast.update.title": "Pembaruan tersedia",
"toast.update.description": "Versi baru OpenCode ({{version}}) sekarang tersedia untuk diinstal.",
@@ -763,19 +773,6 @@ export const dict = {
"session.error.notFound": "Sesi ini tidak dapat ditemukan",
"session.error.notFound.description": "Tab ini mengarah ke sesi yang sudah tidak ada di server ini.",
"session.error.notFound.closeTab": "Tutup Tab",
"session.background.moveTasks": "Pindahkan {{tasks}} ke latar belakang",
"session.background.inBackground": "Menjalankan {{tasks}} di latar belakang",
"session.background.combine": "{{first}} dan {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shell",
"session.background.subagent.one": "{{count}} subagen",
"session.background.subagent.other": "{{count}} subagen",
"command.session.background": "Pindahkan ke latar belakang",
"session.timeline.notice.finished": "{{actor}} selesai",
"session.timeline.notice.failed": "{{actor}} gagal",
"session.timeline.notice.cancelled": "{{actor}} dibatalkan",
"session.timeline.notice.instructionsUpdated": "Instruksi diperbarui: {{sources}}",
"session.timeline.notice.restart": "Melanjutkan setelah mulai ulang",
"session.error.serverConnection": "Tidak dapat terhubung ke server ini",
"session.review.filesChanged": "{{count}} Berkas Berubah",
"session.review.change.one": "Perubahan",
@@ -993,45 +990,12 @@ export const dict = {
"settings.section.desktop": "Desktop",
"settings.section.server": "Server",
"settings.tab.general": "Umum",
"settings.tab.preferences": "Preferensi",
"settings.tab.shortcuts": "Pintasan",
"settings.tab.notifications": "Notifikasi",
"settings.tab.projects": "Proyek",
"settings.tab.extensions": "Ekstensi",
"settings.preferences.description": "Sesuaikan preferensi, tema, dan perilaku bawaan",
"settings.appearance.description": "Sesuaikan tema dan font",
"settings.notifications.description": "Pilih kapan menerima notifikasi dan mendengar suara",
"settings.shortcuts.description": "Sesuaikan pintasan untuk tindakan umum",
"settings.servers.description": "Kelola koneksi server",
"settings.projects.title": "Proyek",
"settings.projects.description": "Kelola pengaturan proyek di server ini",
"settings.projects.empty": "Tidak ada proyek ditemukan",
"settings.projects.server.all": "Semua server",
"settings.mcps.description": "Kelola server dan alat Model Context Protocol (MCP)",
"settings.extensions.description": "Kelola ekstensi yang tersedia di server ini",
"settings.extensions.tab.mcps": "MCP",
"settings.extensions.tab.skills": "Keahlian",
"settings.extensions.availableAll": "Tersedia untuk semua proyek",
"settings.extensions.manageConfig": "Kelola di opencode.json",
"settings.extensions.addSkills": "Cara menambahkan keahlian",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "Integrasi WSL",
"settings.desktop.wsl.description": "Jalankan server OpenCode di dalam WSL di Windows.",
"dialog.server.authenticate.title": "Autentikasi",
"project.settings.general.description": "Kelola nama dan tampilan proyek",
"project.settings.scripts": "Skrip",
"project.settings.scripts.description": "Konfigurasikan skrip untuk proyek ini",
"project.settings.extensions.description": "Lihat ekstensi yang tersedia untuk proyek ini",
"project.settings.extensions.tab.lsps": "LSP",
"project.settings.extensions.added": "Ditambahkan ke proyek ini",
"project.settings.extensions.shared": "Dibagikan dengan semua proyek",
"project.settings.extensions.lsp.detected": "Server bahasa terdeteksi",
"project.settings.extensions.lsp.description": "Terdeteksi otomatis dari jenis berkas",
"project.settings.extensions.setupRequired": "Penyiapan diperlukan",
"settings.general.section.appearance": "Tampilan",
"settings.general.section.general": "Umum",
"settings.general.section.advanced": "Lanjutan",
"settings.general.section.notifications": "Notifikasi sistem",
"settings.general.section.updates": "Pembaruan",
@@ -1086,6 +1050,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Bentangkan bagian alat edit",
"settings.general.row.editToolPartsExpanded.description":
"Tampilkan bagian alat edit, tulis, dan patch yang dibentangkan secara bawaan di linimasa",
"settings.general.row.newInterface.title": "Tata letak baru",
"settings.general.row.newInterface.badge": "Baru",
"settings.general.row.newInterface.description":
"Gunakan tab dan tata letak beranda baru. Beralihlah antartata letak untuk waktu terbatas.",
"settings.general.row.newInterfaceNotice.title": "Anda sekarang menggunakan tata letak baru",
"settings.general.row.newInterfaceNotice.description": "Tata letak sebelumnya sudah tidak tersedia",
"settings.general.row.newInterfaceNotice.dismiss": "Tutup",
"settings.general.row.pinchZoom.title": "Cubit untuk zum",
"settings.general.row.pinchZoom.description":
"Izinkan gerakan cubit pada trackpad dan Ctrl-gulir untuk melakukan zum",
@@ -1252,48 +1223,6 @@ export const dict = {
"session.delete.button": "Hapus sesi",
"workspace.new": "Ruang kerja baru",
"common.viewAll": "Lihat semua",
"session.new.workspace.local.tooltip": "Gunakan checkout saat ini",
"session.new.workspace.new.tooltip": "Buat checkout terisolasi",
"session.new.workspace.fromBranch": "dari {{branch}}",
"session.new.workspace.trigger.tooltip": "Pilih tempat menjalankan sesi",
"session.new.workspace.search.placeholder": "Cari ruang kerja",
"settings.tab.workspaces": "Ruang kerja",
"settings.workspaces.filter.all": "Semua proyek",
"settings.workspaces.empty": "Tidak ada ruang kerja",
"settings.workspaces.count.one": "{{count}} ruang kerja",
"settings.workspaces.count.other": "{{count}} ruang kerja",
"settings.workspaces.sessions.one": "{{count}} sesi di {{project}}",
"settings.workspaces.sessions.other": "{{count}} sesi di {{project}}",
"settings.workspaces.lastActiveSession": "Sesi aktif terakhir",
"settings.workspaces.deleteAll": "Hapus semua ruang kerja",
"settings.workspaces.deleteAll.confirm": "Hapus semua {{count}} ruang kerja?",
"settings.workspaces.delete.warning":
"Direktori ruang kerja dan cabangnya akan dihapus secara permanen, termasuk perubahan yang belum digabung yang ditampilkan di bawah.",
"settings.workspaces.deleteAll.warning":
"Sebanyak {{count}} ruang kerja yang dipilih di {{project}} akan dihapus secara permanen hanya jika masing-masing bersih, tidak aktif, dan tidak memiliki sesi tertaut.",
"settings.workspaces.delete.blocked.active": "Ruang kerja aktif tidak dapat dihapus.",
"settings.workspaces.delete.blocked.linked":
"Sesi tertaut akan tetap ada, tetapi direktori kerjanya akan dihapus secara permanen.",
"settings.workspaces.default.title": "Lingkungan bawaan",
"settings.workspaces.default.description": "Pilih tempat sesi baru dimulai",
"settings.workspaces.default.lastUsed": "Terakhir digunakan per proyek",
"settings.workspaces.default.local": "Direktori lokal",
"settings.workspaces.default.new": "Ruang kerja baru",
"workspace.move.title": "Pindahkan ke ruang kerja",
"workspace.move.menu.title": "Pindahkan sesi ke",
"workspace.move.failed": "Gagal memindahkan sesi",
"workspace.lifecycle.creating": "Membuat ruang kerja",
"workspace.lifecycle.created": "Ruang kerja dibuat",
"workspace.lifecycle.starting": "Memulai sesi",
"workspace.onboarding.title": "Isolasi sesi dengan ruang kerja",
"workspace.onboarding.description":
"Setiap sesi mendapatkan checkout sendiri, sehingga tidak mengganggu repositori lokal Anda",
"workspace.lifecycle.moving": "Memindahkan ke ruang kerja",
"workspace.lifecycle.set": "Ruang kerja ditetapkan",
"session.summary.title": "Detail sesi",
"session.summary.noBranch": "Tanpa cabang",
"session.summary.basedOn": "Berdasarkan {{branch}}",
"workspace.type.local": "lokal",
"workspace.type.sandbox": "sandbox",
"workspace.create.failed.title": "Gagal membuat ruang kerja",
+21 -89
View File
@@ -513,6 +513,20 @@ export const dict = {
"wsl.onboarding.desktopVersion": "skrifborð {{version}}",
"wsl.onboarding.versionMismatch": "Uppsett útgáfa passar ekki við útgáfu skrifborðsforritsins.",
"wsl.onboarding.adding": "Bætir við...",
"help.tabs.toast.ariaLabel": "Við kynnum Tab. Skipuleggðu vinnu þína og virkar lotur með flipa",
"help.tabs.toast.dismiss": "Hunsa upplýsingar Tab",
"help.tabs.title": "Við kynnum Tab",
"help.tabs.description": "Skipuleggðu vinnu þína og virkar lotur með flipa",
"help.tabs.date": "14. júlí",
"help.tabs.introduction": "OpenCode Desktop er nú byggt í kringum flipa.",
"help.tabs.sessions":
"Byrjaðu nýja lotu í flipa eða opnaðu fyrirliggjandi lotu úr einhverju verkefnanna þinna. Opnaðu nýjan flipa þegar þú ert að byrja á einhverju nýju og lokaðu honum þegar þú ert búinn.",
"help.tabs.organize":
"Með því að hafa nokkra flipa opna er auðveldara að skipuleggja virku seturnar þínar. Endurnefndu flipa á eftirminnilegan hátt ef þú ætlar að geyma þá.",
"help.tabs.home": "Þú finnur allar lotur og verkefni á nýja Home skjánum. Með því að velja lotu opnast það í flipa.",
"help.tabs.persistence": "Þegar þú opnar forritið aftur eru fliparnir þínir enn opnir.",
"help.tabs.worktrees":
"Nýja hönnunin styður ekki Git Worktrees ennþá, hún kemur fljótlega. Þannig að ef þú vilt halda áfram að nota fyrra útlitið geturðu skipt á milli útlita í stillingum. Hafðu bara í huga að nýja skipulagið verður varanlegt eftir nokkrar vikur.",
"server.row.noUsername": "ekkert notendanafn",
"dialog.project.edit.title": "Breyta verkefni",
"dialog.project.edit.name": "Nafn",
@@ -956,6 +970,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Stækkaðu breytingaverkfærahluta",
"settings.general.row.editToolPartsExpanded.description":
"Sýna breytinga-, skrifa- og plástraverkfæri hluta sjálfgefið stækkað á tímalínunni",
"settings.general.row.newInterface.title": "Nýtt skipulag",
"settings.general.row.newInterface.badge": "Nýtt",
"settings.general.row.newInterface.description":
"Notaðu nýju flipana og heimilisútlitið. Skiptu á milli útlita í takmarkaðan tíma.",
"settings.general.row.newInterfaceNotice.title": "Þú ert núna að nota nýtt skipulag",
"settings.general.row.newInterfaceNotice.description": "Fyrra skipulagið er ekki lengur tiltækt",
"settings.general.row.newInterfaceNotice.dismiss": "Segja frá",
"settings.general.row.pinchZoom.title": "Klíptu til að þysja",
"settings.general.row.pinchZoom.description": "Leyfðu að klípa og Ctrl-fletta bendingar til að þysja",
"settings.general.row.wayland.title": "Notaðu innfæddan Wayland",
@@ -1108,47 +1129,6 @@ export const dict = {
"session.delete.confirm": 'Eyða setunni "{{name}}"?',
"session.delete.button": "Eyða setu",
"workspace.new": "Nýtt vinnurými",
"common.viewAll": "Sýna allt",
"session.new.workspace.local.tooltip": "Nota núverandi checkout",
"session.new.workspace.new.tooltip": "Búa til einangrað checkout",
"session.new.workspace.fromBranch": "frá {{branch}}",
"session.new.workspace.trigger.tooltip": "Veldu hvar setan á að keyra",
"session.new.workspace.search.placeholder": "Leita að vinnusvæðum",
"settings.tab.workspaces": "Vinnusvæði",
"settings.workspaces.filter.all": "Öll verkefni",
"settings.workspaces.empty": "Engin vinnusvæði",
"settings.workspaces.count.one": "{{count}} vinnusvæði",
"settings.workspaces.count.other": "{{count}} vinnusvæði",
"settings.workspaces.sessions.one": "{{count}} seta í {{project}}",
"settings.workspaces.sessions.other": "{{count}} setur í {{project}}",
"settings.workspaces.lastActiveSession": "Síðasta virka seta",
"settings.workspaces.deleteAll": "Eyða öllum vinnusvæðum",
"settings.workspaces.deleteAll.confirm": "Eyða öllum {{count}} vinnusvæðunum?",
"settings.workspaces.delete.warning":
"Möppu og grein vinnusvæðisins verður eytt varanlega, ásamt öllum ósameinuðum breytingum sem sýndar eru hér fyrir neðan.",
"settings.workspaces.deleteAll.warning":
"Völdu {{count}} vinnusvæðunum í {{project}} verður aðeins eytt varanlega ef þau eru öll hrein, óvirk og án tengdra seta.",
"settings.workspaces.delete.blocked.active": "Ekki er hægt að eyða virka vinnusvæðinu.",
"settings.workspaces.delete.blocked.linked":
"Tengdar setur verða áfram til, en vinnumöppu þeirra verður eytt varanlega.",
"settings.workspaces.default.title": "Sjálfgefið umhverfi",
"settings.workspaces.default.description": "Veldu hvar nýjar setur hefjast",
"settings.workspaces.default.lastUsed": "Síðast notað fyrir hvert verkefni",
"settings.workspaces.default.local": "Staðbundin mappa",
"settings.workspaces.default.new": "Nýtt vinnusvæði",
"workspace.move.title": "Færa á vinnusvæði",
"workspace.move.menu.title": "Færa setu í",
"workspace.move.failed": "Mistókst að færa setu",
"workspace.lifecycle.creating": "Býr til vinnusvæði",
"workspace.lifecycle.created": "Vinnusvæði búið til",
"workspace.lifecycle.starting": "Ræsir setu",
"workspace.onboarding.title": "Einangraðu setur með vinnusvæðum",
"workspace.onboarding.description": "Hver seta fær sitt eigið checkout, svo ekkert truflar staðbundnu geymsluna",
"workspace.lifecycle.moving": "Færir á vinnusvæði",
"workspace.lifecycle.set": "Vinnusvæði valið",
"session.summary.title": "Upplýsingar um setu",
"session.summary.noBranch": "Engin grein",
"session.summary.basedOn": "Byggt á {{branch}}",
"workspace.type.local": "staðbundið",
"workspace.type.sandbox": "sandkassi",
"workspace.create.failed.title": "Mistókst að búa til vinnusvæði",
@@ -1174,52 +1154,4 @@ export const dict = {
"workspace.reset.archived.many": "{{count}} setur verða settar í geymslu.",
"workspace.reset.note": "Þetta mun endurstilla vinnusvæðið til að passa við sjálfgefna útibúið.",
"dialog.usageExceeded.dontShowAgain": "Ekki sýna aftur",
"provider.disconnect.toast.noCredentials.description": "Engin fjarlægjanleg skilríki fundust fyrir {{provider}}.",
"provider.disconnect.toast.failed.description": "Mistókst að aftengja {{provider}}.",
"toast.migration.failed.title": "Gagnaflutningur mistókst",
"session.background.moveTasks": "Færa {{tasks}} í bakgrunn",
"session.background.inBackground": "Keyri {{tasks}} í bakgrunni",
"session.background.combine": "{{first}} og {{second}}",
"session.background.shell.one": "{{count}} skel",
"session.background.shell.other": "{{count}} skeljar",
"session.background.subagent.one": "{{count}} undirfulltrúi",
"session.background.subagent.other": "{{count}} undirfulltrúar",
"command.session.background": "Færa í bakgrunn",
"session.timeline.notice.finished": "{{actor}} lauk verki",
"session.timeline.notice.failed": "{{actor}} mistókst",
"session.timeline.notice.cancelled": "{{actor}} var afturkallaður",
"session.timeline.notice.instructionsUpdated": "Leiðbeiningar uppfærðar: {{sources}}",
"session.timeline.notice.restart": "Haldið áfram eftir endurræsingu",
"settings.tab.preferences": "Kjörstillingar",
"settings.tab.notifications": "Tilkynningar",
"settings.tab.projects": "Verkefni",
"settings.tab.extensions": "Viðbætur",
"settings.preferences.description": "Sérsníddu kjörstillingar, þema og sjálfgefna hegðun",
"settings.appearance.description": "Sérsníddu þema og leturgerðir",
"settings.notifications.description": "Veldu hvenær þú færð tilkynningar og heyrir hljóð",
"settings.shortcuts.description": "Sérsníddu flýtileiðir fyrir algengar aðgerðir",
"settings.servers.description": "Stjórnaðu tengingum við netþjóna",
"settings.projects.title": "Verkefni",
"settings.projects.description": "Stjórnaðu verkefnastillingum á þessum netþjóni",
"settings.projects.empty": "Engin verkefni fundust",
"settings.projects.server.all": "Allir netþjónar",
"settings.mcps.description": "Stjórnaðu Model Context Protocol (MCP) netþjónum og verkfærum",
"settings.extensions.description": "Stjórnaðu viðbótum sem eru tiltækar á þessum netþjóni",
"settings.extensions.tab.mcps": "MCP",
"settings.extensions.tab.skills": "Færni",
"settings.extensions.availableAll": "Tiltækt fyrir öll verkefni",
"settings.extensions.manageConfig": "Stjórna í opencode.json",
"settings.extensions.addSkills": "Hvernig bæta á við færni",
"dialog.server.authenticate.title": "Auðkenna",
"project.settings.general.description": "Stjórnaðu heiti og útliti verkefnisins",
"project.settings.scripts": "Skriftur",
"project.settings.scripts.description": "Stilltu skriftur fyrir þetta verkefni",
"project.settings.extensions.description": "Skoðaðu viðbætur sem eru tiltækar fyrir þetta verkefni",
"project.settings.extensions.tab.lsps": "LSP",
"project.settings.extensions.added": "Bætt við þetta verkefni",
"project.settings.extensions.shared": "Deilt með öllum verkefnum",
"project.settings.extensions.lsp.detected": "Tungumálaþjónar fundust",
"project.settings.extensions.lsp.description": "Sjálfvirkt greint út frá skráargerðum",
"project.settings.extensions.setupRequired": "Uppsetningar krafist",
"settings.general.section.general": "Almennt",
}
+22 -95
View File
@@ -418,6 +418,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "desktop {{version}}",
"wsl.onboarding.versionMismatch": "La versione installata non corrisponde alla versione dell'app desktop.",
"wsl.onboarding.adding": "Aggiunta...",
"help.tabs.toast.ariaLabel": "Novità: le schede. Organizza il lavoro e le sessioni attive con le schede",
"help.tabs.toast.dismiss": "Ignora le informazioni sulle schede",
"help.tabs.title": "Novità: le schede",
"help.tabs.description": "Organizza il lavoro e le sessioni attive con le schede",
"help.tabs.date": "14 luglio",
"help.tabs.introduction": "OpenCode Desktop ora è incentrato sulle schede.",
"help.tabs.sessions":
"Avvia una nuova sessione in una scheda oppure apri una sessione esistente da uno dei tuoi progetti. Apri una nuova scheda quando inizi qualcosa di nuovo e chiudila quando hai finito.",
"help.tabs.organize":
"Tenere aperte alcune schede semplifica l'organizzazione delle sessioni attive. Se prevedi di conservarle, rinominale con un nome facile da ricordare.",
"help.tabs.home":
"Troverai tutte le sessioni e i progetti nella nuova schermata Home. Quando selezioni una sessione, questa si apre in una scheda.",
"help.tabs.persistence": "Quando riapri l'app, le schede sono ancora aperte.",
"help.tabs.worktrees":
"Il nuovo design non supporta ancora Git Worktrees, ma il supporto arriverà presto. Se preferisci continuare a utilizzare la disposizione precedente, puoi passare da una disposizione all'altra nelle Impostazioni. Tieni presente che la nuova disposizione diventerà permanente tra alcune settimane.",
"server.row.noUsername": "nessun nome utente",
"dialog.project.edit.title": "Modifica progetto",
"dialog.project.edit.name": "Nome",
@@ -878,6 +893,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Espandi le parti dello strumento di modifica",
"settings.general.row.editToolPartsExpanded.description":
"Mostra le parti degli strumenti di modifica, scrittura e patch espanse per impostazione predefinita nella sequenza temporale",
"settings.general.row.newInterface.title": "Nuova disposizione",
"settings.general.row.newInterface.badge": "Nuovo",
"settings.general.row.newInterface.description":
"Utilizza le nuove schede e il layout della home page. Passa da un layout all'altro per un periodo limitato.",
"settings.general.row.newInterfaceNotice.title": "Ora stai utilizzando il nuovo layout",
"settings.general.row.newInterfaceNotice.description": "Il layout precedente non è più disponibile",
"settings.general.row.newInterfaceNotice.dismiss": "Ignora",
"settings.general.row.pinchZoom.title": "Pizzica per ingrandire",
"settings.general.row.pinchZoom.description":
"Consenti i gesti di pizzicamento del trackpad e di scorrimento Ctrl per eseguire lo zoom",
@@ -1151,99 +1173,4 @@ export const dict = {
"desktop.wsl.error.failedPort": "Impossibile ottenere la porta",
"desktop.picker.error.notSelected": "Il file non è stato selezionato nella finestra di selezione",
"desktop.picker.error.sizeLimit": "Gli allegati selezionati superano il limite di {{limit}} MB",
"provider.disconnect.toast.noCredentials.description": "Nessuna credenziale rimovibile trovata per {{provider}}.",
"provider.disconnect.toast.failed.description": "Impossibile disconnettere {{provider}}.",
"toast.migration.failed.title": "La migrazione dei dati non è riuscita",
"session.background.moveTasks": "Sposta {{tasks}} sullo sfondo",
"session.background.inBackground": "Esecuzione di {{tasks}} in background",
"session.background.combine": "{{first}} e {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shell",
"session.background.subagent.one": "{{count}} subagente",
"session.background.subagent.other": "{{count}} subagenti",
"command.session.background": "Passa allo sfondo",
"session.timeline.notice.finished": "{{actor}} finito",
"session.timeline.notice.failed": "{{actor}} non è riuscito",
"session.timeline.notice.cancelled": "{{actor}} cancellato",
"session.timeline.notice.instructionsUpdated": "Istruzioni aggiornate: {{sources}}",
"session.timeline.notice.restart": "Continua dopo il riavvio",
"settings.tab.preferences": "Preferenze",
"settings.tab.notifications": "Notifiche",
"settings.tab.projects": "Progetti",
"settings.tab.extensions": "Estensioni",
"settings.preferences.description": "Personalizza le preferenze, il tema e il comportamento predefinito",
"settings.appearance.description": "Personalizza tema e caratteri",
"settings.notifications.description": "Scegli quando ricevere le notifiche e ascoltare i suoni",
"settings.shortcuts.description": "Personalizza le scorciatoie per le azioni comuni",
"settings.servers.description": "Gestire le connessioni al server",
"settings.projects.title": "Progetti",
"settings.projects.description": "Gestisci le impostazioni del progetto su questo server",
"settings.projects.empty": "Nessun progetto trovato",
"settings.projects.server.all": "Tutti i server",
"settings.mcps.description": "Gestire server e strumenti MCP (Model Context Protocol).",
"settings.extensions.description": "Gestisci le estensioni disponibili su questo server",
"settings.extensions.tab.mcps": "MCP",
"settings.extensions.tab.skills": "Competenze",
"settings.extensions.availableAll": "Disponibile per tutti i progetti",
"settings.extensions.manageConfig": "Gestisci in opencode.json",
"settings.extensions.addSkills": "Come aggiungere competenze",
"dialog.server.authenticate.title": "Autenticare",
"project.settings.general.description": "Gestisci il nome e l'aspetto del progetto",
"project.settings.scripts": "Script",
"project.settings.scripts.description": "Configura gli script per questo progetto",
"project.settings.extensions.description": "Visualizza le estensioni disponibili per questo progetto",
"project.settings.extensions.tab.lsps": "LSP",
"project.settings.extensions.added": "Aggiunto a questo progetto",
"project.settings.extensions.shared": "Condiviso con tutti i progetti",
"project.settings.extensions.lsp.detected": "Server delle lingue rilevati",
"project.settings.extensions.lsp.description": "Rilevato automaticamente dai tipi di file",
"project.settings.extensions.setupRequired": "È richiesta la configurazione",
"settings.general.section.general": "Generale",
"common.viewAll": "Visualizza tutto",
"session.new.workspace.local.tooltip": "Usa il checkout corrente",
"session.new.workspace.new.tooltip": "Crea checkout isolato",
"session.new.workspace.fromBranch": "da {{branch}}",
"session.new.workspace.trigger.tooltip": "Seleziona dove eseguire la sessione",
"session.new.workspace.search.placeholder": "Cerca spazi di lavoro",
"settings.tab.workspaces": "Spazi di lavoro",
"settings.workspaces.filter.all": "Tutti i progetti",
"settings.workspaces.empty": "Nessuno spazio di lavoro",
"settings.workspaces.count.one": "Area di lavoro {{count}}",
"settings.workspaces.count.other": "Aree di lavoro {{count}}",
"settings.workspaces.sessions.one": "Sessione {{count}} in {{project}}",
"settings.workspaces.sessions.other": "Sessioni {{count}} in {{project}}",
"settings.workspaces.lastActiveSession": "Ultima sessione attiva",
"settings.workspaces.deleteAll": "Elimina tutte le aree di lavoro",
"settings.workspaces.deleteAll.confirm": "Eliminare tutti gli spazi di lavoro {{count}}?",
"settings.workspaces.delete.warning":
"La directory e il ramo dell'area di lavoro verranno rimossi in modo permanente, incluse eventuali modifiche non unite mostrate di seguito.",
"settings.workspaces.deleteAll.warning":
"Gli spazi di lavoro selezionati {{count}} in {{project}} verranno rimossi in modo permanente solo se ciascuno è pulito, inattivo e non ha sessioni collegate.",
"settings.workspaces.delete.blocked.active": "L'area di lavoro attiva non può essere eliminata.",
"settings.workspaces.delete.blocked.linked":
"Le sessioni collegate rimarranno, ma la loro directory di lavoro verrà rimossa in modo permanente.",
"settings.workspaces.default.title": "Ambiente predefinito",
"settings.workspaces.default.description": "Scegli dove iniziare le nuove sessioni",
"settings.workspaces.default.lastUsed": "Ultimo utilizzo per progetto",
"settings.workspaces.default.local": "Directory locale",
"settings.workspaces.default.new": "Nuovo spazio di lavoro",
"workspace.move.title": "Spostarsi nell'area di lavoro",
"workspace.move.menu.title": "Sposta la sessione in",
"workspace.move.failed": "Impossibile spostare la sessione",
"workspace.lifecycle.creating": "Creazione dello spazio di lavoro",
"workspace.lifecycle.created": "Area di lavoro creata",
"workspace.lifecycle.starting": "Avvio della sessione",
"workspace.onboarding.title": "Isolare le sessioni con spazi di lavoro",
"workspace.onboarding.description":
"Ognuno riceve il proprio checkout, quindi nulla interferisce con il tuo repository locale",
"workspace.lifecycle.moving": "Spostarsi nello spazio di lavoro",
"workspace.lifecycle.set": "Area di lavoro impostata",
"session.summary.title": "Dettagli della sessione",
"session.summary.noBranch": "Nessun ramo",
"session.summary.basedOn": "Basato su {{branch}}",
"session.background.shell.many": "{{count}} shell",
"session.background.subagent.many": "{{count}} subagenti",
"settings.workspaces.count.many": "{{count}} aree di lavoro",
"settings.workspaces.sessions.many": "{{count}} sessioni in {{project}}",
}
+22 -90
View File
@@ -291,8 +291,6 @@ export const dict = {
"provider.custom.error.duplicate": "重複",
"provider.disconnect.toast.disconnected.title": "{{provider}}が切断されました",
"provider.disconnect.toast.disconnected.description": "{{provider}}のモデルは利用できなくなりました。",
"provider.disconnect.toast.noCredentials.description": "{{provider}}の削除可能な認証情報が見つかりませんでした。",
"provider.disconnect.toast.failed.description": "{{provider}}の切断に失敗しました。",
"model.tag.free": "無料",
"model.tag.latest": "最新",
"model.provider.anthropic": "Anthropic",
@@ -511,6 +509,21 @@ export const dict = {
"wsl.onboarding.versionMismatch": "インストールされているバージョンがデスクトップアプリのバージョンと一致しません。",
"wsl.onboarding.adding": "追加中...",
"help.tabs.toast.ariaLabel": "タブのご紹介。タブを使って作業と進行中のセッションを整理できます",
"help.tabs.toast.dismiss": "タブに関する案内を閉じる",
"help.tabs.title": "タブのご紹介",
"help.tabs.description": "タブを使って作業と進行中のセッションを整理できます",
"help.tabs.date": "7月14日",
"help.tabs.introduction": "OpenCode Desktopでタブを中心とした操作ができるようになりました。",
"help.tabs.sessions":
"新しいセッションをタブで開始したり、プロジェクトから既存のセッションを開いたりできます。新しい作業を始めるときは新しいタブを開き、作業が終わったら閉じます。",
"help.tabs.organize":
"複数のタブを開いておくと、進行中のセッションを整理しやすくなります。タブを残しておく場合は、覚えやすい名前に変更できます。",
"help.tabs.home":
"新しいホーム画面には、すべてのセッションとプロジェクトが表示されます。セッションを選択するとタブで開きます。",
"help.tabs.persistence": "アプリを再度開いたときも、タブは開いたままです。",
"help.tabs.worktrees":
"新しいデザインはまだGitワークツリーに対応していませんが、近日中に対応する予定です。以前のレイアウトを引き続き使用する場合は、設定でレイアウトを切り替えることができます。新しいレイアウトは数週間後に標準となる予定です。",
"dialog.project.edit.title": "プロジェクトを編集",
"dialog.project.edit.name": "名前",
"dialog.project.edit.icon": "アイコン",
@@ -608,7 +621,6 @@ export const dict = {
"toast.session.export.failed.description": "セッションのエクスポート中にエラーが発生しました",
"toast.session.listFailed.title": "{{project}}のセッション読み込みに失敗しました",
"toast.migration.failed.title": "データ移行に失敗しました",
"toast.update.title": "アップデートが利用可能です",
"toast.update.description": "OpenCodeの新しいバージョン ({{version}}) がインストール可能です。",
"toast.update.action.installRestart": "インストールして再起動",
@@ -686,19 +698,6 @@ export const dict = {
"session.error.notFound": "このセッションが見つかりません",
"session.error.notFound.description": "このタブが参照するセッションは、このサーバーには存在しません。",
"session.error.notFound.closeTab": "タブを閉じる",
"session.background.moveTasks": "{{tasks}}をバックグラウンドに移動",
"session.background.inBackground": "{{tasks}}をバックグラウンドで実行中",
"session.background.combine": "{{first}}と{{second}}",
"session.background.shell.one": "{{count}}件のシェル",
"session.background.shell.other": "{{count}}件のシェル",
"session.background.subagent.one": "{{count}}件のサブエージェント",
"session.background.subagent.other": "{{count}}件のサブエージェント",
"command.session.background": "バックグラウンドに移動",
"session.timeline.notice.finished": "{{actor}}が完了しました",
"session.timeline.notice.failed": "{{actor}}が失敗しました",
"session.timeline.notice.cancelled": "{{actor}}がキャンセルされました",
"session.timeline.notice.instructionsUpdated": "指示を更新しました: {{sources}}",
"session.timeline.notice.restart": "再起動後に続行中",
"session.error.serverConnection": "このサーバーに接続できません",
"session.review.filesChanged": "変更されたファイル: {{count}}件",
"session.review.change.one": "変更",
@@ -748,12 +747,7 @@ export const dict = {
"session.new.workspace.runIn": "セッションの実行先",
"session.new.workspace.triggerLocal": "ローカル",
"session.new.workspace.local": "ローカルリポジトリ",
"session.new.workspace.local.tooltip": "現在のチェックアウトを使用",
"session.new.workspace.existing": "ワークスペース…",
"session.new.workspace.new.tooltip": "独立したチェックアウトを作成",
"session.new.workspace.fromBranch": "{{branch}}から",
"session.new.workspace.trigger.tooltip": "セッションの実行先を選択",
"session.new.workspace.search.placeholder": "ワークスペースを検索",
"session.new.git.none": "Git なし",
"session.new.lastModified": "最終更新",
"session.header.search.placeholder": "{{project}}を検索",
@@ -825,42 +819,10 @@ export const dict = {
"settings.section.desktop": "デスクトップ",
"settings.section.server": "サーバー",
"settings.tab.general": "一般",
"settings.tab.preferences": "環境設定",
"settings.tab.shortcuts": "ショートカット",
"settings.tab.notifications": "通知",
"settings.tab.projects": "プロジェクト",
"settings.tab.extensions": "拡張機能",
"settings.preferences.description": "環境設定、テーマ、デフォルトの動作をカスタマイズします",
"settings.appearance.description": "テーマとフォントをカスタマイズします",
"settings.notifications.description": "通知を受け取り、サウンドを鳴らすタイミングを選択します",
"settings.shortcuts.description": "よく使う操作のショートカットをカスタマイズします",
"settings.servers.description": "サーバー接続を管理します",
"settings.projects.title": "プロジェクト",
"settings.projects.description": "このサーバーのプロジェクト設定を管理します",
"settings.projects.empty": "プロジェクトが見つかりません",
"settings.projects.server.all": "すべてのサーバー",
"settings.mcps.description": "Model Context Protocol (MCP) サーバーとツールを管理します",
"settings.extensions.description": "このサーバーで利用可能な拡張機能を管理します",
"settings.extensions.tab.mcps": "MCP",
"settings.extensions.tab.skills": "スキル",
"settings.extensions.availableAll": "すべてのプロジェクトで利用可能",
"settings.extensions.manageConfig": "opencode.jsonで管理",
"settings.extensions.addSkills": "スキルの追加方法",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "WSL連携",
"settings.desktop.wsl.description": "WindowsのWSL環境でOpenCodeサーバーを実行します。",
"dialog.server.authenticate.title": "認証",
"project.settings.general.description": "プロジェクト名と外観を管理します",
"project.settings.scripts": "スクリプト",
"project.settings.scripts.description": "このプロジェクトのスクリプトを設定します",
"project.settings.extensions.description": "このプロジェクトで利用可能な拡張機能を表示します",
"project.settings.extensions.tab.lsps": "LSP",
"project.settings.extensions.added": "このプロジェクトに追加済み",
"project.settings.extensions.shared": "すべてのプロジェクトで共有",
"project.settings.extensions.lsp.detected": "検出された言語サーバー",
"project.settings.extensions.lsp.description": "ファイルタイプから自動検出",
"project.settings.extensions.setupRequired": "セットアップが必要",
"settings.general.section.general": "一般",
"settings.general.section.appearance": "外観",
"settings.general.section.advanced": "詳細設定",
"settings.general.section.notifications": "システム通知",
@@ -916,6 +878,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "edit ツールパーツを展開",
"settings.general.row.editToolPartsExpanded.description":
"タイムラインで edit、write、patch ツールパーツをデフォルトで展開して表示します",
"settings.general.row.newInterface.title": "新しいレイアウト",
"settings.general.row.newInterface.badge": "新機能",
"settings.general.row.newInterface.description":
"新しいタブとホーム画面のレイアウトを使用します。期間限定でレイアウトを切り替えられます。",
"settings.general.row.newInterfaceNotice.title": "新しいレイアウトを使用しています",
"settings.general.row.newInterfaceNotice.description": "以前のレイアウトは利用できなくなりました",
"settings.general.row.newInterfaceNotice.dismiss": "閉じる",
"settings.general.row.pinchZoom.title": "ピンチでズーム",
"settings.general.row.pinchZoom.description":
"トラックパッドのピンチ操作とCtrl+スクロール操作によるズームを許可します",
@@ -1067,43 +1036,6 @@ export const dict = {
"session.delete.confirm": 'セッション "{{name}}" を削除しますか?',
"session.delete.button": "セッションを削除",
"workspace.new": "新しいワークスペース",
"common.viewAll": "すべて表示",
"settings.tab.workspaces": "ワークスペース",
"settings.workspaces.filter.all": "すべてのプロジェクト",
"settings.workspaces.empty": "ワークスペースはありません",
"settings.workspaces.count.one": "{{count}}件のワークスペース",
"settings.workspaces.count.other": "{{count}}件のワークスペース",
"settings.workspaces.sessions.one": "{{project}}の{{count}}件のセッション",
"settings.workspaces.sessions.other": "{{project}}の{{count}}件のセッション",
"settings.workspaces.lastActiveSession": "最後にアクティブだったセッション",
"settings.workspaces.deleteAll": "すべてのワークスペースを削除",
"settings.workspaces.deleteAll.confirm": "{{count}}件すべてのワークスペースを削除しますか?",
"settings.workspaces.delete.warning":
"ワークスペースのディレクトリとブランチは、以下に表示されている未マージの変更を含めて完全に削除されます。",
"settings.workspaces.deleteAll.warning":
"{{project}}で選択した{{count}}件のワークスペースは、それぞれがクリーンで非アクティブ、かつリンクされたセッションがない場合にのみ完全に削除されます。",
"settings.workspaces.delete.blocked.active": "アクティブなワークスペースは削除できません。",
"settings.workspaces.delete.blocked.linked":
"リンクされたセッションは残りますが、その作業ディレクトリは完全に削除されます。",
"settings.workspaces.default.title": "デフォルト環境",
"settings.workspaces.default.description": "新しいセッションの開始場所を選択します",
"settings.workspaces.default.lastUsed": "プロジェクトごとの前回使用先",
"settings.workspaces.default.local": "ローカルディレクトリ",
"settings.workspaces.default.new": "新しいワークスペース",
"workspace.move.title": "ワークスペースに移動",
"workspace.move.menu.title": "セッションの移動先",
"workspace.move.failed": "セッションの移動に失敗しました",
"workspace.lifecycle.creating": "ワークスペースを作成中",
"workspace.lifecycle.created": "ワークスペースを作成しました",
"workspace.lifecycle.starting": "セッションを開始中",
"workspace.onboarding.title": "ワークスペースでセッションを分離",
"workspace.onboarding.description":
"各セッションに専用のチェックアウトが割り当てられるため、ローカルリポジトリに干渉しません",
"workspace.lifecycle.moving": "ワークスペースに移動中",
"workspace.lifecycle.set": "ワークスペースを設定しました",
"session.summary.title": "セッション詳細",
"session.summary.noBranch": "ブランチなし",
"session.summary.basedOn": "{{branch}}に基づく",
"workspace.type.local": "ローカル",
"workspace.type.sandbox": "サンドボックス",
"workspace.create.failed.title": "ワークスペースの作成に失敗しました",
+22 -90
View File
@@ -509,6 +509,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "დესკტოპის {{version}}",
"wsl.onboarding.versionMismatch": "დაინსტალირებული ვერსია არ ემთხვევა დესკტოპის აპის ვერსიას.",
"wsl.onboarding.adding": "დამატება...",
"help.tabs.toast.ariaLabel": "გაცნობა ჩანართებს. მოაწყეთ თქვენი სამუშაო და აქტიური სესიები ჩანართებით",
"help.tabs.toast.dismiss": "ჩანართების ინფორმაციის უარყოფა",
"help.tabs.title": "ჩანართების გაცნობა",
"help.tabs.description": "მოაწყვეთ თქვენი სამუშაო და აქტიური სესიები ჩანართებით",
"help.tabs.date": "14 ივლისი",
"help.tabs.introduction": "OpenCode სამუშაო მაგიდა ახლა აგებულია ჩანართების გარშემო.",
"help.tabs.sessions":
"დაიწყეთ ახალი სესია ჩანართში, ან გახსენით არსებული სესია თქვენი რომელიმე პროექტიდან. გახსენით ახალი ჩანართი, როდესაც რაიმე ახალს იწყებთ და დახურეთ, როდესაც დაასრულებთ.",
"help.tabs.organize":
"რამდენიმე ჩანართის გახსნა გაადვილებს თქვენი აქტიური სესიების ორგანიზებას. გადაარქვით ჩანართებს რაიმე დასამახსოვრებლად, თუ აპირებთ მათ შენარჩუნებას.",
"help.tabs.home":
"თქვენ იპოვით ყველა თქვენს სესიას და პროექტს ახალ მთავარ ეკრანზე. სესიის არჩევა ხსნის მას ჩანართში.",
"help.tabs.persistence": "აპის ხელახლა გახსნისას, თქვენი ჩანართები კვლავ ღიაა.",
"help.tabs.worktrees":
"ახალი დიზაინი ჯერ არ უჭერს მხარს Git Worktrees-ს, ის მალე გამოვა. ასე რომ, თუ გსურთ გააგრძელოთ წინა განლაგების გამოყენება, შეგიძლიათ გადართოთ განლაგებებს შორის პარამეტრებიდან. უბრალოდ გაითვალისწინეთ, რომ ახალი განლაგება მუდმივი გახდება რამდენიმე კვირაში.",
"server.row.noUsername": "მომხმარებლის სახელის გარეშე",
"dialog.project.edit.title": "პროექტის რედაქტირება",
"dialog.project.edit.name": "სახელი",
@@ -954,6 +969,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "გაფართოვდეს ხელსაწყოს ნაწილები",
"settings.general.row.editToolPartsExpanded.description":
"აჩვენეთ რედაქტირების, ჩაწერის და პაჩის ხელსაწყოს ნაწილები, რომლებიც ნაგულისხმევად გაფართოვდა ვადებში",
"settings.general.row.newInterface.title": "ახალი განლაგება",
"settings.general.row.newInterface.badge": "ახალი",
"settings.general.row.newInterface.description":
"გამოიყენეთ ახალი ჩანართები და სახლის განლაგება. განლაგებებს შორის გადართვა შეზღუდული დროით.",
"settings.general.row.newInterfaceNotice.title": "თქვენ ახლა იყენებთ ახალ განლაგებას",
"settings.general.row.newInterfaceNotice.description": "წინა განლაგება აღარ არის ხელმისაწვდომი",
"settings.general.row.newInterfaceNotice.dismiss": "დატოვება",
"settings.general.row.pinchZoom.title": "დააჭირე გასადიდებლად",
"settings.general.row.pinchZoom.description": "Trackpad pinch და Ctrl-scroll ჟესტებით მასშტაბირება",
"settings.general.row.wayland.title": "გამოიყენე მშობლიური Wayland",
@@ -1131,94 +1153,4 @@ export const dict = {
"workspace.reset.archived.many": "{{count}} სესია დაარქივდება.",
"workspace.reset.note": "ეს აღადგენს სამუშაო სივრცეს ნაგულისხმევი ფილიალის შესატყვისად.",
"dialog.usageExceeded.dontShowAgain": "აღარ მაჩვენო",
"toast.migration.failed.title": "მონაცემების მიგრაცია ვერ შესრულდა",
"session.background.moveTasks": "{{tasks}}-ის ფონურ რეჟიმში გადატანა",
"session.background.inBackground": "{{tasks}} ფონურ რეჟიმში მუშაობს",
"session.background.combine": "{{first}} და {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shell",
"session.background.subagent.one": "{{count}} ქვეაგენტი",
"session.background.subagent.other": "{{count}} ქვეაგენტი",
"command.session.background": "ფონურ რეჟიმში გადატანა",
"session.timeline.notice.finished": "{{actor}} დასრულდა",
"session.timeline.notice.failed": "{{actor}} ვერ შესრულდა",
"session.timeline.notice.cancelled": "{{actor}} გაუქმდა",
"settings.tab.preferences": "პარამეტრები",
"settings.tab.notifications": "შეტყობინებები",
"settings.tab.projects": "პროექტები",
"settings.tab.extensions": "გაფართოებები",
"settings.preferences.description": "მოარგეთ პარამეტრები, თემა და ნაგულისხმევი ქცევა",
"settings.appearance.description": "მოარგეთ თემა და შრიფტები",
"settings.notifications.description": "აირჩიეთ, როდის მიიღოთ შეტყობინებები და მოისმინოთ ხმები",
"settings.shortcuts.description": "მოარგეთ გავრცელებული მოქმედებების მალსახმობები",
"settings.servers.description": "მართეთ სერვერებთან კავშირები",
"settings.projects.title": "პროექტები",
"settings.projects.description": "მართეთ პროექტის პარამეტრები ამ სერვერზე",
"settings.projects.empty": "პროექტები ვერ მოიძებნა",
"settings.projects.server.all": "ყველა სერვერი",
"settings.mcps.description": "მართეთ Model Context Protocol (MCP) სერვერები და ხელსაწყოები",
"settings.extensions.description": "მართეთ ამ სერვერზე ხელმისაწვდომი გაფართოებები",
"settings.extensions.tab.mcps": "MCP-ები",
"settings.extensions.tab.skills": "უნარები",
"settings.extensions.availableAll": "ხელმისაწვდომია ყველა პროექტისთვის",
"settings.extensions.manageConfig": "მართეთ opencode.json-ში",
"settings.extensions.addSkills": "როგორ დავამატოთ უნარები",
"dialog.server.authenticate.title": "ავთენტიფიკაცია",
"project.settings.general.description": "მართეთ პროექტის სახელი და გარეგნობა",
"project.settings.scripts": "სკრიპტები",
"project.settings.scripts.description": "დააკონფიგურირეთ სკრიპტები ამ პროექტისთვის",
"project.settings.extensions.description": "იხილეთ ამ პროექტისთვის ხელმისაწვდომი გაფართოებები",
"project.settings.extensions.tab.lsps": "LSP-ები",
"project.settings.extensions.added": "დამატებულია ამ პროექტში",
"project.settings.extensions.shared": "გაზიარებულია ყველა პროექტთან",
"project.settings.extensions.lsp.detected": "აღმოჩენილი ენის სერვერები",
"project.settings.extensions.lsp.description": "ავტომატურად აღმოჩენილია ფაილის ტიპებიდან",
"project.settings.extensions.setupRequired": "საჭიროა გამართვა",
"settings.general.section.general": "ზოგადი",
"common.viewAll": "ყველას ნახვა",
"session.new.workspace.local.tooltip": "მიმდინარე checkout-ის გამოყენება",
"session.new.workspace.new.tooltip": "იზოლირებული checkout-ის შექმნა",
"session.new.workspace.fromBranch": "{{branch}} ბრენჩიდან",
"session.new.workspace.trigger.tooltip": "აირჩიეთ, სად გაეშვას სესია",
"session.new.workspace.search.placeholder": "სამუშაო სივრცეების ძიება",
"settings.tab.workspaces": "სამუშაო სივრცეები",
"settings.workspaces.filter.all": "ყველა პროექტი",
"settings.workspaces.empty": "სამუშაო სივრცეები არ არის",
"settings.workspaces.count.one": "{{count}} სამუშაო სივრცე",
"settings.workspaces.count.other": "{{count}} სამუშაო სივრცე",
"settings.workspaces.sessions.one": "{{count}} სესია პროექტში {{project}}",
"settings.workspaces.sessions.other": "{{count}} სესია პროექტში {{project}}",
"settings.workspaces.lastActiveSession": "ბოლო აქტიური სესია",
"settings.workspaces.deleteAll": "ყველა სამუშაო სივრცის წაშლა",
"settings.workspaces.deleteAll.confirm": "წაიშალოს ყველა {{count}} სამუშაო სივრცე?",
"settings.workspaces.delete.warning":
"სამუშაო სივრცის საქაღალდე და ბრენჩი სამუდამოდ წაიშლება, მათ შორის ქვემოთ ნაჩვენები გაუერთიანებელი ცვლილებები.",
"settings.workspaces.deleteAll.warning":
"პროექტში {{project}} არჩეული {{count}} სამუშაო სივრცე სამუდამოდ წაიშლება მხოლოდ მაშინ, თუ თითოეული სუფთაა, არააქტიურია და დაკავშირებული სესიები არ აქვს.",
"settings.workspaces.delete.blocked.active": "აქტიური სამუშაო სივრცის წაშლა შეუძლებელია.",
"settings.workspaces.delete.blocked.linked":
"დაკავშირებული სესიები დარჩება, მაგრამ მათი სამუშაო საქაღალდე სამუდამოდ წაიშლება.",
"settings.workspaces.default.title": "ნაგულისხმევი გარემო",
"settings.workspaces.default.description": "აირჩიეთ, სად დაიწყოს ახალი სესიები",
"settings.workspaces.default.lastUsed": "ბოლოს გამოყენებული თითოეული პროექტისთვის",
"settings.workspaces.default.local": "ადგილობრივი საქაღალდე",
"settings.workspaces.default.new": "ახალი სამუშაო სივრცე",
"workspace.move.title": "სამუშაო სივრცეში გადატანა",
"workspace.move.menu.title": "სესიის გადატანა:",
"workspace.move.failed": "სესიის გადატანა ვერ მოხერხდა",
"workspace.lifecycle.creating": "სამუშაო სივრცე იქმნება",
"workspace.lifecycle.created": "სამუშაო სივრცე შეიქმნა",
"workspace.lifecycle.starting": "სესია იწყება",
"workspace.onboarding.title": "სესიების იზოლირება სამუშაო სივრცეებით",
"workspace.onboarding.description": "თითოეულს საკუთარი checkout აქვს, ამიტომ არაფერი ერევა თქვენს ადგილობრივ საცავში",
"workspace.lifecycle.moving": "სამუშაო სივრცეში გადატანა",
"workspace.lifecycle.set": "სამუშაო სივრცე დაყენებულია",
"session.summary.title": "სესიის დეტალები",
"session.summary.noBranch": "ბრენჩი არ არის",
"session.summary.basedOn": "დაფუძნებულია {{branch}} ბრენჩზე",
"provider.disconnect.toast.noCredentials.description":
"{{provider}}-ისთვის წასაშლელი ავტორიზაციის მონაცემები ვერ მოიძებნა.",
"provider.disconnect.toast.failed.description": "{{provider}}-ის გათიშვა ვერ მოხერხდა.",
"session.timeline.notice.instructionsUpdated": "ინსტრუქციები განახლდა: {{sources}}",
"session.timeline.notice.restart": "გაგრძელება გადატვირთვის შემდეგ",
}
+21 -89
View File
@@ -285,8 +285,6 @@ export const dict = {
"provider.custom.error.duplicate": "ស្ទួន",
"provider.disconnect.toast.disconnected.title": "{{provider}} ត្រូវបានផ្តាច់",
"provider.disconnect.toast.disconnected.description": "ម៉ូដែល {{provider}} លែងមានទៀតហើយ។",
"provider.disconnect.toast.noCredentials.description": "រកមិនឃើញអត្តសញ្ញាណដែលអាចដកចេញសម្រាប់ {{provider}} ទេ។",
"provider.disconnect.toast.failed.description": "បរាជ័យក្នុងការផ្តាច់ {{provider}}។",
"model.tag.free": "ឥតគិតថ្លៃ",
"model.tag.latest": "ចុងក្រោយ",
"model.provider.anthropic": "Anthropic",
@@ -510,6 +508,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "ផ្ទៃតុ {{version}}",
"wsl.onboarding.versionMismatch": "កំណែដែលបានដំឡើងមិនត្រូវគ្នានឹងកំណែកម្មវិធីកុំព្យូទ័រលើតុទេ។",
"wsl.onboarding.adding": "កំពុងបន្ថែម...",
"help.tabs.toast.ariaLabel": "ការណែនាំផ្ទាំង។ រៀបចំការងារ និងសម័យសកម្មរបស់អ្នកដោយប្រើផ្ទាំង",
"help.tabs.toast.dismiss": "ច្រានចោលព័ត៌មានផ្ទាំង",
"help.tabs.title": "ការណែនាំផ្ទាំង",
"help.tabs.description": "រៀបចំការងារ និងសម័យសកម្មរបស់អ្នកជាមួយផ្ទាំង",
"help.tabs.date": "ថ្ងៃទី 14 ខែកក្កដា",
"help.tabs.introduction": "OpenCode Desktop ឥឡូវនេះត្រូវបានបង្កើតឡើងនៅជុំវិញផ្ទាំង។",
"help.tabs.sessions":
"ចាប់ផ្តើមសម័យថ្មីនៅក្នុងផ្ទាំងមួយ ឬបើកសម័យដែលមានស្រាប់ពីគម្រោងណាមួយរបស់អ្នក។ បើកផ្ទាំងថ្មីនៅពេលអ្នកចាប់ផ្តើមអ្វីថ្មី ហើយបិទវានៅពេលអ្នករួចរាល់។",
"help.tabs.organize":
"ការបន្តបើកផ្ទាំងមួយចំនួនធ្វើឱ្យវាកាន់តែងាយស្រួលក្នុងការរៀបចំសម័យសកម្មរបស់អ្នក។ ប្តូរឈ្មោះផ្ទាំងទៅជាអ្វីមួយដែលគួរឱ្យចងចាំ ប្រសិនបើអ្នកមានគម្រោងរក្សាពួកវាឱ្យនៅជាប់។",
"help.tabs.home":
"អ្នកនឹងរកឃើញសម័យ និងគម្រោងរបស់អ្នកទាំងអស់នៅលើអេក្រង់ដើមថ្មី។ ការជ្រើសរើសសម័យបើកវានៅក្នុងផ្ទាំងមួយ។",
"help.tabs.persistence": "នៅពេលអ្នកបើកកម្មវិធីឡើងវិញ ផ្ទាំងរបស់អ្នកនៅតែបើក។",
"help.tabs.worktrees":
"ការរចនាថ្មីមិនទាន់គាំទ្រ Git Worktrees នៅឡើយទេ វានឹងមកដល់ក្នុងពេលឆាប់ៗនេះ។ ដូច្នេះប្រសិនបើអ្នកចង់បន្តប្រើប្លង់ពីមុន អ្នកអាចប្តូររវាងប្លង់នៅក្នុងការកំណត់។ សូមចងចាំថាប្លង់ថ្មីនឹងក្លាយទៅជាអចិន្ត្រៃយ៍ក្នុងរយៈពេលពីរបីសប្តាហ៍។",
"server.row.noUsername": "គ្មានឈ្មោះអ្នកប្រើប្រាស់",
"dialog.project.edit.title": "កែសម្រួលគម្រោង",
"dialog.project.edit.name": "ឈ្មោះ",
@@ -608,7 +621,6 @@ export const dict = {
"toast.session.export.failed.description": "កំហុសបានកើតឡើងខណៈពេលនាំចេញសម័យ",
"toast.session.listFailed.title": "បានបរាជ័យក្នុងការផ្ទុកសម័យសម្រាប់ {{project}}",
"toast.project.reloadFailed.title": "បានបរាជ័យក្នុងការផ្ទុក {{project}} ឡើងវិញ",
"toast.migration.failed.title": "ការផ្ទេរទិន្នន័យបានបរាជ័យ",
"toast.update.title": "មានបច្ចុប្បន្នភាព",
"toast.update.description": "កំណែថ្មីនៃ OpenCode ({{version}}) ឥឡូវនេះមានសម្រាប់ដំឡើងហើយ។",
"toast.update.action.installRestart": "ដំឡើង និងចាប់ផ្តើមឡើងវិញ",
@@ -694,19 +706,6 @@ export const dict = {
"session.error.notFound": "សម័យនេះមិនអាចរកឃើញទេ។",
"session.error.notFound.description": "ផ្ទាំងនេះចង្អុលទៅសម័យដែលលែងមាននៅលើម៉ាស៊ីនមេនេះ។",
"session.error.notFound.closeTab": "បិទផ្ទាំង",
"session.background.moveTasks": "ផ្លាស់ទី {{tasks}} ទៅផ្ទៃខាងក្រោយ",
"session.background.inBackground": "កំពុងដំណើរការ {{tasks}} នៅផ្ទៃខាងក្រោយ",
"session.background.combine": "{{first}} និង {{second}}",
"session.background.shell.one": "{{count}} សែល",
"session.background.shell.other": "{{count}} សែល",
"session.background.subagent.one": "{{count}} ភ្នាក់ងាររង",
"session.background.subagent.other": "{{count}} ភ្នាក់ងាររង",
"command.session.background": "ផ្លាស់ទីទៅផ្ទៃខាងក្រោយ",
"session.timeline.notice.finished": "{{actor}} បានបញ្ចប់",
"session.timeline.notice.failed": "{{actor}} បានបរាជ័យ",
"session.timeline.notice.cancelled": "{{actor}} ត្រូវបានបោះបង់",
"session.timeline.notice.instructionsUpdated": "បានធ្វើបច្ចុប្បន្នភាពសេចក្តីណែនាំ៖ {{sources}}",
"session.timeline.notice.restart": "កំពុងបន្តបន្ទាប់ពីចាប់ផ្តើមឡើងវិញ",
"session.error.serverConnection": "មិនអាចភ្ជាប់ទៅម៉ាស៊ីនមេនេះទេ។",
"session.review.filesChanged": "ឯកសារបានផ្លាស់ប្តូរ {{count}}",
"session.review.change.one": "ការផ្លាស់ប្តូរ",
@@ -910,43 +909,11 @@ export const dict = {
"settings.section.desktop": "ផ្ទៃតុ",
"settings.section.server": "ម៉ាស៊ីនមេ",
"settings.tab.general": "ទូទៅ",
"settings.tab.preferences": "ចំណូលចិត្ត",
"settings.tab.shortcuts": "ផ្លូវកាត់",
"settings.tab.notifications": "ការជូនដំណឹង",
"settings.tab.projects": "គម្រោង",
"settings.tab.extensions": "ផ្នែកបន្ថែម",
"settings.preferences.description": "ប្ដូរចំណូលចិត្ត រូបរាង និងឥរិយាបថលំនាំដើមតាមបំណង",
"settings.appearance.description": "ប្ដូររូបរាង និងពុម្ពអក្សរតាមបំណង",
"settings.notifications.description": "ជ្រើសពេលដែលត្រូវទទួលការជូនដំណឹង និងឮសំឡេង",
"settings.shortcuts.description": "ប្ដូរផ្លូវកាត់សម្រាប់សកម្មភាពទូទៅតាមបំណង",
"settings.servers.description": "គ្រប់គ្រងការតភ្ជាប់ម៉ាស៊ីនមេ",
"settings.projects.title": "គម្រោង",
"settings.projects.description": "គ្រប់គ្រងការកំណត់គម្រោងនៅលើម៉ាស៊ីនមេនេះ",
"settings.projects.empty": "រកមិនឃើញគម្រោងទេ",
"settings.projects.server.all": "ម៉ាស៊ីនមេទាំងអស់",
"settings.mcps.description": "គ្រប់គ្រងម៉ាស៊ីនមេ និងឧបករណ៍ Model Context Protocol (MCP)",
"settings.extensions.description": "គ្រប់គ្រងផ្នែកបន្ថែមដែលមាននៅលើម៉ាស៊ីនមេនេះ",
"settings.extensions.tab.mcps": "MCPs",
"settings.extensions.tab.skills": "ជំនាញ",
"settings.extensions.availableAll": "អាចប្រើបានសម្រាប់គម្រោងទាំងអស់",
"settings.extensions.manageConfig": "គ្រប់គ្រងនៅក្នុង opencode.json",
"settings.extensions.addSkills": "របៀបបន្ថែមជំនាញ",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "ការរួមបញ្ចូល WSL",
"settings.desktop.wsl.description": "ដំណើរការម៉ាស៊ីនមេ OpenCode នៅខាងក្នុង WSL នៅលើ Windows ។",
"dialog.server.authenticate.title": "ផ្ទៀងផ្ទាត់",
"project.settings.general.description": "គ្រប់គ្រងឈ្មោះ និងរូបរាងគម្រោង",
"project.settings.scripts": "ស្គ្រីប",
"project.settings.scripts.description": "កំណត់រចនាសម្ព័ន្ធស្គ្រីបសម្រាប់គម្រោងនេះ",
"project.settings.extensions.description": "មើលផ្នែកបន្ថែមដែលអាចប្រើបានសម្រាប់គម្រោងនេះ",
"project.settings.extensions.tab.lsps": "LSPs",
"project.settings.extensions.added": "បានបន្ថែមទៅគម្រោងនេះ",
"project.settings.extensions.shared": "ចែករំលែកជាមួយគម្រោងទាំងអស់",
"project.settings.extensions.lsp.detected": "ម៉ាស៊ីនមេភាសាដែលបានរកឃើញ",
"project.settings.extensions.lsp.description": "រកឃើញដោយស្វ័យប្រវត្តិពីប្រភេទឯកសារ",
"project.settings.extensions.setupRequired": "ត្រូវការរៀបចំ",
"settings.general.section.appearance": "រូបរាង",
"settings.general.section.general": "ទូទៅ",
"settings.general.section.advanced": "កម្រិតខ្ពស់",
"settings.general.section.notifications": "ការជូនដំណឹងប្រព័ន្ធ",
"settings.general.section.updates": "បច្ចុប្បន្នភាព",
@@ -998,6 +965,12 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "ពង្រីកផ្នែកឧបករណ៍កែសម្រួល",
"settings.general.row.editToolPartsExpanded.description":
"បង្ហាញការកែសម្រួល សរសេរ និងផ្នែកឧបករណ៍បំណះដែលបានពង្រីកតាមលំនាំដើមនៅក្នុងបន្ទាត់ពេលវេលា",
"settings.general.row.newInterface.title": "ប្លង់ថ្មី។",
"settings.general.row.newInterface.badge": "ថ្មី។",
"settings.general.row.newInterface.description": "ប្រើផ្ទាំងថ្មី និងប្លង់ផ្ទះ។ ប្តូររវាងប្លង់សម្រាប់រយៈពេលកំណត់។",
"settings.general.row.newInterfaceNotice.title": "ឥឡូវនេះ អ្នកកំពុងប្រើប្លង់ថ្មី។",
"settings.general.row.newInterfaceNotice.description": "ប្លង់ពីមុនលែងមានទៀតហើយ",
"settings.general.row.newInterfaceNotice.dismiss": "ច្រានចោល",
"settings.general.row.pinchZoom.title": "ខ្ទាស់ដើម្បីពង្រីក",
"settings.general.row.pinchZoom.description": "អនុញ្ញាត​ឱ្យ​ចុច​បន្ទះ​បន្ទះ​និង​កាយវិការ​បញ្ជា​-​រមូរ​ដើម្បី​ពង្រីក",
"settings.general.row.wayland.title": "ប្រើ Wayland ដើម",
@@ -1150,47 +1123,6 @@ export const dict = {
"session.delete.confirm": 'លុបសម័យ "{{name}}"?',
"session.delete.button": "លុបសម័យ",
"workspace.new": "កន្លែងធ្វើការថ្មី។",
"common.viewAll": "មើលទាំងអស់",
"session.new.workspace.local.tooltip": "ប្រើ checkout បច្ចុប្បន្ន",
"session.new.workspace.new.tooltip": "បង្កើត checkout ដាច់ដោយឡែក",
"session.new.workspace.fromBranch": "ពី {{branch}}",
"session.new.workspace.trigger.tooltip": "ជ្រើសកន្លែងដំណើរការសម័យ",
"session.new.workspace.search.placeholder": "ស្វែងរកកន្លែងធ្វើការ",
"settings.tab.workspaces": "កន្លែងធ្វើការ",
"settings.workspaces.filter.all": "គម្រោងទាំងអស់",
"settings.workspaces.empty": "គ្មានកន្លែងធ្វើការទេ",
"settings.workspaces.count.one": "{{count}} កន្លែងធ្វើការ",
"settings.workspaces.count.other": "{{count}} កន្លែងធ្វើការ",
"settings.workspaces.sessions.one": "{{count}} សម័យក្នុង {{project}}",
"settings.workspaces.sessions.other": "{{count}} សម័យក្នុង {{project}}",
"settings.workspaces.lastActiveSession": "សម័យសកម្មចុងក្រោយ",
"settings.workspaces.deleteAll": "លុបកន្លែងធ្វើការទាំងអស់",
"settings.workspaces.deleteAll.confirm": "លុបកន្លែងធ្វើការ {{count}} ទាំងអស់?",
"settings.workspaces.delete.warning":
"ថតកន្លែងធ្វើការ និងសាខានឹងត្រូវបានលុបជាអចិន្ត្រៃយ៍ រួមទាំងការផ្លាស់ប្តូរដែលមិនទាន់បានបញ្ចូលគ្នាណាមួយដែលបង្ហាញខាងក្រោម។",
"settings.workspaces.deleteAll.warning":
"កន្លែងធ្វើការ {{count}} ដែលបានជ្រើសក្នុង {{project}} នឹងត្រូវបានលុបជាអចិន្ត្រៃយ៍តែក្នុងករណីដែលកន្លែងធ្វើការនីមួយៗស្អាត មិនសកម្ម និងគ្មានសម័យដែលបានភ្ជាប់។",
"settings.workspaces.delete.blocked.active": "មិនអាចលុបកន្លែងធ្វើការសកម្មបានទេ។",
"settings.workspaces.delete.blocked.linked":
"សម័យដែលបានភ្ជាប់នឹងនៅតែមាន ប៉ុន្តែថតការងាររបស់វានឹងត្រូវបានលុបជាអចិន្ត្រៃយ៍។",
"settings.workspaces.default.title": "បរិស្ថានលំនាំដើម",
"settings.workspaces.default.description": "ជ្រើសកន្លែងដែលសម័យថ្មីចាប់ផ្តើម",
"settings.workspaces.default.lastUsed": "បានប្រើចុងក្រោយតាមគម្រោង",
"settings.workspaces.default.local": "ថតមូលដ្ឋាន",
"settings.workspaces.default.new": "កន្លែងធ្វើការថ្មី",
"workspace.move.title": "ផ្លាស់ទីទៅកន្លែងធ្វើការ",
"workspace.move.menu.title": "ផ្លាស់ទីសម័យទៅ",
"workspace.move.failed": "បរាជ័យក្នុងការផ្លាស់ទីសម័យ",
"workspace.lifecycle.creating": "កំពុងបង្កើតកន្លែងធ្វើការ",
"workspace.lifecycle.created": "បានបង្កើតកន្លែងធ្វើការ",
"workspace.lifecycle.starting": "កំពុងចាប់ផ្តើមសម័យ",
"workspace.onboarding.title": "ញែកសម័យដោយប្រើកន្លែងធ្វើការ",
"workspace.onboarding.description": "នីមួយៗមាន checkout ផ្ទាល់ខ្លួន ដូច្នេះមិនរំខានឃ្លាំងមូលដ្ឋានរបស់អ្នកទេ",
"workspace.lifecycle.moving": "កំពុងផ្លាស់ទីទៅកន្លែងធ្វើការ",
"workspace.lifecycle.set": "បានកំណត់កន្លែងធ្វើការ",
"session.summary.title": "ព័ត៌មានលម្អិតសម័យ",
"session.summary.noBranch": "គ្មានសាខា",
"session.summary.basedOn": "ផ្អែកលើ {{branch}}",
"workspace.type.local": "ក្នុងស្រុក",
"workspace.type.sandbox": "ប្រអប់ខ្សាច់",
"workspace.create.failed.title": "បរាជ័យក្នុងការបង្កើតកន្លែងធ្វើការ",
+22 -90
View File
@@ -1038,6 +1038,13 @@ export const dict = {
"settings.general.row.showCustomAgents.title": "에이전트 표시",
"settings.general.row.showCustomAgents.description":
"입력창에서 에이전트를 전환합니다. 숨기면 기본적으로 Build 에이전트를 사용합니다.",
"settings.general.row.newInterface.title": "새 레이아웃",
"settings.general.row.newInterface.badge": "신규",
"settings.general.row.newInterface.description":
"새 탭과 홈 화면 레이아웃을 사용합니다. 제한된 기간 동안 레이아웃을 전환할 수 있습니다.",
"settings.general.row.newInterfaceNotice.title": "이제 새 레이아웃을 사용 중입니다",
"settings.general.row.newInterfaceNotice.description": "이전 레이아웃은 더 이상 사용할 수 없습니다",
"settings.general.row.newInterfaceNotice.dismiss": "닫기",
"settings.general.row.pinchZoom.title": "핀치 줌",
"settings.general.row.pinchZoom.description": "트랙패드 핀치 및 Ctrl-스크롤 제스처로 확대/축소 허용",
"settings.updates.action.downloading": "다운로드 중...",
@@ -1045,6 +1052,21 @@ export const dict = {
"command.logs.export": "로그 내보내기",
"help.tabs.toast.ariaLabel": "탭을 소개합니다. 탭으로 작업과 활성 세션을 정리하세요",
"help.tabs.toast.dismiss": "탭 정보 닫기",
"help.tabs.title": "탭 소개",
"help.tabs.description": "탭으로 작업과 활성 세션을 정리하세요",
"help.tabs.date": "7월 14일",
"help.tabs.introduction": "이제 OpenCode Desktop은 탭을 중심으로 구성됩니다.",
"help.tabs.sessions":
"탭에서 새 세션을 시작하거나 프로젝트에서 기존 세션을 여세요. 새로운 작업을 시작할 때 새 탭을 열고, 작업을 마치면 닫으세요.",
"help.tabs.organize":
"탭을 몇 개 열어 두면 활성 세션을 더 쉽게 정리할 수 있습니다. 탭을 계속 열어 둘 예정이라면 기억하기 쉬운 이름으로 바꾸세요.",
"help.tabs.home": "새 홈 화면에서 모든 세션과 프로젝트를 확인할 수 있습니다. 세션을 선택하면 탭에서 열립니다.",
"help.tabs.persistence": "앱을 다시 열어도 탭은 그대로 열려 있습니다.",
"help.tabs.worktrees":
"새 디자인은 아직 Git Worktrees를 지원하지 않지만 곧 지원할 예정입니다. 이전 레이아웃을 계속 사용하려면 설정에서 레이아웃을 전환할 수 있습니다. 단, 몇 주 후에는 새 레이아웃이 영구 적용됩니다.",
"desktop.menu.app": "OpenCode",
"desktop.menu.file": "파일",
"desktop.menu.edit": "편집",
@@ -1142,94 +1164,4 @@ export const dict = {
"desktop.picker.error.notSelected": "선택기에서 파일을 선택하지 않았습니다",
"desktop.picker.error.sizeLimit": "선택한 첨부 파일이 {{limit}} MB 제한을 초과합니다",
"provider.disconnect.toast.noCredentials.description":
"{{provider}}에 대해 제거할 수 있는 자격 증명을 찾을 수 없습니다.",
"provider.disconnect.toast.failed.description": "{{provider}} 연결을 해제하지 못했습니다.",
"toast.migration.failed.title": "데이터 마이그레이션 실패",
"session.background.moveTasks": "{{tasks}}을(를) 백그라운드로 이동",
"session.background.inBackground": "{{tasks}} 백그라운드에서 실행 중",
"session.background.combine": "{{first}} 및 {{second}}",
"session.background.shell.one": "{{count}}개 셸",
"session.background.shell.other": "{{count}}개 셸",
"session.background.subagent.one": "{{count}}개 하위 에이전트",
"session.background.subagent.other": "{{count}}개 하위 에이전트",
"command.session.background": "백그라운드로 이동",
"session.timeline.notice.finished": "{{actor}} 완료됨",
"session.timeline.notice.failed": "{{actor}} 실패",
"session.timeline.notice.cancelled": "{{actor}} 취소됨",
"session.timeline.notice.instructionsUpdated": "지침 업데이트됨: {{sources}}",
"session.timeline.notice.restart": "다시 시작 후 계속",
"settings.tab.preferences": "환경 설정",
"settings.tab.notifications": "알림",
"settings.tab.projects": "프로젝트",
"settings.tab.extensions": "확장",
"settings.preferences.description": "환경 설정, 테마, 기본 동작을 사용자 지정",
"settings.appearance.description": "테마 및 글꼴을 사용자 지정",
"settings.notifications.description": "알림을 받을 때와 소리 재생 여부를 선택",
"settings.shortcuts.description": "자주 사용하는 작업의 단축키를 사용자 지정",
"settings.servers.description": "서버 연결 관리",
"settings.projects.title": "프로젝트",
"settings.projects.description": "이 서버의 프로젝트 설정 관리",
"settings.projects.empty": "프로젝트를 찾을 수 없습니다",
"settings.projects.server.all": "모든 서버",
"settings.mcps.description": "Model Context Protocol (MCP) 서버 및 도구 관리",
"settings.extensions.description": "이 서버에서 사용할 수 있는 확장 관리",
"settings.extensions.tab.mcps": "MCP",
"settings.extensions.tab.skills": "스킬",
"settings.extensions.availableAll": "모든 프로젝트에서 사용 가능",
"settings.extensions.manageConfig": "opencode.json에서 관리",
"settings.extensions.addSkills": "스킬 추가 방법",
"dialog.server.authenticate.title": "인증",
"project.settings.general.description": "프로젝트 이름 및 모양 관리",
"project.settings.scripts": "스크립트",
"project.settings.scripts.description": "이 프로젝트의 스크립트 구성",
"project.settings.extensions.description": "이 프로젝트에서 사용할 수 있는 확장 보기",
"project.settings.extensions.tab.lsps": "LSP",
"project.settings.extensions.added": "이 프로젝트에 추가됨",
"project.settings.extensions.shared": "모든 프로젝트와 공유됨",
"project.settings.extensions.lsp.detected": "감지된 언어 서버",
"project.settings.extensions.lsp.description": "파일 유형에서 자동 감지됨",
"project.settings.extensions.setupRequired": "설정 필요",
"settings.general.section.general": "일반",
"common.viewAll": "모두 보기",
"session.new.workspace.local.tooltip": "현재 체크아웃 사용",
"session.new.workspace.new.tooltip": "격리된 체크아웃 생성",
"session.new.workspace.fromBranch": "{{branch}}에서",
"session.new.workspace.trigger.tooltip": "세션을 실행할 위치 선택",
"session.new.workspace.search.placeholder": "작업 공간 검색",
"settings.tab.workspaces": "작업 공간",
"settings.workspaces.filter.all": "모든 프로젝트",
"settings.workspaces.empty": "작업 공간 없음",
"settings.workspaces.count.one": "{{count}}개 작업 공간",
"settings.workspaces.count.other": "{{count}}개 작업 공간",
"settings.workspaces.sessions.one": "{{project}}의 세션 {{count}}개",
"settings.workspaces.sessions.other": "{{project}}의 세션 {{count}}개",
"settings.workspaces.lastActiveSession": "마지막 활성 세션",
"settings.workspaces.deleteAll": "모든 작업 공간 삭제",
"settings.workspaces.deleteAll.confirm": "{{count}}개 작업 공간을 모두 삭제하시겠습니까?",
"settings.workspaces.delete.warning":
"아래 표시된 병합되지 않은 변경 사항을 포함하여 작업 공간 디렉터리와 브랜치가 영구적으로 제거됩니다.",
"settings.workspaces.deleteAll.warning":
"{{project}}에서 선택한 작업 공간 {{count}}개는 각각 변경 사항이 없고 비활성 상태이며 연결된 세션이 없을 때만 영구적으로 제거됩니다.",
"settings.workspaces.delete.blocked.active": "활성 작업 공간은 삭제할 수 없습니다.",
"settings.workspaces.delete.blocked.linked": "연결된 세션은 남지만 해당 작업 디렉터리는 영구적으로 제거됩니다.",
"settings.workspaces.default.title": "기본 환경",
"settings.workspaces.default.description": "새 세션이 시작되는 위치 선택",
"settings.workspaces.default.lastUsed": "프로젝트별 마지막 사용 항목",
"settings.workspaces.default.local": "로컬 디렉터리",
"settings.workspaces.default.new": "새 작업 공간",
"workspace.move.title": "작업 공간으로 이동",
"workspace.move.menu.title": "세션 이동 위치",
"workspace.move.failed": "세션 이동 실패",
"workspace.lifecycle.creating": "작업 공간 생성 중",
"workspace.lifecycle.created": "작업 공간 생성됨",
"workspace.lifecycle.starting": "세션 시작 중",
"workspace.onboarding.title": "작업 공간으로 세션 격리",
"workspace.onboarding.description": "각 세션은 자체 체크아웃을 사용하므로 로컬 저장소에 영향을 주지 않습니다",
"workspace.lifecycle.moving": "작업 공간으로 이동 중",
"workspace.lifecycle.set": "작업 공간 설정됨",
"session.summary.title": "세션 세부 정보",
"session.summary.noBranch": "브랜치 없음",
"session.summary.basedOn": "{{branch}} 기반",
}
+20 -89
View File
@@ -285,8 +285,6 @@ export const dict = {
"provider.custom.error.duplicate": "ຊໍ້າກັນ",
"provider.disconnect.toast.disconnected.title": "{{provider}} ຕັດການເຊື່ອມຕໍ່ແລ້ວ",
"provider.disconnect.toast.disconnected.description": "ໂມເດວ {{provider}} ບໍ່ມີແລ້ວ.",
"provider.disconnect.toast.noCredentials.description": "ບໍ່ພົບຂໍ້ມູນປະຈຳຕົວຂອງ {{provider}} ທີ່ສາມາດລຶບໄດ້.",
"provider.disconnect.toast.failed.description": "ຕັດການເຊື່ອມຕໍ່ {{provider}} ບໍ່ສຳເລັດ.",
"model.tag.free": "ຟຣີ",
"model.tag.latest": "ຫຼ້າສຸດ",
"model.provider.anthropic": "Anthropic",
@@ -509,6 +507,20 @@ export const dict = {
"wsl.onboarding.desktopVersion": "ເດັສທັອບ {{version}}",
"wsl.onboarding.versionMismatch": "ເວີຊັນທີ່ຕິດຕັ້ງບໍ່ກົງກັບເວີຊັນຂອງແອັບ desktop.",
"wsl.onboarding.adding": "ກຳລັງເພີ່ມ...",
"help.tabs.toast.ariaLabel": "ແນະນຳແຖບ. ຈັດລະບຽບການເຮັດວຽກແລະກອງປະຊຸມການເຄື່ອນໄຫວຂອງທ່ານດ້ວຍແຖບ",
"help.tabs.toast.dismiss": "ປິດຂໍ້ມູນແຖບ",
"help.tabs.title": "ແນະນຳແຖບ",
"help.tabs.description": "ຈັດກອງປະຊຸມການເຮັດວຽກ ແລະການເຄື່ອນໄຫວຂອງທ່ານດ້ວຍແຖບ",
"help.tabs.date": "ກໍລະກົດ 14",
"help.tabs.introduction": "OpenCode Desktop ຕອນນີ້ຖືກສ້າງຂຶ້ນໃນແຖບຕ່າງໆ.",
"help.tabs.sessions":
"ເລີ່ມເຊດຊັນໃໝ່ໃນແຖບໃດໜຶ່ງ, ຫຼືເປີດເຊດຊັນທີ່ມີຢູ່ແລ້ວຈາກໂຄງການໃດໆກໍຕາມຂອງເຈົ້າ. ເປີດແຖບໃໝ່ເມື່ອທ່ານເລີ່ມອັນໃໝ່, ແລະປິດມັນເມື່ອທ່ານສຳເລັດ.",
"help.tabs.organize":
"ການເປີດບາງແຖບເຮັດໃຫ້ມັນງ່າຍຂຶ້ນໃນການຈັດກອງປະຊຸມທີ່ມີການເຄື່ອນໄຫວຂອງທ່ານ. ປ່ຽນຊື່ແຖບເປັນສິ່ງທີ່ໜ້າຈົດຈຳ ຖ້າທ່ານວາງແຜນທີ່ຈະຮັກສາພວກມັນໄວ້.",
"help.tabs.home": "ທ່ານຈະພົບເຫັນເຊດຊັນ ແລະໂຄງການທັງໝົດຂອງທ່ານໃນໜ້າຈໍຫຼັກໃໝ່. ການເລືອກເຊດຊັນຈະເປີດມັນຢູ່ໃນແຖບ.",
"help.tabs.persistence": "ເມື່ອທ່ານເປີດແອັບຄືນໃໝ່, ແຖບຂອງທ່ານຍັງເປີດຢູ່.",
"help.tabs.worktrees":
"ການອອກແບບໃໝ່ຍັງບໍ່ຮອງຮັບ Git Worktrees ເທື່ອ, ມັນຈະມາໃນໄວໆນີ້. ສະນັ້ນຖ້າທ່ານຕ້ອງການສືບຕໍ່ໃຊ້ໂຄງຮ່າງກ່ອນໜ້າ, ທ່ານສາມາດສະຫຼັບລະຫວ່າງການຈັດວາງໃນການຕັ້ງຄ່າ. ພຽງແຕ່ຈື່ໄວ້ວ່າຮູບແບບໃຫມ່ຈະກາຍເປັນຖາວອນໃນສອງສາມອາທິດ.",
"server.row.noUsername": "ບໍ່ມີຊື່ຜູ້ໃຊ້",
"dialog.project.edit.title": "ແກ້ໄຂໂຄງການ",
"dialog.project.edit.name": "ຊື່",
@@ -607,7 +619,6 @@ export const dict = {
"toast.session.export.failed.description": "ມີຂໍ້ຜິດພາດເກີດຂຶ້ນໃນຂະນະທີ່ສົ່ງອອກເຊດຊັນ",
"toast.session.listFailed.title": "ລົ້ມເຫລວໃນການໂຫລດເຊດຊັນສໍາລັບ {{project}}",
"toast.project.reloadFailed.title": "ໂຫຼດ {{project}} ຄືນໃໝ່ບໍ່ສຳເລັດ",
"toast.migration.failed.title": "ການຍ້າຍຂໍ້ມູນບໍ່ສຳເລັດ",
"toast.update.title": "ມີອັບເດດ",
"toast.update.description": "ເວີຊັນໃໝ່ຂອງ OpenCode ({{version}}) ມີໃຫ້ຕິດຕັ້ງແລ້ວ.",
"toast.update.action.installRestart": "ຕິດຕັ້ງ ແລະປິດເປີດໃໝ່",
@@ -693,19 +704,6 @@ export const dict = {
"session.error.notFound": "ບໍ່ພົບເຊດຊັນນີ້",
"session.error.notFound.description": "ແຖບນີ້ຊີ້ໄປຫາເຊດຊັນທີ່ບໍ່ມີຢູ່ໃນເຊີບເວີນີ້ແລ້ວ.",
"session.error.notFound.closeTab": "ປິດແຖບ",
"session.background.moveTasks": "ຍ້າຍ {{tasks}} ໄປເບື້ອງຫຼັງ",
"session.background.inBackground": "ກຳລັງແລ່ນ {{tasks}} ໃນເບື້ອງຫຼັງ",
"session.background.combine": "{{first}} ແລະ {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shell",
"session.background.subagent.one": "{{count}} subagent",
"session.background.subagent.other": "{{count}} subagent",
"command.session.background": "ຍ້າຍໄປເບື້ອງຫຼັງ",
"session.timeline.notice.finished": "{{actor}} ສຳເລັດແລ້ວ",
"session.timeline.notice.failed": "{{actor}} ລົ້ມເຫລວ",
"session.timeline.notice.cancelled": "{{actor}} ຖືກຍົກເລີກ",
"session.timeline.notice.instructionsUpdated": "ຄຳແນະນຳຖືກອັບເດດແລ້ວ: {{sources}}",
"session.timeline.notice.restart": "ສືບຕໍ່ຫຼັງຈາກຣີສະຕາດ",
"session.error.serverConnection": "ບໍ່ສາມາດເຊື່ອມຕໍ່ກັບເຊີບເວີນີ້ໄດ້",
"session.review.filesChanged": "ໄຟລ໌ປ່ຽນ {{count}}",
"session.review.change.one": "ປ່ຽນແປງ",
@@ -762,11 +760,6 @@ export const dict = {
"session.new.workspace.triggerLocal": "ທ້ອງຖິ່ນ",
"session.new.workspace.local": "ພື້ນທີ່ເກັບຂໍ້ມູນທ້ອງຖິ່ນ",
"session.new.workspace.existing": "ພື້ນທີ່ເຮັດວຽກ...",
"session.new.workspace.local.tooltip": "ໃຊ້ checkout ປັດຈຸບັນ",
"session.new.workspace.new.tooltip": "ສ້າງ checkout ແຍກຕ່າງຫາກ",
"session.new.workspace.fromBranch": "ຈາກ {{branch}}",
"session.new.workspace.trigger.tooltip": "ເລືອກບ່ອນທີ່ຈະແລ່ນເຊດຊັນ",
"session.new.workspace.search.placeholder": "ຄົ້ນຫາພື້ນທີ່ເຮັດວຽກ",
"session.new.git.none": "ບໍ່ມີ Git",
"session.new.lastModified": "ດັດແກ້ຫຼ້າສຸດ",
"session.header.search.placeholder": "ຄົ້ນຫາ {{project}}",
@@ -913,44 +906,11 @@ export const dict = {
"settings.section.desktop": "ເດັສທັອບ",
"settings.section.server": "ເຊີບເວີ",
"settings.tab.general": "ທົ່ວໄປ",
"settings.tab.preferences": "ຄ່າກຳນົດ",
"settings.tab.shortcuts": "ທາງລັດ",
"settings.tab.notifications": "ການແຈ້ງເຕືອນ",
"settings.tab.projects": "ໂຄງການ",
"settings.tab.extensions": "ສ່ວນຂະຫຍາຍ",
"settings.tab.workspaces": "ພື້ນທີ່ເຮັດວຽກ",
"settings.preferences.description": "ປັບແຕ່ງຄ່າກຳນົດ, ຫົວຂໍ້ ແລະພຶດຕິກຳເລີ່ມຕົ້ນ",
"settings.appearance.description": "ປັບແຕ່ງຫົວຂໍ້ ແລະຟອນ",
"settings.notifications.description": "ເລືອກເວລາຮັບການແຈ້ງເຕືອນ ແລະຟັງສຽງ",
"settings.shortcuts.description": "ປັບແຕ່ງທາງລັດສຳລັບການກະທຳທົ່ວໄປ",
"settings.servers.description": "ຈັດການການເຊື່ອມຕໍ່ເຊີບເວີ",
"settings.projects.title": "ໂຄງການ",
"settings.projects.description": "ຈັດການການຕັ້ງຄ່າໂຄງການໃນເຊີບເວີນີ້",
"settings.projects.empty": "ບໍ່ພົບໂຄງການ",
"settings.projects.server.all": "ເຊີບເວີທັງໝົດ",
"settings.mcps.description": "ຈັດການເຊີບເວີ ແລະເຄື່ອງມື Model Context Protocol (MCP)",
"settings.extensions.description": "ຈັດການສ່ວນຂະຫຍາຍທີ່ມີຢູ່ໃນເຊີບເວີນີ້",
"settings.extensions.tab.mcps": "MCPs",
"settings.extensions.tab.skills": "ທັກສະ",
"settings.extensions.availableAll": "ມີໃຫ້ທຸກໂຄງການ",
"settings.extensions.manageConfig": "ຈັດການໃນ opencode.json",
"settings.extensions.addSkills": "ວິທີເພີ່ມທັກສະ",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "ການເຊື່ອມໂຍງ WSL",
"settings.desktop.wsl.description": "ແລ່ນເຊີບເວີ OpenCode ພາຍໃນ WSL ໃນ Windows.",
"dialog.server.authenticate.title": "ພິສູດຢືນຢັນ",
"project.settings.general.description": "ຈັດການຊື່ ແລະຮູບລັກສະນະໂຄງການ",
"project.settings.scripts": "ສະຄຣິບ",
"project.settings.scripts.description": "ຕັ້ງຄ່າສະຄຣິບສຳລັບໂຄງການນີ້",
"project.settings.extensions.description": "ເບິ່ງສ່ວນຂະຫຍາຍທີ່ມີໃຫ້ໂຄງການນີ້",
"project.settings.extensions.tab.lsps": "LSPs",
"project.settings.extensions.added": "ເພີ່ມໃສ່ໂຄງການນີ້ແລ້ວ",
"project.settings.extensions.shared": "ແບ່ງປັນກັບທຸກໂຄງການ",
"project.settings.extensions.lsp.detected": "ເຊີບເວີພາສາທີ່ກວດພົບ",
"project.settings.extensions.lsp.description": "ກວດພົບອັດຕະໂນມັດຈາກປະເພດໄຟລ໌",
"project.settings.extensions.setupRequired": "ຕ້ອງຕັ້ງຄ່າ",
"settings.general.section.appearance": "ຮູບລັກສະນະ",
"settings.general.section.general": "ທົ່ວໄປ",
"settings.general.section.advanced": "ຂັ້ນສູງ",
"settings.general.section.notifications": "ການແຈ້ງເຕືອນລະບົບ",
"settings.general.section.updates": "ອັບເດດ",
@@ -1002,6 +962,12 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "ຂະຫຍາຍພາກສ່ວນເຄື່ອງມືແກ້ໄຂ",
"settings.general.row.editToolPartsExpanded.description":
"ສະ​ແດງ​ການ​ແກ້​ໄຂ, ຂຽນ, ແລະ​ການ​ແກ້​ໄຂ​ສ່ວນ​ເຄື່ອງ​ມື​ທີ່​ຂະ​ຫຍາຍ​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ໃນ​ໄລ​ຍະ​ເວ​ລາ",
"settings.general.row.newInterface.title": "ໂຄງຮ່າງໃໝ່",
"settings.general.row.newInterface.badge": "ໃໝ່",
"settings.general.row.newInterface.description": "ໃຊ້ແຖບໃໝ່ ແລະຮູບແບບໜ້າຫຼັກ. ສະຫຼັບລະຫວ່າງໂຄງຮ່າງເປັນເວລາຈຳກັດ.",
"settings.general.row.newInterfaceNotice.title": "ຕອນນີ້ທ່ານກຳລັງໃຊ້ໂຄງຮ່າງໃໝ່",
"settings.general.row.newInterfaceNotice.description": "ຮູບແບບກ່ອນໜ້ານີ້ບໍ່ມີແລ້ວ",
"settings.general.row.newInterfaceNotice.dismiss": "ປິດ",
"settings.general.row.pinchZoom.title": "ບີບເພື່ອຊູມ",
"settings.general.row.pinchZoom.description": "ອະ​ນຸ​ຍາດ​ໃຫ້​ການ pinch trackpad ແລະ gestures Ctrl-scroll ເພື່ອຊູມ",
"settings.general.row.wayland.title": "ໃຊ້ Wayland ພື້ນເມືອງ",
@@ -1154,41 +1120,6 @@ export const dict = {
"session.delete.confirm": 'ລຶບເຊດຊັນ "{{name}}" ບໍ?',
"session.delete.button": "ລຶບເຊດຊັນ",
"workspace.new": "ພື້ນທີ່ເຮັດວຽກໃໝ່",
"common.viewAll": "ເບິ່ງທັງໝົດ",
"settings.workspaces.filter.all": "ໂຄງການທັງໝົດ",
"settings.workspaces.empty": "ບໍ່ມີພື້ນທີ່ເຮັດວຽກ",
"settings.workspaces.count.one": "{{count}} ພື້ນທີ່ເຮັດວຽກ",
"settings.workspaces.count.other": "{{count}} ພື້ນທີ່ເຮັດວຽກ",
"settings.workspaces.sessions.one": "{{count}} ເຊດຊັນໃນ {{project}}",
"settings.workspaces.sessions.other": "{{count}} ເຊດຊັນໃນ {{project}}",
"settings.workspaces.lastActiveSession": "ເຊດຊັນທີ່ໃຊ້ງານຫຼ້າສຸດ",
"settings.workspaces.deleteAll": "ລຶບພື້ນທີ່ເຮັດວຽກທັງໝົດ",
"settings.workspaces.deleteAll.confirm": "ລຶບພື້ນທີ່ເຮັດວຽກທັງ {{count}} ບ່ອນບໍ?",
"settings.workspaces.delete.warning":
"ໄດເລກະທໍລີ ແລະສາຂາຂອງພື້ນທີ່ເຮັດວຽກຈະຖືກລຶບຖາວອນ, ລວມທັງການປ່ຽນແປງທີ່ຍັງບໍ່ໄດ້ຮວມທີ່ສະແດງຂ້າງລຸ່ມ.",
"settings.workspaces.deleteAll.warning":
"ພື້ນທີ່ເຮັດວຽກ {{count}} ບ່ອນທີ່ເລືອກໃນ {{project}} ຈະຖືກລຶບຖາວອນກໍ່ຕໍ່ເມື່ອແຕ່ລະບ່ອນສະອາດ, ບໍ່ໄດ້ໃຊ້ງານ, ແລະບໍ່ມີເຊດຊັນທີ່ເຊື່ອມໂຍງ.",
"settings.workspaces.delete.blocked.active": "ບໍ່ສາມາດລຶບພື້ນທີ່ເຮັດວຽກທີ່ກຳລັງໃຊ້ງານຢູ່ໄດ້.",
"settings.workspaces.delete.blocked.linked":
"ເຊດຊັນທີ່ເຊື່ອມໂຍງຈະຍັງຢູ່, ແຕ່ໄດເລກະທໍລີເຮັດວຽກຂອງພວກມັນຈະຖືກລຶບຖາວອນ.",
"settings.workspaces.default.title": "ສະພາບແວດລ້ອມເລີ່ມຕົ້ນ",
"settings.workspaces.default.description": "ເລືອກບ່ອນທີ່ເຊດຊັນໃໝ່ເລີ່ມ",
"settings.workspaces.default.lastUsed": "ໃຊ້ຫຼ້າສຸດຕໍ່ໂຄງການ",
"settings.workspaces.default.local": "ໄດເລກະທໍລີທ້ອງຖິ່ນ",
"settings.workspaces.default.new": "ພື້ນທີ່ເຮັດວຽກໃໝ່",
"workspace.move.title": "ຍ້າຍໄປພື້ນທີ່ເຮັດວຽກ",
"workspace.move.menu.title": "ຍ້າຍເຊດຊັນໄປ",
"workspace.move.failed": "ຍ້າຍເຊດຊັນບໍ່ສຳເລັດ",
"workspace.lifecycle.creating": "ກຳລັງສ້າງພື້ນທີ່ເຮັດວຽກ",
"workspace.lifecycle.created": "ສ້າງພື້ນທີ່ເຮັດວຽກແລ້ວ",
"workspace.lifecycle.starting": "ກຳລັງເລີ່ມເຊດຊັນ",
"workspace.onboarding.title": "ແຍກເຊດຊັນດ້ວຍພື້ນທີ່ເຮັດວຽກ",
"workspace.onboarding.description": "ແຕ່ລະອັນມີ checkout ຂອງຕົນເອງ, ຈຶ່ງບໍ່ລົບກວນບ່ອນເກັບຂໍ້ມູນທ້ອງຖິ່ນຂອງທ່ານ",
"workspace.lifecycle.moving": "ກຳລັງຍ້າຍໄປພື້ນທີ່ເຮັດວຽກ",
"workspace.lifecycle.set": "ຕັ້ງພື້ນທີ່ເຮັດວຽກແລ້ວ",
"session.summary.title": "ລາຍລະອຽດເຊດຊັນ",
"session.summary.noBranch": "ບໍ່ມີສາຂາ",
"session.summary.basedOn": "ອີງໃສ່ {{branch}}",
"workspace.type.local": "ທ້ອງຖິ່ນ",
"workspace.type.sandbox": "ກ່ອງຊາຍ",
"workspace.create.failed.title": "ລົ້ມເຫລວໃນການສ້າງພື້ນທີ່ເຮັດວຽກ",
+22 -98
View File
@@ -514,6 +514,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "darbalaukis {{version}}",
"wsl.onboarding.versionMismatch": "Įdiegta versija neatitinka darbalaukio programos versijos.",
"wsl.onboarding.adding": "Pridedama...",
"help.tabs.toast.ariaLabel": "Pristatome Tab. Tvarkykite savo darbą ir aktyvias sesijas naudodami skirtukus",
"help.tabs.toast.dismiss": "Atsisakyti Tabs informacijos",
"help.tabs.title": "Pristatome Tab",
"help.tabs.description": "Tvarkykite savo darbą ir aktyvias sesijas naudodami skirtukus",
"help.tabs.date": "liepos 14 d",
"help.tabs.introduction": "OpenCode Desktop dabar sukurtas iš skirtukų.",
"help.tabs.sessions":
"Pradėkite naują seansą skirtuke arba atidarykite esamą seansą iš bet kurio savo projekto. Atidarykite naują skirtuką, kai pradedate ką nors naujo, ir uždarykite, kai baigsite.",
"help.tabs.organize":
"Jei atidarysite kelis skirtukus, bus lengviau organizuoti aktyvias sesijas. Pervardykite skirtukus į kažką įsimintino, jei planuojate juos palikti.",
"help.tabs.home":
"Visas savo sesijas ir projektus rasite naujajame Home ekrane. Pasirinkus sesiją, ji atidaroma skirtuke.",
"help.tabs.persistence": "Kai iš naujo atidarote programą, skirtukai vis dar yra atidaryti.",
"help.tabs.worktrees":
"Naujasis dizainas dar nepalaiko Git Worktrees, jis pasirodys netrukus. Taigi, jei norite ir toliau naudoti ankstesnį išdėstymą, galite perjungti išdėstymus nustatymuose. Tiesiog nepamirškite, kad naujasis išdėstymas taps nuolatinis po kelių savaičių.",
"server.row.noUsername": "jokio vartotojo vardo",
"dialog.project.edit.title": "Redaguoti projektą",
"dialog.project.edit.name": "Vardas",
@@ -969,6 +984,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Išplėskite redagavimo įrankio dalis",
"settings.general.row.editToolPartsExpanded.description":
"Rodyti pagal numatytuosius nustatymus laiko juostoje išplėstas redagavimo, rašymo ir pataisymo įrankio dalis",
"settings.general.row.newInterface.title": "Naujas išdėstymas",
"settings.general.row.newInterface.badge": "Nauja",
"settings.general.row.newInterface.description":
"Naudokite naujus skirtukus ir pagrindinio puslapio išdėstymą. Perjungti išdėstymą ribotą laiką.",
"settings.general.row.newInterfaceNotice.title": "Dabar naudojate naują išdėstymą",
"settings.general.row.newInterfaceNotice.description": "Ankstesnis išdėstymas nebepasiekiamas",
"settings.general.row.newInterfaceNotice.dismiss": "Atsisakyti",
"settings.general.row.pinchZoom.title": "Suimkite, kad padidintumėte mastelį",
"settings.general.row.pinchZoom.description": "Leiskite priartinti valdiklį ir Ctrl slinkimo gestus",
"settings.general.row.wayland.title": "Naudokite vietinį Wayland",
@@ -1123,52 +1145,6 @@ export const dict = {
"session.delete.confirm": 'Ištrinti seansą "{{name}}"?',
"session.delete.button": "Ištrinti seansą",
"workspace.new": "Nauja darbo vieta",
"common.viewAll": "Rodyti viską",
"session.new.workspace.local.tooltip": "Naudoti dabartinę darbinę kopiją",
"session.new.workspace.new.tooltip": "Sukurti izoliuotą darbinę kopiją",
"session.new.workspace.fromBranch": "iš {{branch}}",
"session.new.workspace.trigger.tooltip": "Pasirinkite, kur vykdyti seansą",
"session.new.workspace.search.placeholder": "Ieškoti darbo sričių",
"settings.tab.workspaces": "Darbo sritys",
"settings.workspaces.filter.all": "Visi projektai",
"settings.workspaces.empty": "Darbo sričių nėra",
"settings.workspaces.count.one": "{{count}} darbo sritis",
"settings.workspaces.count.few": "{{count}} darbo sritys",
"settings.workspaces.count.many": "{{count}} darbo sričių",
"settings.workspaces.count.other": "{{count}} darbo srities",
"settings.workspaces.sessions.one": "{{count}} seansas projekte {{project}}",
"settings.workspaces.sessions.few": "{{count}} seansai projekte {{project}}",
"settings.workspaces.sessions.many": "{{count}} seansų projekte {{project}}",
"settings.workspaces.sessions.other": "{{count}} seanso projekte {{project}}",
"settings.workspaces.lastActiveSession": "Paskutinis aktyvus seansas",
"settings.workspaces.deleteAll": "Ištrinti visas darbo sritis",
"settings.workspaces.deleteAll.confirm": "Ištrinti visas {{count}} darbo sritis?",
"settings.workspaces.delete.warning":
"Darbo srities katalogas ir šaka bus visam laikui pašalinti kartu su visais toliau rodomais nesujungtais pakeitimais.",
"settings.workspaces.deleteAll.warning":
"{{count}} pasirinktos projekto {{project}} darbo sritys bus visam laikui pašalintos tik jei visos yra švarios, neaktyvios ir neturi susietų seansų.",
"settings.workspaces.delete.blocked.active": "Aktyvios darbo srities ištrinti negalima.",
"settings.workspaces.delete.blocked.linked":
"Susieti seansai išliks, tačiau jų darbinis katalogas bus pašalintas visam laikui.",
"settings.workspaces.default.title": "Numatytoji aplinka",
"settings.workspaces.default.description": "Pasirinkite, kur pradėti naujus seansus",
"settings.workspaces.default.lastUsed": "Paskutinė naudota kiekviename projekte",
"settings.workspaces.default.local": "Vietinis katalogas",
"settings.workspaces.default.new": "Nauja darbo sritis",
"workspace.move.title": "Perkelti į darbo sritį",
"workspace.move.menu.title": "Perkelti seansą į",
"workspace.move.failed": "Nepavyko perkelti seanso",
"workspace.lifecycle.creating": "Kuriama darbo sritis",
"workspace.lifecycle.created": "Darbo sritis sukurta",
"workspace.lifecycle.starting": "Paleidžiamas seansas",
"workspace.onboarding.title": "Izoliuokite seansus darbo srityse",
"workspace.onboarding.description":
"Kiekvienas seansas turi atskirą darbinę kopiją, todėl niekas netrukdo vietinei saugyklai",
"workspace.lifecycle.moving": "Perkeliama į darbo sritį",
"workspace.lifecycle.set": "Darbo sritis nustatyta",
"session.summary.title": "Seanso informacija",
"session.summary.noBranch": "Nėra šakos",
"session.summary.basedOn": "Pagrįsta {{branch}}",
"workspace.type.local": "vietinis",
"workspace.type.sandbox": "smėlio dėžė",
"workspace.create.failed.title": "Nepavyko sukurti darbo vietos",
@@ -1194,56 +1170,4 @@ export const dict = {
"workspace.reset.archived.many": "{{count}} sesijos bus archyvuojamos.",
"workspace.reset.note": "Tai iš naujo nustatys darbo sritį, kad ji atitiktų numatytąją šaką.",
"dialog.usageExceeded.dontShowAgain": "Daugiau nerodyti",
"provider.disconnect.toast.noCredentials.description": "Nerasta pašalinamų {{provider}} kredencialų.",
"provider.disconnect.toast.failed.description": "Nepavyko atjungti {{provider}}.",
"toast.migration.failed.title": "Duomenų perkėlimas nepavyko",
"session.background.moveTasks": "Perkelti {{tasks}} į foną",
"session.background.inBackground": "{{tasks}} vykdoma fone",
"session.background.combine": "{{first}} ir {{second}}",
"session.background.shell.one": "{{count}} apvalkalas",
"session.background.shell.other": "{{count}} apvalkalo",
"session.background.shell.few": "{{count}} apvalkalai",
"session.background.shell.many": "{{count}} apvalkalo",
"session.background.subagent.one": "{{count}} subagentas",
"session.background.subagent.other": "{{count}} subagento",
"session.background.subagent.few": "{{count}} subagentai",
"session.background.subagent.many": "{{count}} subagento",
"command.session.background": "Perkelti į foną",
"session.timeline.notice.finished": "{{actor}} baigė",
"session.timeline.notice.failed": "{{actor}} nepavyko",
"session.timeline.notice.cancelled": "{{actor}} atšauktas",
"session.timeline.notice.instructionsUpdated": "Instrukcijos atnaujintos: {{sources}}",
"session.timeline.notice.restart": "Tęsiama paleidus iš naujo",
"settings.tab.preferences": "Nuostatos",
"settings.tab.notifications": "Pranešimai",
"settings.tab.projects": "Projektai",
"settings.tab.extensions": "Plėtiniai",
"settings.preferences.description": "Tinkinkite nuostatas, temą ir numatytąjį elgesį",
"settings.appearance.description": "Tinkinkite temą ir šriftus",
"settings.notifications.description": "Pasirinkite, kada gauti pranešimus ir girdėti garsus",
"settings.shortcuts.description": "Tinkinkite dažnų veiksmų sparčiuosius klavišus",
"settings.servers.description": "Tvarkykite serverių ryšius",
"settings.projects.title": "Projektai",
"settings.projects.description": "Tvarkykite projektų nustatymus šiame serveryje",
"settings.projects.empty": "Projektų nerasta",
"settings.projects.server.all": "Visi serveriai",
"settings.mcps.description": "Tvarkykite Model Context Protocol (MCP) serverius ir įrankius",
"settings.extensions.description": "Tvarkykite šiame serveryje pasiekiamus plėtinius",
"settings.extensions.tab.mcps": "MCP",
"settings.extensions.tab.skills": "Įgūdžiai",
"settings.extensions.availableAll": "Pasiekiama visiems projektams",
"settings.extensions.manageConfig": "Tvarkyti faile opencode.json",
"settings.extensions.addSkills": "Kaip pridėti įgūdžių",
"dialog.server.authenticate.title": "Autentifikuoti",
"project.settings.general.description": "Tvarkykite projekto pavadinimą ir išvaizdą",
"project.settings.scripts": "Scenarijai",
"project.settings.scripts.description": "Konfigūruokite šio projekto scenarijus",
"project.settings.extensions.description": "Peržiūrėkite šiam projektui pasiekiamus plėtinius",
"project.settings.extensions.tab.lsps": "LSP",
"project.settings.extensions.added": "Pridėta prie šio projekto",
"project.settings.extensions.shared": "Bendrinama su visais projektais",
"project.settings.extensions.lsp.detected": "Aptikti kalbos serveriai",
"project.settings.extensions.lsp.description": "Automatiškai aptikta pagal failų tipus",
"project.settings.extensions.setupRequired": "Reikia nustatyti",
"settings.general.section.general": "Bendra",
}
+22 -94
View File
@@ -509,6 +509,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "darbvirsmas {{version}}",
"wsl.onboarding.versionMismatch": "Instalētā versija neatbilst darbvirsmas lietotnes versijai.",
"wsl.onboarding.adding": "Pievieno...",
"help.tabs.toast.ariaLabel": "Iepazīstinām ar cilnēm. Organizējiet darbu un aktīvās sesijas ar cilnēm",
"help.tabs.toast.dismiss": "Aizvērt cilņu informāciju",
"help.tabs.title": "Iepazīstinām ar cilnēm",
"help.tabs.description": "Organizējiet darbu un aktīvās sesijas ar cilnēm",
"help.tabs.date": "14. jūlijs",
"help.tabs.introduction": "OpenCode Desktop tagad balstās uz cilnēm.",
"help.tabs.sessions":
"Sāciet jaunu sesiju cilnē vai atveriet esošu sesiju no jebkura projekta. Atveriet jaunu cilni, uzsākot ko jaunu, un aizveriet to, kad esat pabeidzis.",
"help.tabs.organize":
"Dažas atvērtas cilnes atvieglo aktīvo sesiju pārvaldību. Ja plānojat tās paturēt, pārdēvējiet cilnes saprotamāk.",
"help.tabs.home":
"Visas sesijas un projektus atradīsiet jaunajā sākuma ekrānā. Izvēloties sesiju, tā tiks atvērta cilnē.",
"help.tabs.persistence": "Atverot lietotni no jauna, jūsu cilnes paliek atvērtas.",
"help.tabs.worktrees":
"Jaunais dizains vēl neatbalsta Git Worktrees, tas drīzumā būs pieejams. Ja vēlaties turpināt lietot iepriekšējo izkārtojumu, varat pārslēgties starp izkārtojumiem iestatījumos. Ņemiet vērā, ka jaunais izkārtojums pēc dažām nedēļām kļūs pastāvīgs.",
"server.row.noUsername": "nav lietotājvārda",
"dialog.project.edit.title": "Rediģēt projektu",
"dialog.project.edit.name": "Nosaukums",
@@ -960,6 +975,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Izvērst rediģēšanas rīka daļas",
"settings.general.row.editToolPartsExpanded.description":
"Pēc noklusējuma rādīt rediģēšanas, rakstīšanas un labošanas rīka daļas izvērstas laika joslā",
"settings.general.row.newInterface.title": "Jauns izkārtojums",
"settings.general.row.newInterface.badge": "Jauns",
"settings.general.row.newInterface.description":
"Izmantot jauno cilņu un sākuma izkārtojumu. Ierobežotu laiku var pārslēgties starp izkārtojumiem.",
"settings.general.row.newInterfaceNotice.title": "Tagad izmantojat jauno izkārtojumu",
"settings.general.row.newInterfaceNotice.description": "Iepriekšējais izkārtojums vairs nav pieejams",
"settings.general.row.newInterfaceNotice.dismiss": "Aizvērt",
"settings.general.row.pinchZoom.title": "Tuvināt ar šķipsnu",
"settings.general.row.pinchZoom.description": "Atļaut tuvināšanu ar skārienpaliktņa šķipsnu un Ctrl-ritināšanu",
"settings.general.row.wayland.title": "Izmantot vietējo Wayland",
@@ -1112,50 +1134,6 @@ export const dict = {
"session.delete.confirm": 'Dzēst sesiju "{{name}}"?',
"session.delete.button": "Dzēst sesiju",
"workspace.new": "Jauna darba vide",
"common.viewAll": "Rādīt visu",
"session.new.workspace.local.tooltip": "Izmantot pašreizējo darba kopiju",
"session.new.workspace.new.tooltip": "Izveidot izolētu darba kopiju",
"session.new.workspace.fromBranch": "no {{branch}}",
"session.new.workspace.trigger.tooltip": "Izvēlieties, kur palaist sesiju",
"session.new.workspace.search.placeholder": "Meklēt darbvietas",
"settings.tab.workspaces": "Darbvietas",
"settings.workspaces.filter.all": "Visi projekti",
"settings.workspaces.empty": "Nav darbvietu",
"settings.workspaces.count.zero": "{{count}} darbvietu",
"settings.workspaces.count.one": "{{count}} darbvieta",
"settings.workspaces.count.other": "{{count}} darbvietas",
"settings.workspaces.sessions.zero": "{{count}} sesiju projektā {{project}}",
"settings.workspaces.sessions.one": "{{count}} sesija projektā {{project}}",
"settings.workspaces.sessions.other": "{{count}} sesijas projektā {{project}}",
"settings.workspaces.lastActiveSession": "Pēdējā aktīvā sesija",
"settings.workspaces.deleteAll": "Dzēst visas darbvietas",
"settings.workspaces.deleteAll.confirm": "Dzēst visas {{count}} darbvietas?",
"settings.workspaces.delete.warning":
"Darbvietas mape un zars tiks neatgriezeniski noņemti kopā ar visām zemāk redzamajām nesapludinātajām izmaiņām.",
"settings.workspaces.deleteAll.warning":
"{{count}} atlasītās darbvietas projektā {{project}} tiks neatgriezeniski noņemtas tikai tad, ja visas ir tīras, neaktīvas un bez saistītām sesijām.",
"settings.workspaces.delete.blocked.active": "Aktīvo darbvietu nevar dzēst.",
"settings.workspaces.delete.blocked.linked":
"Saistītās sesijas tiks saglabātas, bet to darba mape tiks neatgriezeniski noņemta.",
"settings.workspaces.default.title": "Noklusējuma vide",
"settings.workspaces.default.description": "Izvēlieties, kur sākt jaunas sesijas",
"settings.workspaces.default.lastUsed": "Pēdējā izmantotā katram projektam",
"settings.workspaces.default.local": "Lokāla mape",
"settings.workspaces.default.new": "Jauna darbvieta",
"workspace.move.title": "Pārvietot uz darbvietu",
"workspace.move.menu.title": "Pārvietot sesiju uz",
"workspace.move.failed": "Neizdevās pārvietot sesiju",
"workspace.lifecycle.creating": "Izveido darbvietu",
"workspace.lifecycle.created": "Darbvieta izveidota",
"workspace.lifecycle.starting": "Palaiž sesiju",
"workspace.onboarding.title": "Izolējiet sesijas darbvietās",
"workspace.onboarding.description":
"Katrai sesijai ir sava darba kopija, tāpēc nekas netraucē lokālajam repozitorijam",
"workspace.lifecycle.moving": "Pārvieto uz darbvietu",
"workspace.lifecycle.set": "Darbvieta iestatīta",
"session.summary.title": "Sesijas informācija",
"session.summary.noBranch": "Nav zara",
"session.summary.basedOn": "Balstīts uz {{branch}}",
"workspace.type.local": "lokāla",
"workspace.type.sandbox": "smilškaste",
"workspace.create.failed.title": "Neizdevās izveidot darba vidi",
@@ -1181,54 +1159,4 @@ export const dict = {
"workspace.reset.archived.many": "Tiks arhivētas {{count}} sesijas.",
"workspace.reset.note": "Darbvieta tiks atiestatīta uz noklusējuma zara stāvokli.",
"dialog.usageExceeded.dontShowAgain": "Vairs nerādīt",
"provider.disconnect.toast.noCredentials.description": "Nav atrasti noņemami {{provider}} akreditācijas dati.",
"provider.disconnect.toast.failed.description": "Neizdevās atvienot {{provider}}.",
"toast.migration.failed.title": "Datu migrācija neizdevās",
"session.background.moveTasks": "Pārvietot {{tasks}} fonā",
"session.background.inBackground": "{{tasks}} darbojas fonā",
"session.background.combine": "{{first}} un {{second}}",
"session.background.shell.zero": "{{count}} čaulu",
"session.background.shell.one": "{{count}} čaula",
"session.background.shell.other": "{{count}} čaulas",
"session.background.subagent.zero": "{{count}} apakšaģentu",
"session.background.subagent.one": "{{count}} apakšaģents",
"session.background.subagent.other": "{{count}} apakšaģenti",
"command.session.background": "Pārvietot fonā",
"session.timeline.notice.finished": "{{actor}} pabeidza",
"session.timeline.notice.failed": "{{actor}} neizdevās",
"session.timeline.notice.cancelled": "{{actor}} tika atcelts",
"session.timeline.notice.instructionsUpdated": "Norādījumi atjaunināti: {{sources}}",
"session.timeline.notice.restart": "Turpina pēc pārstartēšanas",
"settings.tab.preferences": "Iestatījumi",
"settings.tab.notifications": "Paziņojumi",
"settings.tab.projects": "Projekti",
"settings.tab.extensions": "Paplašinājumi",
"settings.preferences.description": "Pielāgojiet preferences, tēmu un noklusējuma darbību",
"settings.appearance.description": "Pielāgojiet tēmu un fontus",
"settings.notifications.description": "Izvēlieties, kad saņemt paziņojumus un dzirdēt skaņas",
"settings.shortcuts.description": "Pielāgojiet biežāko darbību saīsnes",
"settings.servers.description": "Pārvaldiet serveru savienojumus",
"settings.projects.title": "Projekti",
"settings.projects.description": "Pārvaldiet projektu iestatījumus šajā serverī",
"settings.projects.empty": "Projekti nav atrasti",
"settings.projects.server.all": "Visi serveri",
"settings.mcps.description": "Pārvaldiet Model Context Protocol (MCP) serverus un rīkus",
"settings.extensions.description": "Pārvaldiet šajā serverī pieejamos paplašinājumus",
"settings.extensions.tab.mcps": "MCP",
"settings.extensions.tab.skills": "Prasmes",
"settings.extensions.availableAll": "Pieejams visiem projektiem",
"settings.extensions.manageConfig": "Pārvaldīt failā opencode.json",
"settings.extensions.addSkills": "Kā pievienot prasmes",
"dialog.server.authenticate.title": "Autentificēt",
"project.settings.general.description": "Pārvaldiet projekta nosaukumu un izskatu",
"project.settings.scripts": "Skripti",
"project.settings.scripts.description": "Konfigurējiet šī projekta skriptus",
"project.settings.extensions.description": "Skatiet šim projektam pieejamos paplašinājumus",
"project.settings.extensions.tab.lsps": "LSP",
"project.settings.extensions.added": "Pievienots šim projektam",
"project.settings.extensions.shared": "Koplietots ar visiem projektiem",
"project.settings.extensions.lsp.detected": "Noteiktie valodas serveri",
"project.settings.extensions.lsp.description": "Automātiski noteikts pēc failu tipiem",
"project.settings.extensions.setupRequired": "Nepieciešama iestatīšana",
"settings.general.section.general": "Vispārīgi",
}
+23 -90
View File
@@ -510,6 +510,22 @@ export const dict = {
"wsl.onboarding.desktopVersion": "работна површина {{version}}",
"wsl.onboarding.versionMismatch": "Инсталираната верзија не се совпаѓа со верзијата на апликацијата за десктоп.",
"wsl.onboarding.adding": "Се додава...",
"help.tabs.toast.ariaLabel":
"Ви ги претставуваме јазичињата. Организирајте ја вашата работа и активни сесии со јазичиња",
"help.tabs.toast.dismiss": "Отфрли ги информациите за картичките",
"help.tabs.title": "Ви ги претставуваме јазичињата",
"help.tabs.description": "Организирајте ја вашата работа и активни сесии со јазичиња",
"help.tabs.date": "14 јули",
"help.tabs.introduction": "OpenCode Desktop сега е изграден околу картичките.",
"help.tabs.sessions":
"Започнете нова сесија во картичка или отворете постоечка сесија од кој било од вашите проекти. Отворете нова картичка кога започнувате нешто ново и затворете ја кога ќе завршите.",
"help.tabs.organize":
"Одржувањето отворени неколку јазичиња го олеснува организирањето на вашите активни сесии. Преименувајте ги картичките во нешто незаборавно ако планирате да ги задржите наоколу.",
"help.tabs.home":
"Сите ваши сесии и проекти ќе ги најдете на новиот Почетен екран. Изборот на сесија ја отвора во таб.",
"help.tabs.persistence": "Кога повторно ќе ја отворите апликацијата, вашите картички се сè уште отворени.",
"help.tabs.worktrees":
"Новиот дизајн сè уште не поддржува Git Worktrees, тој доаѓа наскоро. Значи, ако сакате да продолжите да го користите претходниот распоред, можете да се префрлате помеѓу распоредот во Поставки. Само имајте на ум дека новиот распоред ќе стане постојан за неколку недели.",
"server.row.noUsername": "нема корисничко име",
"dialog.project.edit.title": "Уреди проект",
"dialog.project.edit.name": "Име",
@@ -962,6 +978,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Проширете ги деловите на алатката за уредување",
"settings.general.row.editToolPartsExpanded.description":
"Прикажи ги деловите на алатката за уредување, пишување и закрпи стандардно проширени во временската линија",
"settings.general.row.newInterface.title": "Нов распоред",
"settings.general.row.newInterface.badge": "Ново",
"settings.general.row.newInterface.description":
"Користете ги новите јазичиња и распоредот на домот. Префрлете се помеѓу распоредот за ограничено време.",
"settings.general.row.newInterfaceNotice.title": "Сега користите нов распоред",
"settings.general.row.newInterfaceNotice.description": "Претходниот распоред веќе не е достапен",
"settings.general.row.newInterfaceNotice.dismiss": "Отфрли",
"settings.general.row.pinchZoom.title": "Стиснете за да зумирате",
"settings.general.row.pinchZoom.description":
"Дозволете зумирање на гестовите за стискање на подлогата и Ctrl-scroll",
@@ -1140,94 +1163,4 @@ export const dict = {
"workspace.reset.archived.many": "{{count}} сесиите ќе бидат архивирани.",
"workspace.reset.note": "Ова ќе го ресетира работниот простор за да одговара на стандардната гранка.",
"dialog.usageExceeded.dontShowAgain": "Не прикажувај повторно",
"provider.disconnect.toast.noCredentials.description": "Не се пронајдени отстранливи акредитиви за {{provider}}.",
"provider.disconnect.toast.failed.description": "Не успеа да се исклучи {{provider}}.",
"toast.migration.failed.title": "Миграцијата на податоците не успеа",
"session.background.moveTasks": "Преместете го {{tasks}} во позадина",
"session.background.inBackground": "Вклучување на {{tasks}} во позадина",
"session.background.combine": "{{first}} и {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shell-а",
"session.background.subagent.one": "Субагент {{count}}",
"session.background.subagent.other": "{{count}} субагенси",
"command.session.background": "Премести во позадина",
"session.timeline.notice.finished": "{{actor}} заврши",
"session.timeline.notice.failed": "{{actor}} не успеа",
"session.timeline.notice.cancelled": "{{actor}} откажано",
"session.timeline.notice.instructionsUpdated": "Ажурирани инструкции: {{sources}}",
"session.timeline.notice.restart": "Продолжува по рестартирање",
"settings.tab.preferences": "Преференци",
"settings.tab.notifications": "Известувања",
"settings.tab.projects": "Проекти",
"settings.tab.extensions": "Екстензии",
"settings.preferences.description": "Приспособете ги преференциите и темата и стандардното однесување",
"settings.appearance.description": "Прилагодете ја темата и фонтовите",
"settings.notifications.description": "Изберете кога да примате известувања и да слушате звуци",
"settings.shortcuts.description": "Приспособете ги кратенките за вообичаени дејства",
"settings.servers.description": "Управувајте со врските со серверот",
"settings.projects.title": "Проекти",
"settings.projects.description": "Управувајте со поставките за проектот на овој сервер",
"settings.projects.empty": "Не се пронајдени проекти",
"settings.projects.server.all": "Сите сервери",
"settings.mcps.description": "Управувајте со серверите и алатките за Модел Контекст Протокол (MCP).",
"settings.extensions.description": "Управувајте со екстензии достапни на овој сервер",
"settings.extensions.tab.mcps": "MCPs",
"settings.extensions.tab.skills": "Вештини",
"settings.extensions.availableAll": "Достапно за сите проекти",
"settings.extensions.manageConfig": "Управувајте во opencode.json",
"settings.extensions.addSkills": "Како да додадете вештини",
"dialog.server.authenticate.title": "Проверете ја автентичноста",
"project.settings.general.description": "Управувајте со името и изгледот на проектот",
"project.settings.scripts": "Скрипти",
"project.settings.scripts.description": "Конфигурирајте ги скриптите за овој проект",
"project.settings.extensions.description": "Погледнете ги наставките достапни за овој проект",
"project.settings.extensions.tab.lsps": "LSPs",
"project.settings.extensions.added": "Додадено во овој проект",
"project.settings.extensions.shared": "Споделено со сите проекти",
"project.settings.extensions.lsp.detected": "Откриени јазични сервери",
"project.settings.extensions.lsp.description": "Автоматски се открива од типовите на датотеки",
"project.settings.extensions.setupRequired": "Потребно е поставување",
"settings.general.section.general": "Општо",
"common.viewAll": "Прикажи ги сите",
"session.new.workspace.local.tooltip": "Користи ја тековната работна копија",
"session.new.workspace.new.tooltip": "Создај изолирана работна копија",
"session.new.workspace.fromBranch": "од {{branch}}",
"session.new.workspace.trigger.tooltip": "Изберете каде да се изврши сесијата",
"session.new.workspace.search.placeholder": "Пребарувајте работни простори",
"settings.tab.workspaces": "Работни простори",
"settings.workspaces.filter.all": "Сите проекти",
"settings.workspaces.empty": "Нема работни простори",
"settings.workspaces.count.one": "{{count}} работен простор",
"settings.workspaces.count.other": "{{count}} работни простори",
"settings.workspaces.sessions.one": "{{count}} сесија во {{project}}",
"settings.workspaces.sessions.other": "{{count}} сесии во {{project}}",
"settings.workspaces.lastActiveSession": "Последна активна сесија",
"settings.workspaces.deleteAll": "Избришете ги сите работни простори",
"settings.workspaces.deleteAll.confirm": "Да се ​​избришат сите работни простори на {{count}}?",
"settings.workspaces.delete.warning":
"Директориумот и гранката на работниот простор трајно ќе се отстранат, вклучувајќи ги и сите неповрзани промени прикажани подолу.",
"settings.workspaces.deleteAll.warning":
"Избраните работни простори {{count}} во {{project}} трајно ќе се отстранат само ако секој е чист, неактивен и нема поврзани сесии.",
"settings.workspaces.delete.blocked.active": "Активниот работен простор не може да се избрише.",
"settings.workspaces.delete.blocked.linked":
"Поврзаните сесии ќе останат, но нивниот работен директориум трајно ќе биде отстранет.",
"settings.workspaces.default.title": "Стандардна околина",
"settings.workspaces.default.description": "Изберете каде започнуваат новите сесии",
"settings.workspaces.default.lastUsed": "Последно користено по проект",
"settings.workspaces.default.local": "Локален директориум",
"settings.workspaces.default.new": "Нов работен простор",
"workspace.move.title": "Премести во работен простор",
"workspace.move.menu.title": "Преместете ја сесијата во",
"workspace.move.failed": "Не успеа да се премести сесијата",
"workspace.lifecycle.creating": "Создавање работен простор",
"workspace.lifecycle.created": "Создаден работен простор",
"workspace.lifecycle.starting": "Почетна сесија",
"workspace.onboarding.title": "Изолирајте сесии со работни простори",
"workspace.onboarding.description":
"Секоја добива сопствена работна копија, така што ништо не го попречува локалното складиште",
"workspace.lifecycle.moving": "Преместување во работен простор",
"workspace.lifecycle.set": "Работниот простор е поставен",
"session.summary.title": "Детали за сесијата",
"session.summary.noBranch": "Нема гранка",
"session.summary.basedOn": "Врз основа на {{branch}}",
}
+22 -90
View File
@@ -512,6 +512,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "ширээний компьютер {{version}}",
"wsl.onboarding.versionMismatch": "Суулгасан хувилбар нь ширээний програмын хувилбартай таарахгүй байна.",
"wsl.onboarding.adding": "Нэмэж байна...",
"help.tabs.toast.ariaLabel": "Табуудыг танилцуулж байна. Таб ашиглан ажил болон идэвхтэй сешнүүдийг зохион байгуул",
"help.tabs.toast.dismiss": "Табын мэдээллийг хаах",
"help.tabs.title": "Табуудыг танилцуулж байна",
"help.tabs.description": "Таб ашиглан ажил болон идэвхтэй сешнүүдийг зохион байгуул",
"help.tabs.date": "Долдугаар сарын 14",
"help.tabs.introduction": "OpenCode Desktop одоо табуудыг тойрон бүтээгдсэн.",
"help.tabs.sessions":
"Таб дээрээс шинэ сесс эхлүүлэх эсвэл аль нэг төслөөсөө одоо байгаа сессийг нээнэ үү. Шинэ зүйл эхлүүлж байхдаа шинэ таб нээж, хийж дуусаад хаа.",
"help.tabs.organize":
"Цөөн хэдэн табыг нээлттэй байлгах нь идэвхтэй сешнүүдийг зохион байгуулахад хялбар болгодог. Хэрэв та тэдгээрийг эргэн тойронд байлгахаар төлөвлөж байгаа бол табуудыг мартагдашгүй зүйл болгон өөрчил.",
"help.tabs.home":
"Та бүх сесс болон төслүүдээ шинэ үндсэн нүүрэн дээрээс олох болно. Сешн сонгох нь таб дээр нээгдэнэ.",
"help.tabs.persistence": "Таныг програмыг дахин нээхэд таны таб нээлттэй хэвээр байна.",
"help.tabs.worktrees":
'Шинэ загвар нь одоохондоо Git Worktrees-г дэмждэггүй, удахгүй гарах болно. Хэрэв та өмнөх бүдүүвчийг үргэлжлүүлэн ашиглахыг хүсвэл "Тохиргоо" хэсэгт байрлуулалт хооронд сэлгэх боломжтой. Хэдэн долоо хоногийн дараа шинэ зохион байгуулалт байнгын болно гэдгийг санаарай.',
"server.row.noUsername": "хэрэглэгчийн нэр байхгүй",
"dialog.project.edit.title": "Төслийг засварлах",
"dialog.project.edit.name": "Нэр",
@@ -964,6 +979,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Засварлах хэрэгслийн хэсгүүдийг өргөжүүлэх",
"settings.general.row.editToolPartsExpanded.description":
"Он цагийн хэлхээс дээр анхдагчаар өргөтгөсөн засварлах, бичих, засварлах хэрэгслийн хэсгүүдийг харуул",
"settings.general.row.newInterface.title": "Шинэ зохион байгуулалт",
"settings.general.row.newInterface.badge": "Шинэ",
"settings.general.row.newInterface.description":
"Шинэ таб болон гэрийн байршлыг ашиглана уу. Хязгаарлагдмал хугацаанд бүдүүвч хооронд шилжих.",
"settings.general.row.newInterfaceNotice.title": "Та одоо шинэ бүдүүвч ашиглаж байна",
"settings.general.row.newInterfaceNotice.description": "Өмнөх загвар байхгүй болсон",
"settings.general.row.newInterfaceNotice.dismiss": "Хаах",
"settings.general.row.pinchZoom.title": "Томруулахын тулд чимхээрэй",
"settings.general.row.pinchZoom.description":
"Trackpad чимхэх, Ctrl-г гүйлгэх дохиог ашиглан томруулахыг зөвшөөрнө үү",
@@ -1143,94 +1165,4 @@ export const dict = {
"workspace.reset.archived.many": "{{count}} сессийг архивлах болно.",
"workspace.reset.note": "Энэ нь ажлын талбарыг анхдагч салбартай тааруулахын тулд дахин тохируулах болно.",
"dialog.usageExceeded.dontShowAgain": "Дахин бүү харуул",
"toast.migration.failed.title": "Өгөгдөл шилжүүлэлт амжилтгүй боллоо",
"session.background.moveTasks": "{{tasks}}-ыг арын горимд шилжүүлэх",
"session.background.inBackground": "{{tasks}} арын горимд ажиллаж байна",
"session.background.combine": "{{first}} болон {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shell",
"session.background.subagent.one": "{{count}} дэд агент",
"session.background.subagent.other": "{{count}} дэд агент",
"command.session.background": "Арын горимд шилжүүлэх",
"session.timeline.notice.finished": "{{actor}} дууслаа",
"session.timeline.notice.failed": "{{actor}} амжилтгүй боллоо",
"session.timeline.notice.cancelled": "{{actor}} цуцлагдлаа",
"settings.tab.preferences": "Тохируулга",
"settings.tab.notifications": "Мэдэгдэл",
"settings.tab.projects": "Төслүүд",
"settings.tab.extensions": "Өргөтгөлүүд",
"settings.preferences.description": "Тохируулга, загвар болон өгөгдмөл үйлдлийг өөрчлөх",
"settings.appearance.description": "Загвар болон фонтыг өөрчлөх",
"settings.notifications.description": "Хэзээ мэдэгдэл авч, дуу сонсохоо сонгоно уу",
"settings.shortcuts.description": "Түгээмэл үйлдлийн товчлолуудыг өөрчлөх",
"settings.servers.description": "Серверийн холболтуудыг удирдах",
"settings.projects.title": "Төслүүд",
"settings.projects.description": "Энэ сервер дээрх төслийн тохиргоог удирдах",
"settings.projects.empty": "Төсөл олдсонгүй",
"settings.projects.server.all": "Бүх сервер",
"settings.mcps.description": "Model Context Protocol (MCP) сервер болон хэрэгслүүдийг удирдах",
"settings.extensions.description": "Энэ сервер дээр ашиглах боломжтой өргөтгөлүүдийг удирдах",
"settings.extensions.tab.mcps": "MCP-үүд",
"settings.extensions.tab.skills": "Ур чадварууд",
"settings.extensions.availableAll": "Бүх төсөлд ашиглах боломжтой",
"settings.extensions.manageConfig": "opencode.json дотор удирдах",
"settings.extensions.addSkills": "Ур чадвар хэрхэн нэмэх вэ",
"dialog.server.authenticate.title": "Баталгаажуулах",
"project.settings.general.description": "Төслийн нэр болон харагдах байдлыг удирдах",
"project.settings.scripts": "Скриптүүд",
"project.settings.scripts.description": "Энэ төслийн скриптүүдийг тохируулах",
"project.settings.extensions.description": "Энэ төсөлд ашиглах боломжтой өргөтгөлүүдийг харах",
"project.settings.extensions.tab.lsps": "LSP-үүд",
"project.settings.extensions.added": "Энэ төсөлд нэмсэн",
"project.settings.extensions.shared": "Бүх төсөлтэй хуваалцсан",
"project.settings.extensions.lsp.detected": "Илрүүлсэн хэлний серверүүд",
"project.settings.extensions.lsp.description": "Файлын төрлөөс автоматаар илрүүлсэн",
"project.settings.extensions.setupRequired": "Тохируулах шаардлагатай",
"settings.general.section.general": "Ерөнхий",
"common.viewAll": "Бүгдийг харах",
"session.new.workspace.local.tooltip": "Одоогийн checkout-ыг ашиглах",
"session.new.workspace.new.tooltip": "Тусгаарласан checkout үүсгэх",
"session.new.workspace.fromBranch": "{{branch}} салаанаас",
"session.new.workspace.trigger.tooltip": "Сессийг хаана ажиллуулахыг сонгоно уу",
"session.new.workspace.search.placeholder": "Ажлын талбар хайх",
"settings.tab.workspaces": "Ажлын талбарууд",
"settings.workspaces.filter.all": "Бүх төсөл",
"settings.workspaces.empty": "Ажлын талбар алга",
"settings.workspaces.count.one": "{{count}} ажлын талбар",
"settings.workspaces.count.other": "{{count}} ажлын талбар",
"settings.workspaces.sessions.one": "{{project}} төсөл дэх {{count}} сесс",
"settings.workspaces.sessions.other": "{{project}} төсөл дэх {{count}} сесс",
"settings.workspaces.lastActiveSession": "Сүүлд идэвхтэй байсан сесс",
"settings.workspaces.deleteAll": "Бүх ажлын талбарыг устгах",
"settings.workspaces.deleteAll.confirm": "Бүх {{count}} ажлын талбарыг устгах уу?",
"settings.workspaces.delete.warning":
"Ажлын талбарын хавтас болон салаа, доор харуулсан нэгтгээгүй өөрчлөлтүүдийн хамт бүрмөсөн устгагдана.",
"settings.workspaces.deleteAll.warning":
"{{project}} төсөлд сонгосон {{count}} ажлын талбарыг тус бүр нь цэвэр, идэвхгүй, холбогдсон сессгүй үед л бүрмөсөн устгана.",
"settings.workspaces.delete.blocked.active": "Идэвхтэй ажлын талбарыг устгах боломжгүй.",
"settings.workspaces.delete.blocked.linked":
"Холбогдсон сессүүд үлдэх боловч тэдгээрийн ажлын хавтас бүрмөсөн устгагдана.",
"settings.workspaces.default.title": "Өгөгдмөл орчин",
"settings.workspaces.default.description": "Шинэ сессүүд хаана эхлэхийг сонгоно уу",
"settings.workspaces.default.lastUsed": "Төсөл бүрд сүүлд ашигласан",
"settings.workspaces.default.local": "Дотоод хавтас",
"settings.workspaces.default.new": "Шинэ ажлын талбар",
"workspace.move.title": "Ажлын талбар руу шилжүүлэх",
"workspace.move.menu.title": "Сессийг шилжүүлэх газар",
"workspace.move.failed": "Сессийг шилжүүлж чадсангүй",
"workspace.lifecycle.creating": "Ажлын талбар үүсгэж байна",
"workspace.lifecycle.created": "Ажлын талбар үүслээ",
"workspace.lifecycle.starting": "Сессийг эхлүүлж байна",
"workspace.onboarding.title": "Сессүүдийг ажлын талбараар тусгаарлах",
"workspace.onboarding.description": "Тус бүр өөрийн checkout-той тул таны дотоод хадгалах газарт юу ч саад болохгүй",
"workspace.lifecycle.moving": "Ажлын талбар руу шилжүүлж байна",
"workspace.lifecycle.set": "Ажлын талбарыг тохирууллаа",
"session.summary.title": "Сессийн дэлгэрэнгүй",
"session.summary.noBranch": "Салаа байхгүй",
"session.summary.basedOn": "{{branch}} салаанд суурилсан",
"provider.disconnect.toast.noCredentials.description":
"{{provider}}-ийн устгах боломжтой нэвтрэх мэдээлэл олдсонгүй.",
"provider.disconnect.toast.failed.description": "{{provider}}-ийг салгаж чадсангүй.",
"session.timeline.notice.instructionsUpdated": "Заавар шинэчлэгдлээ: {{sources}}",
"session.timeline.notice.restart": "Дахин эхлүүлсний дараа үргэлжлүүлж байна",
}
+22 -91
View File
@@ -286,9 +286,6 @@ export const dict = {
"provider.custom.error.duplicate": "Pendua",
"provider.disconnect.toast.disconnected.title": "{{provider}} telah diputuskan",
"provider.disconnect.toast.disconnected.description": "Model {{provider}} tidak lagi tersedia.",
"provider.disconnect.toast.noCredentials.description":
"Tiada kelayakan yang boleh dibuang ditemui untuk {{provider}}.",
"provider.disconnect.toast.failed.description": "Gagal memutuskan sambungan {{provider}}.",
"model.tag.free": "Percuma",
"model.tag.latest": "Terkini",
"model.provider.anthropic": "Anthropic",
@@ -512,6 +509,21 @@ export const dict = {
"wsl.onboarding.desktopVersion": "desktop {{version}}",
"wsl.onboarding.versionMismatch": "Versi yang dipasang tidak sepadan dengan versi aplikasi desktop.",
"wsl.onboarding.adding": "Sedang menambah...",
"help.tabs.toast.ariaLabel": "Pengenalan Tab. Susun kerja dan sesi aktif anda dengan tab",
"help.tabs.toast.dismiss": "Tutup maklumat Tab",
"help.tabs.title": "Pengenalan Tab",
"help.tabs.description": "Susun kerja dan sesi aktif anda dengan tab",
"help.tabs.date": "14 Julai",
"help.tabs.introduction": "OpenCode Desktop kini dibina berasaskan tab.",
"help.tabs.sessions":
"Mulakan sesi baharu dalam tab, atau buka sesi sedia ada daripada mana-mana projek anda. Buka tab baharu apabila anda memulakan sesuatu yang baru, dan tutup apabila selesai.",
"help.tabs.organize":
"Membuka beberapa tab memudahkan anda menyusun sesi aktif. Namakan semula tab kepada sesuatu yang mudah diingati jika anda ingin menyimpannya.",
"help.tabs.home":
"Anda akan menemui semua sesi dan projek anda di skrin Laman Utama yang baharu. Memilih sesi akan membukanya dalam tab.",
"help.tabs.persistence": "Apabila anda membuka semula aplikasi, tab anda masih terbuka.",
"help.tabs.worktrees":
"Reka bentuk baharu belum menyokong Git Worktrees, ia akan hadir tidak lama lagi. Jika anda ingin terus menggunakan susun atur sebelum ini, anda boleh bertukar antara susun atur dalam Tetapan. Harap maklum bahawa susun atur baharu akan menjadi kekal dalam beberapa minggu lagi.",
"server.row.noUsername": "tiada nama pengguna",
"dialog.project.edit.title": "Edit projek",
"dialog.project.edit.name": "Nama",
@@ -610,7 +622,6 @@ export const dict = {
"toast.session.export.failed.description": "Ralat berlaku semasa mengeksport sesi",
"toast.session.listFailed.title": "Gagal memuatkan sesi untuk {{project}}",
"toast.project.reloadFailed.title": "Gagal memuat semula {{project}}",
"toast.migration.failed.title": "Migrasi data gagal",
"toast.update.title": "Kemas kini tersedia",
"toast.update.description": "Versi baharu OpenCode ({{version}}) kini tersedia untuk dipasang.",
"toast.update.action.installRestart": "Pasang dan mulakan semula",
@@ -696,19 +707,6 @@ export const dict = {
"session.error.notFound": "Sesi ini tidak dapat ditemui",
"session.error.notFound.description": "Tab ini merujuk kepada sesi yang tidak lagi wujud pada pelayan ini.",
"session.error.notFound.closeTab": "Tutup Tab",
"session.background.moveTasks": "Alihkan {{tasks}} ke latar belakang",
"session.background.inBackground": "Menjalankan {{tasks}} di latar belakang",
"session.background.combine": "{{first}} dan {{second}}",
"session.background.shell.one": "{{count}} shell",
"session.background.shell.other": "{{count}} shell",
"session.background.subagent.one": "{{count}} subagen",
"session.background.subagent.other": "{{count}} subagen",
"command.session.background": "Alihkan ke latar belakang",
"session.timeline.notice.finished": "{{actor}} selesai",
"session.timeline.notice.failed": "{{actor}} gagal",
"session.timeline.notice.cancelled": "{{actor}} dibatalkan",
"session.timeline.notice.instructionsUpdated": "Arahan dikemas kini: {{sources}}",
"session.timeline.notice.restart": "Meneruskan selepas mula semula",
"session.error.serverConnection": "Tidak dapat berhubung dengan pelayan ini",
"session.review.filesChanged": "{{count}} Fail Diubah",
"session.review.change.one": "Perubahan",
@@ -913,42 +911,10 @@ export const dict = {
"settings.section.desktop": "Desktop",
"settings.section.server": "Pelayan",
"settings.tab.general": "Umum",
"settings.tab.preferences": "Keutamaan",
"settings.tab.shortcuts": "Pintasan",
"settings.tab.notifications": "Notifikasi",
"settings.tab.projects": "Projek",
"settings.tab.extensions": "Sambungan",
"settings.preferences.description": "Sesuaikan keutamaan, tema, dan tingkah laku lalai",
"settings.appearance.description": "Sesuaikan tema dan fon",
"settings.notifications.description": "Pilih masa menerima notifikasi dan mendengar bunyi",
"settings.shortcuts.description": "Sesuaikan pintasan untuk tindakan biasa",
"settings.servers.description": "Urus sambungan pelayan",
"settings.projects.title": "Projek",
"settings.projects.description": "Urus tetapan projek pada pelayan ini",
"settings.projects.empty": "Tiada projek ditemui",
"settings.projects.server.all": "Semua pelayan",
"settings.mcps.description": "Urus pelayan dan alat Model Context Protocol (MCP)",
"settings.extensions.description": "Urus sambungan yang tersedia pada pelayan ini",
"settings.extensions.tab.mcps": "MCP",
"settings.extensions.tab.skills": "Kemahiran",
"settings.extensions.availableAll": "Tersedia untuk semua projek",
"settings.extensions.manageConfig": "Urus dalam opencode.json",
"settings.extensions.addSkills": "Cara menambah kemahiran",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "Integrasi WSL",
"settings.desktop.wsl.description": "Jalankan pelayan OpenCode dalam WSL di Windows.",
"dialog.server.authenticate.title": "Pengesahan",
"project.settings.general.description": "Urus nama dan penampilan projek",
"project.settings.scripts": "Skrip",
"project.settings.scripts.description": "Konfigurasikan skrip untuk projek ini",
"project.settings.extensions.description": "Lihat sambungan yang tersedia untuk projek ini",
"project.settings.extensions.tab.lsps": "LSP",
"project.settings.extensions.added": "Ditambah pada projek ini",
"project.settings.extensions.shared": "Dikongsi dengan semua projek",
"project.settings.extensions.lsp.detected": "Pelayan bahasa yang dikesan",
"project.settings.extensions.lsp.description": "Dikesan automatik daripada jenis fail",
"project.settings.extensions.setupRequired": "Persediaan diperlukan",
"settings.general.section.general": "Umum",
"settings.general.section.appearance": "Penampilan",
"settings.general.section.advanced": "Lanjutan",
"settings.general.section.notifications": "Pemberitahuan sistem",
@@ -1003,6 +969,13 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Kembangkan bahagian alat suntingan",
"settings.general.row.editToolPartsExpanded.description":
"Papar bahagian alat sunting, tulis, dan tampal dikembangkan secara lalai dalam garis masa",
"settings.general.row.newInterface.title": "Susun atur baharu",
"settings.general.row.newInterface.badge": "Baharu",
"settings.general.row.newInterface.description":
"Guna tab dan susun atur Laman Utama yang baharu. Tukar antara susun atur untuk masa terhad.",
"settings.general.row.newInterfaceNotice.title": "Anda kini menggunakan susun atur baharu",
"settings.general.row.newInterfaceNotice.description": "Susun atur sebelum ini tidak lagi tersedia",
"settings.general.row.newInterfaceNotice.dismiss": "Tutup",
"settings.general.row.pinchZoom.title": "Cubit untuk zum",
"settings.general.row.pinchZoom.description": "Benarkan gerak isyarat cubit pada pad jejak dan Ctrl-tatal untuk zum",
"settings.general.row.wayland.title": "Guna Wayland asli",
@@ -1156,48 +1129,6 @@ export const dict = {
"session.delete.confirm": 'Padam sesi "{{name}}"?',
"session.delete.button": "Padam sesi",
"workspace.new": "Ruang kerja baharu",
"common.viewAll": "Lihat semua",
"session.new.workspace.local.tooltip": "Gunakan checkout semasa",
"session.new.workspace.new.tooltip": "Cipta checkout berasingan",
"session.new.workspace.fromBranch": "daripada {{branch}}",
"session.new.workspace.trigger.tooltip": "Pilih tempat menjalankan sesi",
"session.new.workspace.search.placeholder": "Cari ruang kerja",
"settings.tab.workspaces": "Ruang kerja",
"settings.workspaces.filter.all": "Semua projek",
"settings.workspaces.empty": "Tiada ruang kerja",
"settings.workspaces.count.one": "{{count}} ruang kerja",
"settings.workspaces.count.other": "{{count}} ruang kerja",
"settings.workspaces.sessions.one": "{{count}} sesi dalam {{project}}",
"settings.workspaces.sessions.other": "{{count}} sesi dalam {{project}}",
"settings.workspaces.lastActiveSession": "Sesi aktif terakhir",
"settings.workspaces.deleteAll": "Padam semua ruang kerja",
"settings.workspaces.deleteAll.confirm": "Padam semua {{count}} ruang kerja?",
"settings.workspaces.delete.warning":
"Direktori ruang kerja dan cawangan akan dipadamkan secara kekal, termasuk sebarang perubahan belum digabungkan yang ditunjukkan di bawah.",
"settings.workspaces.deleteAll.warning":
"{{count}} ruang kerja yang dipilih dalam {{project}} akan dipadamkan secara kekal hanya jika setiap satu bersih, tidak aktif, dan tiada sesi terpaut.",
"settings.workspaces.delete.blocked.active": "Ruang kerja aktif tidak boleh dipadam.",
"settings.workspaces.delete.blocked.linked":
"Sesi terpaut akan kekal, tetapi direktori kerjanya akan dipadamkan secara kekal.",
"settings.workspaces.default.title": "Persekitaran lalai",
"settings.workspaces.default.description": "Pilih tempat sesi baharu bermula",
"settings.workspaces.default.lastUsed": "Terakhir digunakan bagi setiap projek",
"settings.workspaces.default.local": "Direktori setempat",
"settings.workspaces.default.new": "Ruang kerja baharu",
"workspace.move.title": "Alihkan ke ruang kerja",
"workspace.move.menu.title": "Alihkan sesi ke",
"workspace.move.failed": "Gagal mengalihkan sesi",
"workspace.lifecycle.creating": "Mencipta ruang kerja",
"workspace.lifecycle.created": "Ruang kerja dicipta",
"workspace.lifecycle.starting": "Memulakan sesi",
"workspace.onboarding.title": "Asingkan sesi dengan ruang kerja",
"workspace.onboarding.description":
"Setiap sesi mendapat checkout sendiri, jadi tiada apa-apa yang mengganggu repositori setempat anda",
"workspace.lifecycle.moving": "Mengalihkan ke ruang kerja",
"workspace.lifecycle.set": "Ruang kerja ditetapkan",
"session.summary.title": "Butiran sesi",
"session.summary.noBranch": "Tiada cawangan",
"session.summary.basedOn": "Berdasarkan {{branch}}",
"workspace.type.local": "setempat",
"workspace.type.sandbox": "kotak pasir",
"workspace.create.failed.title": "Gagal mencipta ruang kerja",

Some files were not shown because too many files have changed in this diff Show More