Compare commits

..

1 Commits

Author SHA1 Message Date
Brendan Allan 17a5ef5a9e fix(app): clear stale timeline errors 2026-07-29 14:48:56 +08:00
330 changed files with 3559 additions and 22455 deletions
+2 -1
View File
@@ -339,7 +339,8 @@ jobs:
env:
OPENCODE_CHANNEL: ${{ (github.ref_name == 'beta' && 'beta') || 'prod' }}
GH_TOKEN: ${{ steps.committer.outputs.token }}
CSC_KEYCHAIN: build.keychain
CSC_LINK: ${{ secrets.APPLE_CERTIFICATE }}
CSC_KEY_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_API_KEY: ${{ runner.temp }}/apple-api-key.p8
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY }}
APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
+27
View File
@@ -252,6 +252,33 @@ These are not strictly enforced, they are just general guidelines:
For net-new functionality, start with a design conversation. Open an issue describing the problem, your proposed approach (optional), and why it belongs in OpenCode. The core team will help decide whether it should move forward; please wait for that approval instead of opening a feature PR directly.
## Trust & Vouch System
This project uses [vouch](https://github.com/mitchellh/vouch) to manage contributor trust. The vouch list is maintained in [`.github/VOUCHED.td`](.github/VOUCHED.td).
### How it works
- **Vouched users** are explicitly trusted contributors.
- **Denounced users** are explicitly blocked. Issues and pull requests from denounced users are automatically closed. If you have been denounced, you can request to be unvouched by reaching out to a maintainer on [Discord](https://opencode.ai/discord)
- **Everyone else** can participate normally — you don't need to be vouched to open issues or PRs.
### For maintainers
Collaborators with write access can manage the vouch list by commenting on any issue:
- `vouch` — vouch for the issue author
- `vouch @username` — vouch for a specific user
- `denounce` — denounce the issue author
- `denounce @username` — denounce a specific user
- `denounce @username <reason>` — denounce with a reason
- `unvouch` / `unvouch @username` — remove someone from the list
Changes are committed automatically to `.github/VOUCHED.td`.
### Denouncement policy
Denouncement is reserved for users who repeatedly submit low-quality AI-generated contributions, spam, or otherwise act in bad faith. It is not used for disagreements or honest mistakes.
## Issue Requirements
All issues **must** use one of our issue templates:
+44 -38
View File
@@ -29,7 +29,7 @@
},
"packages/app": {
"name": "@opencode-ai/app",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@corvu/drawer": "catalog:",
"@dnd-kit/abstract": "0.5.0",
@@ -96,7 +96,7 @@
},
"packages/cli": {
"name": "@opencode-ai/cli",
"version": "1.18.12",
"version": "1.18.9",
"bin": {
"lildax": "./bin/lildax.cjs",
},
@@ -144,7 +144,7 @@
},
"packages/codemode": {
"name": "@opencode-ai/codemode",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"acorn": "8.15.0",
"effect": "catalog:",
@@ -158,7 +158,7 @@
},
"packages/console/app": {
"name": "@opencode-ai/console-app",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@cloudflare/vite-plugin": "1.15.2",
"@ibm/plex": "6.4.1",
@@ -194,7 +194,7 @@
},
"packages/console/core": {
"name": "@opencode-ai/console-core",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@aws-sdk/client-sts": "3.782.0",
"@jsx-email/render": "1.1.1",
@@ -221,7 +221,7 @@
},
"packages/console/function": {
"name": "@opencode-ai/console-function",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@ai-sdk/anthropic": "3.0.82",
"@ai-sdk/openai": "3.0.48",
@@ -243,7 +243,7 @@
},
"packages/console/mail": {
"name": "@opencode-ai/console-mail",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@jsx-email/all": "2.2.3",
"@jsx-email/cli": "1.4.3",
@@ -267,7 +267,7 @@
},
"packages/console/support": {
"name": "@opencode-ai/console-support",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@cloudflare/vite-plugin": "1.15.2",
"@opencode-ai/console-core": "workspace:*",
@@ -287,7 +287,7 @@
},
"packages/core": {
"name": "@opencode-ai/core",
"version": "1.18.12",
"version": "1.18.9",
"bin": {
"opencode": "./bin/opencode",
},
@@ -339,7 +339,7 @@
"drizzle-orm": "catalog:",
"effect": "catalog:",
"fuzzysort": "3.1.0",
"gitlab-ai-provider": "6.12.1",
"gitlab-ai-provider": "6.12.0",
"glob": "13.0.5",
"google-auth-library": "10.5.0",
"gray-matter": "4.0.3",
@@ -381,16 +381,16 @@
},
"packages/desktop": {
"name": "@opencode-ai/desktop",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@zip.js/zip.js": "2.7.62",
"drizzle-orm": "catalog:",
"effect": "catalog:",
"electron-context-menu": "4.1.2",
"electron-log": "^5",
"electron-store": "11.0.2",
"electron-updater": "6.8.9",
"electron-window-state": "^5.0.3",
"marked": "^15",
},
"devDependencies": {
"@actions/artifact": "4.0.0",
@@ -435,7 +435,7 @@
},
"packages/effect-drizzle-sqlite": {
"name": "@opencode-ai/effect-drizzle-sqlite",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"drizzle-orm": "catalog:",
"effect": "catalog:",
@@ -449,7 +449,7 @@
},
"packages/effect-sqlite-node": {
"name": "@opencode-ai/effect-sqlite-node",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"effect": "catalog:",
},
@@ -461,7 +461,7 @@
},
"packages/enterprise": {
"name": "@opencode-ai/enterprise",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@hono/standard-validator": "catalog:",
"@opencode-ai/core": "workspace:*",
@@ -493,7 +493,7 @@
},
"packages/function": {
"name": "@opencode-ai/function",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@octokit/auth-app": "8.0.1",
"@octokit/rest": "catalog:",
@@ -509,7 +509,7 @@
},
"packages/http-recorder": {
"name": "@opencode-ai/http-recorder",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@effect/platform-node": "4.0.0-beta.83",
"@effect/platform-node-shared": "4.0.0-beta.83",
@@ -540,7 +540,7 @@
},
"packages/llm": {
"name": "@opencode-ai/llm",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@opencode-ai/schema": "workspace:*",
"@smithy/eventstream-codec": "4.2.14",
@@ -559,7 +559,7 @@
},
"packages/opencode": {
"name": "opencode",
"version": "1.18.12",
"version": "1.18.9",
"bin": {
"opencode": "./bin/opencode",
},
@@ -632,7 +632,7 @@
"drizzle-orm": "catalog:",
"effect": "catalog:",
"fuzzysort": "3.1.0",
"gitlab-ai-provider": "6.12.1",
"gitlab-ai-provider": "6.12.0",
"glob": "13.0.5",
"google-auth-library": "10.5.0",
"gray-matter": "4.0.3",
@@ -690,7 +690,7 @@
},
"packages/plugin": {
"name": "@opencode-ai/plugin",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@ai-sdk/provider": "3.0.8",
"@opencode-ai/sdk": "workspace:*",
@@ -766,7 +766,7 @@
},
"packages/sdk/js": {
"name": "@opencode-ai/sdk",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"cross-spawn": "catalog:",
},
@@ -781,7 +781,7 @@
},
"packages/server": {
"name": "@opencode-ai/server",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@opencode-ai/core": "workspace:*",
"@opencode-ai/protocol": "workspace:*",
@@ -796,7 +796,7 @@
},
"packages/session-ui": {
"name": "@opencode-ai/session-ui",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@kobalte/core": "catalog:",
"@opencode-ai/client": "file:../app/vendor/opencode-ai-client-1.17.13-v2.tgz",
@@ -811,11 +811,15 @@
"@solid-primitives/media": "2.3.3",
"@solid-primitives/resize-observer": "2.1.3",
"@solidjs/meta": "catalog:",
"@solidjs/router": "catalog:",
"diff": "catalog:",
"dompurify": "3.3.1",
"fuzzysort": "catalog:",
"katex": "0.16.27",
"luxon": "catalog:",
"marked": "catalog:",
"marked-katex-extension": "5.1.6",
"marked-shiki": "catalog:",
"morphdom": "2.7.8",
"motion": "12.34.5",
"remeda": "catalog:",
@@ -828,6 +832,7 @@
"devDependencies": {
"@tsconfig/node22": "catalog:",
"@types/bun": "catalog:",
"@types/katex": "0.16.7",
"@types/luxon": "catalog:",
"@typescript/native-preview": "catalog:",
"typescript": "catalog:",
@@ -836,7 +841,7 @@
},
"packages/slack": {
"name": "@opencode-ai/slack",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@opencode-ai/sdk": "workspace:*",
"@slack/bolt": "^3.17.1",
@@ -849,7 +854,7 @@
},
"packages/stats/app": {
"name": "@opencode-ai/stats-app",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@ibm/plex": "6.4.1",
"@kobalte/core": "catalog:",
@@ -883,7 +888,7 @@
},
"packages/stats/core": {
"name": "@opencode-ai/stats-core",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@aws-sdk/client-athena": "3.933.0",
"@planetscale/database": "1.19.0",
@@ -902,7 +907,7 @@
},
"packages/stats/server": {
"name": "@opencode-ai/stats-server",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@aws-sdk/client-firehose": "3.933.0",
"@effect/platform-node": "catalog:",
@@ -944,7 +949,7 @@
},
"packages/tui": {
"name": "@opencode-ai/tui",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@opencode-ai/core": "workspace:*",
"@opencode-ai/plugin": "workspace:*",
@@ -971,7 +976,7 @@
},
"packages/ui": {
"name": "@opencode-ai/ui",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@kobalte/core": "catalog:",
"@pierre/diffs": "catalog:",
@@ -987,6 +992,7 @@
"katex": "0.16.27",
"luxon": "catalog:",
"marked": "catalog:",
"marked-katex-extension": "5.1.6",
"marked-shiki": "catalog:",
"morphdom": "2.7.8",
"motion": "12.34.5",
@@ -996,7 +1002,6 @@
"remend": "catalog:",
"shiki": "catalog:",
"solid-list": "catalog:",
"solid-sonner": "catalog:",
"strip-ansi": "7.1.2",
},
"devDependencies": {
@@ -1022,7 +1027,7 @@
},
"packages/web": {
"name": "@opencode-ai/web",
"version": "1.18.12",
"version": "1.18.9",
"dependencies": {
"@astrojs/cloudflare": "12.6.3",
"@astrojs/markdown-remark": "6.3.1",
@@ -1132,7 +1137,7 @@
"hono": "4.10.7",
"hono-openapi": "1.1.2",
"luxon": "3.6.1",
"marked": "18.0.7",
"marked": "17.0.6",
"marked-shiki": "1.2.1",
"opentui-spinner": "0.0.7",
"remeda": "2.26.0",
@@ -1141,7 +1146,6 @@
"shiki": "4.2.0",
"solid-js": "1.9.10",
"solid-list": "0.3.0",
"solid-sonner": "0.3.1",
"sst": "4.13.1",
"tailwindcss": "4.1.11",
"typescript": "5.8.2",
@@ -3851,7 +3855,7 @@
"github-slugger": ["github-slugger@2.0.0", "", {}, "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="],
"gitlab-ai-provider": ["gitlab-ai-provider@6.12.1", "", { "dependencies": { "@anthropic-ai/sdk": "^0.71.0", "@anycable/core": "^0.9.2", "graphql-request": "^6.1.0", "isomorphic-ws": "^5.0.0", "openai": "^6.16.0", "socket.io-client": "^4.8.1", "vscode-jsonrpc": "^8.2.1", "zod": "^3.25.76" }, "peerDependencies": { "@ai-sdk/provider": ">=3.0.0", "@ai-sdk/provider-utils": ">=4.0.0" } }, "sha512-Qn5iHqvjG8yktI5MWaUgdRR94l7O4WtYW0CAbhsCh1Tj0Fei/DeprOYPVyf4Nht1Ix6U2PXSYM32QOHI6Z2TDw=="],
"gitlab-ai-provider": ["gitlab-ai-provider@6.12.0", "", { "dependencies": { "@anthropic-ai/sdk": "^0.71.0", "@anycable/core": "^0.9.2", "graphql-request": "^6.1.0", "isomorphic-ws": "^5.0.0", "openai": "^6.16.0", "socket.io-client": "^4.8.1", "vscode-jsonrpc": "^8.2.1", "zod": "^3.25.76" }, "peerDependencies": { "@ai-sdk/provider": ">=3.0.0", "@ai-sdk/provider-utils": ">=4.0.0" } }, "sha512-uGan7MQaNfmV5SH9wiMJkZ7D5QxM4KVPRcjIHtPCM5icZjgXl5mrHMjr3/e7TAHa9OjEJKT0a2FxzPgwRtN3PQ=="],
"glob": ["glob@13.0.5", "", { "dependencies": { "minimatch": "^10.2.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" } }, "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw=="],
@@ -4313,7 +4317,9 @@
"markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="],
"marked": ["marked@18.0.7", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-iDVQ5ldaiKXn6b2JroX5kgRfmwgqolW7NpaEzTl1k/2Zh1njIEN9yniyLV/mOvWwtsE8OGgkjsCYvijuPk1dtA=="],
"marked": ["marked@17.0.6", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-gB0gkNafnonOw0obSTEGZTT86IuhILt2Wfx0mWH/1Au83kybTayroZ/V6nS25mN7u8ASy+5fMhgB3XPNrOZdmA=="],
"marked-katex-extension": ["marked-katex-extension@5.1.6", "", { "peerDependencies": { "katex": ">=0.16 <0.17", "marked": ">=4 <18" } }, "sha512-vYpLXwmlIDKILIhJtiRTgdyZRn5sEYdFBuTmbpjD7lbCIzg0/DWyK3HXIntN3Tp8zV6hvOUgpZNLWRCgWVc24A=="],
"marked-shiki": ["marked-shiki@1.2.1", "", { "peerDependencies": { "marked": ">=7.0.0", "shiki": ">=1.0.0" } }, "sha512-yHxYQhPY5oYaIRnROn98foKhuClark7M373/VpLxiy5TrDu9Jd/LsMwo8w+U91Up4oDb9IXFrP0N1MFRz8W/DQ=="],
@@ -5121,8 +5127,6 @@
"solid-refresh": ["solid-refresh@0.6.3", "", { "dependencies": { "@babel/generator": "^7.23.6", "@babel/helper-module-imports": "^7.22.15", "@babel/types": "^7.23.6" }, "peerDependencies": { "solid-js": "^1.3" } }, "sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA=="],
"solid-sonner": ["solid-sonner@0.3.1", "", { "peerDependencies": { "solid-js": "^1.6.0" } }, "sha512-F/+zi9yKJTHh5hX1UGJfkDvyC+F34Vi3jgy44NJwOKCgic1QtAon0b1iT9OsDO77RTgR+PCil+3Y5B8T2Owy1Q=="],
"solid-stripe": ["solid-stripe@0.8.1", "", { "peerDependencies": { "@stripe/stripe-js": ">=1.44.1 <8.0.0", "solid-js": "^1.6.0" } }, "sha512-l2SkWoe51rsvk9u1ILBRWyCHODZebChSGMR6zHYJTivTRC0XWrRnNNKs5x1PYXsaIU71KYI6ov5CZB5cOtGLWw=="],
"solid-transition-size": ["solid-transition-size@0.1.4", "", { "dependencies": { "@corvu/utils": "~0.3.2" }, "peerDependencies": { "solid-js": "^1.8" } }, "sha512-ocHVnbfy23CgfaH4cEUR/AFg0Y3CEL8Oh3n9Qv8OHFJgPh+zkmERKZQfi/xH5XvxDCizg8VjPrVUhiHB1Gza8g=="],
@@ -6037,6 +6041,8 @@
"@opencode-ai/desktop/@actions/artifact": ["@actions/artifact@4.0.0", "", { "dependencies": { "@actions/core": "^1.10.0", "@actions/github": "^6.0.1", "@actions/http-client": "^2.1.0", "@azure/core-http": "^3.0.5", "@azure/storage-blob": "^12.15.0", "@octokit/core": "^5.2.1", "@octokit/plugin-request-log": "^1.0.4", "@octokit/plugin-retry": "^3.0.9", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "@protobuf-ts/plugin": "^2.2.3-alpha.1", "archiver": "^7.0.1", "jwt-decode": "^3.1.2", "unzip-stream": "^0.3.1" } }, "sha512-HCc2jMJRAfviGFAh0FsOR/jNfWhirxl7W6z8zDtttt0GltwxBLdEIjLiweOPFl9WbyJRW1VWnPUSAixJqcWUMQ=="],
"@opencode-ai/desktop/marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="],
"@opencode-ai/desktop/typescript": ["typescript@5.6.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw=="],
"@opencode-ai/llm/@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.14", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.14.1", "@smithy/util-hex-encoding": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-erZq0nOIpzfeZdCyzZjdJb4nVSKLUmSkaQUVkRGQTXs30gyUGeKnrYEg+Xe1W5gE3aReS7IgsvANwVPxSzY6Pw=="],
+2 -6
View File
@@ -288,12 +288,8 @@ new sst.cloudflare.x.SolidStart("Console", {
server: {
placement: { region: "aws:us-east-2" },
transform: {
worker: (args) => {
args.compatibilityFlags = $resolve(args.compatibilityFlags).apply((flags) => [
...(flags ?? []),
"global_fetch_strictly_public",
])
args.tailConsumers = [{ service: logProcessor.nodes.worker.scriptName }]
worker: {
tailConsumers: [{ service: logProcessor.nodes.worker.scriptName }],
},
},
},
+4 -4
View File
@@ -1,8 +1,8 @@
{
"nodeModules": {
"x86_64-linux": "sha256-GRjnvvyj37H36RqiCB7dz5ALAEwvw16izwuk1wsHEpU=",
"aarch64-linux": "sha256-0OIn1o6dpqIQ5XgIMzpenMCMqsYzraaYVJk+te5eINU=",
"aarch64-darwin": "sha256-sQSQcuox78d8wT1lsKYHqVBl11NusiszQ+gu2XYXZi8=",
"x86_64-darwin": "sha256-SINkhMRd4oM1zABSs1Uf3OAzxJ1lgcycl1U4fmi+baY="
"x86_64-linux": "sha256-/ZtluLolVq1ZFAYgbDScze9GZR0NF9baRQXvfEoOnkI=",
"aarch64-linux": "sha256-kdh7Dpira7cx9lvtozFsjLrDqMBrUMcgxkhfsqrutws=",
"aarch64-darwin": "sha256-chPeMCX+8hvOQ32hTANIn7FmONsSv9t3dKTWTaHerjs=",
"x86_64-darwin": "sha256-rMc0dDZB+YbXrjYwXTIt7QvHUxSp//wDJQ5hUdR+LYM="
}
}
+1 -2
View File
@@ -70,7 +70,7 @@
"hono-openapi": "1.1.2",
"fuzzysort": "3.1.0",
"luxon": "3.6.1",
"marked": "18.0.7",
"marked": "17.0.6",
"marked-shiki": "1.2.1",
"remend": "1.3.0",
"@playwright/test": "1.59.1",
@@ -90,7 +90,6 @@
"@sentry/solid": "10.36.0",
"@sentry/vite-plugin": "4.6.0",
"solid-js": "1.9.10",
"solid-sonner": "0.3.1",
"vite-plugin-solid": "2.11.10",
"@lydell/node-pty": "1.2.0-beta.12"
}
@@ -1,60 +0,0 @@
import { expect, test } from "@playwright/test"
import type { Page } from "@playwright/test"
import { fixture, pageMessages } from "../smoke/session-timeline.fixture"
import { mockOpenCodeServer } from "../utils/mock-server"
import { expectAppVisible } from "../utils/waits"
const NAMES = ["alpha-service", "bravo-web", "charlie-api", "delta-tools", "echo-infra", "foxtrot-docs"]
const worktrees = NAMES.map((name) => `/opencode-demo/${name}`)
// The sixth project sits outside the five-item recent cap, so it is only reachable if the
// dialog hands every recent project to the list filter instead of a pre-truncated slice.
const OUTSIDE_CAP = "foxtrot-docs"
// Dialog rows carry data-directory-path; the sidebar project list does not, so this
// scopes assertions to the picker instead of matching the sidebar entry of the same name.
const rows = (page: Page) => page.locator("[data-directory-path]")
const row = (page: Page, name: string) => page.locator(`[data-directory-path*="${name}"]`)
async function openProjectDialog(page: Page) {
await mockOpenCodeServer(page, {
sessions: fixture.sessions,
provider: fixture.provider,
directory: fixture.directory,
project: fixture.project,
pageMessages,
fileList: () => [],
findFiles: () => [],
})
await page.addInitScript((dirs) => {
localStorage.setItem(
"opencode.global.dat:server",
JSON.stringify({
projects: { local: dirs.map((worktree: string) => ({ worktree, expanded: false })) },
lastProject: {},
}),
)
}, worktrees)
await page.goto("/")
const add = page.getByRole("button", { name: "Add project" }).first()
await expectAppVisible(add)
await add.click()
await expect(rows(page)).toHaveCount(5)
return page.getByRole("textbox").last()
}
test("searches every recent project, not just the five most recent", async ({ page }) => {
const search = await openProjectDialog(page)
await expect(row(page, OUTSIDE_CAP)).toHaveCount(0)
await search.fill("foxtrot")
await expect(row(page, OUTSIDE_CAP)).toHaveCount(1)
})
test("still caps the idle recent list at five projects", async ({ page }) => {
await openProjectDialog(page)
await expect(row(page, NAMES[4])).toHaveCount(1)
await expect(row(page, OUTSIDE_CAP)).toHaveCount(0)
})
@@ -2,7 +2,7 @@ import { expect, test } from "@playwright/test"
import { assistantMessage, setupTimeline, toolPart, userMessage } from "../performance/timeline-stability/fixture"
for (const profile of [
{ locale: "de", label: "Erkundung abgeschlossen" },
{ locale: "de", label: "Erkundet" },
{ locale: "ar", label: "تم الاستكشاف" },
] as const) {
test(`projects translated context status in ${profile.locale}`, async ({ page }) => {
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@opencode-ai/app",
"version": "1.18.12",
"version": "1.18.9",
"description": "",
"type": "module",
"exports": {
@@ -19,9 +19,9 @@
"build": "vite build",
"serve": "vite preview",
"test": "bun run test:unit && bun run test:browser",
"test:unit": "bun test --conditions=solid --only-failures --preload ./happydom.ts ./src",
"test:unit": "bun test --only-failures --preload ./happydom.ts ./src",
"test:browser": "bun test --conditions=browser --preload ./happydom.ts ./test-browser",
"test:unit:watch": "bun test --conditions=solid --watch --preload ./happydom.ts ./src",
"test:unit:watch": "bun test --watch --preload ./happydom.ts ./src",
"test:e2e": "playwright test",
"test:e2e:local": "playwright test",
"test:e2e:ui": "playwright test --ui",
+5 -6
View File
@@ -3,6 +3,7 @@ import * as Sentry from "@sentry/solid"
import { I18nProvider } from "@opencode-ai/ui/context"
import { DialogProvider } from "@opencode-ai/ui/context/dialog"
import { FileComponentProvider } from "@opencode-ai/ui/context/file"
import { MarkedProvider } from "@opencode-ai/ui/context/marked"
import { File } from "@opencode-ai/session-ui/file"
import { Font } from "@opencode-ai/ui/font"
import { Splash } from "@opencode-ai/ui/logo"
@@ -233,11 +234,7 @@ function ResolvedDraftRoute(props: { draft: DraftTab }) {
function UiI18nBridge(props: ParentProps) {
const language = useLanguage()
return (
<I18nProvider value={{ locale: language.intl, t: language.t, plural: language.plural }}>
{props.children}
</I18nProvider>
)
return <I18nProvider value={{ locale: language.intl, t: language.t }}>{props.children}</I18nProvider>
}
function LayoutCompatibility(props: ParentProps) {
@@ -408,7 +405,9 @@ export function AppBaseProviders(props: ParentProps<{ locale?: Locale }>) {
<QueryProvider>
<WslServersProvider>
<DialogProvider>
<FileComponentProvider component={File}>{props.children}</FileComponentProvider>
<MarkedProvider>
<FileComponentProvider component={File}>{props.children}</FileComponentProvider>
</MarkedProvider>
</DialogProvider>
</WslServersProvider>
</QueryProvider>
+18 -36
View File
@@ -66,7 +66,7 @@ function Cell(props: {
<div
classList={{
"flex min-w-0 items-center": true,
"min-h-[20px] w-fit justify-start px-1.5 py-0.5 text-left": !!props.inline,
"min-h-[20px] w-fit flex-row justify-start gap-1.5 px-1.5 py-0.5 text-left": !!props.inline,
"justify-center text-center": !props.inline,
"min-h-[42px] w-full flex-col rounded-[8px] px-0.5 py-1": !props.inline,
"col-span-2": !!props.wide && !props.inline,
@@ -74,29 +74,21 @@ function Cell(props: {
>
<div
classList={{
"flex min-w-0": true,
"-translate-y-px items-baseline gap-1.5": !!props.inline,
"flex-col items-center": !props.inline,
"text-[10px] leading-none font-black uppercase tracking-[0.04em] opacity-70": true,
}}
>
<div
classList={{
"text-[10px] leading-none font-black uppercase tracking-[0.04em] opacity-70": true,
}}
>
{props.label}
</div>
<div
classList={{
"uppercase leading-none font-bold tabular-nums": true,
"text-[11px]": !!props.inline,
"text-[13px] sm:text-[14px]": !props.inline,
"text-text-on-critical-base": !!props.bad,
"opacity-70": !!props.dim,
}}
>
{props.value}
</div>
{props.label}
</div>
<div
classList={{
"uppercase leading-none font-bold tabular-nums": true,
"text-[11px]": !!props.inline,
"text-[13px] sm:text-[14px]": !props.inline,
"text-text-on-critical-base": !!props.bad,
"opacity-70": !!props.dim,
}}
>
{props.value}
</div>
</div>
)
@@ -124,25 +116,15 @@ function FocusCell(props: { active: boolean; inline?: boolean; onClick: () => vo
aria-pressed={props.active}
classList={{
"flex min-w-0 items-center font-mono uppercase hover:bg-surface-raised-base focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-border-focus": true,
"min-h-[20px] w-fit justify-start rounded px-1.5 py-0.5 text-left": !!props.inline,
"min-h-[20px] w-fit flex-row justify-start gap-1.5 rounded px-1.5 py-0.5 text-left": !!props.inline,
"min-h-[42px] w-full flex-col justify-center rounded-[8px] px-0.5 py-1 text-center": !props.inline,
"bg-surface-raised-base text-text-strong": props.active,
}}
onClick={props.onClick}
>
<span
classList={{
flex: true,
"-translate-y-px items-baseline gap-1.5": !!props.inline,
"flex-col items-center": !props.inline,
}}
>
<span class="text-[10px] leading-none font-black tracking-[0.04em] opacity-70">FOCUS</span>
<span
classList={{ "leading-none font-bold": true, "text-[11px]": !!props.inline, "text-[13px]": !props.inline }}
>
{props.active ? "ON" : "OFF"}
</span>
<span class="text-[10px] leading-none font-black tracking-[0.04em] opacity-70">FOCUS</span>
<span classList={{ "leading-none font-bold": true, "text-[11px]": !!props.inline, "text-[13px]": !props.inline }}>
{props.active ? "ON" : "OFF"}
</span>
</button>
)
@@ -29,7 +29,7 @@ import {
} from "solid-js"
import { createStore, produce } from "solid-js/store"
import { useParams } from "@solidjs/router"
import { ExternalLink } from "@/components/external-link"
import { Link } from "@/components/link"
import { useServerSDK } from "@/context/server-sdk"
import { useServerSync } from "@/context/server-sync"
import { useLanguage } from "@/context/language"
@@ -836,12 +836,12 @@ function ProviderConnection(props: {
<div>{language.t("provider.connect.opencodeZen.line2")}</div>
<div>
{language.t("provider.connect.opencodeZen.visit.prefix")}
<ExternalLink
<Link
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>
</Link>
{language.t("provider.connect.opencodeZen.visit.suffix")}
</div>
</div>
@@ -886,9 +886,9 @@ function ProviderConnection(props: {
<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}>
<Link href="https://opencode.ai/zen" tabIndex={-1}>
{language.t("provider.connect.opencodeZen.visit.link")}
</ExternalLink>
</Link>
{language.t("provider.connect.opencodeZen.visit.suffix")}
</div>
</div>
@@ -967,9 +967,9 @@ function ProviderConnection(props: {
<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={store.authorization!.url} class="text-v2-text-text-base">
<Link href={store.authorization!.url} class="text-v2-text-text-base">
{language.t("provider.connect.oauth.code.visit.link")}
</ExternalLink>
</Link>
{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">
@@ -1006,9 +1006,7 @@ function ProviderConnection(props: {
<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={store.authorization!.url}>
{language.t("provider.connect.oauth.code.visit.link")}
</ExternalLink>
<Link href={store.authorization!.url}>{language.t("provider.connect.oauth.code.visit.link")}</Link>
{language.t("provider.connect.oauth.code.visit.suffix", { provider: provider().name })}
</div>
<form onSubmit={handleSubmit} class="flex flex-col items-start gap-4">
@@ -1079,9 +1077,7 @@ function ProviderConnection(props: {
<div class="flex flex-col gap-6">
<div class="text-14-regular text-text-base">
{language.t("provider.connect.oauth.auto.visit.prefix")}
<ExternalLink href={store.authorization!.url}>
{language.t("provider.connect.oauth.auto.visit.link")}
</ExternalLink>
<Link href={store.authorization!.url}>{language.t("provider.connect.oauth.auto.visit.link")}</Link>
{language.t("provider.connect.oauth.auto.visit.suffix", { provider: provider().name })}
</div>
<TextField
@@ -8,7 +8,7 @@ import { TextField } from "@opencode-ai/ui/text-field"
import { showToast } from "@/utils/toast"
import { batch, For } from "solid-js"
import { createStore, produce } from "solid-js/store"
import { ExternalLink } from "@/components/external-link"
import { Link } from "@/components/link"
import { useServerSDK } from "@/context/server-sdk"
import { useServerSync } from "@/context/server-sync"
import { useLanguage } from "@/context/language"
@@ -185,9 +185,9 @@ export function CustomProviderForm(props: { autofocus?: boolean } = {}) {
<form onSubmit={save} class="px-2.5 pb-6 flex flex-col gap-6">
<p class="text-14-regular text-text-base">
{language.t("provider.custom.description.prefix")}
<ExternalLink href="https://opencode.ai/docs/providers/#custom-provider" tabIndex={-1}>
<Link href="https://opencode.ai/docs/providers/#custom-provider" tabIndex={-1}>
{language.t("provider.custom.description.link")}
</ExternalLink>
</Link>
{language.t("provider.custom.description.suffix")}
</p>
@@ -18,8 +18,6 @@ interface DialogSelectDirectoryProps {
server: ServerConnection.Any
}
const RECENT_PROJECT_LIMIT = 5
type Row = {
absolute: string
search: string
@@ -59,9 +57,9 @@ export function DialogSelectDirectory(props: DialogSelectDirectoryProps) {
const [filter, setFilter] = createSignal("")
let list: ListRef | undefined
const missingHome = createMemo(() => !sync.data.path.home)
const missingBase = createMemo(() => !(sync.data.path.home || sync.data.path.directory))
const [fallbackPath] = createResource(
() => (missingHome() ? true : undefined),
() => (missingBase() ? true : undefined),
async (): Promise<Path | undefined> => {
if ((await sdk.protocol) !== "v1") return
return sdk.client.path
@@ -104,6 +102,7 @@ export function DialogSelectDirectory(props: DialogSelectDirectoryProps) {
return projects
.map((project, index) => ({ project, at: byProject.get(project.worktree) ?? 0, index }))
.sort((a, b) => b.at - a.at || a.index - b.index)
.slice(0, 5)
.map(({ project }) => {
const row = toRow(project.worktree, home(), "recent")
const name = project.name || getFilename(project.worktree)
@@ -117,10 +116,7 @@ export function DialogSelectDirectory(props: DialogSelectDirectoryProps) {
const items = async (value: string) => {
const results = await directories(value)
const directoryRows = results.map((absolute) => toRow(absolute, home(), "folders"))
// Cap the idle list only. Once a query narrows the results, every project stays searchable.
const recent = recentProjects()
const visible = value ? recent : recent.slice(0, RECENT_PROJECT_LIMIT)
return uniqueRows([...visible, ...directoryRows])
return uniqueRows([...recentProjects(), ...directoryRows])
}
function resolve(absolute: string) {
@@ -17,7 +17,7 @@ export function DialogUsageExceeded(props: DialogGoUpsellProps) {
const platform = usePlatform()
const runAction = () => {
if (props.link) platform.openExternal(props.link)
if (props.link) platform.openLink(props.link)
props.onClose?.()
dialog.close()
}
@@ -1,21 +0,0 @@
import { ComponentProps, splitProps } from "solid-js"
export interface ExternalLinkProps extends Omit<ComponentProps<"a">, "href"> {
href: string
}
export function ExternalLink(props: ExternalLinkProps) {
const [local, rest] = splitProps(props, ["href", "children", "class", "target", "rel"])
return (
<a
href={local.href}
class={`text-text-strong underline ${local.class ?? ""}`}
target={local.target ?? "_blank"}
rel={local.rel ?? "noopener noreferrer"}
{...rest}
>
{local.children}
</a>
)
}
@@ -215,7 +215,6 @@ export default function FileTreeV2(props: {
<div
ref={setRoot}
data-component="file-tree-v2"
dir="ltr"
data-total-rows={live() ? rows().length : model()!.total}
class="group/file-tree-v2"
style={{ position: "relative", height: `${virtualizer.getTotalSize()}px` }}
+26
View File
@@ -0,0 +1,26 @@
import { ComponentProps, splitProps } from "solid-js"
import { usePlatform } from "@/context/platform"
export interface LinkProps extends Omit<ComponentProps<"a">, "href"> {
href: string
}
export function Link(props: LinkProps) {
const platform = usePlatform()
const [local, rest] = splitProps(props, ["href", "children", "class"])
return (
<a
href={local.href}
class={`text-text-strong underline ${local.class ?? ""}`}
onClick={(event) => {
if (!local.href) return
event.preventDefault()
platform.openLink(local.href)
}}
{...rest}
>
{local.children}
</a>
)
}
@@ -344,7 +344,7 @@ export function usePromptInputV2Controller(props: PromptInputV2ControllerProps):
if (item?.commentID) comments.remove(item.path, item.commentID)
},
openAttachment: (attachment) =>
dialog.show(() => <ImagePreview src={attachment.blob.url} alt={attachment.filename} />),
dialog.show(() => <ImagePreview src={attachment.dataUrl} alt={attachment.filename} />),
openContext(key) {
const item = controller.contextItem(key)
if (item) openComment(item, props, sync, layout, files, comments)
@@ -368,7 +368,6 @@ export function usePromptInputV2Controller(props: PromptInputV2ControllerProps):
title: language.t("prompt.toast.pasteUnsupported.title"),
description: language.t("prompt.toast.pasteUnsupported.description"),
}),
duplicate: () => showToast({ title: language.t("prompt.toast.attachmentDuplicate.title") }),
onError: (error) =>
showToast({
variant: "error",
@@ -377,7 +376,6 @@ export function usePromptInputV2Controller(props: PromptInputV2ControllerProps):
}),
readClipboardImage: platform.readClipboardImage,
getPathForFile: platform.getPathForFile,
store: platform.draftStore?.putBlob,
},
view: {
placeholder: designPlaceholder,
+1 -1
View File
@@ -1489,7 +1489,7 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
<PromptImageAttachments
attachments={imageAttachments()}
onOpen={(attachment) =>
dialog.show(() => <ImagePreview src={attachment.blob.url} alt={attachment.filename} />)
dialog.show(() => <ImagePreview src={attachment.dataUrl} alt={attachment.filename} />)
}
onRemove={removeAttachment}
removeLabel={language.t("prompt.attachment.remove")}
@@ -3,13 +3,28 @@ import { makeEventListener } from "@solid-primitives/event-listener"
import { showToast } from "@/utils/toast"
import { type ContentPart, type ImageAttachmentPart, type usePrompt } from "@/context/prompt"
import { useLanguage } from "@/context/language"
import { usePlatform } from "@/context/platform"
import { uuid } from "@/utils/uuid"
import { getCursorPosition } from "./editor-dom"
import { createBlobReference, type DraftStore } from "@/utils/draft-store"
import { attachmentMime } from "./files"
import { normalizePaste, pasteMode } from "./paste"
function dataUrl(file: File, mime: string) {
return new Promise<string>((resolve) => {
const reader = new FileReader()
reader.addEventListener("error", () => resolve(""))
reader.addEventListener("load", () => {
const value = typeof reader.result === "string" ? reader.result : ""
const idx = value.indexOf(",")
if (idx === -1) {
resolve(value)
return
}
resolve(`data:${mime};base64,${value.slice(idx + 1)}`)
})
reader.readAsDataURL(file)
})
}
type PromptTarget = Pick<ReturnType<ReturnType<typeof usePrompt>["capture"]>, "current" | "cursor" | "set">
type AttachmentTarget = { prompt: PromptTarget; cursor: number | undefined }
@@ -21,7 +36,6 @@ type PromptAttachmentsCoreInput = {
warn?: () => void
readClipboardImage?: () => Promise<File | null>
getPathForFile?: (file: File) => string
draftStore?: DraftStore
}
export type PromptAttachmentsInput = {
@@ -51,13 +65,16 @@ export function createPromptAttachmentsCore(input: PromptAttachmentsCoreInput) {
return false
}
const url = await dataUrl(file, mime)
if (!url) return false
const attachment: ImageAttachmentPart = {
type: "image",
id: uuid(),
filename: file.name,
sourcePath: input.getPathForFile?.(file) || undefined,
mime,
blob: input.draftStore ? await input.draftStore.putBlob(file) : await createBlobReference(file),
dataUrl: url,
}
target.prompt.set([...target.prompt.current(), attachment], target.cursor)
return true
@@ -149,10 +166,8 @@ export function createPromptAttachmentsCore(input: PromptAttachmentsCoreInput) {
export function createPromptAttachments(input: PromptAttachmentsInput) {
const language = useLanguage()
const platform = usePlatform()
const attachments = createPromptAttachmentsCore({
...input,
draftStore: platform.draftStore,
capture: input.prompt.capture,
warn: () => {
showToast({
@@ -22,7 +22,7 @@ type ContextFile = {
type BuildRequestPartsInput = {
prompt: Prompt
context: ContextFile[]
images: (Omit<ImageAttachmentPart, "blob"> & { dataUrl: string })[]
images: ImageAttachmentPart[]
text: string
messageID: string
sessionID: string
@@ -1,13 +1,7 @@
import { createStore, type SetStoreFunction, type Store } from "solid-js/store"
import type { Prompt } from "@/context/prompt"
import { Persist, persisted } from "@/utils/persist"
import {
clonePromptHistoryComments,
clonePromptParts,
prependHistoryEntry,
type PromptHistoryComment,
type PromptHistoryStoredEntry,
} from "./history"
import { prependHistoryEntry, type PromptHistoryComment, type PromptHistoryStoredEntry } from "./history"
export type PromptInputHistory = {
entries: (mode: "normal" | "shell") => PromptHistoryStoredEntry[]
@@ -41,23 +35,13 @@ export function createPromptInputHistory(): PromptInputHistory {
}
export function createPersistedPromptInputHistory() {
const [normal, setNormal, normalInit] = persisted(
Persist.prompt(Persist.global("prompt-history", ["prompt-history.v1"])),
const [normal, setNormal] = persisted(
Persist.global("prompt-history", ["prompt-history.v1"]),
createStore<PromptHistoryState>({ entries: [] }),
)
const [shell, setShell, shellInit] = persisted(
Persist.prompt(Persist.global("prompt-history-shell", ["prompt-history-shell.v1"])),
const [shell, setShell] = persisted(
Persist.global("prompt-history-shell", ["prompt-history-shell.v1"]),
createStore<PromptHistoryState>({ entries: [] }),
)
const history = createPromptInputHistoryStore(normal, setNormal, shell, setShell)
return {
...history,
add(prompt: Prompt, mode: "normal" | "shell", comments: PromptHistoryComment[]) {
const ready = mode === "shell" ? shellInit : normalInit
if (!(ready instanceof Promise)) return history.add(prompt, mode, comments)
const saved = clonePromptParts(prompt)
const metadata = clonePromptHistoryComments(comments)
void ready.then(() => history.add(saved, mode, metadata))
},
}
return createPromptInputHistoryStore(normal, setNormal, shell, setShell)
}
@@ -112,7 +112,7 @@ describe("prompt-input history", () => {
end: 12,
selection: { startLine: 1, startChar: 1, endLine: 2, endChar: 1 },
},
{ type: "image", id: "1", filename: "img.png", mime: "image/png", blob: { id: "blob", url: "blob:test" } },
{ type: "image", id: "1", filename: "img.png", mime: "image/png", dataUrl: "data:image/png;base64,abc" },
]
const copy = clonePromptParts(original)
expect(copy).not.toBe(original)
@@ -100,7 +100,7 @@ export const PromptImageAttachments: Component<PromptImageAttachmentsProps> = (p
}
>
<img
src={attachment.blob.url}
src={attachment.dataUrl}
alt={attachment.filename}
class={props.newLayoutDesigns ? imageClassV2 : imageClass}
onClick={() => props.onOpen(attachment)}
@@ -22,7 +22,6 @@ import { ScopedKey } from "@/utils/server-scope"
import { createPromptSubmissionState } from "./submission-state"
import { normalizeSessionInfo } from "@/utils/session"
import { Event } from "@opencode-ai/schema/event"
import { blobDataUrl } from "@/utils/draft-store"
type PendingPrompt = {
abort: AbortController
@@ -96,12 +95,10 @@ export async function sendFollowupDraft(input: FollowupSendInput) {
providerID: input.draft.model.providerID,
variant: input.draft.variant,
},
files: await Promise.all(
images.map(async (attachment) => ({
uri: await blobDataUrl(attachment.blob, attachment.mime),
name: attachment.filename,
})),
),
files: images.map((attachment) => ({
uri: attachment.dataUrl,
name: attachment.filename,
})),
})
return true
} catch (err) {
@@ -111,16 +108,10 @@ export async function sendFollowupDraft(input: FollowupSendInput) {
}
const messageID = input.messageID ?? Identifier.ascending("message")
const encodedImages = await Promise.all(
images.map(async (attachment) => ({
...attachment,
dataUrl: await blobDataUrl(attachment.blob, attachment.mime),
})),
)
const { requestParts, optimisticParts } = buildRequestParts({
prompt: input.draft.prompt,
context: input.draft.context,
images: encodedImages,
images,
text,
sessionID: input.draft.sessionID,
messageID,
@@ -525,12 +516,10 @@ export function createPromptSubmit(input: PromptSubmitInput) {
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),
name: attachment.filename,
})),
),
files: images.map((attachment) => ({
uri: attachment.dataUrl,
name: attachment.filename,
})),
})
.catch((err) => {
serverSync().session.set("session_status", session.id, { type: "idle" })
@@ -289,9 +289,9 @@ export function SessionHeader() {
return (
<>
<Show when={search() && centerMount()} keyed>
<Show when={search() && centerMount()}>
{(mount) => (
<Portal mount={mount}>
<Portal mount={mount()}>
<Button
type="button"
variant="ghost"
@@ -308,10 +308,10 @@ export function SessionHeader() {
</span>
</div>
<Show when={hotkey()} keyed>
<Show when={hotkey()}>
{(keybind) => (
<Keybind class="shrink-0 !border-0 !bg-transparent !shadow-none px-0 text-text-weaker">
{keybind}
{keybind()}
</Keybind>
)}
</Show>
@@ -319,9 +319,9 @@ export function SessionHeader() {
</Portal>
)}
</Show>
<Show when={rightMount()} keyed>
<Show when={rightMount()}>
{(mount) => (
<Portal mount={mount}>
<Portal mount={mount()}>
<Show
when={isV2}
fallback={
@@ -29,7 +29,7 @@ import {
} from "@/context/settings"
import { decode64 } from "@/utils/base64"
import { playSoundById, SOUND_OPTIONS } from "@/utils/sound"
import { ExternalLink } from "./external-link"
import { Link } from "./link"
import { SettingsList } from "./settings-list"
let demoSoundState = {
@@ -482,7 +482,7 @@ export const SettingsGeneral: Component = () => {
description={
<>
{language.t("settings.general.row.theme.description")}{" "}
<ExternalLink href="https://opencode.ai/docs/themes/">{language.t("common.learnMore")}</ExternalLink>
<Link href="https://opencode.ai/docs/themes/">{language.t("common.learnMore")}</Link>
</>
}
>
@@ -9,7 +9,7 @@ import { useLanguage } from "@/context/language"
import { usePlatform } from "@/context/platform"
import { useUpdaterAction } from "../updater-action"
import { useSettings } from "@/context/settings"
import { ExternalLink } from "../external-link"
import { Link } from "../link"
import { SettingsListV2 } from "./parts/list"
import { SettingsRowV2 } from "./parts/row"
import { LayoutRetirementNotice, LayoutTransitionToggle } from "./interface-transition"
@@ -150,9 +150,9 @@ const AppearanceSection: Component<{ controller: AppearanceSettingsController }>
description={
<>
{language.t("settings.general.row.theme.description")}{" "}
<ExternalLink class="settings-v2-link" href="https://opencode.ai/docs/themes/">
<Link class="settings-v2-link" href="https://opencode.ai/docs/themes/">
{language.t("common.learnMore")}
</ExternalLink>
</Link>
</>
}
>
+1 -6
View File
@@ -382,11 +382,7 @@ export const Terminal = (props: TerminalProps) => {
event.preventDefault()
event.stopImmediatePropagation()
if (URL.canParse(text) && new URL(text).protocol === "file:" && platform.openLocalFile) {
platform.openLocalFile(text)
return
}
platform.openExternal(text)
platform.openLink(text)
}
onMount(() => {
@@ -742,7 +738,6 @@ export const Terminal = (props: TerminalProps) => {
<div
ref={container}
data-component="terminal"
dir="ltr"
data-prevent-autofocus
tabIndex={-1}
style={{ "background-color": terminalColors().background }}
@@ -9,86 +9,53 @@
justify-content: center;
}
[data-titlebar-tab] {
--tab-base: var(--v2-background-bg-deep);
--tab-overlay: transparent;
background: linear-gradient(var(--tab-overlay), var(--tab-overlay)), var(--tab-base);
}
[data-titlebar-tab]:is(:hover, :has(> [data-slot="tab-link"]:focus-visible)):not([data-state="pressed"]):not(
[data-dragging="true"]
):not([data-editing="true"]) {
--tab-base: var(--v2-background-bg-layer-02);
--tab-overlay: var(--v2-overlay-simple-overlay-hover);
}
[data-titlebar-tab]:is([data-state="pressed"], [data-dragging="true"], [data-editing="true"]) {
--tab-base: var(--v2-background-bg-layer-02);
--tab-overlay: var(--v2-overlay-simple-overlay-pressed);
}
[data-titlebar-tab]:is(:hover, [data-state="pressed"]) [data-slot="tab-close"] {
background: linear-gradient(var(--tab-overlay), var(--tab-overlay)), var(--tab-base);
}
[data-titlebar-tab][data-editing="true"] [data-slot="tab-close"] {
display: none;
}
[data-titlebar-tab-list] {
gap: 6px;
gap: 13.5px;
}
[data-titlebar-tab-slot] {
--tab-separator: var(--v2-background-bg-layer-03);
position: relative;
}
[data-color-scheme="dark"] [data-titlebar-tab-slot] {
--tab-separator: var(--v2-background-bg-layer-02);
}
[data-titlebar-tab-slot]:not(:first-child):not([data-active="true"])::before {
content: "";
position: absolute;
top: 8px;
left: -3.75px;
left: -6.75px;
width: 1.5px;
height: 12px;
border-radius: 9999px;
background: var(--tab-separator);
background: var(--v2-background-bg-layer-02);
}
[data-titlebar-tab-slot][data-active="true"] + [data-titlebar-tab-slot]::before {
display: none;
}
[data-titlebar-tab-slot]:not([data-active="true"]):has([data-titlebar-tab]:hover)::before,
[data-titlebar-tab-slot]:not([data-active="true"]):has([data-titlebar-tab]:hover) + [data-titlebar-tab-slot]::before {
[data-titlebar-tab] [data-slot="tab-close"]::before {
content: "";
position: absolute;
top: 0;
height: 28px;
width: 16px;
pointer-events: none;
background: linear-gradient(to right, transparent, var(--tab-bg));
display: none;
}
[data-titlebar-tab][data-title-overflow="true"]:not([data-editing="true"]) [data-slot="tab-link"] {
--tab-title-fade-offset: 4px;
-webkit-mask-image: linear-gradient(
to right,
black 0,
black calc(100% - var(--tab-title-fade-offset) - 16px),
transparent calc(100% - var(--tab-title-fade-offset)),
transparent 100%
);
mask-image: linear-gradient(
to right,
black 0,
black calc(100% - var(--tab-title-fade-offset) - 16px),
transparent calc(100% - var(--tab-title-fade-offset)),
transparent 100%
);
[data-titlebar-tab][data-title-overflow="true"]:not([data-editing="true"]) [data-slot="tab-close"]::before {
display: block;
right: 0;
}
[data-titlebar-tab][data-title-overflow="true"]:is(:hover, [data-active="true"]):not([data-editing="true"])
[data-slot="tab-link"] {
--tab-title-fade-offset: 24px;
[data-titlebar-tab][data-title-overflow="true"]:hover:not([data-editing="true"]) [data-slot="tab-close"]::before,
[data-titlebar-tab][data-title-overflow="true"][data-active="true"]:not([data-editing="true"])
[data-slot="tab-close"]::before {
right: 100%;
}
[data-titlebar-tab][data-title-overflow="true"]:not(:hover):not([data-active="true"]):not([data-editing="true"])
@@ -180,11 +180,11 @@ export function TabNavItem(props: {
data-slot="titlebar-tab-item"
data-title-overflow={titleOverflowing()}
data-editing={editing()}
class="group relative flex h-7 w-full min-w-0 select-none flex-row items-center gap-1.5 overflow-hidden whitespace-nowrap rounded-[6px] px-1.5 [container-type:inline-size]"
class="group relative flex h-7 w-full min-w-0 select-none flex-row items-center gap-1.5 overflow-hidden whitespace-nowrap rounded-[6px] bg-[var(--tab-bg)] px-1.5 [container-type:inline-size] [--tab-bg:var(--v2-background-bg-deep)] hover:[--tab-bg:var(--v2-background-bg-layer-02)] has-[>a:focus-visible]:[--tab-bg:var(--v2-background-bg-layer-02)] data-[active='true']:[--tab-bg:var(--v2-background-bg-layer-02)] data-[dragging='true']:[--tab-bg:var(--v2-background-bg-layer-02)] data-[pressed='true']:[--tab-bg:var(--v2-background-bg-layer-02)] data-[editing='true']:[--tab-bg:var(--v2-background-bg-layer-02)]"
classList={{ invisible: props.hidden }}
data-active={props.active}
data-dragging={props.dragging}
data-state={props.active || props.pressed ? "pressed" : undefined}
data-pressed={props.pressed}
onMouseDown={(event) => {
if (event.button !== MIDDLE_MOUSE_BUTTON) return
event.preventDefault()
@@ -224,7 +224,6 @@ export function TabNavItem(props: {
<span data-slot="project-avatar-slot" class="flex size-4 shrink-0 items-center justify-center">
<Show
when={props.session()}
keyed
fallback={
<span class="block size-4 rounded-[3px] border border-v2-border-border-muted" aria-hidden="true" />
}
@@ -232,8 +231,8 @@ export function TabNavItem(props: {
{(session) => (
<SessionTabAvatar
project={project()}
directory={session.directory}
sessionId={session.id}
directory={session().directory}
sessionId={session().id}
server={props.server}
/>
)}
@@ -277,7 +276,7 @@ export function TabNavItem(props: {
/>
</a>
<div data-slot="tab-close">
<div data-slot="tab-close" class="group-hover:bg-[var(--tab-bg)] group-data-[active=true]:bg-[var(--tab-bg)]">
<IconButtonV2
size="small"
variant="ghost-muted"
@@ -335,8 +334,8 @@ export function DraftTabItem(props: {
data-slot="titlebar-tab-item"
data-active={props.active}
data-dragging={props.dragging}
data-state={props.active || props.pressed ? "pressed" : undefined}
class="group relative flex h-7 w-full min-w-0 flex-row items-center gap-1.5 overflow-hidden rounded-[6px] px-1.5 [container-type:inline-size] whitespace-nowrap"
data-pressed={props.pressed}
class="group relative flex h-7 w-full min-w-0 flex-row items-center gap-1.5 overflow-hidden rounded-[6px] bg-[var(--tab-bg)] px-1.5 [container-type:inline-size] whitespace-nowrap [--tab-bg:var(--v2-background-bg-deep)] hover:[--tab-bg:var(--v2-background-bg-layer-02)] has-[>a:focus-visible]:[--tab-bg:var(--v2-background-bg-layer-02)] data-[active='true']:[--tab-bg:var(--v2-background-bg-layer-02)] data-[dragging='true']:[--tab-bg:var(--v2-background-bg-layer-02)] data-[pressed='true']:[--tab-bg:var(--v2-background-bg-layer-02)] data-[editing='true']:[--tab-bg:var(--v2-background-bg-layer-02)]"
classList={{ invisible: props.hidden }}
onMouseDown={(event) => {
if (event.button !== MIDDLE_MOUSE_BUTTON) return
@@ -382,7 +381,7 @@ export function DraftTabItem(props: {
{props.title}
</span>
</a>
<div data-slot="tab-close">
<div data-slot="tab-close" class="group-hover:bg-[var(--tab-bg)] group-data-[active=true]:bg-[var(--tab-bg)]">
<IconButtonV2
size="small"
variant="ghost-muted"
+21 -19
View File
@@ -395,25 +395,27 @@ export function Titlebar(props: { update?: TitlebarUpdate; debugTools?: { visibl
}}
onReorder={(keys) => tabsStoreActions.reorder(keys)}
/>
<TooltipV2
placement="bottom"
value={
<>
{language.t("command.session.new")}
<KeybindV2 keys={newTabTooltipKeybind(command)} variant="neutral" />
</>
}
>
<IconButtonV2
type="button"
variant="ghost-muted"
size="large"
class="shrink-0"
icon={<IconV2 name="plus" />}
onClick={openNewTab}
aria-label={language.t("command.session.new")}
/>
</TooltipV2>
<Show when={!creating()}>
<TooltipV2
placement="bottom"
value={
<>
{language.t("command.session.new")}
<KeybindV2 keys={newTabTooltipKeybind(command)} variant="neutral" />
</>
}
>
<IconButtonV2
type="button"
variant="ghost-muted"
size="large"
class="shrink-0"
icon={<IconV2 name="plus" />}
onClick={openNewTab}
aria-label={language.t("command.session.new")}
/>
</TooltipV2>
</Show>
<div class="flex-1" />
<TitlebarV2Right state={v2RightState()} />
</div>
@@ -43,7 +43,7 @@ export function WindowsAppMenu(props: {
runAction(entry.action)
return
}
if (entry.href) props.platform.openExternal(entry.href)
if (entry.href) props.platform.openLink(entry.href)
}
return (
@@ -8,7 +8,6 @@ import {
bootstrapDirectory,
loadAgentsQuery,
loadCommands,
loadGlobalConfigQuery,
loadPathQuery,
loadProjectsQuery,
loadProvidersQuery,
@@ -77,7 +76,6 @@ function directoryState() {
describe("bootstrapDirectory", () => {
test("uses legacy MCP endpoints while refreshing a v1 directory", async () => {
const legacyConfigReads: string[] = []
const mcpReads: string[] = []
const [store, setStore] = directoryState()
@@ -93,12 +91,7 @@ describe("bootstrapDirectory", () => {
},
sdk: {
app: { agents: async () => ({ data: [{ name: "build", mode: "primary" }] }) },
config: {
get: async () => {
legacyConfigReads.push("directory")
return { data: {} }
},
},
config: { get: async () => ({ data: {} }) },
session: { status: async () => ({ data: {} }) },
vcs: { get: async () => ({ data: undefined }) },
command: {
@@ -141,88 +134,8 @@ describe("bootstrapDirectory", () => {
await new Promise((resolve) => setTimeout(resolve, 80))
expect(store.status).toBe("complete")
expect(legacyConfigReads).toEqual(["directory"])
expect(mcpReads.sort()).toEqual(["command", "resource", "status"])
})
test("skips legacy config while refreshing a v2 directory", async () => {
const [store, setStore] = directoryState()
await bootstrapDirectory({
directory: "/project",
scope: ServerScope.local,
mcp: false,
global: {
config: {} satisfies Config,
path: { state: "", config: "", worktree: "/project", directory: "/project", home: "/home" },
project: [{ id: "project", worktree: "/project" } as Project],
provider,
},
sdk: {
config: {
get: async () => {
throw new Error("legacy directory config should not be called")
},
},
} as unknown as OpencodeClient,
api,
store,
setStore,
vcsCache: { setStore() {} } as unknown as VcsCache,
loadSessions() {},
translate: (key) => key,
queryClient: new QueryClient(),
protocol: Promise.resolve("v2"),
})
expect(store.status).toBe("partial")
await new Promise((resolve) => setTimeout(resolve, 80))
expect(store.status).toBe("complete")
})
})
describe("config queries", () => {
test("skips legacy global config for v2 servers", async () => {
const sdk = {
global: {
config: {
get: async () => {
throw new Error("legacy global config should not be called")
},
},
},
} as unknown as OpencodeClient
const result = await new QueryClient().fetchQuery(
loadGlobalConfigQuery(ServerScope.local, sdk, Promise.resolve("v2")),
)
expect(result).toEqual({})
})
test("loads legacy global config for v1 servers", async () => {
const calls: string[] = []
const config = { shell: "zsh" } satisfies Config
const sdk = {
global: {
config: {
get: async () => {
calls.push("global")
return { data: config }
},
},
},
} as unknown as OpencodeClient
const result = await new QueryClient().fetchQuery(
loadGlobalConfigQuery(ServerScope.local, sdk, Promise.resolve("v1")),
)
expect(result).toEqual(config)
expect(calls).toEqual(["global"])
})
})
describe("query keys", () => {
@@ -105,13 +105,10 @@ function showErrors(input: {
})
}
export const loadGlobalConfigQuery = (scope: ServerScope, sdk: OpencodeClient, protocol?: Promise<ServerProtocol>) =>
export const loadGlobalConfigQuery = (scope: ServerScope, sdk: OpencodeClient) =>
queryOptions({
queryKey: [scope, "config"],
queryFn: async () => {
if ((await protocol) !== "v1") return {}
return retry(() => sdk.global.config.get().then((x) => x.data!))
},
queryFn: () => retry(() => sdk.global.config.get().then((x) => x.data!)),
})
type ProjectApi = {
@@ -152,7 +149,7 @@ export async function bootstrapGlobal(input: {
queryClient: QueryClient
}) {
const slow = [
() => input.queryClient.fetchQuery(loadGlobalConfigQuery(input.scope, input.serverSDK, input.protocol)),
() => input.queryClient.fetchQuery(loadGlobalConfigQuery(input.scope, input.serverSDK)),
() =>
input.queryClient.fetchQuery(
loadProvidersQuery(input.scope, null, input.serverAPI, input.serverSDK, input.protocol),
@@ -379,10 +376,7 @@ export async function bootstrapDirectory(input: {
.ensureQueryData(loadAgentsQuery(input.scope, input.directory, input.api.agent, input.sdk, input.protocol))
.then((data) => input.setStore("agent", data)),
() =>
retry(async () => {
if ((await input.protocol) !== "v1") return
return input.sdk.config.get().then((x) => input.setStore("config", reconcile(x.data!, { merge: false })))
}),
retry(() => input.sdk.config.get().then((x) => input.setStore("config", reconcile(x.data!, { merge: false })))),
() =>
retry(() =>
(async () => {
+6 -102
View File
@@ -1,7 +1,7 @@
import * as i18n from "@solid-primitives/i18n"
import { createEffect, createMemo, createResource } from "solid-js"
import { createStore } from "solid-js/store"
import { createSimpleContext, pluralCategory, type UiI18nPluralKey } from "@opencode-ai/ui/context"
import { createSimpleContext } from "@opencode-ai/ui/context"
import { Persist, persisted } from "@/utils/persist"
import { dict as en } from "@/i18n/en"
import { dict as uiEn } from "@opencode-ai/ui/i18n/en"
@@ -25,26 +25,9 @@ export type Locale =
| "th"
| "bs"
| "tr"
| "hi"
| "nl"
| "id"
| "vi"
| "it"
| "ur"
| "pa"
| "az"
| "fi"
| "sv"
const RTL_LOCALES: ReadonlySet<Locale> = new Set(["ar", "ur", "pa"])
type RawDictionary = typeof en & typeof uiEn
type Dictionary = i18n.Flatten<RawDictionary>
type PluralKey =
| UiI18nPluralKey
| "session.question.pending"
| "session.followupDock.summary"
| "session.revertDock.summary"
type Source = { dict: Record<string, string> }
function cookie(locale: Locale) {
@@ -70,16 +53,6 @@ const LOCALES: readonly Locale[] = [
"br",
"th",
"tr",
"hi",
"nl",
"id",
"vi",
"it",
"ur",
"pa",
"az",
"fi",
"sv",
]
const INTL: Record<Locale, string> = {
@@ -101,19 +74,9 @@ const INTL: Record<Locale, string> = {
th: "th",
bs: "bs",
tr: "tr",
hi: "hi-IN",
nl: "nl-NL",
id: "id-ID",
vi: "vi-VN",
it: "it-IT",
ur: "ur-PK",
pa: "pa-Arab-PK",
az: "az-Latn-AZ",
fi: "fi-FI",
sv: "sv-SE",
}
const LABEL_KEY: Partial<Record<Locale, keyof Dictionary>> = {
const LABEL_KEY: Record<Locale, keyof Dictionary> = {
en: "language.en",
zh: "language.zh",
zht: "language.zht",
@@ -134,19 +97,6 @@ const LABEL_KEY: Partial<Record<Locale, keyof Dictionary>> = {
tr: "language.tr",
}
const LABEL: Partial<Record<Locale, string>> = {
hi: "हिन्दी",
nl: "Nederlands",
id: "Bahasa Indonesia",
vi: "Tiếng Việt",
it: "Italiano",
ur: "اردو",
pa: "پنجابی",
az: "Azərbaycanca",
fi: "Suomi",
sv: "Svenska",
}
const base = i18n.flatten({ ...en, ...uiEn })
const dicts = new Map<Locale, Dictionary>([["en", base]])
@@ -171,16 +121,6 @@ const loaders: Record<Exclude<Locale, "en">, () => Promise<Dictionary>> = {
th: () => merge(import("@/i18n/th"), import("@opencode-ai/ui/i18n/th")),
bs: () => merge(import("@/i18n/bs"), import("@opencode-ai/ui/i18n/bs")),
tr: () => merge(import("@/i18n/tr"), import("@opencode-ai/ui/i18n/tr")),
hi: () => merge(import("@/i18n/hi"), import("@opencode-ai/ui/i18n/hi")),
nl: () => merge(import("@/i18n/nl"), import("@opencode-ai/ui/i18n/nl")),
id: () => merge(import("@/i18n/id"), import("@opencode-ai/ui/i18n/id")),
vi: () => merge(import("@/i18n/vi"), import("@opencode-ai/ui/i18n/vi")),
it: () => merge(import("@/i18n/it"), import("@opencode-ai/ui/i18n/it")),
ur: () => merge(import("@/i18n/ur"), import("@opencode-ai/ui/i18n/ur")),
pa: () => merge(import("@/i18n/pa"), import("@opencode-ai/ui/i18n/pa")),
az: () => merge(import("@/i18n/az"), import("@opencode-ai/ui/i18n/az")),
fi: () => merge(import("@/i18n/fi"), import("@opencode-ai/ui/i18n/fi")),
sv: () => merge(import("@/i18n/sv"), import("@opencode-ai/ui/i18n/sv")),
}
function loadDict(locale: Locale) {
@@ -200,12 +140,7 @@ export function loadLocaleDict(locale: Locale) {
const localeMatchers: Array<{ locale: Locale; match: (language: string) => boolean }> = [
{ locale: "en", match: (language) => language.startsWith("en") },
{
locale: "zht",
match: (language) =>
language.startsWith("zh") &&
(language.includes("hant") || language.includes("-tw") || language.includes("-hk") || language.includes("-mo")),
},
{ locale: "zht", match: (language) => language.startsWith("zh") && language.includes("hant") },
{ locale: "zh", match: (language) => language.startsWith("zh") },
{ locale: "ko", match: (language) => language.startsWith("ko") },
{ locale: "de", match: (language) => language.startsWith("de") },
@@ -225,22 +160,6 @@ const localeMatchers: Array<{ locale: Locale; match: (language: string) => boole
{ locale: "th", match: (language) => language.startsWith("th") },
{ locale: "bs", match: (language) => language.startsWith("bs") },
{ locale: "tr", match: (language) => language.startsWith("tr") },
{ locale: "hi", match: (language) => language.startsWith("hi") },
{ locale: "nl", match: (language) => language.startsWith("nl") },
{ locale: "id", match: (language) => language.startsWith("id") },
{ locale: "vi", match: (language) => language.startsWith("vi") },
{ locale: "it", match: (language) => language.startsWith("it") },
{ locale: "ur", match: (language) => language.startsWith("ur") },
{
locale: "pa",
match: (language) => language.startsWith("pa") && (language.includes("arab") || language.includes("-pk")),
},
{
locale: "az",
match: (language) => language.startsWith("az") && !language.includes("arab") && !language.includes("cyrl"),
},
{ locale: "fi", match: (language) => language.startsWith("fi") },
{ locale: "sv", match: (language) => language.startsWith("sv") },
]
function detectLocale(): Locale {
@@ -301,26 +220,12 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont
params?: Record<string, string | number | boolean>,
) => string
const plural = (key: PluralKey, count: number, params?: Record<string, string | number | boolean>) => {
const category = pluralCategory(intl(), count)
const current = (dict.loading ? base : (dict() ?? base)) as Record<string, string>
const candidate = `${key}.${category}`
const fallback = `${key}.other`
return i18n.resolveTemplate(current[candidate] ?? current[fallback] ?? fallback, { ...params, count })
}
const label = (value: Locale) => {
const key = LABEL_KEY[value]
if (key) return t(key)
return LABEL[value] ?? value
}
const label = (value: Locale) => t(LABEL_KEY[value])
createEffect(() => {
if (typeof document !== "object") return
const value = locale()
document.documentElement.lang = value
document.documentElement.dir = RTL_LOCALES.has(value) ? "rtl" : "ltr"
document.cookie = cookie(value)
document.documentElement.lang = locale()
document.cookie = cookie(locale())
})
return {
@@ -330,7 +235,6 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont
locales: LOCALES,
label,
t,
plural,
setLocale(next: Locale) {
setStore("locale", normalizeLocale(next))
},
+3 -8
View File
@@ -1,6 +1,6 @@
import { createStore, reconcile } from "solid-js/store"
import { type Accessor, batch, createEffect, createMemo, createRoot, getOwner, onCleanup } from "solid-js"
import { useNavigate, useParams, useSearchParams } from "@solidjs/router"
import { useParams, useSearchParams } from "@solidjs/router"
import { createSimpleContext } from "@opencode-ai/ui/context"
import type { ServerSDK } from "./server-sdk"
import type { ServerSync } from "./server-sync"
@@ -118,7 +118,6 @@ export const { use: useNotification, provider: NotificationProvider } = createSi
const global = useGlobal()
const server = useServer()
const tabs = useTabs()
const navigate = useNavigate()
const platform = usePlatform()
const settings = useSettings()
const language = useLanguage()
@@ -154,7 +153,6 @@ export const { use: useNotification, provider: NotificationProvider } = createSi
platform,
settings,
language,
navigate,
}),
}),
owner ?? undefined,
@@ -219,7 +217,6 @@ function createServerNotificationState(input: {
platform: ReturnType<typeof usePlatform>
settings: ReturnType<typeof useSettings>
language: ReturnType<typeof useLanguage>
navigate: (href: string) => void
}) {
const serverSDK = () => input.sdk
const serverSync = () => input.sync
@@ -356,9 +353,7 @@ function createServerNotificationState(input: {
const href = `/${base64Encode(directory)}/session/${sessionID}`
if (settings.notifications.agent()) {
void platform.notify(language.t("notification.session.responseReady.title"), session.title ?? sessionID, () =>
input.navigate(href),
)
void platform.notify(language.t("notification.session.responseReady.title"), session.title ?? sessionID, href)
}
})
}
@@ -391,7 +386,7 @@ function createServerNotificationState(input: {
(typeof error === "string" ? error : language.t("notification.session.error.fallbackDescription"))
const href = sessionID ? `/${base64Encode(directory)}/session/${sessionID}` : `/${base64Encode(directory)}`
if (settings.notifications.errors()) {
void platform.notify(language.t("notification.session.error.title"), description, () => input.navigate(href))
void platform.notify(language.t("notification.session.error.title"), description, href)
}
})
}
+13 -11
View File
@@ -5,7 +5,6 @@ import type { DesktopMenuAction } from "../desktop-menu"
import { ServerConnection } from "./server"
import type { WslServersPlatform } from "../wsl/types"
import type { UpdaterPlatform } from "../updater"
import type { DraftStore } from "@/utils/draft-store"
type PickerPaths = string | string[] | null
type OpenDirectoryPickerOptions = { title?: string; multiple?: boolean }
@@ -32,23 +31,26 @@ type PlatformBase = {
/** App version */
version?: string
/** Open a web or mail URL in the default system application */
openExternal(url: string): void
/** Open a URL in the default browser */
openLink(url: string): void
/** Open a local path in a local app (desktop only) */
openPath?(path: string, app?: string): Promise<void>
/** Open a local file URL in its default app (desktop only) */
openLocalFile?(url: string): void
/** Reveal a local path in the system file manager; false when the path does not exist (desktop only) */
revealPath?(path: string): Promise<boolean>
/** Restart the app */
restart(): Promise<void>
/** Send a system notification */
notify(title: string, description?: string, onClick?: () => void): Promise<void>
/** Navigate back in history */
back(): void
/** Navigate forward in history */
forward(): void
/** Send a system notification (optional deep link) */
notify(title: string, description?: string, href?: string): Promise<void>
/** Open a native attachment picker and read selected files sequentially (desktop only) */
openAttachmentPickerDialog?(
@@ -65,9 +67,6 @@ type PlatformBase = {
/** Storage mechanism, defaults to localStorage */
storage?: (name?: string) => SyncStorage | AsyncStorage
/** Prompt drafts, history, and their blobs. */
draftStore?: DraftStore
/** Stable platform window identity for window-scoped persistence */
windowID?: string
@@ -92,6 +91,9 @@ type PlatformBase = {
/** Set the preferred display backend (desktop only) */
setDisplayBackend?(backend: DisplayBackend): Promise<void>
/** Parse markdown to HTML using native parser (desktop only, returns unprocessed code blocks) */
parseMarkdown?(markdown: string): Promise<string>
/** Webview zoom level (desktop only) */
webviewZoom?: Accessor<number>
+4 -5
View File
@@ -5,7 +5,6 @@ import { createStore, type SetStoreFunction } from "solid-js/store"
import type { FileSelection } from "@/context/file"
import { Persist, persisted } from "@/utils/persist"
import type { ServerScope } from "@/utils/server-scope"
import type { BlobReference } from "@/utils/draft-store"
interface PartBase {
content: string
@@ -38,7 +37,7 @@ export interface ImageAttachmentPart {
filename: string
sourcePath?: string
mime: string
blob: BlobReference
dataUrl: string
}
export type ContentPart = TextPart | FileAttachmentPart | AgentPart | ImageAttachmentPart
@@ -169,9 +168,9 @@ function createPromptActions(setStore: SetStoreFunction<PromptStore>) {
}
function promptTarget(serverScope: ServerScope, scope: PromptScope) {
if ("draftID" in scope) return Persist.prompt(Persist.draft(scope.draftID, "prompt"))
if ("draftID" in scope) return Persist.draft(scope.draftID, "prompt")
const legacy = `${scope.dir}/prompt${scope.id ? "/" + scope.id : ""}.v2`
return Persist.prompt(Persist.serverScoped(serverScope, scope.dir, scope.id, "prompt", [legacy]))
return Persist.serverScoped(serverScope, scope.dir, scope.id, "prompt", [legacy])
}
function promptStore(initial?: InitialPrompt): PromptStore {
@@ -246,7 +245,7 @@ export function createPromptSession(serverScope: ServerScope, scope: PromptScope
}
export function createDraftPromptSession(draftID: string, initial?: InitialPrompt) {
return createPersistedPrompt(Persist.prompt(Persist.draft(draftID, "prompt")), initial)
return createPersistedPrompt(Persist.draft(draftID, "prompt"), initial)
}
export type PromptSession = ReturnType<typeof createPromptSession>
+1 -1
View File
@@ -184,7 +184,7 @@ function makeQueryOptionsApi(
protocol: Promise<"v1" | "v2">,
) {
return {
globalConfig: () => loadGlobalConfigQuery(scope, serverSDK(), protocol),
globalConfig: () => loadGlobalConfigQuery(scope, serverSDK()),
projects: () => loadProjectsQuery(scope, serverAPI.project),
providers: (directory: PathKey | null) =>
loadProvidersQuery(scope, directory, serverAPI, directory ? sdkFor(directory) : serverSDK(), protocol),
-23
View File
@@ -1,23 +0,0 @@
import type { ServerConnection } from "./server"
import type { Tab } from "./tabs"
export function migrateTabs(value: unknown, fallback: ServerConnection.Key): Tab[] {
if (!Array.isArray(value)) return []
return value.flatMap<Tab>((tab) => {
if (!tab || typeof tab !== "object") return []
if ("server" in tab && typeof tab.server !== "string") return []
const server = ("server" in tab ? tab.server : fallback) as ServerConnection.Key
if (tab.type === "session" && typeof tab.sessionId === "string") {
return [{ type: tab.type, server, sessionId: tab.sessionId }]
}
if (
tab.type === "draft" &&
typeof tab.draftID === "string" &&
typeof tab.directory === "string" &&
(tab.worktree === undefined || typeof tab.worktree === "string")
) {
return [{ type: tab.type, server, draftID: tab.draftID, directory: tab.directory, worktree: tab.worktree }]
}
return []
})
}
-18
View File
@@ -3,7 +3,6 @@ import { createRoot, getOwner, onCleanup } from "solid-js"
import { createTabMemory } from "./tab-memory"
import { nextTabAfterClose, pushClosedTab, removeClosedTabs, takeClosedTab, type ClosedTab } from "./closed-tabs"
import type { SessionTab, Tab } from "./tabs"
import { migrateTabs } from "./tab-migration"
import type { ServerConnection } from "./server"
const server = "local\nhttp://localhost:4096" as ServerConnection.Key
@@ -12,23 +11,6 @@ function sessionTab(sessionId: string): SessionTab {
return { type: "session", server, sessionId }
}
describe("tab migration", () => {
test("drops null and malformed persisted tabs", () => {
expect(
migrateTabs([null, sessionTab("a"), { type: "session", server }, { type: "unknown", server }, "invalid"], server),
).toEqual([sessionTab("a")])
})
test("adds the fallback server to valid legacy tabs", () => {
expect(migrateTabs([{ type: "session", sessionId: "a", dirBase64: "legacy" }], server)).toEqual([sessionTab("a")])
})
test("replaces invalid top-level persisted data", () => {
expect(migrateTabs(null, server)).toEqual([])
expect(migrateTabs({}, server)).toEqual([])
})
})
describe("tab memory", () => {
test("keeps state until its tab is removed", () => {
createRoot((dispose) => {
+8 -6
View File
@@ -12,7 +12,6 @@ import { sessionHref } from "@/utils/session-route"
import { createTabMemory } from "./tab-memory"
import { nextTabAfterClose, pushClosedTab, removeClosedTabs, takeClosedTab, type ClosedTab } from "./closed-tabs"
import { createDraftPromptSession, type PromptModel } from "./prompt-state"
import { migrateTabs } from "./tab-migration"
export type SessionTab = {
type: "session"
@@ -60,7 +59,13 @@ export const { use: useTabs, provider: TabsProvider } = createSimpleContext({
const [store, setStore, _, ready] = persisted(
{
...Persist.window("tabs"),
migrate: (value: unknown) => migrateTabs(value, fallback),
migrate: (value: unknown) => {
if (!Array.isArray(value)) return value
return value.map((tab) => {
if (!tab || typeof tab !== "object" || "server" in tab) return tab
return { ...tab, server: fallback }
})
},
},
createStore<Tab[]>([]),
)
@@ -101,10 +106,7 @@ export const { use: useTabs, provider: TabsProvider } = createSimpleContext({
}
const removeDraftPersisted = (draftID: string) => {
for (const key of draftPersistedKeys()) {
const target = Persist.draft(draftID, key)
removePersisted(key === "prompt" ? Persist.prompt(target) : target, platform)
}
for (const key of draftPersistedKeys()) removePersisted(Persist.draft(draftID, key), platform)
}
const removeInfo = (key: string) => {
+16 -11
View File
@@ -4,9 +4,9 @@ import * as Sentry from "@sentry/solid"
import { render } from "solid-js/web"
import { AppBaseProviders, AppInterface } from "@/app"
import { type Platform, PlatformProvider } from "@/context/platform"
import { createBrowserDraftStore } from "@/utils/draft-store"
import { dict as en } from "@/i18n/en"
import { dict as zh } from "@/i18n/zh"
import { handleNotificationClick } from "@/utils/notification-click"
import { authFromToken } from "@/utils/server"
import pkg from "../package.json"
import { ServerConnection } from "./context/server"
@@ -54,7 +54,7 @@ const setStorage = (key: string, value: string | null) => {
const readDefaultServerUrl = () => getStorage(DEFAULT_SERVER_URL_KEY)
const writeDefaultServerUrl = (url: string | null) => setStorage(DEFAULT_SERVER_URL_KEY, url)
const notify: Platform["notify"] = async (title, description, onClick) => {
const notify: Platform["notify"] = async (title, description, href) => {
if (!("Notification" in window)) return
const permission =
@@ -73,17 +73,21 @@ const notify: Platform["notify"] = async (title, description, onClick) => {
})
notification.onclick = () => {
window.focus()
onClick?.()
handleNotificationClick(href)
notification.close()
}
}
const openExternal: Platform["openExternal"] = (value) => {
if (!URL.canParse(value)) return
const url = new URL(value)
if (url.protocol !== "http:" && url.protocol !== "https:" && url.protocol !== "mailto:") return
window.open(url.href, "_blank", "noopener,noreferrer")
const openLink: Platform["openLink"] = (url) => {
window.open(url, "_blank")
}
const back: Platform["back"] = () => {
window.history.back()
}
const forward: Platform["forward"] = () => {
window.history.forward()
}
const restart: Platform["restart"] = async () => {
@@ -117,9 +121,10 @@ const clearAuthToken = () => {
const platform: Platform = {
platform: "web",
draftStore: createBrowserDraftStore(),
version: pkg.version,
openExternal,
openLink,
back,
forward,
restart,
notify,
getDefaultServer: async () => {
+82 -101
View File
@@ -59,16 +59,16 @@ export const dict = {
"command.message.next.description": "انتقل إلى رسالة المستخدم التالية",
"command.model.choose": "اختيار نموذج",
"command.model.choose.description": "حدد نموذجًا مختلفًا",
"command.mcp.toggle": "تبديل خوادم MCP",
"command.mcp.toggle.description": "تبديل خوادم MCP",
"command.mcp.toggle": "تبديل MCPs",
"command.mcp.toggle.description": "تبديل MCPs",
"command.agent.cycle": "تغيير الوكيل",
"command.agent.cycle.description": "التبديل إلى الوكيل التالي",
"command.agent.cycle.reverse": "تغيير الوكيل للخلف",
"command.agent.cycle.reverse.description": "التبديل إلى الوكيل السابق",
"command.model.variant.cycle": "تغيير جهد الاستدلال",
"command.model.variant.cycle": "تغيير جهد التفكير",
"command.model.variant.cycle.description": "التبديل إلى مستوى الجهد التالي",
"command.prompt.mode.shell": "Shell",
"command.prompt.mode.normal": "موجّه",
"command.prompt.mode.normal": "Prompt",
"command.permissions.autoaccept.enable": "قبول الأذونات تلقائيًا",
"command.permissions.autoaccept.disable": "إيقاف قبول الأذونات تلقائيًا",
"command.workspace.toggle": "تبديل مساحات العمل",
@@ -94,14 +94,13 @@ export const dict = {
"dialog.provider.empty": "لم يتم العثور على موفرين",
"dialog.provider.group.popular": "شائع",
"dialog.provider.group.other": "آخر",
"dialog.provider.custom.label": "موفر مخصص متوافق مع OpenAI",
"dialog.provider.tag.recommended": "موصى به",
"dialog.provider.opencode.note": "نماذج مختارة تتضمن Claude و GPT و Gemini والمزيد",
"dialog.provider.opencode.tagline": "نماذج موثوقة ومحسنة",
"dialog.provider.opencodeGo.tagline": "اشتراك منخفض التكلفة للجميع",
"dialog.provider.anthropic.note": "وصول مباشر إلى نماذج Claude، بما فيها Pro و Max",
"dialog.provider.copilot.note": "نماذج ذكاء اصطناعي للمساعدة في البرمجة عبر GitHub Copilot",
"dialog.provider.openai.note": "نماذج GPT لمهام الذكاء الاصطناعي العامة السريعة والمتقدمة",
"dialog.provider.anthropic.note": "اتصل باستخدام Claude Pro/Max أو مفتاح API",
"dialog.provider.copilot.note": "اتصل باستخدام Copilot أو مفتاح API",
"dialog.provider.openai.note": "اتصل باستخدام ChatGPT Pro/Plus أو مفتاح API",
"dialog.provider.google.note": "نماذج Gemini لاستجابات سريعة ومنظمة",
"dialog.provider.openrouter.note": "الوصول إلى جميع النماذج المدعومة من موفر واحد",
"dialog.provider.vercel.note": "وصول موحد إلى نماذج الذكاء الاصطناعي مع توجيه ذكي",
@@ -113,9 +112,8 @@ export const dict = {
"dialog.model.manage.provider.toggle": "تبديل جميع نماذج {{provider}}",
"dialog.model.unpaid.freeModels.title": "نماذج مجانية مقدمة من OpenCode",
"dialog.model.unpaid.addMore.title": "إضافة المزيد من النماذج من موفرين مشهورين",
"dialog.model.unpaid.viewMoreProviders": "عرض أكثر من 70 موفرًا إضافيًا",
"dialog.provider.viewAll": "عرض المزيد من الموفرين",
"provider.connect.title": "الاتصال بـ {{provider}}",
"provider.connect.title": "اتصال {{provider}}",
"provider.connect.title.anthropicProMax": "تسجيل الدخول باستخدام Claude Pro/Max",
"provider.connect.selectMethod": "حدد طريقة تسجيل الدخول لـ {{provider}}.",
"provider.connect.method.apiKey": "مفتاح API",
@@ -123,8 +121,8 @@ export const dict = {
"provider.connect.status.waiting": "في انتظار التفويض...",
"provider.connect.status.failed": "فشل التفويض: {{error}}",
"provider.connect.apiKey.description":
"أدخل مفتاح API الخاص بـ {{provider}} لتوصيل حسابك واستخدام نماذج {{provider}} في OpenCode.",
"provider.connect.apiKey.label": "مفتاح API لـ {{provider}}",
"أدخل مفتاح واجهة برمجة تطبيقات {{provider}} الخاص بك لتوصيل حسابك واستخدام نماذج {{provider}} في OpenCode.",
"provider.connect.apiKey.label": "مفتاح واجهة برمجة تطبيقات {{provider}}",
"provider.connect.apiKey.placeholder": "مفتاح API",
"provider.connect.apiKey.required": "مفتاح API مطلوب",
"provider.connect.opencodeZen.line1":
@@ -198,26 +196,26 @@ export const dict = {
"model.input.image": "صورة",
"model.input.audio": "صوت",
"model.input.video": "فيديو",
"model.input.pdf": "PDF",
"model.input.pdf": "pdf",
"model.tooltip.allows": "يسمح: {{inputs}}",
"model.tooltip.context.label": "السياق",
"model.tooltip.inputs": "المدخلات",
"model.tooltip.model": "النموذج",
"model.tooltip.provider": "الموفر",
"model.tooltip.reasoning": "الاستدلال",
"model.tooltip.reasoning.allowed": دعم الاستدلال",
"model.tooltip.reasoning.none": "بدون استدلال",
"model.tooltip.reasoning": "الاستنتاج",
"model.tooltip.reasoning.allowed": سمح بالاستنتاج",
"model.tooltip.reasoning.none": "بدون استنتاج",
"model.tooltip.context": "حد السياق {{limit}}",
"common.search.placeholder": "بحث",
"common.goBack": "رجوع",
"common.goForward": "التقدم",
"common.goForward": "انتقل للأمام",
"common.loading": "جارٍ التحميل",
"common.loading.ellipsis": "...",
"common.cancel": "إلغاء",
"common.clear": "مسح",
"common.connect": "اتصال",
"common.disconnect": "قطع الاتصال",
"common.continue": "متابعة",
"common.continue": "إرسال",
"common.submit": "إرسال",
"common.save": "حفظ",
"common.saving": "جارٍ الحفظ...",
@@ -229,7 +227,7 @@ export const dict = {
"prompt.placeholder.summarizeComments": "لخّص التعليقات…",
"prompt.placeholder.summarizeComment": "لخّص التعليق…",
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "موجّه",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "esc للخروج",
"session.child.promptDisabled": "لا يمكن إرسال موجّهات إلى جلسات الوكلاء الفرعيين.",
"session.child.backToParent": "العودة إلى الجلسة الرئيسية.",
@@ -251,17 +249,17 @@ export const dict = {
"prompt.example.16": "إضافة معالجة الأخطاء لهذه الدالة",
"prompt.example.17": "اشرح نمط regex هذا",
"prompt.example.18": "تحويل هذا إلى TypeScript",
"prompt.example.19": "إضافة التسجيل في جميع أنحاء قاعدة التعليمات البرمجية",
"prompt.example.19": "إضافة تسجيل الدخول (logging) في جميع أنحاء قاعدة التعليمات البرمجية",
"prompt.example.20": "ما هي التبعيات القديمة؟",
"prompt.example.21": "ساعدني في كتابة برنامج نصي للترحيل",
"prompt.example.22": "تنفيذ التخزين المؤقت لنقطة النهاية هذه",
"prompt.example.21": "ساعدني في كتابة برنامج نصي للهجرة",
"prompt.example.22": "تنفيذ التخزين المؤقت لهذه النقطة النهائية",
"prompt.example.23": "إضافة ترقيم الصفحات إلى هذه القائمة",
"prompt.example.24": "إنشاء أمر CLI لـ...",
"prompt.example.25": "كيف تعمل متغيرات البيئة هنا؟",
"prompt.popover.emptyResults": "لا توجد نتائج مطابقة",
"prompt.popover.emptyCommands": "لا توجد أوامر مطابقة",
"prompt.dropzone.label": "أفلت الصور أو ملفات PDF أو الملفات النصية هنا",
"prompt.dropzone.file.label": "أفلت الملف للإشارة إليه باستخدام @",
"prompt.dropzone.file.label": "أفلت لإشارة @ للملف",
"prompt.slash.badge.custom": "مخصص",
"prompt.slash.badge.skill": "مهارة",
"prompt.slash.badge.mcp": "mcp",
@@ -269,7 +267,7 @@ export const dict = {
"prompt.context.includeActiveFile": "تضمين الملف النشط",
"prompt.context.removeActiveFile": "إزالة الملف النشط من السياق",
"prompt.context.removeFile": "إزالة الملف من السياق",
"prompt.action.attachFile": ضافة ملفات",
"prompt.action.attachFile": رفاق ملف",
"prompt.menu.addImagesAndFiles": "إضافة ملفات والمزيد",
"prompt.menu.imagesAndFiles": "الصور والملفات",
"prompt.menu.commands": "الأوامر",
@@ -277,9 +275,8 @@ export const dict = {
"prompt.menu.shellCommand": "أمر shell",
"prompt.attachment.remove": "إزالة المرفق",
"prompt.action.send": "إرسال",
"prompt.action.stop": "إيقاف",
"prompt.action.stop": "توقف",
"prompt.toast.pasteUnsupported.title": "مرفق غير مدعوم",
"prompt.toast.attachmentDuplicate.title": "تم تحميل هذا الملف بالفعل",
"prompt.toast.pasteUnsupported.description": "يمكن إرفاق الصور أو ملفات PDF أو الملفات النصية فقط هنا.",
"prompt.toast.modelAgentRequired.title": "حدد وكيلاً ونموذجاً",
"prompt.toast.modelAgentRequired.description": "اختر وكيلاً ونموذجاً قبل إرسال الموجه.",
@@ -289,10 +286,10 @@ export const dict = {
"prompt.toast.commandSendFailed.title": "فشل إرسال الأمر",
"prompt.toast.promptSendFailed.title": "فشل إرسال الموجه",
"prompt.toast.promptSendFailed.description": "تعذر استرداد الجلسة",
"dialog.mcp.title": "خوادم MCP",
"dialog.mcp.description": "تم تفعيل {{enabled}} من أصل {{total}}",
"dialog.mcp.empty": "لم يتم تكوين أي خوادم MCP",
"dialog.lsp.empty": ُكتشف خوادم LSP تلقائيًا من أنواع الملفات",
"dialog.mcp.title": "MCPs",
"dialog.mcp.description": "{{enabled}} من {{total}} مفعل",
"dialog.mcp.empty": "لم يتم تكوين MCPs",
"dialog.lsp.empty": م الكشف تلقائيًا عن LSPs من أنواع الملفات",
"dialog.plugins.empty": "الإضافات المكونة في opencode.json",
"mcp.status.connected": "متصل",
"mcp.status.failed": "فشل",
@@ -411,35 +408,35 @@ export const dict = {
"dialog.project.edit.icon.recommended": "موصى به: 128x128px",
"dialog.project.edit.color": "لون",
"dialog.project.edit.color.select": "اختر لون {{color}}",
"dialog.project.edit.worktree.startup": "برنامج نصي لبدء تشغيل مساحة العمل",
"dialog.project.edit.worktree.startup": "سكريبت بدء تشغيل مساحة العمل",
"dialog.project.edit.worktree.startup.description": "يتم تشغيله بعد إنشاء مساحة عمل جديدة (شجرة عمل).",
"dialog.project.edit.worktree.startup.placeholder": "مثال: bun install",
"context.breakdown.title": "تفصيل السياق",
"context.breakdown.note": 'تفصيل تقريبي لرموز الإدخال المميزة. يشمل "أخرى" تعريفات الأدوات والأعباء الإضافية.',
"context.breakdown.note": 'تفصيل تقريبي لرموز الإدخال. يشمل "أخرى" تعريفات الأدوات والنفقات العامة.',
"context.breakdown.system": "النظام",
"context.breakdown.user": "المستخدم",
"context.breakdown.assistant": "المساعد",
"context.breakdown.tool": "استدعاءات الأدوات",
"context.breakdown.tool": "استدعاءات الأداة",
"context.breakdown.other": "أخرى",
"context.systemPrompt.title": "موجّه النظام",
"context.systemPrompt.title": "موجه النظام",
"context.rawMessages.title": "الرسائل الخام",
"context.stats.session": "جلسة",
"context.stats.messages": "رسائل",
"context.stats.provider": "موفر",
"context.stats.model": "نموذج",
"context.stats.limit": "حد السياق",
"context.stats.totalTokens": "إجمالي الرموز المميزة",
"context.stats.totalTokens": "إجمالي الرموز",
"context.stats.usage": "استخدام",
"context.stats.inputTokens": "رموز الإدخال المميزة",
"context.stats.outputTokens": "رموز الإخراج المميزة",
"context.stats.reasoningTokens": "رموز الاستدلال المميزة",
"context.stats.cacheTokens": "رموز التخزين المؤقت المميزة (قراءة/كتابة)",
"context.stats.inputTokens": "رموز الإدخال",
"context.stats.outputTokens": "رموز الإخراج",
"context.stats.reasoningTokens": "رموز الاستنتاج",
"context.stats.cacheTokens": "رموز التخزين المؤقت (قراءة/كتابة)",
"context.stats.userMessages": "رسائل المستخدم",
"context.stats.assistantMessages": "رسائل المساعد",
"context.stats.totalCost": "التكلفة الإجمالية",
"context.stats.sessionCreated": "تم إنشاء الجلسة",
"context.stats.lastActivity": "آخر نشاط",
"context.usage.tokens": "الرموز المميزة",
"context.usage.tokens": "رموز",
"context.usage.usage": "استخدام",
"context.usage.cost": "تكلفة",
"context.usage.clickToView": "انقر لعرض السياق",
@@ -467,9 +464,9 @@ export const dict = {
"toast.theme.title": "تم تبديل السمة",
"toast.scheme.title": "مخطط الألوان",
"toast.workspace.enabled.title": "تم تمكين مساحات العمل",
"toast.workspace.enabled.description": "تُعرض الآن عدة أشجار عمل في الشريط الجانبي",
"toast.workspace.enabled.description": "الآن يتم عرض عدة worktrees في الشريط الجانبي",
"toast.workspace.disabled.title": "تم تعطيل مساحات العمل",
"toast.workspace.disabled.description": "تُعرض شجرة العمل الرئيسية فقط في الشريط الجانبي",
"toast.workspace.disabled.description": "يتم عرض worktree الرئيسي فقط في الشريط الجانبي",
"toast.permissions.autoaccept.on.title": "يتم قبول الأذونات تلقائيًا",
"toast.permissions.autoaccept.on.description": "ستتم الموافقة على طلبات الأذونات تلقائيًا",
"toast.permissions.autoaccept.off.title": "تم إيقاف قبول الأذونات تلقائيًا",
@@ -491,7 +488,7 @@ export const dict = {
"toast.session.unshare.failed.description": "حدث خطأ أثناء إلغاء مشاركة الجلسة",
"toast.session.listFailed.title": "فشل تحميل الجلسات لـ {{project}}",
"toast.update.title": "تحديث متاح",
"toast.update.description": "يتوفر الآن إصدار جديد من OpenCode ({{version}}) للتثبيت.",
"toast.update.description": "نسخة جديدة من OpenCode ({{version}}) متاحة الآن للتثبيت.",
"toast.update.action.installRestart": "تثبيت وإعادة تشغيل",
"toast.update.action.notYet": "ليس الآن",
"error.page.title": "حدث خطأ ما",
@@ -511,7 +508,7 @@ export const dict = {
"error.dev.rootNotFound":
"لم يتم العثور على العنصر الجذري. هل نسيت إضافته إلى index.html؟ أو ربما تمت كتابة سمة id بشكل خاطئ؟",
"error.serverSync.connectFailed": "تعذر الاتصال بالخادم. هل هناك خادم يعمل في `{{url}}`؟",
"directory.error.invalidUrl": "مجلد غير صالح في عنوان URL.",
"directory.error.invalidUrl": ليل غير صالح في عنوان URL.",
"error.chain.unknown": "خطأ غير معروف",
"error.chain.causedBy": "بسبب:",
"error.chain.apiError": "خطأ API",
@@ -539,7 +536,7 @@ export const dict = {
"notification.session.responseReady.title": "الاستجابة جاهزة",
"notification.session.error.title": "خطأ في الجلسة",
"notification.session.error.fallbackDescription": "حدث خطأ",
"home.recentProjects": "المشاريع الأخيرة",
"home.recentProjects": "المشاريع الحديثة",
"home.empty.title": "لا توجد مشاريع حديثة",
"home.empty.description": "ابدأ بفتح مشروع محلي",
"home.title": "الرئيسية",
@@ -557,7 +554,7 @@ export const dict = {
"home.sessions.group.today": "اليوم",
"home.sessions.group.yesterday": "أمس",
"home.sessions.group.older": "الأقدم",
"home.providerTip": "اتصل بأكثر من 75 موفرًا لاستخدام نماذج أخرى، بما فيها Claude وGPT وGemini وغيرها",
"home.providerTip": "اتصل بأكثر من 75 مزودًا لاستخدام نماذج أخرى، بما فيها Claude وGPT وGemini وغيرها",
"session.tab.session": "جلسة",
"session.tab.review": "مراجعة",
"session.tab.context": "سياق",
@@ -567,7 +564,7 @@ export const dict = {
"session.error.notFound.description": "يشير هذا التبويب إلى جلسة لم تعد موجودة على هذا الخادم.",
"session.error.notFound.closeTab": "إغلاق علامة التبويب",
"session.error.serverConnection": "تعذر الاتصال بهذا الخادم",
"session.review.filesChanged": "الملفات المتغيرة: {{count}}",
"session.review.filesChanged": "تم تغيير {{count}} ملفات",
"session.review.change.one": "تغيير",
"session.review.change.other": "تغييرات",
"session.review.loadingChanges": "جارٍ تحميل التغييرات...",
@@ -575,7 +572,7 @@ export const dict = {
"session.review.noChanges": "لا توجد تغييرات",
"session.review.noUncommittedChanges": "لا توجد تغييرات غير مُودَعة بعد",
"session.review.noBranchChanges": "لا توجد تغييرات في الفرع بعد",
"session.review.noVcs": "لم يُكتشف نظام Git للتحكم في الإصدارات، لذا لن تُعرض التغييرات",
"session.review.noVcs": "لم يتم اكتشاف نظام التحكم في الإصدار Git، لن يتم عرض التغييرات",
"session.review.noSnapshot": "تم تعطيل تتبع اللقطات في التكوين، لذا فإن تغييرات الجلسة غير متوفرة",
"session.files.selectToOpen": "اختر ملفًا لفتحه",
"session.files.all": "كل الملفات",
@@ -593,26 +590,14 @@ export const dict = {
"session.question.minimize": "تصغير السؤال",
"session.question.restore": "استعادة السؤال",
"session.question.pending.one": "{{count}} سؤال معلق",
"session.question.pending.zero": "عدد الأسئلة المعلقة: {{count}}",
"session.question.pending.two": "عدد الأسئلة المعلقة: {{count}}",
"session.question.pending.few": "{{count}} أسئلة معلقة",
"session.question.pending.many": "{{count}} سؤالًا معلقًا",
"session.question.pending.other": "الأسئلة المعلقة: {{count}}",
"session.followupDock.summary.one": "{{count}} رسالة في قائمة الانتظار",
"session.followupDock.summary.zero": "عدد الرسائل في قائمة الانتظار: {{count}}",
"session.followupDock.summary.two": "عدد الرسائل في قائمة الانتظار: {{count}}",
"session.followupDock.summary.few": "{{count}} رسائل في قائمة الانتظار",
"session.followupDock.summary.many": "{{count}} رسالةً في قائمة الانتظار",
"session.followupDock.summary.other": "{{count}} رسائل في قائمة الانتظار",
"session.followupDock.summary.one": "{{count}} رسالة في الانتظار",
"session.followupDock.summary.other": "{{count}} رسائل في الانتظار",
"session.followupDock.sendNow": "إرسال الآن",
"session.followupDock.edit": "تحرير",
"session.followupDock.collapse": "طي الرسائل المنتظرة",
"session.followupDock.expand": "توسيع الرسائل المنتظرة",
"session.revertDock.summary.one": "{{count}} رسالة تم التراجع عنها",
"session.revertDock.summary.zero": "عدد الرسائل التي تم التراجع عنها: {{count}}",
"session.revertDock.summary.two": "عدد الرسائل التي تم التراجع عنها: {{count}}",
"session.revertDock.summary.few": "{{count}} رسائل تم التراجع عنها",
"session.revertDock.summary.many": "{{count}} رسالةً تم التراجع عنها",
"session.revertDock.summary.other": "{{count}} رسائل تم التراجع عنها",
"session.revertDock.collapse": "طي الرسائل التي تم التراجع عنها",
"session.revertDock.expand": "توسيع الرسائل التي تم التراجع عنها",
@@ -665,10 +650,10 @@ export const dict = {
"terminal.connectionLost.title": "فقد الاتصال",
"terminal.connectionLost.description": "انقطع اتصال المحطة الطرفية. يمكن أن يحدث هذا عند إعادة تشغيل الخادم.",
"common.closeTab": "إغلاق علامة التبويب",
"common.dismiss": "إهمال",
"common.dismiss": "رفض",
"common.requestFailed": "فشل الطلب",
"common.moreOptions": "مزيد من الخيارات",
"common.learnMore": "اطّلع على المزيد",
"common.learnMore": "اعرف المزيد",
"common.rename": "إعادة تسمية",
"common.reset": "إعادة تعيين",
"common.archive": "أرشفة",
@@ -686,7 +671,7 @@ export const dict = {
"sidebar.gettingStarted.title": "البدء",
"sidebar.gettingStarted.line1": "يتضمن OpenCode نماذج مجانية حتى تتمكن من البدء فورًا.",
"sidebar.gettingStarted.line2": "قم بتوصيل أي موفر لاستخدام النماذج، بما في ذلك Claude و GPT و Gemini وما إلى ذلك.",
"sidebar.project.recentSessions": "الجلسات الأخيرة",
"sidebar.project.recentSessions": "الجلسات الحديثة",
"sidebar.project.viewAllSessions": "عرض جميع الجلسات",
"sidebar.project.clearNotifications": "مسح الإشعارات",
"sidebar.empty.title": "لا توجد مشاريع مفتوحة",
@@ -705,7 +690,7 @@ export const dict = {
"settings.general.section.updates": "التحديثات",
"settings.general.section.sounds": "المؤثرات الصوتية",
"settings.general.section.feed": "الخلاصة",
"settings.general.section.display": "العرض",
"settings.general.section.display": "شاشة العرض",
"settings.general.row.language.title": "اللغة",
"settings.general.row.language.description": "تغيير لغة العرض لـ OpenCode",
"settings.general.row.shell.title": "Shell المحطة الطرفية",
@@ -742,11 +727,10 @@ export const dict = {
"settings.general.row.mobileTitlebarBottom.title": "التنقل السفلي",
"settings.general.row.mobileTitlebarBottom.description":
"وضع شريط العنوان وعلامات تبويب الجلسات أسفل الشاشة على الأجهزة المحمولة",
"settings.general.row.showCustomAgents.title": "إظهار الوكيل",
"settings.general.row.showCustomAgents.description":
"التبديل بين الوكلاء في محرر الرسائل. عند إخفائه، يُستخدم وكيل Build افتراضيًا.",
"settings.general.row.reasoningSummaries.title": "إظهار ملخصات الاستدلال",
"settings.general.row.reasoningSummaries.description": "عرض ملخصات استدلال النموذج في الشريط الزمني",
"settings.general.row.showCustomAgents.title": "الوكلاء المخصصون",
"settings.general.row.showCustomAgents.description": "إظهار محدد الوكلاء في محرر الرسائل",
"settings.general.row.reasoningSummaries.title": "إظهار ملخصات الاستنتاج",
"settings.general.row.reasoningSummaries.description": "عرض ملخصات استنتاج النموذج في الشريط الزمني",
"settings.general.row.shellToolPartsExpanded.title": "توسيع أجزاء أداة shell",
"settings.general.row.shellToolPartsExpanded.description":
"إظهار أجزاء أداة shell موسعة بشكل افتراضي في الشريط الزمني",
@@ -759,12 +743,11 @@ export const dict = {
"استخدم علامات التبويب الجديدة وتخطيط الصفحة الرئيسية. يمكنك التبديل بين التخطيطات لفترة محدودة.",
"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.newInterfaceNotice.dismiss": "رفض",
"settings.general.row.pinchZoom.title": "التكبير بإيماءة القرص",
"settings.general.row.pinchZoom.description": "السماح بإيماءة القرص على لوحة اللمس وإيماءة Ctrl-scroll للتكبير",
"settings.general.row.wayland.title": "استخدام Wayland الأصلي",
"settings.general.row.wayland.description": "تعطيل الرجوع إلى X11 على Wayland. يتطلب إعادة التشغيل.",
"settings.general.row.wayland.description": "تعطيل التراجع إلى X11 على Wayland. يتطلب إعادة التشغيل.",
"settings.general.row.wayland.tooltip":
"على Linux مع شاشات بمعدلات تحديث مختلطة، يمكن أن يكون Wayland الأصلي أكثر استقرارًا.",
"settings.general.row.releaseNotes.title": "ملاحظات الإصدار",
@@ -777,7 +760,7 @@ export const dict = {
"settings.updates.action.checking": "جارٍ التحقق...",
"settings.updates.action.downloading": "جارٍ التنزيل...",
"settings.updates.action.installing": "جارٍ التثبيت...",
"settings.updates.toast.latest.title": "لديك أحدث إصدار",
"settings.updates.toast.latest.title": "أنت على آخر إصدار",
"settings.updates.toast.latest.description": "أنت تستخدم أحدث إصدار من OpenCode.",
"sound.option.none": "بلا",
"sound.option.alert01": "تنبيه 01",
@@ -839,17 +822,17 @@ export const dict = {
"settings.general.sounds.errors.description": "تشغيل صوت عند حدوث خطأ",
"settings.shortcuts.title": "اختصارات لوحة المفاتيح",
"settings.shortcuts.reset.button": "إعادة التعيين إلى الافتراضيات",
"settings.shortcuts.reset.toast.title": "أُعيد تعيين الاختصارات",
"settings.shortcuts.reset.toast.description": "أُعيد تعيين اختصارات لوحة المفاتيح إلى الإعدادات الافتراضية.",
"settings.shortcuts.reset.toast.title": "تم إعادة تعيين الاختصارات",
"settings.shortcuts.reset.toast.description": "تم إعادة تعيين اختصارات لوحة المفاتيح إلى الافتراضيات.",
"settings.shortcuts.conflict.title": "الاختصار قيد الاستخدام بالفعل",
"settings.shortcuts.conflict.description": "الاختصار {{keybind}} مخصص بالفعل لـ {{titles}}.",
"settings.shortcuts.unassigned": "غير مخصص",
"settings.shortcuts.conflict.description": "{{keybind}} معين بالفعل لـ {{titles}}.",
"settings.shortcuts.unassigned": "غير معين",
"settings.shortcuts.pressKeys": "اضغط على المفاتيح",
"settings.shortcuts.search.placeholder": "البحث في الاختصارات",
"settings.shortcuts.search.empty": "لم يتم العثور على اختصارات",
"settings.shortcuts.group.general": "عام",
"settings.shortcuts.group.session": "جلسة",
"settings.shortcuts.group.navigation": "التنقل",
"settings.shortcuts.group.navigation": "تصفح",
"settings.shortcuts.group.modelAndAgent": "النموذج والوكيل",
"settings.shortcuts.group.terminal": "المحطة الطرفية",
"settings.shortcuts.group.prompt": "موجه",
@@ -874,18 +857,19 @@ export const dict = {
"settings.permissions.description": "تحكم في الأدوات التي يمكن للخادم استخدامها بشكل افتراضي.",
"settings.permissions.section.tools": "الأدوات",
"settings.permissions.toast.updateFailed.title": "فشل تحديث الأذونات",
"settings.permissions.action.allow": "السماح",
"settings.permissions.action.ask": "طلب الإذن",
"settings.permissions.action.deny": "الرفض",
"settings.permissions.action.allow": "سماح",
"settings.permissions.action.ask": "سؤال",
"settings.permissions.action.deny": "رفض",
"settings.permissions.tool.read.title": "قراءة",
"settings.permissions.tool.read.description": "قراءة ملف (يطابق مسار الملف)",
"settings.permissions.tool.edit.title": "تحرير",
"settings.permissions.tool.edit.description": "تعديل الملفات، بما في ذلك عمليات التحرير والكتابة وتطبيق الرقع",
"settings.permissions.tool.edit.description":
"تعديل الملفات، بما في ذلك التحرير والكتابة والتصحيحات والتحرير المتعدد",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "مطابقة الملفات باستخدام أنماط glob",
"settings.permissions.tool.grep.title": "Grep",
"settings.permissions.tool.grep.description": "البحث في محتويات الملف باستخدام التعبيرات العادية",
"settings.permissions.tool.list.title": "سرد",
"settings.permissions.tool.list.title": "قائمة",
"settings.permissions.tool.list.description": "سرد الملفات داخل دليل",
"settings.permissions.tool.bash.title": "Bash",
"settings.permissions.tool.bash.description": "تشغيل أوامر shell",
@@ -903,7 +887,7 @@ export const dict = {
"settings.permissions.tool.websearch.description": "البحث في الويب",
"settings.permissions.tool.external_directory.title": "دليل خارجي",
"settings.permissions.tool.external_directory.description": "الوصول إلى الملفات خارج دليل المشروع",
"settings.permissions.tool.doom_loop.title": "حلقة مفرغة",
"settings.permissions.tool.doom_loop.title": "حلقة الموت",
"settings.permissions.tool.doom_loop.description": "اكتشاف استدعاءات الأدوات المتكررة بمدخلات متطابقة",
"session.delete.failed.title": "فشل حذف الجلسة",
"session.delete.title": "حذف الجلسة",
@@ -911,7 +895,7 @@ export const dict = {
"session.delete.button": "حذف الجلسة",
"workspace.new": "مساحة عمل جديدة",
"workspace.type.local": "محلي",
"workspace.type.sandbox": "بيئة معزولة",
"workspace.type.sandbox": "صندوق رمل",
"workspace.create.failed.title": "فشل إنشاء مساحة العمل",
"workspace.delete.failed.title": "فشل حذف مساحة العمل",
"workspace.resetting.title": "إعادة تعيين مساحة العمل",
@@ -921,7 +905,7 @@ export const dict = {
"workspace.reset.success.description": "مساحة العمل تطابق الآن الفرع الافتراضي.",
"workspace.error.stillPreparing": "مساحة العمل لا تزال قيد الإعداد",
"workspace.status.checking": "التحقق من التغييرات غير المدمجة...",
"workspace.status.error": "تعذر التحقق من حالة Git.",
"workspace.status.error": "تعذر التحقق من حالة git.",
"workspace.status.clean": "لم يتم اكتشاف تغييرات غير مدمجة.",
"workspace.status.dirty": "تم اكتشاف تغييرات غير مدمجة في مساحة العمل هذه.",
"workspace.delete.title": "حذف مساحة العمل",
@@ -937,7 +921,7 @@ export const dict = {
"common.open": "فتح",
"dialog.releaseNotes.action.getStarted": "البدء",
"dialog.releaseNotes.action.next": "التالي",
"dialog.releaseNotes.action.hideFuture": "عدم إظهارها مستقبلاً",
"dialog.releaseNotes.action.hideFuture": "عدم إظهار هذا في المستقبل",
"dialog.releaseNotes.media.alt": "معاينة الإصدار",
"toast.project.reloadFailed.title": "فشل في إعادة تحميل {{project}}",
"error.server.invalidConfiguration": "تكوين غير صالح",
@@ -947,25 +931,22 @@ export const dict = {
"common.time.hoursAgo.short": "قبل {{count}} س",
"common.time.daysAgo.short": "قبل {{count}} ي",
"settings.providers.connected.environmentDescription": "متصل من متغيرات البيئة الخاصة بك",
"settings.providers.custom.description": "أضف موفرًا متوافقًا مع OpenAI باستخدام عنوان URL الأساسي.",
"settings.providers.custom.description": "أضف مزود متوافق مع OpenAI بواسطة عنوان URL الأساسي.",
"app.server.unreachable": "تعذر الوصول إلى {{server}}",
"app.server.retrying": "جارٍ إعادة المحاولة تلقائيًا...",
"app.server.retrying": "جاري إعادة المحاولة تلقائيًا...",
"app.server.otherServers": "خوادم أخرى",
"dialog.server.add.usernamePlaceholder": "اسم المستخدم",
"dialog.server.add.passwordPlaceholder": "كلمة المرور",
"server.row.noUsername": "لا يوجد اسم مستخدم",
"session.review.noVcs.createGit.title": "إنشاء مستودع Git",
"session.review.noVcs.createGit.description": "تتبع ومراجعة والتراجع عن التغييرات في هذا المشروع",
"session.review.noVcs.createGit.actionLoading": "جارٍ إنشاء مستودع Git...",
"session.review.noVcs.createGit.actionLoading": "جاري إنشاء مستودع Git...",
"session.review.noVcs.createGit.action": "إنشاء مستودع Git",
"session.todo.progress": "تم إكمال {{done}} من {{total}} مهام",
"session.question.progress": "{{current}} من {{total}} أسئلة",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "مستكشف الملفات",
"session.header.reveal.finder": "إظهار في Finder",
"session.header.reveal.fileExplorer": "إظهار في مستكشف الملفات",
"session.header.reveal.containingFolder": "فتح المجلد الحاوي",
"session.header.open.fileManager": "مدير الملفات",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
@@ -983,9 +964,9 @@ export const dict = {
"debugBar.ariaLabel": "تشخيص أداء التطوير",
"debugBar.na": "غير متاح",
"debugBar.nav.label": "NAV",
"debugBar.nav.tip": "آخر انتقال مكتمل للمسار يتضمن صفحة جلسة، مُقاسًا من بدء التوجيه حتى أول رسم بعد استقراره.",
"debugBar.nav.tip": "آخر انتقال مكتمل للمسار يمس صفحة جلسة، مُقاسًا من بدء التوجيه حتى أول رسم بعد استقراره.",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "متوسط متحرك لمعدل الإطارات في الثانية خلال آخر 5 ثوانٍ.",
"debugBar.fps.tip": "الإطارات المتجددة في الثانية خلال آخر 5 ثوانٍ.",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "أسوأ وقت للإطار خلال آخر 5 ثوانٍ.",
"debugBar.jank.label": "JANK",
@@ -997,7 +978,7 @@ export const dict = {
"debugBar.inp.label": "INP",
"debugBar.inp.tip": "مدة التفاعل التقريبية خلال آخر 5 ثوانٍ. هذا يشبه INP، وليس Web Vitals INP الرسمي.",
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "التحول التخطيطي التراكمي منذ تشغيل التطبيق الحالي.",
"debugBar.cls.tip": "التحول التخطيطي التراكمي لعمر التطبيق الحالي.",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "كومة JS المستخدمة مقابل حد الكومة. Chromium فقط.",
"debugBar.mem.tip": "كومة JS المستخدمة مقابل حد الكومة. {{used}} من {{limit}}.",
@@ -1016,7 +997,7 @@ export const dict = {
"common.key.pageDown": "Page Down",
"common.key.insert": "Insert",
"common.unknown": "غير معروف",
"error.page.circular": "[مرجع دائري]",
"error.page.circular": "[دائري]",
"error.serverSDK.noServerAvailable": "لا يوجد خادم متاح",
"error.serverSDK.serverNotAvailable": "الخادم غير متاح",
"error.childStore.persistedCacheCreateFailed": "فشل إنشاء ذاكرة التخزين المؤقت الدائمة",
-1029
View File
@@ -1,1029 +0,0 @@
export const dict = {
"command.category.suggested": "Təklif olunan",
"command.category.view": "Görünüş",
"command.category.project": "Layihə",
"command.category.provider": "Provayder",
"command.category.server": "Server",
"command.category.session": "Sessiya",
"command.category.theme": "Mövzu",
"command.category.language": "Dil",
"command.category.file": "Fayl",
"command.category.context": "Kontekst",
"command.category.terminal": "Terminal",
"command.category.model": "Model",
"command.category.mcp": "MCP",
"command.category.agent": "Agent",
"command.category.permissions": "İcazələr",
"command.category.workspace": "İş sahəsi",
"command.category.settings": "Tənzimləmələr",
"theme.scheme.system": "Sistem",
"theme.scheme.light": "Açıq",
"theme.scheme.dark": "Tünd",
"command.sidebar.toggle": "Yan paneli aç/bağla",
"command.project.open": "Layihəni aç",
"command.project.previous": "Əvvəlki layihə",
"command.project.next": "Növbəti layihə",
"command.project.index": "{{index}} nömrəli layihəyə keç",
"command.provider.connect": "Provayderi qoş",
"command.server.switch": "Serveri dəyiş",
"command.settings.open": "Tənzimləmələri aç",
"command.session.previous": "Əvvəlki sessiya",
"command.session.next": "Növbəti sessiya",
"command.session.previous.unseen": "Əvvəlki oxunmamış sessiya",
"command.session.next.unseen": "Növbəti oxunmamış sessiya",
"command.session.archive": "Sessiyanı arxivlə",
"command.palette": "Əmr paneli",
"command.theme.cycle": "Mövzunu dəyiş",
"command.theme.set": "Mövzudan istifadə et: {{theme}}",
"command.theme.scheme.cycle": "Rəng sxemini dəyiş",
"command.theme.scheme.set": "Rəng sxemindən istifadə et: {{scheme}}",
"command.language.cycle": "Dili dəyiş",
"command.language.set": "Dildən istifadə et: {{language}}",
"command.session.new": "Yeni sessiya",
"command.file.open": "Faylı aç",
"command.tab.close": "Tabı bağla",
"command.tab.reopenClosed": "Bağlanmış tabı yenidən aç",
"command.context.addSelection": "Seçimi kontekstə əlavə et",
"command.context.addSelection.description": "Cari fayldan seçilmiş sətirləri əlavə et",
"command.input.focus": "Giriş sahəsinə fokusla",
"command.terminal.toggle": "Terminalı aç/bağla",
"command.fileTree.toggle": "Fayl ağacını aç/bağla",
"command.review.toggle": "İcmalı aç/bağla",
"command.terminal.new": "Yeni terminal",
"command.terminal.new.description": "Yeni terminal tabı yarat",
"command.steps.toggle": "Addımları aç/bağla",
"command.steps.toggle.description": "Cari mesaj üçün addımları göstər və ya gizlət",
"command.message.previous": "Əvvəlki mesaj",
"command.message.previous.description": "Əvvəlki istifadəçi mesajına keç",
"command.message.next": "Növbəti mesaj",
"command.message.next.description": "Növbəti istifadəçi mesajına keç",
"command.model.choose": "Model seç",
"command.model.choose.description": "Fərqli model seç",
"command.mcp.toggle": "MCP-ləri aç/bağla",
"command.mcp.toggle.description": "MCP-ləri aç/bağla",
"command.agent.cycle": "Agenti dəyiş",
"command.agent.cycle.description": "Növbəti agentə keç",
"command.agent.cycle.reverse": "Agenti geri dəyiş",
"command.agent.cycle.reverse.description": "Əvvəlki agentə keç",
"command.model.variant.cycle": "Düşünmə səviyyəsini dəyiş",
"command.model.variant.cycle.description": "Növbəti səviyyəyə keç",
"command.prompt.mode.shell": "Shell",
"command.prompt.mode.normal": "Prompt",
"command.permissions.autoaccept.enable": "İcazələri avtomatik qəbul et",
"command.permissions.autoaccept.disable": "İcazələrin avtomatik qəbulunu dayandır",
"command.workspace.toggle": "İş sahələrini aç/bağla",
"command.workspace.toggle.description": "Yan paneldə birdən çox iş sahəsini aktiv və ya deaktiv et",
"command.session.undo": "Geri al",
"command.session.undo.description": "Son mesajı geri al",
"command.session.redo": "Yenidən et",
"command.session.redo.description": "Son geri alınmış mesajı yenidən et",
"command.session.compact": "Sessiyanı sıxlaşdır",
"command.session.compact.description": "Kontekst həcmini azaltmaq üçün sessiyanı xülasə et",
"command.session.fork": "Mesajdan fork et",
"command.session.fork.description": "Əvvəlki mesajdan yeni sessiya yarat",
"command.session.share": "Sessiyanı paylaş",
"command.session.share.description": "Bu sessiyanı paylaş və URL-ni buferə kopyala",
"command.session.unshare": "Sessiyanın paylaşımını dayandır",
"command.session.unshare.description": "Bu sessiyanın paylaşımını dayandır",
"palette.search.placeholder": "Fayl, əmr və sessiya axtar",
"palette.search.placeholder.home": "Əmr və sessiyaları axtar",
"palette.empty": "Nəticə tapılmadı",
"palette.group.commands": "Əmrlər",
"palette.group.files": "Fayllar",
"dialog.provider.search.placeholder": "Provayderləri axtar",
"dialog.provider.empty": "Provayder tapılmadı",
"dialog.provider.group.popular": "Populyar",
"dialog.provider.group.other": "Digər",
"dialog.provider.custom.label": "Xüsusi OpenAI-a uyğun provayder",
"dialog.provider.tag.recommended": "Tövsiyə olunan",
"dialog.provider.opencode.note": "Claude, GPT, Gemini və daha çoxu daxil olmaqla seçilmiş modellər",
"dialog.provider.opencode.tagline": "Etibarlı optimallaşdırılmış modellər",
"dialog.provider.opencodeGo.tagline": "Hamı üçün aşağı qiymətli abunəlik",
"dialog.provider.anthropic.note": "Pro və Max daxil olmaqla Claude modellərinə birbaşa giriş",
"dialog.provider.copilot.note": "GitHub Copilot vasitəsilə kodlaşdırma yardımı üçün AI modelləri",
"dialog.provider.openai.note": "Sürətli və bacarıqlı ümumi AI tapşırıqları üçün GPT modelləri",
"dialog.provider.google.note": "Sürətli, strukturlaşdırılmış cavablar üçün Gemini modelləri",
"dialog.provider.openrouter.note": "Bir provayderdən bütün dəstəklənən modellərə giriş",
"dialog.provider.vercel.note": "Ağıllı yönləndirmə ilə AI modellərinə vahid giriş",
"dialog.model.select.title": "Model seç",
"dialog.model.search.placeholder": "Modelləri axtar",
"dialog.model.empty": "Model nəticəsi yoxdur",
"dialog.model.manage": "Modelləri idarə et",
"dialog.model.manage.description": "Model seçicisində hansı modellərin görünəcəyini fərdiləşdir.",
"dialog.model.manage.provider.toggle": "Bütün {{provider}} modellərini aç/bağla",
"dialog.model.unpaid.freeModels.title": "OpenCode tərəfindən təqdim olunan pulsuz modellər",
"dialog.model.unpaid.addMore.title": "Populyar provayderlərdən daha çox model əlavə edin",
"dialog.model.unpaid.viewMoreProviders": "Daha 70+ provayderə baxın",
"dialog.provider.viewAll": "Daha çox provayder göstər",
"provider.connect.title": "{{provider}} provayderini qoş",
"provider.connect.title.anthropicProMax": "Claude Pro/Max ilə daxil ol",
"provider.connect.selectMethod": "{{provider}} üçün giriş üsulunu seçin.",
"provider.connect.method.apiKey": "API açarı",
"provider.connect.status.inProgress": "Avtorizasiya davam edir...",
"provider.connect.status.waiting": "Avtorizasiya gözlənilir...",
"provider.connect.status.failed": "Avtorizasiya uğursuz oldu: {{error}}",
"provider.connect.apiKey.description":
"Hesabınızı qoşmaq və OpenCode-da {{provider}} modellərindən istifadə etmək üçün {{provider}} API açarınızı daxil edin.",
"provider.connect.apiKey.label": "{{provider}} API açarı",
"provider.connect.apiKey.placeholder": "API açarı",
"provider.connect.apiKey.required": "API açarı tələb olunur",
"provider.connect.opencodeZen.line1":
"OpenCode Zen sizə kodlaşdırma agentləri üçün etibarlı optimallaşdırılmış seçilmiş modellər dəstinə giriş verir.",
"provider.connect.opencodeZen.line2":
"Tək bir API açarı ilə Claude, GPT, Gemini, GLM və daha çox modellərə giriş əldə edəcəksiniz.",
"provider.connect.opencodeZen.visit.prefix": "",
"provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
"provider.connect.opencodeZen.visit.suffix": " səhifəsinə daxil olub API açarınızı əldə edin.",
"provider.connect.oauth.code.visit.prefix": "",
"provider.connect.oauth.code.visit.link": "Bu linkə",
"provider.connect.oauth.code.visit.suffix":
" daxil olub hesabınızı qoşmaq və OpenCode-da {{provider}} modellərindən istifadə etmək üçün avtorizasiya kodunuzu əldə edin.",
"provider.connect.oauth.code.label": "{{method}} avtorizasiya kodu",
"provider.connect.oauth.code.placeholder": "Avtorizasiya kodu",
"provider.connect.oauth.code.required": "Avtorizasiya kodu tələb olunur",
"provider.connect.oauth.code.invalid": "Yanlış avtorizasiya kodu",
"provider.connect.oauth.auto.visit.prefix": "",
"provider.connect.oauth.auto.visit.link": "Bu linkə",
"provider.connect.oauth.auto.visit.suffix":
" daxil olub aşağıdakı kodu daxil edərək hesabınızı qoşun və OpenCode-da {{provider}} modellərindən istifadə edin.",
"provider.connect.oauth.auto.confirmationCode": "Təsdiq kodu",
"provider.connect.toast.connected.title": "{{provider}} qoşuldu",
"provider.connect.toast.connected.description": "{{provider}} modelləri artıq istifadə üçün mövcuddur.",
"provider.custom.title": "Fərdi provayder",
"provider.custom.description.prefix": "OpenAI ilə uyğun provayderi konfiqurasiya edin. ",
"provider.custom.description.link": "Provayder konfiqurasiyası sənədləri",
"provider.custom.description.suffix": "nə baxın.",
"provider.custom.field.providerID.label": "Provayder ID",
"provider.custom.field.providerID.placeholder": "myprovider",
"provider.custom.field.providerID.description": "Kiçik hərflər, rəqəmlər, tire və ya alt xətt",
"provider.custom.field.name.label": "Görünən ad",
"provider.custom.field.name.placeholder": "Mənim AI Provayderim",
"provider.custom.field.baseURL.label": "Əsas URL",
"provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1",
"provider.custom.field.apiKey.label": "API açarı",
"provider.custom.field.apiKey.placeholder": "API açarı",
"provider.custom.field.apiKey.description":
"İstəyə bağlıdır. Autentifikasiyanı başlıqlar vasitəsilə idarə edirsinizsə, boş buraxın.",
"provider.custom.models.label": "Modellər",
"provider.custom.models.id.label": "ID",
"provider.custom.models.id.placeholder": "model-id",
"provider.custom.models.name.label": "Ad",
"provider.custom.models.name.placeholder": "Görünən ad",
"provider.custom.models.remove": "Modeli sil",
"provider.custom.models.add": "Model əlavə et",
"provider.custom.headers.label": "Başlıqlar (istəyə bağlı)",
"provider.custom.headers.key.label": "Başlıq",
"provider.custom.headers.key.placeholder": "Başlıq-Adı",
"provider.custom.headers.value.label": "Dəyər",
"provider.custom.headers.value.placeholder": "dəyər",
"provider.custom.headers.remove": "Başlığı sil",
"provider.custom.headers.add": "Başlıq əlavə et",
"provider.custom.error.providerID.required": "Provayder ID tələb olunur",
"provider.custom.error.providerID.format": "Kiçik hərflər, rəqəmlər, tire və ya alt xətt istifadə edin",
"provider.custom.error.providerID.exists": "Bu provayder ID artıq mövcuddur",
"provider.custom.error.name.required": "Görünən ad tələb olunur",
"provider.custom.error.baseURL.required": "Əsas URL tələb olunur",
"provider.custom.error.baseURL.format": "http:// və ya https:// ilə başlamalıdır",
"provider.custom.error.required": "Tələb olunur",
"provider.custom.error.duplicate": "Təkrar",
"provider.disconnect.toast.disconnected.title": "{{provider}} ayrıldı",
"provider.disconnect.toast.disconnected.description": "{{provider}} modelləri artıq mövcud deyil.",
"model.tag.free": "Pulsuz",
"model.tag.latest": "Ən son",
"model.provider.anthropic": "Anthropic",
"model.provider.openai": "OpenAI",
"model.provider.google": "Google",
"model.provider.xai": "xAI",
"model.provider.meta": "Meta",
"model.input.text": "mətn",
"model.input.image": "şəkil",
"model.input.audio": "səs",
"model.input.video": "video",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Dəstəkləyir: {{inputs}}",
"model.tooltip.context.label": "Kontekst",
"model.tooltip.inputs": "Girişlər",
"model.tooltip.model": "Model",
"model.tooltip.provider": "Provayder",
"model.tooltip.reasoning": "Düşünmə",
"model.tooltip.reasoning.allowed": "Düşünməni dəstəkləyir",
"model.tooltip.reasoning.none": "Düşünmə yoxdur",
"model.tooltip.context": "Kontekst limiti {{limit}}",
"common.search.placeholder": "Axtar",
"common.goBack": "Geri keç",
"common.goForward": "İrəli keç",
"common.loading": "Yüklənir",
"common.loading.ellipsis": "...",
"common.cancel": "Ləğv et",
"common.clear": "Təmizlə",
"common.open": "Aç",
"common.connect": "Qoş",
"common.disconnect": "Ayır",
"common.continue": "Davam et",
"common.submit": "Göndər",
"common.save": "Saxla",
"common.saving": "Saxlanılır...",
"common.default": "Standart",
"common.attachment": "əlavə",
"prompt.placeholder.shell": "Qabıq əmrini daxil edin... {{example}}",
"prompt.placeholder.normal": 'Nə istəsəniz soruşun... "{{example}}"',
"prompt.placeholder.simple": "Nə istəsəniz soruşun...",
"prompt.placeholder.summarizeComments": "Şərhləri xülasə et…",
"prompt.placeholder.summarizeComment": "Şərhi xülasə et…",
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "çıxmaq üçün esc",
"session.child.promptDisabled": "Alt agent sessiyalarına prompt göndərmək olmaz.",
"session.child.backToParent": "Əsas sessiyaya qayıt.",
"prompt.example.1": "Kod bazasında TODO-nu həll et",
"prompt.example.2": "Bu layihənin texnologiya yığını nədir?",
"prompt.example.3": "Xətalı testləri düzəlt",
"prompt.example.4": "Autentifikasiyanın necə işlədiyini izah et",
"prompt.example.5": "Təhlükəsizlik boşluqlarını tap və düzəlt",
"prompt.example.6": "İstifadəçi xidməti üçün vahid testləri əlavə et",
"prompt.example.7": "Bu funksiyanı daha oxunaqlı hala gətir",
"prompt.example.8": "Bu xəta nə deməkdir?",
"prompt.example.9": "Bu problemi sazlamağa kömək et",
"prompt.example.10": "API sənədləri yarat",
"prompt.example.11": "Verilənlər bazası sorğularını optimallaşdır",
"prompt.example.12": "Giriş doğrulaması əlavə et",
"prompt.example.13": "Bunun üçün yeni komponent yarat...",
"prompt.example.14": "Bu layihəni necə yerləşdirə bilərəm?",
"prompt.example.15": "Kodumu qabaqcıl təcrübələr baxımından nəzərdən keçir",
"prompt.example.16": "Bu funksiyaya xəta idarəetməsi əlavə et",
"prompt.example.17": "Bu regex nümunəsini izah et",
"prompt.example.18": "Bunu TypeScript-ə çevir",
"prompt.example.19": "Bütün kod bazasına jurnallaşdırma əlavə et",
"prompt.example.20": "Hansı asılılıqlar köhnəlib?",
"prompt.example.21": "Miqrasiya skripti yazmağıma kömək et",
"prompt.example.22": "Bu endpoint üçün keşləmə tətbiq et",
"prompt.example.23": "Bu siyahıya səhifələmə əlavə et",
"prompt.example.24": "Bunun üçün CLI əmri yarat...",
"prompt.example.25": "Burada mühit dəyişənləri necə işləyir?",
"prompt.popover.emptyResults": "Uyğun nəticə yoxdur",
"prompt.popover.emptyCommands": "Uyğun əmr yoxdur",
"prompt.dropzone.label": "Şəkilləri, PDF-ləri və ya mətn fayllarını bura buraxın",
"prompt.dropzone.file.label": "Faylı @ ilə qeyd etmək üçün buraxın",
"prompt.slash.badge.custom": "fərdi",
"prompt.slash.badge.skill": "bacarıq",
"prompt.slash.badge.mcp": "mcp",
"prompt.context.active": "aktiv",
"prompt.context.includeActiveFile": "Aktiv faylı daxil et",
"prompt.context.removeActiveFile": "Aktiv faylı kontekstdən sil",
"prompt.context.removeFile": "Faylı kontekstdən sil",
"prompt.action.attachFile": "Fayllar əlavə et",
"prompt.menu.addImagesAndFiles": "Fayllar və daha çox əlavə edin",
"prompt.menu.imagesAndFiles": "Şəkillər və fayllar",
"prompt.menu.commands": "Əmrlər",
"prompt.menu.context": "Kontekst",
"prompt.menu.shellCommand": "Shell əmri",
"prompt.attachment.remove": "Əlavəni sil",
"prompt.action.send": "Göndər",
"prompt.action.stop": "Dayandır",
"prompt.toast.pasteUnsupported.title": "Dəstəklənməyən əlavə",
"prompt.toast.pasteUnsupported.description": "Buraya yalnız şəkillər, PDF-lər və ya mətn faylları əlavə edilə bilər.",
"prompt.toast.attachmentDuplicate.title": "Bu fayl artıq yüklənib",
"prompt.toast.modelAgentRequired.title": "Agent və model seçin",
"prompt.toast.modelAgentRequired.description": "Prompt göndərməzdən əvvəl agent və model seçin.",
"prompt.toast.worktreeCreateFailed.title": "Worktree yaradıla bilmədi",
"prompt.toast.sessionCreateFailed.title": "Sessiya yaradıla bilmədi",
"prompt.toast.shellSendFailed.title": "Shell əmri göndərilə bilmədi",
"prompt.toast.commandSendFailed.title": "Əmr göndərilə bilmədi",
"prompt.toast.promptSendFailed.title": "Prompt göndərilə bilmədi",
"prompt.toast.promptSendFailed.description": "Sessiya əldə edilə bilmədi",
"dialog.mcp.title": "MCP-lər",
"dialog.mcp.description": "{{total}}-dən {{enabled}} aktiv",
"dialog.mcp.empty": "MCP konfiqurasiya edilməyib",
"dialog.lsp.empty": "LSP-lər fayl növlərindən avtomatik aşkarlanır",
"dialog.plugins.empty": "Plaginlər opencode.json-da konfiqurasiya edilib",
"mcp.status.connected": "qoşulub",
"mcp.status.failed": "uğursuz",
"mcp.status.needs_auth": "avtorizasiya lazımdır",
"mcp.status.disabled": "deaktiv",
"mcp.auth.clickToAuthenticate": "Autentifikasiya üçün klikləyin",
"dialog.fork.empty": "Yeni sessiyaya ayırmaq üçün mesaj yoxdur",
"dialog.directory.search.placeholder": "Qovluqları axtar",
"dialog.directory.empty": "Qovluq tapılmadı",
"dialog.directory.action.selectFile": "Fayl seçin",
"dialog.directory.action.selectFolder": "Qovluğu seçin",
"dialog.directory.root": "Kök",
"dialog.directory.parent": "Üst qovluq",
"dialog.directory.readError": "Bu qovluğu oxumaq mümkün deyil",
"app.server.unreachable": "{{server}}-ə çatmaq mümkün olmadı",
"app.server.retrying": "Avtomatik olaraq yenidən cəhd edilir...",
"app.server.otherServers": "Digər serverlər",
"dialog.server.title": "Serverlər",
"dialog.server.description": "Bu tətbiqin qoşulduğu OpenCode serverini dəyişdirin.",
"dialog.server.search.placeholder": "Serverləri axtar",
"dialog.server.empty": "Hələ server yoxdur",
"dialog.server.add.title": "Server əlavə et",
"dialog.server.add.url": "Server ünvanı",
"dialog.server.add.placeholder": "http://localhost:4096",
"dialog.server.add.error": "Serverə qoşulmaq mümkün olmadı",
"dialog.server.add.checking": "Yoxlanılır...",
"dialog.server.add.button": "Server əlavə et",
"dialog.server.add.name": "Server adı (istəyə bağlı)",
"dialog.server.add.namePlaceholder": "Localhost",
"dialog.server.add.username": "İstifadəçi adı (istəyə bağlı)",
"dialog.server.add.usernamePlaceholder": "istifadəçi adı",
"dialog.server.add.password": "Şifrə (istəyə bağlı)",
"dialog.server.add.passwordPlaceholder": "parol",
"dialog.server.edit.title": "Serveri redaktə et",
"dialog.server.default.title": "Standart server",
"dialog.server.default.description":
"Tətbiq açıldıqda yerli server başlatmaq əvəzinə bu serverə qoşulun. Yenidən başlatma tələb olunur.",
"dialog.server.default.none": "Server seçilməyib",
"dialog.server.default.set": "Cari serveri standart olaraq təyin et",
"dialog.server.default.clear": "Təmizlə",
"dialog.server.action.remove": "Serveri sil",
"dialog.server.menu.edit": "Redaktə et",
"dialog.server.menu.default": "Standart olaraq təyin et",
"dialog.server.menu.defaultRemove": "Standartı sil",
"dialog.server.menu.delete": "Sil",
"dialog.server.current": "Cari server",
"dialog.server.status.default": "Standart",
"wsl.server.add": "WSL server əlavə edin",
"wsl.server.addShort": "WSL əlavə edin",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "WSL server",
"wsl.server.retryStart": "Yenidən başlamağa cəhd edin",
"wsl.server.updating": "Yenilənir...",
"wsl.onboarding.step.distro": "Distribütiv seçin",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "WSL yoxlanılır...",
"wsl.onboarding.restartRequired":
"WSL-nin quraşdırılmasını başa çatdırmaq üçün Windows-un yenidən başlaması lazımdır.",
"wsl.onboarding.ready": "WSL hazırdır.",
"wsl.onboarding.required": "Davam etmək üçün WSL tələb olunur.",
"wsl.onboarding.checkingDistros": "Distribütivlər yoxlanılır...",
"wsl.onboarding.installingDistro": "{{distro}} quraşdırılır...",
"wsl.onboarding.checkingDistro": "{{distro}} yoxlanılır...",
"wsl.onboarding.listingDistros": "Distribütivlər siyahılanır...",
"wsl.onboarding.distroReady": "{{distro}} hazırdır.",
"wsl.onboarding.distroNotInstalled": "{{distro}} hələ quraşdırılmayıb.",
"wsl.onboarding.openDistroOnce": "Quraşdırmanı bitirmək üçün {{distro}}-ni bir dəfə açın.",
"wsl.onboarding.finishingDistro": "{{distro}} üçün quraşdırma tamamlanır.",
"wsl.onboarding.pickDistro": "Distribütiv seçin və ya aşağıdakılardan birini quraşdırın.",
"wsl.onboarding.checkingOpencode": "OpenCode yoxlanılır...",
"wsl.onboarding.checkingOpencodeIn": "{{distro}}-də OpenCode yoxlanılır...",
"wsl.onboarding.updatingOpencode": "OpenCode yenilənir...",
"wsl.onboarding.updatingOpencodeIn": "{{distro}}-də OpenCode yenilənir...",
"wsl.onboarding.updateOpencodeIn": "{{distro}}-də OpenCode-u yeniləyin.",
"wsl.onboarding.updateOpencode": "OpenCode-u yeniləyin",
"wsl.onboarding.opencodeReadyIn": "OpenCode {{distro}}-də hazırdır.",
"wsl.onboarding.opencodeReady": "OpenCode hazırdır.",
"wsl.onboarding.installOpencodeIn": "OpenCode-u {{distro}}-də quraşdırın.",
"wsl.onboarding.installOpencode": "OpenCode quraşdırın",
"wsl.onboarding.chooseDistroFirst": "Əvvəlcə distribütiv seçin.",
"wsl.onboarding.loadFailed": "WSL vəziyyətini yükləmək alınmadı.",
"wsl.onboarding.loading": "Yüklənir...",
"wsl.onboarding.installedDistros": "Quraşdırılmış distribütivlər",
"wsl.onboarding.checkAgain": "Yenidən yoxlayın",
"wsl.onboarding.distroStatus.ready": "Hazır",
"wsl.onboarding.distroStatus.checking": "Yoxlanır...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode quraşdırılmayıb",
"wsl.onboarding.distroStatus.missingTools": "Çatışmayan bash, curl",
"wsl.onboarding.distroStatus.unsupported": "Dəstəklənmir · WSL 2 istifadə edin",
"wsl.onboarding.needAnotherDistro": "Başqa distribütiv lazımdır?",
"wsl.onboarding.needAnotherDistroHint": "WSL kataloqundan Linux paylamasını quraşdırın",
"wsl.onboarding.wslNotInstalled.title": "WSL quraşdırılmayıb",
"wsl.onboarding.wslNotInstalled.description":
"OpenCode WSL serveri əlavə etməzdən əvvəl WSL (Linux üçün Windows alt sistemi) tələb olunur",
"wsl.onboarding.wslUnavailable.title": "WSL mövcud deyil",
"wsl.onboarding.wslUnavailable.description": "OpenCode bu maşında WSL-i doğrulaya bilmədi.",
"wsl.onboarding.installWsl": "WSL quraşdırın",
"wsl.onboarding.windowsRestartRequired":
"WSL-nin quraşdırılmasını başa çatdırmaq üçün Windows-u yenidən başladın, sonra OpenCode-u yenidən açın.",
"wsl.onboarding.next": "Növbəti",
"wsl.onboarding.refresh": "Yeniləyin",
"wsl.onboarding.allDistrosAdded": "Bütün quraşdırılmış distribütivlər artıq əlavə edilib.",
"wsl.onboarding.noDistros": "Hələ distribütiv aşkarlanmayıb.",
"wsl.onboarding.install": "Quraşdırın",
"wsl.onboarding.installing": "Quraşdırılır...",
"wsl.onboarding.installDistro": "Distribütiv quraşdırın",
"wsl.onboarding.searchDistros": "Distribütivləri axtar",
"wsl.onboarding.wsl2Required": "WSL 2 tələb olunur.",
"wsl.onboarding.toolsRequired": "Bu distribütiv üçün bash və curl tələb olunur.",
"wsl.onboarding.openTerminal": "Terminalı aç",
"wsl.onboarding.path": "Yol: {{path}}",
"wsl.onboarding.notFound": "tapılmadı",
"wsl.onboarding.version": "Versiya: {{version}}",
"wsl.onboarding.unknown": "naməlum",
"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...",
"server.row.noUsername": "istifadəçi adı yoxdur",
"dialog.project.edit.title": "Layihəni redaktə et",
"dialog.project.edit.name": "Ad",
"dialog.project.edit.icon": "İkon",
"dialog.project.edit.icon.alt": "Layihə ikonu",
"dialog.project.edit.icon.hint": "Şəkilə klikləyin və ya onu sürükləyin",
"dialog.project.edit.icon.recommended": "Tövsiyə: 128x128px",
"dialog.project.edit.color": "Rəng",
"dialog.project.edit.color.select": "{{color}} rəngini seçin",
"dialog.project.edit.worktree.startup": "İş sahəsi başlanğıc skripti",
"dialog.project.edit.worktree.startup.description": "Yeni iş sahəsi (worktree) yaradıldıqdan sonra işləyir.",
"dialog.project.edit.worktree.startup.placeholder": "məs. bun install",
"dialog.releaseNotes.action.getStarted": "Başla",
"dialog.releaseNotes.action.next": "Növbəti",
"dialog.releaseNotes.action.hideFuture": "Gələcəkdə göstərmə",
"dialog.releaseNotes.media.alt": "Buraxılış önbaxışı",
"context.breakdown.title": "Kontekst bölgüsü",
"context.breakdown.note": 'Giriş tokenlərinin təxmini bölgüsü. "Digər" alət təriflərini və əlavə yükü əhatə edir.',
"context.breakdown.system": "Sistem",
"context.breakdown.user": "İstifadəçi",
"context.breakdown.assistant": "Köməkçi",
"context.breakdown.tool": "Alət çağırışları",
"context.breakdown.other": "Digər",
"context.systemPrompt.title": "Sistem promptu",
"context.rawMessages.title": "Xam mesajlar",
"context.stats.session": "Sessiya",
"context.stats.messages": "Mesajlar",
"context.stats.provider": "Provayder",
"context.stats.model": "Model",
"context.stats.limit": "Kontekst limiti",
"context.stats.totalTokens": "Ümumi tokenlər",
"context.stats.usage": "İstifadə",
"context.stats.inputTokens": "Giriş tokenləri",
"context.stats.outputTokens": "Çıxış tokenləri",
"context.stats.reasoningTokens": "Düşünmə tokenləri",
"context.stats.cacheTokens": "Keş tokenləri (oxuma/yazma)",
"context.stats.userMessages": "İstifadəçi mesajları",
"context.stats.assistantMessages": "Köməkçi mesajları",
"context.stats.totalCost": "Ümumi xərc",
"context.stats.sessionCreated": "Sessiya yaradıldı",
"context.stats.lastActivity": "Son fəaliyyət",
"context.usage.tokens": "Tokenlər",
"context.usage.usage": "İstifadə",
"context.usage.cost": "Xərc",
"context.usage.clickToView": "Kontekstə baxmaq üçün klikləyin",
"context.usage.view": "Kontekst istifadəsinə bax",
"language.en": "English",
"language.zh": "简体中文",
"language.zht": "繁體中文",
"language.ko": "한국어",
"language.de": "Deutsch",
"language.es": "Español",
"language.fr": "Français",
"language.da": "Dansk",
"language.ja": "日本語",
"language.pl": "Polski",
"language.ru": "Русский",
"language.ar": "العربية",
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
"toast.language.title": "Dil",
"toast.language.description": "{{language}} dilinə keçildi",
"toast.theme.title": "Mövzu dəyişdirildi",
"toast.scheme.title": "Rəng sxemi",
"toast.workspace.enabled.title": "İş sahələri aktivləşdirildi",
"toast.workspace.enabled.description": "Birdən çox worktree indi yan paneldə göstərilir",
"toast.workspace.disabled.title": "İş sahələri deaktiv edildi",
"toast.workspace.disabled.description": "Yan paneldə yalnız əsas worktree göstərilir",
"toast.permissions.autoaccept.on.title": "İcazələr avtomatik qəbul edilir",
"toast.permissions.autoaccept.on.description": "İcazə sorğuları avtomatik təsdiqlənəcək",
"toast.permissions.autoaccept.off.title": "İcazələrin avtomatik qəbulu dayandırıldı",
"toast.permissions.autoaccept.off.description": "İcazə sorğuları təsdiq tələb edəcək",
"toast.model.none.title": "Model seçilməyib",
"toast.model.none.description": "Bu sessiyanı xülasə etmək üçün provayder qoşun",
"toast.file.loadFailed.title": "Fayl yüklənə bilmədi",
"toast.file.listFailed.title": "Fayllar siyahılana bilmədi",
"toast.context.noLineSelection.title": "Sətir seçimi yoxdur",
"toast.context.noLineSelection.description": "Əvvəlcə fayl tabında sətir aralığı seçin.",
"toast.session.share.copyFailed.title": "URL buferə kopyalana bilmədi",
"toast.session.share.success.title": "Sessiya paylaşıldı",
"toast.session.share.success.description": "Paylaşma URL-si buferə kopyalandı!",
"toast.session.share.failed.title": "Sessiya paylaşıla bilmədi",
"toast.session.share.failed.description": "Sessiyanı paylaşarkən xəta baş verdi",
"toast.session.unshare.success.title": "Sessiyanın paylaşımı dayandırıldı",
"toast.session.unshare.success.description": "Sessiyanın paylaşımı uğurla dayandırıldı!",
"toast.session.unshare.failed.title": "Sessiyanın paylaşımı dayandırıla bilmədi",
"toast.session.unshare.failed.description": "Sessiyanın paylaşımını dayandırarkən xəta baş verdi",
"toast.session.listFailed.title": "{{project}} üçün sessiyalar yüklənə bilmədi",
"toast.project.reloadFailed.title": "{{project}} yenidən yüklənə bilmədi",
"toast.update.title": "Yeniləmə mövcuddur",
"toast.update.description": "OpenCode-un yeni versiyası ({{version}}) quraşdırma üçün mövcuddur.",
"toast.update.action.installRestart": "Quraşdır və yenidən başlat",
"toast.update.action.notYet": "Hələ yox",
"error.page.title": "Xəta baş verdi",
"error.page.description": "Tətbiq yüklənərkən xəta baş verdi.",
"error.page.description.localServerStartup": "Lokal serveri işə salarkən xəta baş verdi.",
"error.page.details.label": "Xəta detalları",
"error.page.action.restart": "Yenidən başlat",
"error.page.action.report": "Xəta bildirin",
"error.page.action.reported": "Xəta bildirildi",
"error.page.action.exportLogs": "Qeydləri ixrac edin",
"error.page.action.checking": "Yoxlanılır...",
"error.page.action.checkUpdates": "Yeniləmələri yoxla",
"error.page.action.updateTo": "{{version}} versiyasına yenilə",
"error.page.circular": "[Dairəvi]",
"error.page.report.prefix": "Bu xətanı OpenCode komandasına",
"error.page.report.discord": "Discord-da bildirin",
"error.page.version": "Versiya: {{version}}",
"error.dev.rootNotFound":
"Kök element tapılmadı. index.html-ə əlavə etməyi unutmusunuz? Yoxsa id atributu səhv yazılıb?",
"error.serverSync.connectFailed": "Serverə qoşulmaq mümkün olmadı. `{{url}}`-də işləyən server varmı?",
"error.serverSDK.noServerAvailable": "Əlçatan server yoxdur",
"error.serverSDK.serverNotAvailable": "Server mövcud deyil",
"error.childStore.persistedCacheCreateFailed": "Qalıcı keş yaradıla bilmədi",
"error.childStore.persistedProjectMetadataCreateFailed": "Qalıcı layihə metadatası yaradıla bilmədi",
"error.childStore.persistedProjectIconCreateFailed": "Qalıcı layihə nişanı yaradıla bilmədi",
"error.childStore.storeCreateFailed": "Saxlanc yaradıla bilmədi",
"directory.error.invalidUrl": "URL-də yanlış qovluq.",
"error.chain.unknown": "Naməlum xəta",
"error.server.invalidConfiguration": "Yanlış konfiqurasiya",
"error.chain.causedBy": "Səbəb:",
"error.chain.apiError": "API xətası",
"error.chain.status": "Status: {{status}}",
"error.chain.retryable": "Təkrar cəhd mümkündür: {{retryable}}",
"error.chain.responseBody": "Cavab gövdəsi:\n{{body}}",
"error.chain.didYouMean": "Bunu nəzərdə tuturdunuz: {{suggestions}}",
"error.chain.modelNotFound": "Model tapılmadı: {{provider}}/{{model}}",
"error.chain.checkConfig": "Konfiqurasiyanızdakı (opencode.json) provayder/model adlarını yoxlayın",
"error.chain.mcpFailed":
'MCP server "{{name}}" uğursuz oldu. Qeyd: OpenCode hələ MCP autentifikasiyasını dəstəkləmir.',
"error.chain.providerAuthFailed": "Provayder autentifikasiyası uğursuz oldu ({{provider}}): {{message}}",
"error.chain.providerInitFailed":
'"{{provider}}" provayderinin işə salınması uğursuz oldu. Giriş məlumatlarını və konfiqurasiyanı yoxlayın.',
"error.chain.configJsonInvalid": "{{path}} ünvanındakı konfiqurasiya faylı etibarlı JSON(C) deyil",
"error.chain.configJsonInvalidWithMessage":
"{{path}} ünvanındakı konfiqurasiya faylı etibarlı JSON(C) deyil: {{message}}",
"error.chain.configDirectoryTypo":
'{{path}} içindəki "{{dir}}" qovluğu etibarlı deyil. Qovluğu "{{suggestion}}" adına dəyişdirin və ya silin. Bu ümumi bir yazım xətasıdır.',
"error.chain.configFrontmatterError": "{{path}} faylındakı frontmatter təhlil edilə bilmədi:\n{{message}}",
"error.chain.configInvalid": "{{path}} ünvanındakı konfiqurasiya faylı etibarsızdır",
"error.chain.configInvalidWithMessage": "{{path}} ünvanındakı konfiqurasiya faylı etibarsızdır: {{message}}",
"notification.permission.title": "İcazə tələb olunur",
"notification.permission.description": "{{projectName}} layihəsində {{sessionTitle}} icazə tələb edir",
"notification.question.title": "Sual",
"notification.question.description": "{{projectName}} layihəsində {{sessionTitle}} sualı var",
"notification.action.goToSession": "Sessiyaya keç",
"notification.session.responseReady.title": "Cavab hazırdır",
"notification.session.error.title": "Sessiya xətası",
"notification.session.error.fallbackDescription": "Xəta baş verdi",
"home.recentProjects": "Son layihələr",
"home.empty.title": "Son layihə yoxdur",
"home.empty.description": "Yerli layihə açaraq başlayın",
"home.title": "Ana səhifə",
"home.projects": "Layihələr",
"home.project.add": "Layihə əlavə edin",
"home.recentlyClosed": "Bu yaxınlarda bağlandı",
"home.server.collapse": "Server layihələrini yığışdırın",
"home.server.expand": "Server layihələrini genişləndirin",
"home.sessions.search.placeholder": "Sessiyaları axtar",
"home.sessions.search.placeholder.scoped": "{{scope}}-də sessiyaları axtarın",
"home.sessions.search.sessions": "Sessiyalar",
"home.sessions.search.noResults": "{{query}} üçün sessiya tapılmadı",
"home.sessions.empty": "Burada hələ heç nə yoxdur",
"home.sessions.empty.description": "Başlamaq üçün sessiya yaradın",
"home.sessions.group.today": "Bu gün",
"home.sessions.group.yesterday": "Dünən",
"home.sessions.group.older": "Daha əvvəl",
"home.providerTip":
"Claude, GPT, Gemini və s. daxil olmaqla, digər modellərdən istifadə etmək üçün 75+ provayderə qoşulun",
"session.tab.session": "Sessiya",
"session.tab.review": "İcmal",
"session.tab.context": "Kontekst",
"session.tab.unknown": "Naməlum sessiya",
"session.panel.reviewAndFiles": "İcmal və fayllar",
"session.error.notFound": "Bu sessiyanı tapmaq mümkün deyil",
"session.error.notFound.description": "Bu tab artıq bu serverdə olmayan sessiyaya işarə edir.",
"session.error.notFound.closeTab": "Tabı bağla",
"session.error.serverConnection": "Bu serverə qoşulmaq mümkün deyil",
"session.review.filesChanged": "{{count}} fayl dəyişdi",
"session.review.change.one": "Dəyişiklik",
"session.review.change.other": "Dəyişikliklər",
"session.review.loadingChanges": "Dəyişikliklər yüklənir...",
"session.review.empty": "Bu sessiyada hələ dəyişiklik yoxdur",
"session.review.noVcs": "Git versiyaya nəzarət sistemi aşkarlanmadı; sessiya dəyişiklikləri göstərilməyəcək",
"session.review.noVcs.createGit.title": "Git repozitoriyası yaradın",
"session.review.noVcs.createGit.description": "Bu layihədə dəyişiklikləri izləyin, nəzərdən keçirin və ləğv edin",
"session.review.noVcs.createGit.actionLoading": "Git repozitoriyası yaradılır...",
"session.review.noVcs.createGit.action": "Git repozitoriyası yaradın",
"session.review.noSnapshot":
"Snapshot izləmə konfiqurasiyada deaktiv edilib, ona görə də sessiya dəyişiklikləri əlçatan deyil",
"session.review.noChanges": "Dəyişiklik yoxdur",
"session.review.noUncommittedChanges": "Hələ commit edilməmiş dəyişiklik yoxdur",
"session.review.noBranchChanges": "Hələ branch dəyişikliyi yoxdur",
"session.files.selectToOpen": "Açmaq üçün fayl seçin",
"session.files.all": "Bütün fayllar",
"session.files.empty": "Fayl yoxdur",
"session.files.binaryContent": "İkili fayl (məzmun göstərilə bilmir)",
"session.messages.renderEarlier": "Əvvəlki mesajları göstər",
"session.messages.loadingEarlier": "Əvvəlki mesajlar yüklənir...",
"session.messages.loadEarlier": "Əvvəlki mesajları yüklə",
"session.messages.loading": "Mesajlar yüklənir...",
"session.messages.jumpToLatest": "Ən sonuncuya keç",
"session.context.addToContext": "{{selection}} kontekstə əlavə et",
"session.todo.title": "Tapşırıqlar",
"session.todo.collapse": "Yığ",
"session.todo.expand": "Genişlət",
"session.todo.progress": "{{total}} tapşırıqdan {{done}}-i tamamlandı",
"session.question.progress": "{{total}} sualdan {{current}}-i",
"session.question.minimize": "Sualı kiçilt",
"session.question.restore": "Sualı bərpa edin",
"session.question.pending.one": "{{count}} cavab gözləyən sual",
"session.question.pending.other": "{{count}} cavab gözləyən sual",
"session.followupDock.summary.one": "{{count}} növbəyə qoyulmuş mesaj",
"session.followupDock.summary.other": "{{count}} növbəyə qoyulmuş mesajlar",
"session.followupDock.sendNow": "İndi göndər",
"session.followupDock.edit": "Redaktə et",
"session.followupDock.collapse": "Növbəyə qoyulmuş mesajları yığcamlaşdırın",
"session.followupDock.expand": "Növbəyə qoyulmuş mesajları genişləndirin",
"session.revertDock.summary.one": "{{count}} geri alınmış mesaj",
"session.revertDock.summary.other": "{{count}} geri alınmış mesaj",
"session.revertDock.collapse": "Geri alınmış mesajları yığcamlaşdırın",
"session.revertDock.expand": "Geri qaytarılmış mesajları genişləndirin",
"session.revertDock.restore": "Mesajı bərpa edin",
"session.new.title": "İstədiyinizi qurun",
"session.new.project.new": "Yeni layihə",
"session.new.project.search": "Layihələri axtarın",
"session.new.project.add": "Layihə əlavə edin",
"session.new.worktree.main": "Əsas branch",
"session.new.worktree.mainWithBranch": "Əsas branch ({{branch}})",
"session.new.worktree.create": "Yeni worktree yarat",
"session.new.workspace.runIn": "Sessiyanı burada işə sal",
"session.new.workspace.triggerLocal": "Yerli",
"session.new.workspace.local": "Yerli depo",
"session.new.workspace.existing": "İş sahəsi…",
"session.new.git.none": "Git yoxdur",
"session.new.lastModified": "Son dəyişiklik",
"session.header.search.placeholder": "{{project}} axtar",
"session.header.searchFiles": "Faylları axtar",
"session.header.openIn": "Burada aç:",
"session.header.open.action": "{{app}} tətbiqini aç",
"session.header.open.ariaLabel": "{{app}} tətbiqində aç",
"session.header.open.menu": "Seçimləri aç",
"session.header.open.copyPath": "Yolu kopyala",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "File Explorer",
"session.header.open.fileManager": "Fayl meneceri",
"session.header.reveal.finder": "Finder-də göstər",
"session.header.reveal.fileExplorer": "File Explorer-də göstər",
"session.header.reveal.containingFolder": "Tərkibindəki qovluğu açın",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
"session.header.open.app.zed": "Zed",
"session.header.open.app.textmate": "TextMate",
"session.header.open.app.antigravity": "Antigravity",
"session.header.open.app.terminal": "Terminal",
"session.header.open.app.iterm2": "iTerm2",
"session.header.open.app.ghostty": "Ghostty",
"session.header.open.app.warp": "Warp",
"session.header.open.app.xcode": "Xcode",
"session.header.open.app.androidStudio": "Android Studio",
"session.header.open.app.powershell": "PowerShell",
"session.header.open.app.sublimeText": "Sublime Text",
"status.popover.trigger": "Status",
"status.popover.ariaLabel": "Server konfiqurasiyaları",
"status.popover.tab.servers": "Serverlər",
"status.popover.tab.mcp": "MCP",
"status.popover.tab.lsp": "LSP",
"status.popover.tab.plugins": "Plaginlər",
"status.popover.action.manageServers": "Serverləri idarə et",
"session.share.popover.title": "Vebdə dərc et",
"session.share.popover.description.shared": "Bu sessiya vebdə açıqdır. Linkə sahib olan hər kəs daxil ola bilər.",
"session.share.popover.description.unshared":
"Sessiyanı vebdə açıq paylaşın. Linkə sahib olan hər kəs daxil ola biləcək.",
"session.share.action.share": "Paylaş",
"session.share.action.publish": "Dərc et",
"session.share.action.publishing": "Dərc edilir...",
"session.share.action.unpublish": "Dərcdən çıxar",
"session.share.action.unpublishing": "Dərcdən çıxarılır...",
"session.share.action.view": "Bax",
"session.share.copy.copied": "Kopyalandı",
"session.share.copy.copyLink": "Linki kopyala",
"lsp.tooltip.none": "LSP server yoxdur",
"lsp.label.connected": "{{count}} LSP",
"prompt.loading": "Prompt yüklənir...",
"terminal.loading": "Terminal yüklənir...",
"terminal.title": "Terminal",
"terminal.title.numbered": "Terminal {{number}}",
"terminal.close": "Terminalı bağla",
"terminal.connectionLost.title": "Bağlantı kəsildi",
"terminal.connectionLost.abnormalClose": "WebSocket anormal bağlandı: {{code}}",
"terminal.connectionLost.description": "Terminal bağlantısı kəsildi. Bu server yenidən başladıqda baş verə bilər.",
"common.closeTab": "Tabı bağla",
"common.dismiss": "Bağla",
"common.moreCountSuffix": " (+{{count}} daha)",
"common.requestFailed": "Sorğu uğursuz oldu",
"common.moreOptions": "Daha çox seçim",
"common.learnMore": "Ətraflı öyrən",
"common.rename": "Adını dəyiş",
"common.reset": "Sıfırla",
"common.archive": "Arxivlə",
"common.delete": "Sil",
"common.close": "Bağla",
"common.edit": "Redaktə et",
"common.loadMore": "Daha çox yüklə",
"common.key.esc": "ESC",
"common.key.ctrl": "Ctrl",
"common.key.alt": "Alt",
"common.key.shift": "Shift",
"common.key.meta": "Meta",
"common.key.space": "Boşluq",
"common.key.backspace": "Backspace",
"common.key.enter": "Enter",
"common.key.tab": "Tab",
"common.key.delete": "Sil",
"common.key.home": "Home",
"common.key.end": "Son",
"common.key.pageUp": "Səhifə Yuxarı",
"common.key.pageDown": "Səhifə Aşağı",
"common.key.insert": "Daxil et",
"common.unknown": "naməlum",
"common.time.justNow": "İndicə",
"common.time.minutesAgo.short": "{{count}}d əvvəl",
"common.time.hoursAgo.short": "{{count}}s əvvəl",
"common.time.daysAgo.short": "{{count}}g əvvəl",
"sidebar.menu.toggle": "Menyunu aç/bağla",
"sidebar.nav.projectsAndSessions": "Layihələr və sessiyalar",
"sidebar.settings": "Tənzimləmələr",
"sidebar.help": "Kömək",
"sidebar.workspaces.enable": "İş sahələrini aktivləşdir",
"sidebar.workspaces.disable": "İş sahələrini deaktiv et",
"sidebar.gettingStarted.title": "Başlanğıc",
"sidebar.gettingStarted.line1": "OpenCode-a pulsuz modellər daxildir, buna görə dərhal başlaya bilərsiniz.",
"sidebar.gettingStarted.line2":
"Claude, GPT, Gemini və s. kimi modellərdən istifadə etmək üçün istənilən provayderi qoşun.",
"sidebar.project.recentSessions": "Son sessiyalar",
"sidebar.project.viewAllSessions": "Bütün sessiyalara bax",
"sidebar.project.clearNotifications": "Bildirişləri təmizlə",
"sidebar.empty.title": "Heç bir layihə açılmayıb",
"sidebar.empty.description": "Başlamaq üçün bir layihə açın",
"debugBar.ariaLabel": "Tərtibatçı performans diaqnostikası",
"debugBar.na": "yox",
"debugBar.nav.label": "NAV",
"debugBar.nav.tip":
"Sessiya səhifəsinə aid son tamamlanmış marşrut keçidi; marşrutlaşdırıcının başladığı andan keçid tamamlandıqdan sonrakı ilk göstərilməyədək ölçülür.",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "Son 5 saniyə üzrə saniyədə kadrların hərəkətli orta qiyməti.",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "Son 5 saniyədə ən uzun kadr müddəti.",
"debugBar.jank.label": "JANK",
"debugBar.jank.tip": "Son 5 saniyədə 32 ms-dən uzun çəkən kadrlar.",
"debugBar.long.label": "LONG",
"debugBar.long.tip": "Son 5 saniyədə bloklanma müddəti və uzun tapşırıqların sayı. Ən uzun tapşırıq: {{max}}.",
"debugBar.delay.label": "DELAY",
"debugBar.delay.tip": "Son 5 saniyədə müşahidə olunan ən uzun daxiletmə gecikməsi.",
"debugBar.inp.label": "INP",
"debugBar.inp.tip":
"Son 5 saniyədə təxmini qarşılıqlı əlaqə müddəti. Bu, rəsmi Web Vitals INP göstəricisi deyil, ona bənzər göstəricidir.",
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "Tətbiqin cari işləmə müddəti üzrə məcmu tərtibat sürüşməsi.",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "İstifadə olunmuş JS yığını və yığın limiti. Yalnız Chromium.",
"debugBar.mem.tip": "İstifadə olunmuş JS yığını və yığın limiti. {{used}} və {{limit}}.",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "Masaüstü",
"settings.section.server": "Server",
"settings.tab.general": "Ümumi",
"settings.tab.shortcuts": "Qısa yollar",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "WSL inteqrasiyası",
"settings.desktop.wsl.description": "Windows-da WSL daxilində OpenCode serverini işlət.",
"settings.general.section.appearance": "Görünüş",
"settings.general.section.advanced": "Qabaqcıl",
"settings.general.section.notifications": "Sistem bildirişləri",
"settings.general.section.updates": "Yeniləmələr",
"settings.general.section.sounds": "Səs effektləri",
"settings.general.section.feed": "Lenta",
"settings.general.section.display": "Ekran",
"settings.general.row.language.title": "Dil",
"settings.general.row.language.description": "OpenCode üçün ekran dilini dəyişdirin",
"settings.general.row.shell.title": "Terminal qabığı",
"settings.general.row.shell.description": "Terminal və agent alətləri tərəfindən istifadə edilən qabıq",
"settings.general.row.shell.autoDefault": "Avtomatik (Standart)",
"settings.general.row.shell.terminalOnly": "yalnız terminal",
"settings.general.row.appearance.title": "Görünüş",
"settings.general.row.appearance.description": "OpenCode-un cihazınızda necə göründüyünü fərdiləşdirin",
"settings.general.row.colorScheme.title": "Rəng sxemi",
"settings.general.row.colorScheme.description":
"OpenCode-un sistem, açıq və ya tünd mövzudan istifadə etməsini seçin",
"settings.general.row.theme.title": "Mövzu",
"settings.general.row.theme.description": "OpenCode-un mövzusunu fərdiləşdirin.",
"settings.general.row.font.title": "Kod şrifti",
"settings.general.row.font.description": "Kod bloklarında istifadə olunan mono şrifti fərdiləşdirin",
"settings.general.row.terminalFont.title": "Terminal şrifti",
"settings.general.row.terminalFont.description": "Terminalda istifadə olunan şrifti fərdiləşdirin",
"settings.general.row.uiFont.title": "İnterfeys şrifti",
"settings.general.row.uiFont.description": "Bütün interfeysdə istifadə olunan şrifti fərdiləşdirin",
"settings.general.row.followup.title": "Sonrakı sorğuların davranışı",
"settings.general.row.followup.description":
"Sonrakı sorğuların dərhal yönləndirilməsini və ya növbədə gözləməsini seçin",
"settings.general.row.followup.option.queue": "Növbə",
"settings.general.row.followup.option.steer": "Yönləndir",
"settings.general.row.showFileTree.title": "Fayl ağacı",
"settings.general.row.showFileTree.description": "Seanslarda fayl ağacı panelini göstərin",
"settings.general.row.showNavigation.title": "Naviqasiya nəzarətləri",
"settings.general.row.showNavigation.description":
"Masaüstü tətbiqin başlıq zolağında geri və irəli düymələrini göstərin",
"settings.general.row.showSearch.title": "Komanda palitrası",
"settings.general.row.showSearch.description": "Başlıq çubuğunda axtarış və əmr palitrası düyməsini göstərin",
"settings.general.row.showTerminal.title": "Terminal",
"settings.general.row.showTerminal.description": "Masaüstü tətbiqin başlıq zolağında terminal düyməsini göstərin",
"settings.general.row.showStatus.title": "Server statusu",
"settings.general.row.showStatus.description": "Başlıq çubuğunda server statusu düyməsini göstərin",
"settings.general.row.mobileTitlebarBottom.title": "Aşağı naviqasiya",
"settings.general.row.mobileTitlebarBottom.description":
"Başlıq çubuğunu və sessiya tablarını mobil cihazda ekranın aşağısına yerləşdirin",
"settings.general.row.showCustomAgents.title": "Agenti göstər",
"settings.general.row.showCustomAgents.description":
"Mesaj sahəsində agentlər arasında keçid edin. Gizlədildikdə Build agenti seçilir.",
"settings.general.row.reasoningSummaries.title": "Düşünmə xülasələrini göstər",
"settings.general.row.reasoningSummaries.description": "Zaman xəttində modelin düşünmə xülasələrini göstər",
"settings.general.row.shellToolPartsExpanded.title": "Shell alət hissələrini genişlət",
"settings.general.row.shellToolPartsExpanded.description":
"Zaman xəttində shell alət hissələrini standart olaraq genişlədilmiş göstər",
"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",
"settings.general.row.wayland.title": "Nativ Wayland-dan istifadə et",
"settings.general.row.wayland.description": "Wayland-da X11 geri dönüşünü deaktiv et. Yenidən başlatma tələb olunur.",
"settings.general.row.wayland.tooltip":
"Qarışıq yeniləmə tezlikli monitorlu Linux-da nativ Wayland daha sabit ola bilər.",
"settings.general.row.releaseNotes.title": "Buraxılış qeydləri",
"settings.general.row.releaseNotes.description": "Yeniləmələrdən sonra yenilikləri göstər",
"settings.updates.row.startup.title": "Başlanğıcda yeniləmələri yoxla",
"settings.updates.row.startup.description": "OpenCode açıldıqda avtomatik yeniləmələri yoxla",
"settings.updates.row.check.title": "Yeniləmələri yoxla",
"settings.updates.row.check.description": "Əl ilə yeniləmələri yoxla və mövcud olduqda quraşdır",
"settings.updates.action.checkNow": "İndi yoxla",
"settings.updates.action.checking": "Yoxlanılır...",
"settings.updates.action.downloading": "Yüklənir...",
"settings.updates.action.installing": "Quraşdırılır...",
"settings.updates.toast.latest.title": "Ən son versiyadan istifadə edirsiniz",
"settings.updates.toast.latest.description": "OpenCode-un ən son versiyasından istifadə edirsiniz.",
"sound.option.none": "Yoxdur",
"sound.option.alert01": "Alert 01",
"sound.option.alert02": "Alert 02",
"sound.option.alert03": "Alert 03",
"sound.option.alert04": "Alert 04",
"sound.option.alert05": "Alert 05",
"sound.option.alert06": "Alert 06",
"sound.option.alert07": "Alert 07",
"sound.option.alert08": "Alert 08",
"sound.option.alert09": "Alert 09",
"sound.option.alert10": "Alert 10",
"sound.option.bipbop01": "Bip-bop 01",
"sound.option.bipbop02": "Bip-bop 02",
"sound.option.bipbop03": "Bip-bop 03",
"sound.option.bipbop04": "Bip-bop 04",
"sound.option.bipbop05": "Bip-bop 05",
"sound.option.bipbop06": "Bip-bop 06",
"sound.option.bipbop07": "Bip-bop 07",
"sound.option.bipbop08": "Bip-bop 08",
"sound.option.bipbop09": "Bip-bop 09",
"sound.option.bipbop10": "Bip-bop 10",
"sound.option.staplebops01": "Staplebops 01",
"sound.option.staplebops02": "Staplebops 02",
"sound.option.staplebops03": "Staplebops 03",
"sound.option.staplebops04": "Staplebops 04",
"sound.option.staplebops05": "Staplebops 05",
"sound.option.staplebops06": "Staplebops 06",
"sound.option.staplebops07": "Staplebops 07",
"sound.option.nope01": "Nope 01",
"sound.option.nope02": "Nope 02",
"sound.option.nope03": "Nope 03",
"sound.option.nope04": "Nope 04",
"sound.option.nope05": "Nope 05",
"sound.option.nope06": "Nope 06",
"sound.option.nope07": "Nope 07",
"sound.option.nope08": "Nope 08",
"sound.option.nope09": "Nope 09",
"sound.option.nope10": "Nope 10",
"sound.option.nope11": "Nope 11",
"sound.option.nope12": "Nope 12",
"sound.option.yup01": "Yup 01",
"sound.option.yup02": "Yup 02",
"sound.option.yup03": "Yup 03",
"sound.option.yup04": "Yup 04",
"sound.option.yup05": "Yup 05",
"sound.option.yup06": "Yup 06",
"settings.general.notifications.agent.title": "Agent",
"settings.general.notifications.agent.description":
"Agent tamamlandıqda və ya diqqət tələb etdikdə sistem bildirişi göstər",
"settings.general.notifications.permissions.title": "İcazələr",
"settings.general.notifications.permissions.description": "İcazə tələb olunduqda sistem bildirişi göstər",
"settings.general.notifications.errors.title": "Xətalar",
"settings.general.notifications.errors.description": "Xəta baş verdikdə sistem bildirişi göstər",
"settings.general.sounds.agent.title": "Agent",
"settings.general.sounds.agent.description": "Agent tamamlandıqda və ya diqqət tələb etdikdə səs çal",
"settings.general.sounds.permissions.title": "İcazələr",
"settings.general.sounds.permissions.description": "İcazə tələb olunduqda səs çal",
"settings.general.sounds.errors.title": "Xətalar",
"settings.general.sounds.errors.description": "Xəta baş verdikdə səs çal",
"settings.shortcuts.title": "Klaviatura qısa yolları",
"settings.shortcuts.reset.button": "Standartlara sıfırla",
"settings.shortcuts.reset.toast.title": "Qısa yollar sıfırlandı",
"settings.shortcuts.reset.toast.description": "Klaviatura qısa yolları standartlara sıfırlandı.",
"settings.shortcuts.conflict.title": "Qısa yol artıq istifadə olunur",
"settings.shortcuts.conflict.description": "{{keybind}} artıq {{titles}} üçün təyin edilib.",
"settings.shortcuts.unassigned": "Təyin edilməyib",
"settings.shortcuts.pressKeys": "Düymələrə basın",
"settings.shortcuts.search.placeholder": "Qısa yolları axtar",
"settings.shortcuts.search.empty": "Qısa yol tapılmadı",
"settings.shortcuts.group.general": "Ümumi",
"settings.shortcuts.group.session": "Sessiya",
"settings.shortcuts.group.navigation": "Naviqasiya",
"settings.shortcuts.group.modelAndAgent": "Model və agent",
"settings.shortcuts.group.terminal": "Terminal",
"settings.shortcuts.group.prompt": "Prompt",
"settings.providers.title": "Provayderlər",
"settings.providers.description": "Provayder tənzimləmələri burada konfiqurasiya edilə biləcək.",
"settings.providers.section.connected": "Qoşulmuş provayderlər",
"settings.providers.connected.empty": "Qoşulmuş provayder yoxdur",
"settings.providers.connected.environmentDescription": "Mühit dəyişənlərinizdən qoşulub",
"settings.providers.section.popular": "Populyar provayderlər",
"settings.providers.custom.description": "Əsas URL ilə OpenAI-uyğun provayder əlavə edin.",
"settings.providers.tag.environment": "Mühit",
"settings.providers.tag.config": "Konfiqurasiya",
"settings.providers.tag.custom": "Fərdi",
"settings.providers.tag.other": "Digər",
"settings.models.title": "Modellər",
"settings.models.description": "Model tənzimləmələri burada konfiqurasiya edilə biləcək.",
"settings.agents.title": "Agentlər",
"settings.agents.description": "Agent tənzimləmələri burada konfiqurasiya edilə biləcək.",
"settings.commands.title": "Əmrlər",
"settings.commands.description": "Əmr tənzimləmələri burada konfiqurasiya edilə biləcək.",
"settings.mcp.title": "MCP",
"settings.mcp.description": "MCP tənzimləmələri burada konfiqurasiya edilə biləcək.",
"settings.permissions.title": "İcazələr",
"settings.permissions.description": "Serverin standart olaraq hansı alətləri istifadə edə biləcəyini idarə edin.",
"settings.permissions.section.tools": "Alətlər",
"settings.permissions.toast.updateFailed.title": "İcazələr yenilənə bilmədi",
"settings.permissions.action.allow": "İcazə ver",
"settings.permissions.action.ask": "Soruş",
"settings.permissions.action.deny": "Rədd et",
"settings.permissions.tool.read.title": "Oxu",
"settings.permissions.tool.read.description": "Fayl oxuma (fayl yoluna uyğun gəlir)",
"settings.permissions.tool.edit.title": "Redaktə",
"settings.permissions.tool.edit.description": "Redaktə, yazma və yamaq tətbiqi daxil olmaqla faylları dəyişdir",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "Glob nümunələri ilə faylları uyğunlaşdır",
"settings.permissions.tool.grep.title": "Grep",
"settings.permissions.tool.grep.description": "Müntəzəm ifadələrlə fayl məzmununu axtar",
"settings.permissions.tool.list.title": "Siyahı",
"settings.permissions.tool.list.description": "Qovluq daxilindəki faylları siyahıla",
"settings.permissions.tool.bash.title": "Bash",
"settings.permissions.tool.bash.description": "Shell əmrlərini işlət",
"settings.permissions.tool.task.title": "Tapşırıq",
"settings.permissions.tool.task.description": "Alt agentləri işə sal",
"settings.permissions.tool.skill.title": "Bacarıq",
"settings.permissions.tool.skill.description": "Adla bacarıq yüklə",
"settings.permissions.tool.lsp.title": "LSP",
"settings.permissions.tool.lsp.description": "Dil server sorğularını işlət",
"settings.permissions.tool.todowrite.title": "Tapşırıq yaz",
"settings.permissions.tool.todowrite.description": "Tapşırıq siyahısını yenilə",
"settings.permissions.tool.webfetch.title": "Veb əldə et",
"settings.permissions.tool.webfetch.description": "URL-dən məzmun əldə et",
"settings.permissions.tool.websearch.title": "Veb axtarış",
"settings.permissions.tool.websearch.description": "Vebdə axtar",
"settings.permissions.tool.external_directory.title": "Xarici qovluq",
"settings.permissions.tool.external_directory.description": "Layihə qovluğundan kənardakı fayllara daxil ol",
"settings.permissions.tool.doom_loop.title": "Sonsuz dövr",
"settings.permissions.tool.doom_loop.description": "Eyni girişlə təkrarlanan alət çağırışlarını aşkarla",
"session.delete.failed.title": "Sessiya silinə bilmədi",
"session.delete.title": "Sessiyanı sil",
"session.delete.confirm": '"{{name}}" sessiyasını silmək istəyirsiniz?',
"session.delete.button": "Sessiyanı sil",
"workspace.new": "Yeni iş sahəsi",
"workspace.type.local": "yerli",
"workspace.type.sandbox": "sandbox",
"workspace.create.failed.title": "İş sahəsi yaradıla bilmədi",
"workspace.delete.failed.title": "İş sahəsi silinə bilmədi",
"workspace.resetting.title": "İş sahəsi sıfırlanır",
"workspace.resetting.description": "Bu bir dəqiqə çəkə bilər.",
"workspace.reset.failed.title": "İş sahəsi sıfırlana bilmədi",
"workspace.reset.success.title": "İş sahəsi sıfırlandı",
"workspace.reset.success.description": "İş sahəsi indi standart branch ilə uyğunlaşır.",
"workspace.error.stillPreparing": "İş sahəsi hələ hazırlanır",
"workspace.status.checking": "Birləşdirilməmiş dəyişikliklər yoxlanılır...",
"workspace.status.error": "Git statusu doğrulana bilmədi.",
"workspace.status.clean": "Birləşdirilməmiş dəyişiklik aşkarlanmadı.",
"workspace.status.dirty": "Bu iş sahəsində birləşdirilməmiş dəyişikliklər aşkarlandı.",
"workspace.delete.title": "İş sahəsini sil",
"workspace.delete.confirm": '"{{name}}" iş sahəsini silmək istəyirsiniz?',
"workspace.delete.button": "İş sahəsini sil",
"workspace.reset.title": "İş sahəsini sıfırla",
"workspace.reset.confirm": '"{{name}}" iş sahəsini sıfırlamaq istəyirsiniz?',
"workspace.reset.button": "İş sahəsini sıfırla",
"workspace.reset.archived.none": "Heç bir aktiv sessiya arxivlənməyəcək.",
"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.",
}
+44 -54
View File
@@ -94,14 +94,13 @@ export const dict = {
"dialog.provider.empty": "Nenhum provedor encontrado",
"dialog.provider.group.popular": "Popular",
"dialog.provider.group.other": "Outro",
"dialog.provider.custom.label": "Provedor personalizado compatível com OpenAI",
"dialog.provider.tag.recommended": "Recomendado",
"dialog.provider.opencode.note": "Modelos selecionados incluindo Claude, GPT, Gemini e mais",
"dialog.provider.opencode.tagline": "Modelos otimizados e confiáveis",
"dialog.provider.opencodeGo.tagline": "Assinatura de baixo custo para todos",
"dialog.provider.anthropic.note": "Acesso direto aos modelos Claude, incluindo Pro e Max",
"dialog.provider.copilot.note": "Modelos de IA para auxílio à programação pelo GitHub Copilot",
"dialog.provider.openai.note": "Modelos GPT rápidos e avançados para tarefas gerais de IA",
"dialog.provider.anthropic.note": "Conectar com Claude Pro/Max ou chave de API",
"dialog.provider.copilot.note": "Conectar com Copilot ou chave de API",
"dialog.provider.openai.note": "Conectar com ChatGPT Pro/Plus ou chave de API",
"dialog.provider.google.note": "Modelos Gemini para respostas rápidas e estruturadas",
"dialog.provider.openrouter.note": "Acesse todos os modelos suportados de um único provedor",
"dialog.provider.vercel.note": "Acesso unificado a modelos de IA com roteamento inteligente",
@@ -113,7 +112,6 @@ export const dict = {
"dialog.model.manage.provider.toggle": "Alternar todos os modelos {{provider}}",
"dialog.model.unpaid.freeModels.title": "Modelos gratuitos fornecidos pelo OpenCode",
"dialog.model.unpaid.addMore.title": "Adicionar mais modelos de provedores populares",
"dialog.model.unpaid.viewMoreProviders": "Ver mais de 70 provedores",
"dialog.provider.viewAll": "Ver mais provedores",
"provider.connect.title": "Conectar {{provider}}",
"provider.connect.title.anthropicProMax": "Entrar com Claude Pro/Max",
@@ -153,12 +151,12 @@ export const dict = {
"provider.custom.description.prefix": "Configure um provedor compatível com OpenAI. Veja a ",
"provider.custom.description.link": "documentação de configuração do provedor",
"provider.custom.description.suffix": ".",
"provider.custom.field.providerID.label": "ID do provedor",
"provider.custom.field.providerID.label": "ID do Provedor",
"provider.custom.field.providerID.placeholder": "meuprovedor",
"provider.custom.field.providerID.description": "Letras minúsculas, números, hifens ou sublinhados",
"provider.custom.field.name.label": "Nome de exibição",
"provider.custom.field.name.placeholder": "Meu provedor de IA",
"provider.custom.field.baseURL.label": "URL base",
"provider.custom.field.name.placeholder": "Meu Provedor de IA",
"provider.custom.field.baseURL.label": "URL Base",
"provider.custom.field.baseURL.placeholder": "https://api.meuprovedor.com/v1",
"provider.custom.field.apiKey.label": "Chave de API",
"provider.custom.field.apiKey.placeholder": "Chave de API",
@@ -167,7 +165,7 @@ export const dict = {
"provider.custom.models.id.label": "ID",
"provider.custom.models.id.placeholder": "id-do-modelo",
"provider.custom.models.name.label": "Nome",
"provider.custom.models.name.placeholder": "Nome de exibição",
"provider.custom.models.name.placeholder": "Nome de Exibição",
"provider.custom.models.remove": "Remover modelo",
"provider.custom.models.add": "Adicionar modelo",
"provider.custom.headers.label": "Cabeçalhos (opcional)",
@@ -177,11 +175,11 @@ export const dict = {
"provider.custom.headers.value.placeholder": "valor",
"provider.custom.headers.remove": "Remover cabeçalho",
"provider.custom.headers.add": "Adicionar cabeçalho",
"provider.custom.error.providerID.required": "O ID do provedor é obrigatório",
"provider.custom.error.providerID.required": "ID do Provedor é obrigatório",
"provider.custom.error.providerID.format": "Use letras minúsculas, números, hifens ou sublinhados",
"provider.custom.error.providerID.exists": "Esse ID de provedor já existe",
"provider.custom.error.name.required": "O nome de exibição é obrigatório",
"provider.custom.error.baseURL.required": "A URL base é obrigatória",
"provider.custom.error.name.required": "Nome de exibição é obrigatório",
"provider.custom.error.baseURL.required": "URL Base é obrigatória",
"provider.custom.error.baseURL.format": "Deve começar com http:// ou https://",
"provider.custom.error.required": "Obrigatório",
"provider.custom.error.duplicate": "Duplicado",
@@ -217,7 +215,7 @@ export const dict = {
"common.clear": "Limpar",
"common.connect": "Conectar",
"common.disconnect": "Desconectar",
"common.continue": "Continuar",
"common.continue": "Enviar",
"common.submit": "Enviar",
"common.save": "Salvar",
"common.saving": "Salvando...",
@@ -269,7 +267,7 @@ export const dict = {
"prompt.context.includeActiveFile": "Incluir arquivo ativo",
"prompt.context.removeActiveFile": "Remover arquivo ativo do contexto",
"prompt.context.removeFile": "Remover arquivo do contexto",
"prompt.action.attachFile": "Adicionar arquivos",
"prompt.action.attachFile": "Anexar arquivo",
"prompt.menu.addImagesAndFiles": "Adicionar arquivos e mais",
"prompt.menu.imagesAndFiles": "Imagens e arquivos",
"prompt.menu.commands": "Comandos",
@@ -279,7 +277,6 @@ export const dict = {
"prompt.action.send": "Enviar",
"prompt.action.stop": "Parar",
"prompt.toast.pasteUnsupported.title": "Anexo não suportado",
"prompt.toast.attachmentDuplicate.title": "Este arquivo já foi enviado",
"prompt.toast.pasteUnsupported.description": "Apenas imagens, PDFs ou arquivos de texto podem ser anexados aqui.",
"prompt.toast.modelAgentRequired.title": "Selecione um agente e modelo",
"prompt.toast.modelAgentRequired.description": "Escolha um agente e modelo antes de enviar um prompt.",
@@ -290,7 +287,7 @@ export const dict = {
"prompt.toast.promptSendFailed.title": "Falha ao enviar prompt",
"prompt.toast.promptSendFailed.description": "Não foi possível recuperar a sessão",
"dialog.mcp.title": "MCPs",
"dialog.mcp.description": "{{enabled}} de {{total}} ativados",
"dialog.mcp.description": "{{enabled}} of {{total}} habilitados",
"dialog.mcp.empty": "Nenhum MCP configurado",
"dialog.lsp.empty": "LSPs detectados automaticamente pelos tipos de arquivo",
"dialog.plugins.empty": "Plugins configurados em opencode.json",
@@ -312,11 +309,11 @@ export const dict = {
"dialog.server.search.placeholder": "Buscar servidores",
"dialog.server.empty": "Nenhum servidor ainda",
"dialog.server.add.title": "Adicionar um servidor",
"dialog.server.add.url": "Endereço do servidor",
"dialog.server.add.url": "URL do servidor",
"dialog.server.add.placeholder": "http://localhost:4096",
"dialog.server.add.error": "Não foi possível conectar ao servidor",
"dialog.server.add.checking": "Verificando...",
"dialog.server.add.button": "Adicionar servidor",
"dialog.server.add.button": "Adicionar",
"dialog.server.add.name": "Nome do servidor (opcional)",
"dialog.server.add.namePlaceholder": "Localhost",
"dialog.server.add.username": "Nome de usuário (opcional)",
@@ -324,7 +321,7 @@ export const dict = {
"dialog.server.edit.title": "Editar servidor",
"dialog.server.default.title": "Servidor padrão",
"dialog.server.default.description":
"Conectar a este servidor na inicialização do aplicativo em vez de iniciar um servidor local. Requer reinicialização.",
"Conectar a este servidor na inicialização do aplicativo ao invés de iniciar um servidor local. Requer reinicialização.",
"dialog.server.default.none": "Nenhum servidor selecionado",
"dialog.server.default.set": "Definir servidor atual como padrão",
"dialog.server.default.clear": "Limpar",
@@ -414,33 +411,33 @@ export const dict = {
"dialog.project.edit.color.select": "Selecionar cor {{color}}",
"dialog.project.edit.worktree.startup": "Script de inicialização do espaço de trabalho",
"dialog.project.edit.worktree.startup.description": "Executa após criar um novo espaço de trabalho (worktree).",
"dialog.project.edit.worktree.startup.placeholder": "Ex.: bun install",
"context.breakdown.title": "Detalhamento do contexto",
"dialog.project.edit.worktree.startup.placeholder": "ex: bun install",
"context.breakdown.title": "Detalhamento do Contexto",
"context.breakdown.note":
'Detalhamento aproximado dos tokens de entrada. "Outros" inclui definições de ferramentas e sobrecarga.',
'Detalhamento aproximado dos tokens de entrada. "Outros" inclui definições de ferramentas e overhead.',
"context.breakdown.system": "Sistema",
"context.breakdown.user": "Usuário",
"context.breakdown.assistant": "Assistente",
"context.breakdown.tool": "Chamadas de ferramentas",
"context.breakdown.tool": "Chamadas de Ferramentas",
"context.breakdown.other": "Outros",
"context.systemPrompt.title": "Prompt do sistema",
"context.systemPrompt.title": "Prompt do Sistema",
"context.rawMessages.title": "Mensagens brutas",
"context.stats.session": "Sessão",
"context.stats.messages": "Mensagens",
"context.stats.provider": "Provedor",
"context.stats.model": "Modelo",
"context.stats.limit": "Limite de contexto",
"context.stats.totalTokens": "Total de tokens",
"context.stats.limit": "Limite de Contexto",
"context.stats.totalTokens": "Total de Tokens",
"context.stats.usage": "Uso",
"context.stats.inputTokens": "Tokens de entrada",
"context.stats.outputTokens": "Tokens de saída",
"context.stats.reasoningTokens": "Tokens de raciocínio",
"context.stats.cacheTokens": "Tokens de cache (leitura/escrita)",
"context.stats.userMessages": "Mensagens do usuário",
"context.stats.assistantMessages": "Mensagens do assistente",
"context.stats.totalCost": "Custo total",
"context.stats.sessionCreated": "Sessão criada",
"context.stats.lastActivity": "Última atividade",
"context.stats.inputTokens": "Tokens de Entrada",
"context.stats.outputTokens": "Tokens de Saída",
"context.stats.reasoningTokens": "Tokens de Raciocínio",
"context.stats.cacheTokens": "Tokens de Cache (leitura/escrita)",
"context.stats.userMessages": "Mensagens de Usuário",
"context.stats.assistantMessages": "Mensagens do Assistente",
"context.stats.totalCost": "Custo Total",
"context.stats.sessionCreated": "Sessão Criada",
"context.stats.lastActivity": "Última Atividade",
"context.usage.tokens": "Tokens",
"context.usage.usage": "Uso",
"context.usage.cost": "Custo",
@@ -499,7 +496,7 @@ export const dict = {
"error.page.title": "Algo deu errado",
"error.page.description": "Ocorreu um erro ao carregar a aplicação.",
"error.page.description.localServerStartup": "Ocorreu um erro ao iniciar o servidor local.",
"error.page.details.label": "Detalhes do erro",
"error.page.details.label": "Detalhes do Erro",
"error.page.action.restart": "Reiniciar",
"error.page.action.report": "Reportar erro",
"error.page.action.reported": "Erro reportado",
@@ -572,7 +569,7 @@ export const dict = {
"session.error.notFound.description": "Esta aba aponta para uma sessão que não existe mais neste servidor.",
"session.error.notFound.closeTab": "Fechar aba",
"session.error.serverConnection": "Não é possível conectar a este servidor",
"session.review.filesChanged": "{{count}} arquivos alterados",
"session.review.filesChanged": "{{count}} Arquivos Alterados",
"session.review.change.one": "Alteração",
"session.review.change.other": "Alterações",
"session.review.loadingChanges": "Carregando alterações...",
@@ -599,17 +596,14 @@ export const dict = {
"session.question.minimize": "Minimizar pergunta",
"session.question.restore": "Restaurar pergunta",
"session.question.pending.one": "{{count}} pergunta pendente",
"session.question.pending.many": "{{count}} de perguntas pendentes",
"session.question.pending.other": "{{count}} perguntas pendentes",
"session.followupDock.summary.one": "{{count}} mensagem na fila",
"session.followupDock.summary.many": "{{count}} de mensagens na fila",
"session.followupDock.summary.other": "{{count}} mensagens na fila",
"session.followupDock.sendNow": "Enviar agora",
"session.followupDock.edit": "Editar",
"session.followupDock.collapse": "Recolher mensagens na fila",
"session.followupDock.expand": "Expandir mensagens na fila",
"session.revertDock.summary.one": "{{count}} mensagem revertida",
"session.revertDock.summary.many": "{{count}} de mensagens revertidas",
"session.revertDock.summary.other": "{{count}} mensagens revertidas",
"session.revertDock.collapse": "Recolher mensagens revertidas",
"session.revertDock.expand": "Expandir mensagens revertidas",
@@ -661,7 +655,7 @@ export const dict = {
"terminal.title": "Terminal",
"terminal.title.numbered": "Terminal {{number}}",
"terminal.close": "Fechar terminal",
"terminal.connectionLost.title": "Conexão perdida",
"terminal.connectionLost.title": "Conexão Perdida",
"terminal.connectionLost.description":
"A conexão do terminal foi interrompida. Isso pode acontecer quando o servidor reinicia.",
"common.closeTab": "Fechar aba",
@@ -711,7 +705,7 @@ export const dict = {
"settings.general.row.shell.title": "Shell do terminal",
"settings.general.row.shell.description":
"Escolha o shell usado no terminal. Os shells compatíveis também são usados nas chamadas de ferramentas do agente.",
"settings.general.row.shell.autoDefault": "Automático (padrão)",
"settings.general.row.shell.autoDefault": "Automático (Padrão)",
"settings.general.row.shell.terminalOnly": "somente no terminal",
"settings.general.row.appearance.title": "Aparência",
"settings.general.row.appearance.description": "Personalize como o OpenCode aparece no seu dispositivo",
@@ -744,9 +738,8 @@ export const dict = {
"settings.general.row.mobileTitlebarBottom.title": "Navegação inferior",
"settings.general.row.mobileTitlebarBottom.description":
"Posicionar a barra de título e as abas da sessão na parte inferior da tela em dispositivos móveis",
"settings.general.row.showCustomAgents.title": "Mostrar agente",
"settings.general.row.showCustomAgents.description":
"Alternar entre agentes na área de composição. Quando oculto, usa o agente Build como padrão.",
"settings.general.row.showCustomAgents.title": "Agentes personalizados",
"settings.general.row.showCustomAgents.description": "Mostrar o seletor de agentes na área de composição",
"settings.general.row.reasoningSummaries.title": "Mostrar resumos de raciocínio",
"settings.general.row.reasoningSummaries.description": "Exibir resumos de raciocínio do modelo na linha do tempo",
"settings.general.row.shellToolPartsExpanded.title": "Expandir partes da ferramenta shell",
@@ -829,15 +822,14 @@ export const dict = {
"sound.option.yup06": "Sim 06",
"settings.general.notifications.agent.title": "Agente",
"settings.general.notifications.agent.description":
"Mostrar notificação do sistema quando o agente concluir o trabalho ou precisar de atenção",
"Mostrar notificação do sistema quando o agente estiver completo ou precisar de atenção",
"settings.general.notifications.permissions.title": "Permissões",
"settings.general.notifications.permissions.description":
"Mostrar notificação do sistema quando uma permissão for necessária",
"settings.general.notifications.errors.title": "Erros",
"settings.general.notifications.errors.description": "Mostrar notificação do sistema quando ocorrer um erro",
"settings.general.sounds.agent.title": "Agente",
"settings.general.sounds.agent.description":
"Reproduzir som quando o agente concluir o trabalho ou precisar de atenção",
"settings.general.sounds.agent.description": "Reproduzir som quando o agente estiver completo ou precisar de atenção",
"settings.general.sounds.permissions.title": "Permissões",
"settings.general.sounds.permissions.description": "Reproduzir som quando uma permissão for necessária",
"settings.general.sounds.errors.title": "Erros",
@@ -885,7 +877,8 @@ export const dict = {
"settings.permissions.tool.read.title": "Ler",
"settings.permissions.tool.read.description": "Ler um arquivo (corresponde ao caminho do arquivo)",
"settings.permissions.tool.edit.title": "Editar",
"settings.permissions.tool.edit.description": "Modificar arquivos, incluindo edições, escritas e patches",
"settings.permissions.tool.edit.description":
"Modificar arquivos, incluindo edições, escritas, patches e multi-edições",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "Corresponder arquivos usando padrões glob",
"settings.permissions.tool.grep.title": "Grep",
@@ -895,7 +888,7 @@ export const dict = {
"settings.permissions.tool.bash.title": "Bash",
"settings.permissions.tool.bash.description": "Executar comandos shell",
"settings.permissions.tool.task.title": "Tarefa",
"settings.permissions.tool.task.description": "Iniciar subagentes",
"settings.permissions.tool.task.description": "Lançar sub-agentes",
"settings.permissions.tool.skill.title": "Habilidade",
"settings.permissions.tool.skill.description": "Carregar uma habilidade por nome",
"settings.permissions.tool.lsp.title": "LSP",
@@ -952,7 +945,7 @@ export const dict = {
"common.time.hoursAgo.short": "{{count}}h atrás",
"common.time.daysAgo.short": "{{count}}d atrás",
"settings.providers.connected.environmentDescription": "Conectado a partir de suas variáveis de ambiente",
"settings.providers.custom.description": "Adicionar um provedor compatível com OpenAI por meio da URL base.",
"settings.providers.custom.description": "Adicionar um provedor compatível com a OpenAI através do URL base.",
"app.server.unreachable": "Não foi possível conectar a {{server}}",
"app.server.retrying": "Tentando novamente automaticamente...",
@@ -968,9 +961,6 @@ export const dict = {
"session.question.progress": "{{current}} de {{total}} perguntas",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "Explorador de Arquivos",
"session.header.reveal.finder": "Revelar no Finder",
"session.header.reveal.fileExplorer": "Revelar no Explorador de Arquivos",
"session.header.reveal.containingFolder": "Abrir pasta que contém este item",
"session.header.open.fileManager": "Gerenciador de Arquivos",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
+42 -52
View File
@@ -102,7 +102,6 @@ export const dict = {
"dialog.provider.empty": "Nema pronađenih provajdera",
"dialog.provider.group.popular": "Popularno",
"dialog.provider.group.other": "Ostalo",
"dialog.provider.custom.label": "Prilagođeni provajder kompatibilan s OpenAI-jem",
"dialog.provider.tag.recommended": "Preporučeno",
"dialog.provider.opencode.note": "Kurirani modeli uključujući Claude, GPT, Gemini i druge",
"dialog.provider.opencode.tagline": "Pouzdani optimizovani modeli",
@@ -123,7 +122,6 @@ export const dict = {
"dialog.model.unpaid.freeModels.title": "Besplatni modeli koje obezbjeđuje OpenCode",
"dialog.model.unpaid.addMore.title": "Dodaj još modela od popularnih provajdera",
"dialog.model.unpaid.viewMoreProviders": "Pogledaj još više od 70 provajdera",
"dialog.provider.viewAll": "Prikaži više provajdera",
@@ -234,7 +232,7 @@ export const dict = {
"common.clear": "Očisti",
"common.connect": "Poveži",
"common.disconnect": "Prekini vezu",
"common.continue": "Nastavi",
"common.continue": "Pošalji",
"common.submit": "Pošalji",
"common.save": "Sačuvaj",
"common.saving": "Čuvanje...",
@@ -265,7 +263,7 @@ export const dict = {
"prompt.example.11": "Optimizuj upite prema bazi podataka",
"prompt.example.12": "Dodaj validaciju ulaza",
"prompt.example.13": "Napravi novu komponentu za...",
"prompt.example.14": "Kako da postavim ovaj projekat?",
"prompt.example.14": "Kako da deployam ovaj projekat?",
"prompt.example.15": "Pregledaj moj kod prema najboljim praksama",
"prompt.example.16": "Dodaj obradu grešaka u ovu funkciju",
"prompt.example.17": "Objasni ovaj regex obrazac",
@@ -273,14 +271,14 @@ export const dict = {
"prompt.example.19": "Dodaj logovanje kroz cijelu bazu koda",
"prompt.example.20": "Koje su zavisnosti zastarjele?",
"prompt.example.21": "Pomozi mi da napišem migracijsku skriptu",
"prompt.example.22": "Implementiraj keširanje za ovu krajnju tačku",
"prompt.example.22": "Implementiraj keširanje za ovaj endpoint",
"prompt.example.23": "Dodaj paginaciju u ovu listu",
"prompt.example.24": "Napravi CLI komandu za...",
"prompt.example.25": "Kako ovdje rade varijable okruženja?",
"prompt.popover.emptyResults": "Nema rezultata",
"prompt.popover.emptyCommands": "Nema komandi",
"prompt.dropzone.label": "Ovdje prevuci slike, PDF-ove ili tekstualne datoteke",
"prompt.dropzone.label": "Ovdje prevucite slike, PDF-ove ili tekstualne datoteke",
"prompt.dropzone.file.label": "Spusti za @spominjanje datoteke",
"prompt.slash.badge.custom": "prilagođeno",
"prompt.slash.badge.skill": "skill",
@@ -289,7 +287,7 @@ export const dict = {
"prompt.context.includeActiveFile": "Uključi aktivnu datoteku",
"prompt.context.removeActiveFile": "Ukloni aktivnu datoteku iz konteksta",
"prompt.context.removeFile": "Ukloni datoteku iz konteksta",
"prompt.action.attachFile": "Dodaj datoteke",
"prompt.action.attachFile": "Priloži datoteku",
"prompt.menu.addImagesAndFiles": "Dodaj datoteke i više",
"prompt.menu.imagesAndFiles": "Slike i datoteke",
"prompt.menu.commands": "Komande",
@@ -300,7 +298,6 @@ export const dict = {
"prompt.action.stop": "Zaustavi",
"prompt.toast.pasteUnsupported.title": "Nepodržan prilog",
"prompt.toast.attachmentDuplicate.title": "Ova datoteka je već učitana",
"prompt.toast.pasteUnsupported.description": "Ovdje se mogu priložiti samo slike, PDF-ovi ili tekstualne datoteke.",
"prompt.toast.modelAgentRequired.title": "Odaberi agenta i model",
"prompt.toast.modelAgentRequired.description": "Odaberi agenta i model prije slanja upita.",
@@ -313,7 +310,7 @@ export const dict = {
"dialog.mcp.title": "MCP-ovi",
"dialog.mcp.description": "{{enabled}} od {{total}} omogućeno",
"dialog.mcp.empty": "Nema konfigurisanih MCP-ova",
"dialog.mcp.empty": "Nema konfigurisnih MCP-ova",
"dialog.lsp.empty": "LSP-ovi se automatski otkrivaju prema tipu datoteke",
"dialog.plugins.empty": "Plugini su konfigurisani u opencode.json",
@@ -321,18 +318,18 @@ export const dict = {
"mcp.status.connected": "povezano",
"mcp.status.failed": "neuspjelo",
"mcp.status.needs_auth": "potrebna autentifikacija",
"mcp.auth.clickToAuthenticate": "Klikni za autentifikaciju",
"mcp.auth.clickToAuthenticate": "Kliknite za autentifikaciju",
"mcp.status.disabled": "onemogućeno",
"dialog.fork.empty": "Nema poruka za fork",
"dialog.directory.search.placeholder": "Pretraži fascikle",
"dialog.directory.empty": "Nema pronađenih fascikli",
"dialog.directory.search.placeholder": "Pretraži foldere",
"dialog.directory.empty": "Nema pronađenih foldera",
"dialog.directory.action.selectFile": "Odaberi datoteku",
"dialog.directory.action.selectFolder": "Odaberi fasciklu",
"dialog.directory.action.selectFolder": "Odaberi folder",
"dialog.directory.root": "Korijen",
"dialog.directory.parent": "Nadređena fascikla",
"dialog.directory.readError": "Nije moguće pročitati ovu fasciklu",
"dialog.directory.parent": "Nadređeni folder",
"dialog.directory.readError": "Nije moguće pročitati ovaj folder",
"dialog.server.title": "Serveri",
"dialog.server.description": "Promijeni na koji se OpenCode server ova aplikacija povezuje.",
@@ -351,7 +348,7 @@ export const dict = {
"dialog.server.edit.title": "Uredi server",
"dialog.server.default.title": "Podrazumijevani server",
"dialog.server.default.description":
"Poveži se na ovaj server pri pokretanju aplikacije umjesto pokretanja lokalnog servera. Potrebno je ponovo pokrenuti aplikaciju.",
"Poveži se na ovaj server pri pokretanju aplikacije umjesto pokretanja lokalnog servera. Potreban je restart.",
"dialog.server.default.none": "Nije odabran server",
"dialog.server.default.set": "Postavi trenutni server kao podrazumijevani",
"dialog.server.default.clear": "Očisti",
@@ -447,7 +444,7 @@ export const dict = {
"context.breakdown.title": "Razlaganje konteksta",
"context.breakdown.note":
'Približna raspodjela ulaznih tokena. "Ostalo" uključuje definicije alata i dodatno opterećenje.',
'Približna raspodjela ulaznih tokena. "Ostalo" uključuje definicije alata i dodatni overhead.',
"context.breakdown.system": "Sistem",
"context.breakdown.user": "Korisnik",
"context.breakdown.assistant": "Asistent",
@@ -467,7 +464,7 @@ export const dict = {
"context.stats.inputTokens": "Ulazni tokeni",
"context.stats.outputTokens": "Izlazni tokeni",
"context.stats.reasoningTokens": "Tokeni za rasuđivanje",
"context.stats.cacheTokens": "Keširani tokeni (čitanje/pisanje)",
"context.stats.cacheTokens": "Cache tokeni (čitanje/pisanje)",
"context.stats.userMessages": "Korisničke poruke",
"context.stats.assistantMessages": "Poruke asistenta",
"context.stats.totalCost": "Ukupni trošak",
@@ -539,14 +536,14 @@ export const dict = {
"toast.update.title": "Dostupno ažuriranje",
"toast.update.description": "Nova verzija OpenCode-a ({{version}}) je dostupna za instalaciju.",
"toast.update.action.installRestart": "Instaliraj i ponovo pokreni",
"toast.update.action.installRestart": "Instaliraj i restartuj",
"toast.update.action.notYet": "Ne još",
"error.page.title": "Nešto je pošlo po zlu",
"error.page.description": "Došlo je do greške prilikom učitavanja aplikacije.",
"error.page.description.localServerStartup": "Došlo je do greške pri pokretanju lokalnog servera.",
"error.page.details.label": "Detalji greške",
"error.page.action.restart": "Ponovo pokreni",
"error.page.action.restart": "Restartuj",
"error.page.action.report": "Prijavi grešku",
"error.page.action.reported": "Greška prijavljena",
"error.page.action.exportLogs": "Izvezi logove",
@@ -571,7 +568,7 @@ export const dict = {
"error.chain.responseBody": "Tijelo odgovora:\n{{body}}",
"error.chain.didYouMean": "Da li si mislio: {{suggestions}}",
"error.chain.modelNotFound": "Model nije pronađen: {{provider}}/{{model}}",
"error.chain.checkConfig": "Provjeri nazive provajdera/modela u konfiguraciji (opencode.json)",
"error.chain.checkConfig": "Provjeri konfiguraciju (opencode.json) provider/model names",
"error.chain.mcpFailed": 'MCP server "{{name}}" nije uspio. Napomena: OpenCode još ne podržava MCP autentifikaciju.',
"error.chain.providerAuthFailed": "Autentifikacija provajdera nije uspjela ({{provider}}): {{message}}",
"error.chain.providerInitFailed":
@@ -613,7 +610,7 @@ export const dict = {
"home.sessions.group.yesterday": "Jučer",
"home.sessions.group.older": "Starije",
"home.providerTip":
"Poveži se s više od 75 provajdera da koristiš druge modele, uključujući Claude, GPT, Gemini i druge",
"Povežite se s više od 75 pružalaca usluga kako biste koristili druge modele, uključujući Claude, GPT, Gemini i druge",
"session.tab.session": "Sesija",
"session.tab.review": "Pregled",
@@ -629,11 +626,11 @@ export const dict = {
"session.review.change.other": "Izmjene",
"session.review.loadingChanges": "Učitavanje izmjena...",
"session.review.empty": "Još nema izmjena u ovoj sesiji",
"session.review.noVcs": "Nije otkriven Git sistem za kontrolu verzija, pa se promjene ne prikazuju",
"session.review.noVcs": "Nije detektovan Git sistem kontrole verzija, promjene se ne prikazuju",
"session.review.noSnapshot":
"Praćenje snimaka (snapshot) je onemogućeno u konfiguraciji, pa promjene sesije nisu dostupne",
"session.review.noChanges": "Nema izmjena",
"session.review.noUncommittedChanges": "Još nema promjena koje nisu commitovane",
"session.review.noUncommittedChanges": "Još nema nepotvrđenih promjena",
"session.review.noBranchChanges": "Još nema promjena na grani",
"session.files.selectToOpen": "Odaberi datoteku za otvaranje",
@@ -654,17 +651,14 @@ export const dict = {
"session.question.minimize": "Minimiziraj pitanje",
"session.question.restore": "Vrati pitanje",
"session.question.pending.one": "{{count}} pitanje na čekanju",
"session.question.pending.few": "{{count}} pitanja na čekanju",
"session.question.pending.other": "{{count}} pitanja na čekanju",
"session.followupDock.summary.one": "{{count}} poruka na čekanju",
"session.followupDock.summary.few": "{{count}} poruke na čekanju",
"session.followupDock.summary.other": "{{count}} poruka na čekanju",
"session.followupDock.sendNow": "Pošalji sada",
"session.followupDock.edit": "Uredi",
"session.followupDock.collapse": "Sažmi poruke na čekanju",
"session.followupDock.expand": "Proširi poruke na čekanju",
"session.revertDock.summary.one": "{{count}} vraćena poruka",
"session.revertDock.summary.few": "{{count}} vraćene poruke",
"session.revertDock.summary.other": "{{count}} vraćenih poruka",
"session.revertDock.collapse": "Sažmi vraćene poruke",
"session.revertDock.expand": "Proširi vraćene poruke",
@@ -722,7 +716,7 @@ export const dict = {
"terminal.close": "Zatvori terminal",
"terminal.connectionLost.title": "Veza prekinuta",
"terminal.connectionLost.description":
"Veza s terminalom je prekinuta. Ovo se može desiti kada se server ponovo pokrene.",
"Veza s terminalom je prekinuta. Ovo se može desiti kada se server restartuje.",
"common.closeTab": "Zatvori karticu",
"common.dismiss": "Odbaci",
@@ -730,7 +724,7 @@ export const dict = {
"common.moreOptions": "Više opcija",
"common.learnMore": "Saznaj više",
"common.rename": "Preimenuj",
"common.reset": "Vrati na početno stanje",
"common.reset": "Resetuj",
"common.archive": "Arhiviraj",
"common.delete": "Izbriši",
"common.close": "Zatvori",
@@ -787,7 +781,7 @@ export const dict = {
"settings.general.row.font.title": "Font za kod",
"settings.general.row.font.description": "Prilagodi font koji se koristi u blokovima koda",
"settings.general.row.terminalFont.title": "Font terminala",
"settings.general.row.terminalFont.description": "Prilagodi font koji se koristi u terminalu",
"settings.general.row.terminalFont.description": "Prilagodite font koji se koristi u terminalu",
"settings.general.row.uiFont.title": "UI font",
"settings.general.row.uiFont.description": "Prilagodi font koji se koristi u cijelom interfejsu",
"settings.general.row.followup.title": "Ponašanje nadovezivanja",
@@ -822,16 +816,15 @@ export const dict = {
"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",
"Koristite nove kartice i raspored početne stranice. Ograničeno vrijeme možete se prebacivati između rasporeda.",
"settings.general.row.newInterfaceNotice.title": "Sada koristite 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",
"settings.general.row.wayland.title": "Koristi nativni Wayland",
"settings.general.row.wayland.description":
"Onemogući rezervni X11 način rada na Waylandu. Zahtijeva ponovno pokretanje.",
"settings.general.row.wayland.description": "Onemogući X11 fallback na Waylandu. Zahtijeva restart.",
"settings.general.row.wayland.tooltip":
"Na Linuxu sa monitorima miješanih stopa osvježavanja, nativni Wayland može biti stabilniji.",
@@ -947,7 +940,7 @@ export const dict = {
"settings.mcp.description": "MCP postavke će se ovdje moći podešavati.",
"settings.permissions.title": "Dozvole",
"settings.permissions.description": "Kontroliši koje alate server smije koristiti zadano.",
"settings.permissions.description": "Kontroliši koje alate server smije koristiti po defaultu.",
"settings.permissions.section.tools": "Alati",
"settings.permissions.toast.updateFailed.title": "Neuspjelo ažuriranje dozvola",
@@ -959,7 +952,7 @@ export const dict = {
"settings.permissions.tool.read.description": "Čitanje datoteke (podudara se s putanjom datoteke)",
"settings.permissions.tool.edit.title": "Uređivanje",
"settings.permissions.tool.edit.description":
"Mijenjanje datoteka, uključujući uređivanje, pisanje, zakrpe i višestruke izmjene",
"Mijenjanje datoteka, uključujući izmjene, pisanja, patch-eve i multi-izmjene",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "Podudaranje datoteka pomoću glob šablona",
"settings.permissions.tool.grep.title": "Grep",
@@ -995,26 +988,26 @@ export const dict = {
"workspace.type.sandbox": "sandbox",
"workspace.create.failed.title": "Neuspješno kreiranje radnog prostora",
"workspace.delete.failed.title": "Neuspješno brisanje radnog prostora",
"workspace.resetting.title": "Vraćanje radnog prostora na početno stanje",
"workspace.resetting.title": "Resetovanje radnog prostora",
"workspace.resetting.description": "Ovo može potrajati minut.",
"workspace.reset.failed.title": "Neuspješno vraćanje radnog prostora na početno stanje",
"workspace.reset.success.title": "Radni prostor vraćen na početno stanje",
"workspace.reset.failed.title": "Neuspješno resetovanje radnog prostora",
"workspace.reset.success.title": "Radni prostor resetovan",
"workspace.reset.success.description": "Radni prostor sada odgovara podrazumijevanoj grani.",
"workspace.error.stillPreparing": "Radni prostor se još priprema",
"workspace.status.checking": "Provjera promjena koje nisu commitovane...",
"workspace.status.checking": "Provjera neobjedinjenih promjena...",
"workspace.status.error": "Nije moguće provjeriti git status.",
"workspace.status.clean": "Nisu pronađene promjene koje nisu commitovane.",
"workspace.status.dirty": "Pronađene su promjene koje nisu commitovane u ovom radnom prostoru.",
"workspace.status.clean": "Nisu pronađene neobjedinjene promjene.",
"workspace.status.dirty": "Pronađene su neobjedinjene promjene u ovom radnom prostoru.",
"workspace.delete.title": "Izbriši radni prostor",
"workspace.delete.confirm": 'Izbriši radni prostor "{{name}}"?',
"workspace.delete.button": "Izbriši radni prostor",
"workspace.reset.title": "Vrati radni prostor na početno stanje",
"workspace.reset.confirm": 'Vrati radni prostor "{{name}}" na početno stanje?',
"workspace.reset.button": "Vrati radni prostor na početno stanje",
"workspace.reset.title": "Resetuj radni prostor",
"workspace.reset.confirm": 'Resetuj radni prostor "{{name}}"?',
"workspace.reset.button": "Resetuj radni prostor",
"workspace.reset.archived.none": "Nijedna aktivna sesija neće biti arhivirana.",
"workspace.reset.archived.one": "1 sesija će biti arhivirana.",
"workspace.reset.archived.many": "Biće arhivirano {{count}} sesija.",
"workspace.reset.note": "Ovo će vratiti radni prostor na stanje podrazumijevane grane.",
"workspace.reset.note": "Ovo će resetovati radni prostor da odgovara podrazumijevanoj grani.",
"common.open": "Otvori",
"dialog.releaseNotes.action.getStarted": "Započni",
"dialog.releaseNotes.action.next": "Sljedeće",
@@ -1027,8 +1020,8 @@ export const dict = {
"common.time.minutesAgo.short": "prije {{count}} min",
"common.time.hoursAgo.short": "prije {{count}} h",
"common.time.daysAgo.short": "prije {{count}} d",
"settings.providers.connected.environmentDescription": "Povezano s tvojim varijablama okruženja",
"settings.providers.custom.description": "Dodaj provajdera kompatibilnog s OpenAI putem baznog URL-a.",
"settings.providers.connected.environmentDescription": "Povezano sa vašim varijablama okruženja",
"settings.providers.custom.description": "Dodajte provajdera kompatibilnog s OpenAI putem osnovnog URL-a.",
"app.server.unreachable": "Nije moguće pristupiti {{server}}",
"app.server.retrying": "Automatski ponovni pokušaj...",
@@ -1037,16 +1030,13 @@ export const dict = {
"dialog.server.add.passwordPlaceholder": "lozinka",
"server.row.noUsername": "nema korisničkog imena",
"session.review.noVcs.createGit.title": "Kreiraj Git repozitorij",
"session.review.noVcs.createGit.description": "Prati, pregledaj i poništi promjene u ovom projektu",
"session.review.noVcs.createGit.description": "Pratite, pregledajte i poništite promjene u ovom projektu",
"session.review.noVcs.createGit.actionLoading": "Kreiranje Git repozitorija...",
"session.review.noVcs.createGit.action": "Kreiraj Git repozitorij",
"session.todo.progress": "{{done}} od {{total}} zadataka završeno",
"session.question.progress": "{{current}} od {{total}} pitanja",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "File Explorer",
"session.header.reveal.finder": "Prikaži u Finderu",
"session.header.reveal.fileExplorer": "Prikaži u File Exploreru",
"session.header.reveal.containingFolder": "Otvori fasciklu koja sadrži ovu stavku",
"session.header.open.fileManager": "File Manager",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
+38 -46
View File
@@ -102,7 +102,6 @@ export const dict = {
"dialog.provider.empty": "Ingen udbydere fundet",
"dialog.provider.group.popular": "Populære",
"dialog.provider.group.other": "Andre",
"dialog.provider.custom.label": "Brugerdefineret OpenAI-kompatibel udbyder",
"dialog.provider.tag.recommended": "Anbefalet",
"dialog.provider.opencode.note": "Udvalgte modeller inklusive Claude, GPT, Gemini og flere",
"dialog.provider.opencode.tagline": "Pålidelige optimerede modeller",
@@ -123,7 +122,6 @@ export const dict = {
"dialog.model.unpaid.freeModels.title": "Gratis modeller leveret af OpenCode",
"dialog.model.unpaid.addMore.title": "Tilføj flere modeller fra populære udbydere",
"dialog.model.unpaid.viewMoreProviders": "Se mere end 70 yderligere udbydere",
"dialog.provider.viewAll": "Vis flere udbydere",
@@ -135,8 +133,8 @@ export const dict = {
"provider.connect.status.waiting": "Venter på godkendelse...",
"provider.connect.status.failed": "Godkendelse mislykkedes: {{error}}",
"provider.connect.apiKey.description":
"Indtast din API-nøgle til {{provider}} for at forbinde din konto og bruge modeller fra {{provider}} i OpenCode.",
"provider.connect.apiKey.label": "API-nøgle til {{provider}}",
"Indtast din {{provider}} API-nøgle for at forbinde din konto og bruge {{provider}} modeller i OpenCode.",
"provider.connect.apiKey.label": "{{provider}} API-nøgle",
"provider.connect.apiKey.placeholder": "API-nøgle",
"provider.connect.apiKey.required": "API-nøgle er påkrævet",
"provider.connect.opencodeZen.line1":
@@ -149,7 +147,7 @@ export const dict = {
"provider.connect.oauth.code.visit.prefix": "Besøg ",
"provider.connect.oauth.code.visit.link": "dette link",
"provider.connect.oauth.code.visit.suffix":
" for at hente din godkendelseskode, forbinde din konto og bruge modeller fra {{provider}} i OpenCode.",
" for at hente din godkendelseskode for at forbinde din konto og bruge {{provider}} modeller i OpenCode.",
"provider.connect.oauth.code.label": "{{method}} godkendelseskode",
"provider.connect.oauth.code.placeholder": "Godkendelseskode",
"provider.connect.oauth.code.required": "Godkendelseskode er påkrævet",
@@ -157,10 +155,10 @@ export const dict = {
"provider.connect.oauth.auto.visit.prefix": "Besøg ",
"provider.connect.oauth.auto.visit.link": "dette link",
"provider.connect.oauth.auto.visit.suffix":
" og indtast koden nedenfor for at forbinde din konto og bruge modeller fra {{provider}} i OpenCode.",
" og indtast koden nedenfor for at forbinde din konto og bruge {{provider}} modeller i OpenCode.",
"provider.connect.oauth.auto.confirmationCode": "Bekræftelseskode",
"provider.connect.toast.connected.title": "{{provider}} forbundet",
"provider.connect.toast.connected.description": "Modeller fra {{provider}} er nu tilgængelige.",
"provider.connect.toast.connected.description": "{{provider}} modeller er nu tilgængelige.",
"provider.custom.title": "Brugerdefineret udbyder",
"provider.custom.description.prefix": "Konfigurer en OpenAI-kompatibel udbyder. Se ",
@@ -219,9 +217,9 @@ export const dict = {
"model.tooltip.inputs": "Input",
"model.tooltip.model": "Model",
"model.tooltip.provider": "Udbyder",
"model.tooltip.reasoning": "Ræsonnering",
"model.tooltip.reasoning.allowed": "Tillader ræsonnering",
"model.tooltip.reasoning.none": "Ingen ræsonnering",
"model.tooltip.reasoning": "Tænkning",
"model.tooltip.reasoning.allowed": "Tillader tænkning",
"model.tooltip.reasoning.none": "Ingen tænkning",
"model.tooltip.context": "Kontekstgrænse {{limit}}",
"common.search.placeholder": "Søg",
"common.goBack": "Gå tilbage",
@@ -232,7 +230,7 @@ export const dict = {
"common.clear": "Ryd",
"common.connect": "Forbind",
"common.disconnect": "Frakobl",
"common.continue": "Fortsæt",
"common.continue": "Indsend",
"common.submit": "Indsend",
"common.save": "Gem",
"common.saving": "Gemmer...",
@@ -255,7 +253,7 @@ export const dict = {
"prompt.example.3": "Ret ødelagte tests",
"prompt.example.4": "Forklar hvordan godkendelse fungerer",
"prompt.example.5": "Find og ret sikkerhedshuller",
"prompt.example.6": "Tilføj enhedstests for brugertjenesten",
"prompt.example.6": "Tilføj enhedstests for brugerservice",
"prompt.example.7": "Refaktorer denne funktion så den er mere læsbar",
"prompt.example.8": "Hvad betyder denne fejl?",
"prompt.example.9": "Hjælp mig med at debugge dette problem",
@@ -298,7 +296,6 @@ export const dict = {
"prompt.action.stop": "Stop",
"prompt.toast.pasteUnsupported.title": "Ikke understøttet vedhæftning",
"prompt.toast.attachmentDuplicate.title": "Denne fil er allerede uploadet",
"prompt.toast.pasteUnsupported.description": "Kun billeder, PDF'er eller tekstfiler kan vedhæftes her.",
"prompt.toast.modelAgentRequired.title": "Vælg en agent og model",
"prompt.toast.modelAgentRequired.description": "Vælg en agent og model før du sender en forespørgsel.",
@@ -337,7 +334,7 @@ export const dict = {
"dialog.server.search.placeholder": "Søg servere",
"dialog.server.empty": "Ingen servere endnu",
"dialog.server.add.title": "Tilføj en server",
"dialog.server.add.url": "Serveradresse",
"dialog.server.add.url": "Server URL",
"dialog.server.add.placeholder": "http://localhost:4096",
"dialog.server.add.error": "Kunne ikke forbinde til server",
"dialog.server.add.checking": "Tjekker...",
@@ -349,7 +346,7 @@ export const dict = {
"dialog.server.edit.title": "Rediger server",
"dialog.server.default.title": "Standardserver",
"dialog.server.default.description":
"Opret forbindelse til denne server, når appen starter, i stedet for at starte en lokal server. Kræver genstart.",
"Forbind til denne server ved start af app i stedet for at starte en lokal server. Kræver genstart.",
"dialog.server.default.none": "Ingen server valgt",
"dialog.server.default.set": "Sæt nuværende server som standard",
"dialog.server.default.clear": "Ryd",
@@ -464,8 +461,8 @@ export const dict = {
"context.stats.usage": "Forbrug",
"context.stats.inputTokens": "Input-tokens",
"context.stats.outputTokens": "Output-tokens",
"context.stats.reasoningTokens": "Ræsonneringstokens",
"context.stats.cacheTokens": "Cachetokens (læsning/skrivning)",
"context.stats.reasoningTokens": "Tænke Tokens",
"context.stats.cacheTokens": "Cache Tokens (læs/skriv)",
"context.stats.userMessages": "Brugerbeskeder",
"context.stats.assistantMessages": "Assistentbeskeder",
"context.stats.totalCost": "Samlede omkostninger",
@@ -568,7 +565,7 @@ export const dict = {
"error.chain.responseBody": "Svarindhold:\n{{body}}",
"error.chain.didYouMean": "Mente du: {{suggestions}}",
"error.chain.modelNotFound": "Model ikke fundet: {{provider}}/{{model}}",
"error.chain.checkConfig": "Kontrollér udbyder- og modelnavnene i din konfiguration (opencode.json)",
"error.chain.checkConfig": "Tjek dine konfigurations (opencode.json) udbyder/modelnavne",
"error.chain.mcpFailed": 'MCP-server "{{name}}" fejlede. Bemærk, OpenCode understøtter ikke MCP-godkendelse endnu.',
"error.chain.providerAuthFailed": "Udbydergodkendelse mislykkedes ({{provider}}): {{message}}",
"error.chain.providerInitFailed":
@@ -621,12 +618,12 @@ export const dict = {
"session.error.notFound.description": "Denne fane henviser til en session, der ikke længere findes på denne server.",
"session.error.notFound.closeTab": "Luk fane",
"session.error.serverConnection": "Kan ikke oprette forbindelse til denne server",
"session.review.filesChanged": "{{count}} ændrede filer",
"session.review.filesChanged": "{{count}} Filer ændret",
"session.review.change.one": "Ændring",
"session.review.change.other": "Ændringer",
"session.review.loadingChanges": "Indlæser ændringer...",
"session.review.empty": "Ingen ændringer i denne session endnu",
"session.review.noVcs": "Intet Git-versionsstyringssystem fundet, ændringer vises ikke",
"session.review.noVcs": "Intet Git versionsstyringssystem fundet, ændringer vises ikke",
"session.review.noSnapshot":
"Snapshot-sporing er deaktiveret i konfigurationen, så sessionsændringer er ikke tilgængelige",
"session.review.noChanges": "Ingen ændringer",
@@ -752,7 +749,7 @@ export const dict = {
"settings.tab.general": "Generelt",
"settings.tab.shortcuts": "Genveje",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "WSL-integration",
"settings.desktop.wsl.title": "WSL integration",
"settings.desktop.wsl.description": "Kør OpenCode-serveren inde i WSL på Windows.",
"settings.general.section.appearance": "Udseende",
@@ -773,16 +770,15 @@ export const dict = {
"settings.general.row.appearance.title": "Udseende",
"settings.general.row.appearance.description": "Tilpas hvordan OpenCode ser ud på din enhed",
"settings.general.row.colorScheme.title": "Farveskema",
"settings.general.row.colorScheme.description":
"Vælg, om OpenCode skal følge systemtemaet eller bruge et lyst eller mørkt tema",
"settings.general.row.colorScheme.description": "Vælg om OpenCode følger systemets, lyst eller mørkt tema",
"settings.general.row.theme.title": "Tema",
"settings.general.row.theme.description": "Tilpas OpenCodes tema.",
"settings.general.row.theme.description": "Tilpas hvordan OpenCode er temabestemt.",
"settings.general.row.font.title": "Kode-skrifttype",
"settings.general.row.font.description": "Tilpas skrifttypen, der bruges i kodeblokke",
"settings.general.row.terminalFont.title": "Terminalskrifttype",
"settings.general.row.terminalFont.description": "Tilpas den skrifttype, der bruges i terminalen",
"settings.general.row.uiFont.title": "UI-skrifttype",
"settings.general.row.uiFont.description": "Tilpas skrifttypen, der bruges i hele brugergrænsefladen",
"settings.general.row.uiFont.description": "Tilpas skrifttypen, der bruges i hele brugerfladen",
"settings.general.row.followup.title": "Opfølgningsadfærd",
"settings.general.row.followup.description": "Vælg om opfølgende forespørgsler skal styre straks eller vente i kø",
"settings.general.row.followup.option.queue": "Kø",
@@ -800,11 +796,10 @@ export const dict = {
"settings.general.row.mobileTitlebarBottom.title": "Navigation nederst",
"settings.general.row.mobileTitlebarBottom.description":
"Placer titellinjen og sessionsfanerne nederst på skærmen på mobilenheder",
"settings.general.row.showCustomAgents.title": "Vis agent",
"settings.general.row.showCustomAgents.description":
"Skift mellem agenter i promptfeltet. Når vælgeren er skjult, bruges Build-agenten som standard.",
"settings.general.row.reasoningSummaries.title": "Vis ræsonneringsoversigter",
"settings.general.row.reasoningSummaries.description": "Vis oversigter over modellens ræsonnering på tidslinjen",
"settings.general.row.showCustomAgents.title": "Brugerdefinerede agenter",
"settings.general.row.showCustomAgents.description": "Vis agentvælgeren i promptfeltet",
"settings.general.row.reasoningSummaries.title": "Vis tænkeoversigter",
"settings.general.row.reasoningSummaries.description": "Vis model tænkeoversigter i tidslinjen",
"settings.general.row.shellToolPartsExpanded.title": "Udvid shell-værktøjsdele",
"settings.general.row.shellToolPartsExpanded.description": "Vis shell-værktøjsdele udvidet som standard i tidslinjen",
@@ -820,13 +815,13 @@ export const dict = {
"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",
"settings.general.row.wayland.title": "Brug native Wayland",
"settings.general.row.wayland.description": "Deaktiver X11-fallback på Wayland. Kræver genstart.",
"settings.general.row.wayland.tooltip":
"På Linux med skærme med forskellige opdateringshastigheder kan indbygget Wayland være mere stabilt.",
"På Linux med skærme med blandet opdateringshastighed kan native Wayland være mere stabilt.",
"settings.general.row.releaseNotes.title": "Udgivelsesnoter",
"settings.general.row.releaseNotes.description": 'Vis pop op-vinduer med "Hvad er nyt" efter opdateringer',
"settings.general.row.releaseNotes.description": 'Vis "Hvad er nyt"-popups efter opdateringer',
"settings.updates.row.startup.title": "Tjek for opdateringer ved opstart",
"settings.updates.row.startup.description": "Tjek automatisk for opdateringer, når OpenCode starter",
@@ -949,9 +944,9 @@ export const dict = {
"settings.permissions.tool.read.description": "Læsning af en fil (matcher filstien)",
"settings.permissions.tool.edit.title": "Rediger",
"settings.permissions.tool.edit.description":
"Rediger filer, herunder med redigeringer, skrivning, patches og multiredigeringer",
"Ændre filer, herunder redigeringer, skrivninger, patches og multi-redigeringer",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "Find filer ved hjælp af globmønstre",
"settings.permissions.tool.glob.description": "Match filer ved hjælp af glob-mønstre",
"settings.permissions.tool.grep.title": "Grep",
"settings.permissions.tool.grep.description": "Søg i filindhold ved hjælp af regulære udtryk",
"settings.permissions.tool.list.title": "Liste",
@@ -964,8 +959,8 @@ export const dict = {
"settings.permissions.tool.skill.description": "Indlæs en færdighed efter navn",
"settings.permissions.tool.lsp.title": "LSP",
"settings.permissions.tool.lsp.description": "Kør sprogserverforespørgsler",
"settings.permissions.tool.todowrite.title": "Skriv to-do",
"settings.permissions.tool.todowrite.description": "Opdater to-do-listen",
"settings.permissions.tool.todowrite.title": "Skriv To-do",
"settings.permissions.tool.todowrite.description": "Opdater to-do listen",
"settings.permissions.tool.webfetch.title": "Webhentning",
"settings.permissions.tool.webfetch.description": "Hent indhold fra en URL",
"settings.permissions.tool.websearch.title": "Websøgning",
@@ -992,7 +987,7 @@ export const dict = {
"workspace.reset.success.description": "Arbejdsområdet matcher nu hovedgrenen.",
"workspace.error.stillPreparing": "Arbejdsområdet er stadig ved at blive klargjort",
"workspace.status.checking": "Tjekker for uflettede ændringer...",
"workspace.status.error": "Kunne ikke bekræfte Git-status.",
"workspace.status.error": "Kunne ikke bekræfte git-status.",
"workspace.status.clean": "Ingen uflettede ændringer fundet.",
"workspace.status.dirty": "Uflettede ændringer fundet i dette arbejdsområde.",
"workspace.delete.title": "Slet arbejdsområde",
@@ -1034,9 +1029,6 @@ export const dict = {
"session.question.progress": "{{current}} af {{total}} spørgsmål",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "Stifinder",
"session.header.reveal.finder": "Vis i Finder",
"session.header.reveal.fileExplorer": "Vis i Stifinder",
"session.header.reveal.containingFolder": "Åbn den overordnede mappe",
"session.header.open.fileManager": "Filhåndtering",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
@@ -1057,11 +1049,11 @@ export const dict = {
"debugBar.nav.tip":
"Sidste gennemførte ruteovergang, der berører en sessionsside, målt fra routerstart til den første optegning efter den falder til ro.",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "Rullende antal billedrammer pr. sekund over de sidste 5 sekunder.",
"debugBar.fps.tip": "Rullende billeder pr. sekund over de sidste 5 sekunder.",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "Længste billedrammetid over de sidste 5 sekunder.",
"debugBar.frame.tip": "Værste billedtid over de sidste 5 sekunder.",
"debugBar.jank.label": "JANK",
"debugBar.jank.tip": "Billedrammer over 32 ms i de sidste 5 sekunder.",
"debugBar.jank.tip": "Billeder over 32ms i de sidste 5 sekunder.",
"debugBar.long.label": "LONG",
"debugBar.long.tip": "Blokeret tid og antal lange opgaver i de sidste 5 sekunder. Maks opgave: {{max}}.",
"debugBar.delay.label": "DELAY",
@@ -1072,8 +1064,8 @@ export const dict = {
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "Kumulativt layoutskift for den nuværende app-levetid.",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "Brugt JS-heap sammenholdt med heapgrænsen. Kun Chromium.",
"debugBar.mem.tip": "Brugt JS-heap sammenholdt med heapgrænsen. {{used}} af {{limit}}.",
"debugBar.mem.tipUnavailable": "Brugt JS-heap vs heap-grænse. Kun Chromium.",
"debugBar.mem.tip": "Brugt JS-heap vs heap-grænse. {{used}} af {{limit}}.",
"common.key.ctrl": "Ctrl",
"common.key.alt": "Alt",
"common.key.shift": "Shift",
+94 -102
View File
@@ -98,14 +98,13 @@ export const dict = {
"dialog.provider.empty": "Keine Anbieter gefunden",
"dialog.provider.group.popular": "Beliebt",
"dialog.provider.group.other": "Andere",
"dialog.provider.custom.label": "Benutzerdefinierter OpenAI-kompatibler Anbieter",
"dialog.provider.tag.recommended": "Empfohlen",
"dialog.provider.opencode.note": "Kuratierte Modelle inklusive Claude, GPT, Gemini und mehr",
"dialog.provider.opencode.tagline": "Zuverlässige, optimierte Modelle",
"dialog.provider.opencodeGo.tagline": "Kostengünstiges Abo für alle",
"dialog.provider.anthropic.note": "Direkter Zugriff auf Claude-Modelle, einschließlich Pro und Max",
"dialog.provider.copilot.note": "KI-Modelle zur Programmierunterstützung über GitHub Copilot",
"dialog.provider.openai.note": "GPT-Modelle für schnelle, leistungsfähige allgemeine KI-Aufgaben",
"dialog.provider.anthropic.note": "Mit Claude Pro/Max oder API-Schlüssel verbinden",
"dialog.provider.copilot.note": "Mit Copilot oder API-Schlüssel verbinden",
"dialog.provider.openai.note": "Mit ChatGPT Pro/Plus oder API-Schlüssel verbinden",
"dialog.provider.google.note": "Gemini-Modelle für schnelle, strukturierte Antworten",
"dialog.provider.openrouter.note": "Zugriff auf alle unterstützten Modelle über einen Anbieter",
"dialog.provider.vercel.note": "Einheitlicher Zugriff auf KI-Modelle mit intelligentem Routing",
@@ -117,18 +116,17 @@ export const dict = {
"dialog.model.manage.provider.toggle": "Alle {{provider}}-Modelle umschalten",
"dialog.model.unpaid.freeModels.title": "Kostenlose Modelle von OpenCode",
"dialog.model.unpaid.addMore.title": "Weitere Modelle von beliebten Anbietern hinzufügen",
"dialog.model.unpaid.viewMoreProviders": "Über 70 weitere Anbieter anzeigen",
"dialog.provider.viewAll": "Mehr Anbieter anzeigen",
"provider.connect.title": "{{provider}} verbinden",
"provider.connect.title.anthropicProMax": "Mit Claude Pro/Max anmelden",
"provider.connect.selectMethod": "Anmeldemethode für {{provider}} auswählen.",
"provider.connect.method.apiKey": "API-Schlüssel",
"provider.connect.status.inProgress": "Autorisierung läuft",
"provider.connect.status.waiting": "Warten auf Autorisierung",
"provider.connect.status.inProgress": "Autorisierung läuft...",
"provider.connect.status.waiting": "Warten auf Autorisierung...",
"provider.connect.status.failed": "Autorisierung fehlgeschlagen: {{error}}",
"provider.connect.apiKey.description":
"Geben Sie Ihren API-Schlüssel für {{provider}} ein, um Ihr Konto zu verbinden und {{provider}}-Modelle in OpenCode zu nutzen.",
"provider.connect.apiKey.label": "API-Schlüssel für {{provider}}",
"Geben Sie Ihren {{provider}} API-Schlüssel ein, um Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.",
"provider.connect.apiKey.label": "{{provider}} API-Schlüssel",
"provider.connect.apiKey.placeholder": "API-Schlüssel",
"provider.connect.apiKey.required": "API-Schlüssel ist erforderlich",
"provider.connect.opencodeZen.line1":
@@ -141,21 +139,21 @@ export const dict = {
"provider.connect.oauth.code.visit.prefix": "Besuchen Sie ",
"provider.connect.oauth.code.visit.link": "diesen Link",
"provider.connect.oauth.code.visit.suffix":
", um Ihren Autorisierungscode zu erhalten, Ihr Konto zu verbinden und {{provider}}-Modelle in OpenCode zu nutzen.",
"provider.connect.oauth.code.label": "{{method}}-Autorisierungscode",
", um Ihren Autorisierungscode zu erhalten, Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.",
"provider.connect.oauth.code.label": "{{method}} Autorisierungscode",
"provider.connect.oauth.code.placeholder": "Autorisierungscode",
"provider.connect.oauth.code.required": "Autorisierungscode ist erforderlich",
"provider.connect.oauth.code.invalid": "Ungültiger Autorisierungscode",
"provider.connect.oauth.auto.visit.prefix": "Besuchen Sie ",
"provider.connect.oauth.auto.visit.link": "diesen Link",
"provider.connect.oauth.auto.visit.suffix":
" und geben Sie den untenstehenden Code ein, um Ihr Konto zu verbinden und {{provider}}-Modelle in OpenCode zu nutzen.",
" und geben Sie den untenstehenden Code ein, um Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.",
"provider.connect.oauth.auto.confirmationCode": "Bestätigungscode",
"provider.connect.toast.connected.title": "{{provider}} verbunden",
"provider.connect.toast.connected.description": "{{provider}}-Modelle sind jetzt verfügbar.",
"provider.connect.toast.connected.description": "{{provider}} Modelle sind jetzt verfügbar.",
"provider.custom.title": "Benutzerdefinierter Anbieter",
"provider.custom.description.prefix": "Konfigurieren Sie einen OpenAI-kompatiblen Anbieter. Siehe die ",
"provider.custom.description.link": "Dokumentation zur Anbieterkonfiguration",
"provider.custom.description.link": "Anbieter-Konfigurationsdokumente",
"provider.custom.description.suffix": ".",
"provider.custom.field.providerID.label": "Anbieter-ID",
"provider.custom.field.providerID.placeholder": "myprovider",
@@ -210,32 +208,32 @@ export const dict = {
"model.tooltip.model": "Modell",
"model.tooltip.provider": "Anbieter",
"model.tooltip.reasoning": "Reasoning",
"model.tooltip.reasoning.allowed": "Reasoning möglich",
"model.tooltip.reasoning.allowed": "Erlaubt Reasoning",
"model.tooltip.reasoning.none": "Kein Reasoning",
"model.tooltip.context": "Kontextlimit {{limit}}",
"common.search.placeholder": "Suchen",
"common.goBack": "Zurück",
"common.goForward": "Vorwärts navigieren",
"common.loading": "Wird geladen",
"common.loading.ellipsis": "",
"common.loading": "Laden",
"common.loading.ellipsis": "...",
"common.cancel": "Abbrechen",
"common.clear": "Leeren",
"common.connect": "Verbinden",
"common.disconnect": "Trennen",
"common.continue": "Weiter",
"common.continue": "Absenden",
"common.submit": "Absenden",
"common.save": "Speichern",
"common.saving": "Wird gespeichert",
"common.saving": "Speichert...",
"common.default": "Standard",
"common.attachment": "Anhang",
"prompt.placeholder.shell": "Shell-Befehl eingeben {{example}}",
"prompt.placeholder.normal": 'Beliebige Frage stellen… "{{example}}"',
"prompt.placeholder.simple": "Beliebige Frage stellen…",
"prompt.placeholder.shell": "Shell-Befehl eingeben... {{example}}",
"prompt.placeholder.normal": 'Fragen Sie alles... "{{example}}"',
"prompt.placeholder.simple": "Fragen Sie alles...",
"prompt.placeholder.summarizeComments": "Kommentare zusammenfassen…",
"prompt.placeholder.summarizeComment": "Kommentar zusammenfassen…",
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "Esc zum Verlassen",
"prompt.mode.shell.exit": "esc zum Verlassen",
"session.child.promptDisabled": "Unteragenten-Sitzungen können keine Prompts erhalten.",
"session.child.backToParent": "Zurück zur Hauptsitzung.",
"prompt.example.1": "Ein TODO in der Codebasis beheben",
@@ -250,8 +248,8 @@ export const dict = {
"prompt.example.10": "API-Dokumentation generieren",
"prompt.example.11": "Datenbankabfragen optimieren",
"prompt.example.12": "Eingabevalidierung hinzufügen",
"prompt.example.13": "Neue Komponente erstellen für",
"prompt.example.14": "Wie stelle ich dieses Projekt bereit?",
"prompt.example.13": "Neue Komponente erstellen für...",
"prompt.example.14": "Wie deploye ich dieses Projekt?",
"prompt.example.15": "Meinen Code auf Best Practices überprüfen",
"prompt.example.16": "Fehlerbehandlung zu dieser Funktion hinzufügen",
"prompt.example.17": "Erkläre dieses Regex-Muster",
@@ -261,12 +259,12 @@ export const dict = {
"prompt.example.21": "Hilf mir, ein Migrationsskript zu schreiben",
"prompt.example.22": "Caching für diesen Endpunkt implementieren",
"prompt.example.23": "Paginierung zu dieser Liste hinzufügen",
"prompt.example.24": "CLI-Befehl erstellen für",
"prompt.example.24": "CLI-Befehl erstellen für...",
"prompt.example.25": "Wie funktionieren Umgebungsvariablen hier?",
"prompt.popover.emptyResults": "Keine passenden Ergebnisse",
"prompt.popover.emptyCommands": "Keine passenden Befehle",
"prompt.dropzone.label": "Bilder, PDFs oder Textdateien hier ablegen",
"prompt.dropzone.file.label": "Ablegen, um die Datei mit @ zu erwähnen",
"prompt.dropzone.file.label": "Ablegen zum @Erwähnen der Datei",
"prompt.slash.badge.custom": "benutzerdefiniert",
"prompt.slash.badge.skill": "Skill",
"prompt.slash.badge.mcp": "MCP",
@@ -282,14 +280,13 @@ export const dict = {
"prompt.menu.shellCommand": "Shell-Befehl",
"prompt.attachment.remove": "Anhang entfernen",
"prompt.action.send": "Senden",
"prompt.action.stop": "Stoppen",
"prompt.action.stop": "Stopp",
"prompt.toast.pasteUnsupported.title": "Nicht unterstützter Anhang",
"prompt.toast.attachmentDuplicate.title": "Diese Datei wurde bereits hochgeladen",
"prompt.toast.pasteUnsupported.description": "Hier können nur Bilder, PDFs oder Textdateien angehängt werden.",
"prompt.toast.modelAgentRequired.title": "Wählen Sie einen Agenten und ein Modell",
"prompt.toast.modelAgentRequired.description":
"Wählen Sie einen Agenten und ein Modell, bevor Sie eine Eingabe senden.",
"prompt.toast.worktreeCreateFailed.title": "Der Worktree konnte nicht erstellt werden",
"prompt.toast.worktreeCreateFailed.title": "Worktree konnte nicht erstellt werden",
"prompt.toast.sessionCreateFailed.title": "Sitzung konnte nicht erstellt werden",
"prompt.toast.shellSendFailed.title": "Shell-Befehl konnte nicht gesendet werden",
"prompt.toast.commandSendFailed.title": "Befehl konnte nicht gesendet werden",
@@ -302,7 +299,7 @@ export const dict = {
"dialog.plugins.empty": "In opencode.json konfigurierte Plugins",
"mcp.status.connected": "verbunden",
"mcp.status.failed": "fehlgeschlagen",
"mcp.status.needs_auth": "Authentifizierung erforderlich",
"mcp.status.needs_auth": "benötigt Authentifizierung",
"mcp.auth.clickToAuthenticate": "Zum Authentifizieren klicken",
"mcp.status.disabled": "deaktiviert",
"dialog.fork.empty": "Keine Nachrichten zum Abzweigen vorhanden",
@@ -318,10 +315,10 @@ export const dict = {
"dialog.server.search.placeholder": "Server durchsuchen",
"dialog.server.empty": "Noch keine Server",
"dialog.server.add.title": "Server hinzufügen",
"dialog.server.add.url": "Serveradresse",
"dialog.server.add.url": "Server-URL",
"dialog.server.add.placeholder": "http://localhost:4096",
"dialog.server.add.error": "Verbindung zum Server fehlgeschlagen",
"dialog.server.add.checking": "Prüfen",
"dialog.server.add.checking": "Prüfen...",
"dialog.server.add.button": "Server hinzufügen",
"dialog.server.add.name": "Servername (optional)",
"dialog.server.add.namePlaceholder": "Localhost",
@@ -330,7 +327,7 @@ export const dict = {
"dialog.server.edit.title": "Server bearbeiten",
"dialog.server.default.title": "Standardserver",
"dialog.server.default.description":
"Beim App-Start mit diesem Server verbinden, anstatt einen lokalen Server zu starten. Ein Neustart ist erforderlich.",
"Beim App-Start mit diesem Server verbinden, anstatt einen lokalen Server zu starten. Erfordert Neustart.",
"dialog.server.default.none": "Kein Server ausgewählt",
"dialog.server.default.set": "Aktuellen Server als Standard setzen",
"dialog.server.default.clear": "Löschen",
@@ -346,26 +343,26 @@ export const dict = {
"wsl.server.label": "WSL",
"wsl.server.menu.label": "WSL-Server",
"wsl.server.retryStart": "Start erneut versuchen",
"wsl.server.updating": "Wird aktualisiert",
"wsl.server.updating": "Wird aktualisiert...",
"wsl.onboarding.step.distro": "Distribution auswählen",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "WSL wird geprüft",
"wsl.onboarding.checkingRuntime": "WSL wird geprüft...",
"wsl.onboarding.restartRequired": "Windows muss neu gestartet werden, um die WSL-Installation abzuschließen.",
"wsl.onboarding.ready": "WSL ist bereit.",
"wsl.onboarding.required": "WSL ist erforderlich, um fortzufahren.",
"wsl.onboarding.checkingDistros": "Distributionen werden geprüft",
"wsl.onboarding.installingDistro": "{{distro}} wird installiert",
"wsl.onboarding.checkingDistro": "{{distro}} wird geprüft",
"wsl.onboarding.listingDistros": "Distributionen werden aufgelistet",
"wsl.onboarding.checkingDistros": "Distributionen werden geprüft...",
"wsl.onboarding.installingDistro": "{{distro}} wird installiert...",
"wsl.onboarding.checkingDistro": "{{distro}} wird geprüft...",
"wsl.onboarding.listingDistros": "Distributionen werden aufgelistet...",
"wsl.onboarding.distroReady": "{{distro}} ist bereit.",
"wsl.onboarding.distroNotInstalled": "{{distro}} ist noch nicht installiert.",
"wsl.onboarding.openDistroOnce": "Öffnen Sie {{distro}} einmal, um die Einrichtung abzuschließen.",
"wsl.onboarding.finishingDistro": "Einrichtung von {{distro}} wird abgeschlossen.",
"wsl.onboarding.pickDistro": "Wählen Sie eine Distribution aus oder installieren Sie unten eine.",
"wsl.onboarding.checkingOpencode": "OpenCode wird geprüft",
"wsl.onboarding.checkingOpencodeIn": "OpenCode in {{distro}} wird geprüft",
"wsl.onboarding.updatingOpencode": "OpenCode wird aktualisiert",
"wsl.onboarding.updatingOpencodeIn": "OpenCode in {{distro}} wird aktualisiert",
"wsl.onboarding.checkingOpencode": "OpenCode wird geprüft...",
"wsl.onboarding.checkingOpencodeIn": "OpenCode in {{distro}} wird geprüft...",
"wsl.onboarding.updatingOpencode": "OpenCode wird aktualisiert...",
"wsl.onboarding.updatingOpencodeIn": "OpenCode in {{distro}} wird aktualisiert...",
"wsl.onboarding.updateOpencodeIn": "Aktualisieren Sie OpenCode in {{distro}}.",
"wsl.onboarding.updateOpencode": "OpenCode aktualisieren",
"wsl.onboarding.opencodeReadyIn": "OpenCode ist in {{distro}} bereit.",
@@ -374,11 +371,11 @@ export const dict = {
"wsl.onboarding.installOpencode": "OpenCode installieren",
"wsl.onboarding.chooseDistroFirst": "Wählen Sie zuerst eine Distribution aus.",
"wsl.onboarding.loadFailed": "WSL-Status konnte nicht geladen werden.",
"wsl.onboarding.loading": "Wird geladen",
"wsl.onboarding.loading": "Wird geladen...",
"wsl.onboarding.installedDistros": "Installierte Distributionen",
"wsl.onboarding.checkAgain": "Erneut prüfen",
"wsl.onboarding.distroStatus.ready": "Bereit",
"wsl.onboarding.distroStatus.checking": "Wird geprüft",
"wsl.onboarding.distroStatus.checking": "Wird geprüft...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode nicht installiert",
"wsl.onboarding.distroStatus.missingTools": "Fehlend: bash, curl",
"wsl.onboarding.distroStatus.unsupported": "Nicht unterstützt · WSL 2 verwenden",
@@ -397,7 +394,7 @@ export const dict = {
"wsl.onboarding.allDistrosAdded": "Alle installierten Distributionen wurden bereits hinzugefügt.",
"wsl.onboarding.noDistros": "Noch keine Distributionen erkannt.",
"wsl.onboarding.install": "Installieren",
"wsl.onboarding.installing": "Wird installiert",
"wsl.onboarding.installing": "Wird installiert...",
"wsl.onboarding.installDistro": "Distribution installieren",
"wsl.onboarding.searchDistros": "Distributionen durchsuchen",
"wsl.onboarding.wsl2Required": "WSL 2 ist erforderlich.",
@@ -409,13 +406,13 @@ export const dict = {
"wsl.onboarding.unknown": "unbekannt",
"wsl.onboarding.desktopVersion": "Desktop {{version}}",
"wsl.onboarding.versionMismatch": "Die installierte Version entspricht nicht der Version der Desktop-App.",
"wsl.onboarding.adding": "Wird hinzugefügt",
"wsl.onboarding.adding": "Wird hinzugefügt...",
"dialog.project.edit.title": "Projekt bearbeiten",
"dialog.project.edit.name": "Name",
"dialog.project.edit.icon": "Symbol",
"dialog.project.edit.icon.alt": "Projektsymbol",
"dialog.project.edit.icon": "Icon",
"dialog.project.edit.icon.alt": "Projekt-Icon",
"dialog.project.edit.icon.hint": "Klicken oder Bild ziehen",
"dialog.project.edit.icon.recommended": "Empfohlen: 128 × 128 px",
"dialog.project.edit.icon.recommended": "Empfohlen: 128x128px",
"dialog.project.edit.color": "Farbe",
"dialog.project.edit.color.select": "{{color}}-Farbe auswählen",
"dialog.project.edit.worktree.startup": "Startup-Skript für Arbeitsbereich",
@@ -491,7 +488,7 @@ export const dict = {
"toast.context.noLineSelection.description": "Wählen Sie zuerst einen Zeilenbereich in einem Datei-Tab aus.",
"toast.session.share.copyFailed.title": "URL konnte nicht in die Zwischenablage kopiert werden",
"toast.session.share.success.title": "Sitzung geteilt",
"toast.session.share.success.description": "URL zum Teilen in die Zwischenablage kopiert!",
"toast.session.share.success.description": "Teilen-URL in die Zwischenablage kopiert!",
"toast.session.share.failed.title": "Sitzung konnte nicht geteilt werden",
"toast.session.share.failed.description": "Beim Teilen der Sitzung ist ein Fehler aufgetreten",
"toast.session.unshare.success.title": "Teilen der Sitzung aufgehoben",
@@ -511,14 +508,14 @@ export const dict = {
"error.page.action.report": "Fehler melden",
"error.page.action.reported": "Fehler gemeldet",
"error.page.action.exportLogs": "Protokolle exportieren",
"error.page.action.checking": "Prüfen",
"error.page.action.checking": "Prüfen...",
"error.page.action.checkUpdates": "Nach Updates suchen",
"error.page.action.updateTo": "Auf {{version}} aktualisieren",
"error.page.report.prefix": "Bitte melden Sie diesen Fehler dem OpenCode-Team",
"error.page.report.discord": "auf Discord",
"error.page.version": "Version: {{version}}",
"error.dev.rootNotFound":
"Wurzelelement nicht gefunden. Haben Sie vergessen, es in Ihre index.html aufzunehmen? Oder wurde das ID-Attribut falsch geschrieben?",
"Wurzelelement nicht gefunden. Haben Sie vergessen, es in Ihre index.html aufzunehmen? Oder wurde das id-Attribut falsch geschrieben?",
"error.serverSync.connectFailed": "Verbindung zum Server fehlgeschlagen. Läuft ein Server unter `{{url}}`?",
"directory.error.invalidUrl": "Ungültiges Verzeichnis in der URL.",
"error.chain.unknown": "Unbekannter Fehler",
@@ -526,10 +523,10 @@ export const dict = {
"error.chain.apiError": "API-Fehler",
"error.chain.status": "Status: {{status}}",
"error.chain.retryable": "Wiederholbar: {{retryable}}",
"error.chain.responseBody": "Antwortinhalt:\n{{body}}",
"error.chain.responseBody": "Antwort-Body:\n{{body}}",
"error.chain.didYouMean": "Meinten Sie: {{suggestions}}",
"error.chain.modelNotFound": "Modell nicht gefunden: {{provider}}/{{model}}",
"error.chain.checkConfig": "Überprüfen Sie die Anbieter- und Modellnamen in Ihrer Konfiguration (opencode.json)",
"error.chain.checkConfig": "Überprüfen Sie Ihre Konfiguration (opencode.json) auf Anbieter-/Modellnamen",
"error.chain.mcpFailed":
'MCP-Server "{{name}}" fehlgeschlagen. Hinweis: OpenCode unterstützt noch keine MCP-Authentifizierung.',
"error.chain.providerAuthFailed": "Anbieter-Authentifizierung fehlgeschlagen ({{provider}}): {{message}}",
@@ -570,7 +567,7 @@ export const dict = {
"home.sessions.group.yesterday": "Gestern",
"home.sessions.group.older": "Älter",
"home.providerTip":
"OpenCode mit über 75 Anbietern verbinden, um weitere Modelle wie Claude, GPT, Gemini und andere zu nutzen",
"Verbinde dich mit über 75 Anbietern, um weitere Modelle wie Claude, GPT, Gemini und andere zu nutzen",
"session.tab.session": "Sitzung",
"session.tab.review": "Überprüfung",
"session.tab.context": "Kontext",
@@ -581,12 +578,12 @@ export const dict = {
"Dieser Tab verweist auf eine Sitzung, die auf diesem Server nicht mehr existiert.",
"session.error.notFound.closeTab": "Tab schließen",
"session.error.serverConnection": "Verbindung zu diesem Server nicht möglich",
"session.review.filesChanged": "Geänderte Dateien: {{count}}",
"session.review.filesChanged": "{{count}} Dateien geändert",
"session.review.change.one": "Änderung",
"session.review.change.other": "Änderungen",
"session.review.loadingChanges": "Änderungen werden geladen…",
"session.review.loadingChanges": "Lade Änderungen...",
"session.review.empty": "Noch keine Änderungen in dieser Sitzung",
"session.review.noVcs": "Kein Git-Versionskontrollsystem erkannt. Änderungen werden nicht angezeigt",
"session.review.noVcs": "Kein Git-Versionskontrollsystem erkannt, Änderungen werden nicht angezeigt",
"session.review.noSnapshot":
"Snapshot-Tracking ist in der Konfiguration deaktiviert, daher sind Sitzungsänderungen nicht verfügbar",
"session.review.noChanges": "Keine Änderungen",
@@ -597,10 +594,10 @@ export const dict = {
"session.files.empty": "Keine Dateien",
"session.files.binaryContent": "Binärdatei (Inhalt kann nicht angezeigt werden)",
"session.messages.renderEarlier": "Frühere Nachrichten rendern",
"session.messages.loadingEarlier": "Frühere Nachrichten werden geladen…",
"session.messages.loadingEarlier": "Lade frühere Nachrichten...",
"session.messages.loadEarlier": "Frühere Nachrichten laden",
"session.messages.loading": "Nachrichten werden geladen…",
"session.messages.jumpToLatest": "Zur neuesten Nachricht springen",
"session.messages.loading": "Lade Nachrichten...",
"session.messages.jumpToLatest": "Zum neuesten springen",
"session.context.addToContext": "{{selection}} zum Kontext hinzufügen",
"session.todo.title": "Aufgaben",
"session.todo.collapse": "Einklappen",
@@ -620,7 +617,7 @@ export const dict = {
"session.revertDock.collapse": "Zurückgesetzte Nachrichten einklappen",
"session.revertDock.expand": "Zurückgesetzte Nachrichten ausklappen",
"session.revertDock.restore": "Nachricht wiederherstellen",
"session.new.title": "Alles entwickeln",
"session.new.title": "Baue, was du willst",
"session.new.project.new": "Neues Projekt",
"session.new.project.search": "Projekte durchsuchen",
"session.new.project.add": "Projekt hinzufügen",
@@ -654,16 +651,16 @@ export const dict = {
"Sitzung öffentlich im Web teilen. Sie wird für jeden mit dem Link zugänglich sein.",
"session.share.action.share": "Teilen",
"session.share.action.publish": "Veröffentlichen",
"session.share.action.publishing": "Wird veröffentlicht…",
"session.share.action.publishing": "Veröffentliche...",
"session.share.action.unpublish": "Veröffentlichung aufheben",
"session.share.action.unpublishing": "Veröffentlichung wird aufgehoben…",
"session.share.action.unpublishing": "Hebe Veröffentlichung auf...",
"session.share.action.view": "Ansehen",
"session.share.copy.copied": "Kopiert",
"session.share.copy.copyLink": "Link kopieren",
"lsp.tooltip.none": "Keine LSP-Server",
"lsp.label.connected": "{{count}} LSP",
"prompt.loading": "Prompt wird geladen…",
"terminal.loading": "Terminal wird geladen…",
"prompt.loading": "Lade Prompt...",
"terminal.loading": "Lade Terminal...",
"terminal.title": "Terminal",
"terminal.title.numbered": "Terminal {{number}}",
"terminal.close": "Terminal schließen",
@@ -730,12 +727,12 @@ export const dict = {
"settings.general.row.font.title": "Code-Schriftart",
"settings.general.row.font.description": "Die in Codeblöcken verwendete Schriftart anpassen",
"settings.general.row.terminalFont.title": "Terminalschriftart",
"settings.general.row.terminalFont.description": "Die im Terminal verwendete Schriftart anpassen",
"settings.general.row.terminalFont.description": "Passe die im Terminal verwendete Schriftart an",
"settings.general.row.uiFont.title": "UI-Schriftart",
"settings.general.row.uiFont.description": "Die in der gesamten Benutzeroberfläche verwendete Schriftart anpassen",
"settings.general.row.followup.title": "Verhalten bei Folgeeingaben",
"settings.general.row.uiFont.description": "Die im gesamten Interface verwendete Schriftart anpassen",
"settings.general.row.followup.title": "Verhalten bei Folgefragen",
"settings.general.row.followup.description":
"Wählen Sie, ob Folgeeingaben die laufende Sitzung sofort steuern oder in einer Warteschlange warten",
"Wählen Sie, ob Folgefragen sofort steuern oder in einer Warteschlange warten",
"settings.general.row.followup.option.queue": "Warteschlange",
"settings.general.row.followup.option.steer": "Steuern",
"settings.general.row.showFileTree.title": "Dateibaum",
@@ -753,9 +750,8 @@ export const dict = {
"settings.general.row.mobileTitlebarBottom.title": "Navigation unten",
"settings.general.row.mobileTitlebarBottom.description":
"Titelleiste und Sitzungs-Tabs auf Mobilgeräten am unteren Bildschirmrand platzieren",
"settings.general.row.showCustomAgents.title": "Agent anzeigen",
"settings.general.row.showCustomAgents.description":
"Im Eingabebereich zwischen Agenten wechseln. Ist die Auswahl ausgeblendet, wird standardmäßig der Build-Agent verwendet.",
"settings.general.row.showCustomAgents.title": "Benutzerdefinierte Agenten",
"settings.general.row.showCustomAgents.description": "Agentenauswahl im Eingabebereich anzeigen",
"settings.general.row.reasoningSummaries.title": "Reasoning-Zusammenfassungen anzeigen",
"settings.general.row.reasoningSummaries.description":
"Zusammenfassungen des Modell-Reasonings in der Timeline anzeigen",
@@ -775,7 +771,7 @@ export const dict = {
"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",
"settings.general.row.wayland.description": "X11-Fallback unter Wayland deaktivieren. Ein Neustart ist erforderlich.",
"settings.general.row.wayland.description": "X11-Fallback unter Wayland deaktivieren. Erfordert Neustart.",
"settings.general.row.wayland.tooltip":
"Unter Linux mit Monitoren unterschiedlicher Bildwiederholraten kann natives Wayland stabiler sein.",
"settings.general.row.releaseNotes.title": "Versionshinweise",
@@ -785,11 +781,11 @@ export const dict = {
"settings.updates.row.check.title": "Nach Updates suchen",
"settings.updates.row.check.description": "Manuell nach Updates suchen und installieren, wenn verfügbar",
"settings.updates.action.checkNow": "Jetzt prüfen",
"settings.updates.action.checking": "Wird geprüft",
"settings.updates.action.downloading": "Wird heruntergeladen",
"settings.updates.action.installing": "Wird installiert",
"settings.updates.toast.latest.title": "OpenCode ist auf dem neuesten Stand",
"settings.updates.toast.latest.description": "Die aktuelle Version von OpenCode wird verwendet.",
"settings.updates.action.checking": "Wird geprüft...",
"settings.updates.action.downloading": "Wird heruntergeladen...",
"settings.updates.action.installing": "Wird installiert...",
"settings.updates.toast.latest.title": "Du bist auf dem neuesten Stand",
"settings.updates.toast.latest.description": "Du verwendest die aktuelle Version von OpenCode.",
"sound.option.none": "Keine",
"sound.option.alert01": "Alarm 01",
"sound.option.alert02": "Alarm 02",
@@ -905,8 +901,8 @@ export const dict = {
"settings.permissions.tool.bash.description": "Shell-Befehle ausführen",
"settings.permissions.tool.task.title": "Aufgabe",
"settings.permissions.tool.task.description": "Unteragenten starten",
"settings.permissions.tool.skill.title": "Skill",
"settings.permissions.tool.skill.description": "Einen Skill anhand des Namens laden",
"settings.permissions.tool.skill.title": "Fähigkeit",
"settings.permissions.tool.skill.description": "Eine Fähigkeit nach Namen laden",
"settings.permissions.tool.lsp.title": "LSP",
"settings.permissions.tool.lsp.description": "Language-Server-Abfragen ausführen",
"settings.permissions.tool.todowrite.title": "Todo schreiben",
@@ -934,7 +930,7 @@ export const dict = {
"workspace.reset.success.title": "Arbeitsbereich zurückgesetzt",
"workspace.reset.success.description": "Der Arbeitsbereich entspricht jetzt dem Standard-Branch.",
"workspace.error.stillPreparing": "Arbeitsbereich wird noch vorbereitet",
"workspace.status.checking": "Suche nach nicht zusammengeführten Änderungen",
"workspace.status.checking": "Suche nach nicht zusammengeführten Änderungen...",
"workspace.status.error": "Git-Status konnte nicht überprüft werden.",
"workspace.status.clean": "Keine nicht zusammengeführten Änderungen erkannt.",
"workspace.status.dirty": "Nicht zusammengeführte Änderungen in diesem Arbeitsbereich erkannt.",
@@ -964,7 +960,7 @@ export const dict = {
"settings.providers.custom.description": "Fügen Sie einen OpenAI-kompatiblen Anbieter per Basis-URL hinzu.",
"app.server.unreachable": "Konnte {{server}} nicht erreichen",
"app.server.retrying": "Verbindung wird automatisch erneut hergestellt…",
"app.server.retrying": "Automatische erneute Verbindung...",
"app.server.otherServers": "Andere Server",
"dialog.server.add.usernamePlaceholder": "Benutzername",
"dialog.server.add.passwordPlaceholder": "Passwort",
@@ -972,15 +968,12 @@ export const dict = {
"session.review.noVcs.createGit.title": "Git-Repository erstellen",
"session.review.noVcs.createGit.description":
"Änderungen in diesem Projekt verfolgen, überprüfen und rückgängig machen",
"session.review.noVcs.createGit.actionLoading": "Git-Repository wird erstellt",
"session.review.noVcs.createGit.actionLoading": "Git-Repository wird erstellt...",
"session.review.noVcs.createGit.action": "Git-Repository erstellen",
"session.todo.progress": "{{done}} von {{total}} Aufgaben erledigt",
"session.question.progress": "{{current}} von {{total}} Fragen",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "Datei-Explorer",
"session.header.reveal.finder": "Im Finder anzeigen",
"session.header.reveal.fileExplorer": "Im Datei-Explorer anzeigen",
"session.header.reveal.containingFolder": "Übergeordneten Ordner öffnen",
"session.header.open.fileManager": "Dateimanager",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
@@ -995,30 +988,29 @@ export const dict = {
"session.header.open.app.androidStudio": "Android Studio",
"session.header.open.app.powershell": "PowerShell",
"session.header.open.app.sublimeText": "Sublime Text",
"debugBar.ariaLabel": "Leistungsdiagnose für die Entwicklung",
"debugBar.ariaLabel": "Entwicklungs-Leistungsdiagnose",
"debugBar.na": "n.v.",
"debugBar.nav.label": "NAV",
"debugBar.nav.tip":
"Letzter abgeschlossener Routenübergang zu einer Sitzungsseite, gemessen vom Start des Routers bis zum ersten Rendering nach Abschluss des Übergangs.",
"Letzter abgeschlossener Routenübergang, der eine Sitzungsseite berührt, gemessen vom Start des Routers bis zum ersten Rendern nach dem Einschwingen.",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "Gleitender Mittelwert der Frames pro Sekunde in den letzten 5 Sekunden.",
"debugBar.fps.tip": "Gleitende Bilder pro Sekunde in den letzten 5 Sekunden.",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "Längste Framedauer in den letzten 5 Sekunden.",
"debugBar.frame.tip": "Schlechteste Frame-Zeit in den letzten 5 Sekunden.",
"debugBar.jank.label": "JANK",
"debugBar.jank.tip": "Frames über 32 ms in den letzten 5 Sekunden.",
"debugBar.jank.tip": "Frames über 32ms in den letzten 5 Sekunden.",
"debugBar.long.label": "LONG",
"debugBar.long.tip":
"Blockierte Zeit und Anzahl langer Aufgaben in den letzten 5 Sekunden. Längste Aufgabe: {{max}}.",
"debugBar.long.tip": "Blockierte Zeit und Anzahl langer Aufgaben in den letzten 5 Sekunden. Max Aufgabe: {{max}}.",
"debugBar.delay.label": "DELAY",
"debugBar.delay.tip": "Schlechteste beobachtete Eingabeverzögerung in den letzten 5 Sekunden.",
"debugBar.inp.label": "INP",
"debugBar.inp.tip":
"Ungefähre Interaktionsdauer in den letzten 5 Sekunden. Dies ist INP-ähnlich, nicht das offizielle Web-Vitals-INP.",
"Ungefähre Interaktionsdauer in den letzten 5 Sekunden. Dies ist INP-ähnlich, nicht das offizielle Web Vitals INP.",
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "Kumulative Layoutverschiebung während der aktuellen App-Laufzeit.",
"debugBar.cls.tip": "Kumulative Layoutverschiebung für die aktuelle App-Lebensdauer.",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "Belegter JS-Heap im Verhältnis zum Heap-Limit. Nur Chromium.",
"debugBar.mem.tip": "Belegter JS-Heap im Verhältnis zum Heap-Limit. {{used}} von {{limit}}.",
"debugBar.mem.tipUnavailable": "Verwendeter JS-Heap vs Heap-Limit. Nur Chromium.",
"debugBar.mem.tip": "Verwendeter JS-Heap vs Heap-Limit. {{used}} von {{limit}}.",
"common.key.ctrl": "Strg",
"common.key.alt": "Alt",
"common.key.shift": "Umschalt",
@@ -1039,7 +1031,7 @@ export const dict = {
"error.serverSDK.serverNotAvailable": "Server nicht verfügbar",
"error.childStore.persistedCacheCreateFailed": "Dauerhafter Cache konnte nicht erstellt werden",
"error.childStore.persistedProjectMetadataCreateFailed": "Dauerhafte Projektmetadaten konnten nicht erstellt werden",
"error.childStore.persistedProjectIconCreateFailed": "Dauerhaftes Projektsymbol konnte nicht erstellt werden",
"error.childStore.persistedProjectIconCreateFailed": "Dauerhaftes Projekticon konnte nicht erstellt werden",
"error.childStore.storeCreateFailed": "Speicher konnte nicht erstellt werden",
"terminal.connectionLost.abnormalClose": "WebSocket unerwartet geschlossen: {{code}}",
"terminal.connectionLost.abnormalClose": "WebSocket abnormal geschlossen: {{code}}",
} satisfies Partial<Record<Keys, string>>
-1
View File
@@ -301,7 +301,6 @@ export const dict = {
"prompt.toast.pasteUnsupported.title": "Unsupported attachment",
"prompt.toast.pasteUnsupported.description": "Only images, PDFs, or text files can be attached here.",
"prompt.toast.attachmentDuplicate.title": "This file has already been uploaded",
"prompt.toast.modelAgentRequired.title": "Select an agent and model",
"prompt.toast.modelAgentRequired.description": "Choose an agent and model before sending a prompt.",
"prompt.toast.worktreeCreateFailed.title": "Failed to create worktree",
+101 -111
View File
@@ -21,7 +21,7 @@ export const dict = {
"theme.scheme.light": "Claro",
"theme.scheme.dark": "Oscuro",
"command.sidebar.toggle": "Mostrar u ocultar barra lateral",
"command.sidebar.toggle": "Alternar barra lateral",
"command.project.open": "Abrir proyecto",
"command.project.previous": "Proyecto anterior",
"command.project.next": "Siguiente proyecto",
@@ -37,12 +37,12 @@ export const dict = {
"command.palette": "Paleta de comandos",
"command.theme.cycle": "Cambiar tema",
"command.theme.cycle": "Alternar tema",
"command.theme.set": "Usar tema: {{theme}}",
"command.theme.scheme.cycle": "Cambiar esquema de color",
"command.theme.scheme.cycle": "Alternar esquema de color",
"command.theme.scheme.set": "Usar esquema de color: {{scheme}}",
"command.language.cycle": "Cambiar idioma",
"command.language.cycle": "Alternar idioma",
"command.language.set": "Usar idioma: {{language}}",
"command.session.new": "Nueva sesión",
@@ -52,12 +52,12 @@ export const dict = {
"command.context.addSelection": "Añadir selección al contexto",
"command.context.addSelection.description": "Añadir las líneas seleccionadas del archivo actual",
"command.input.focus": "Enfocar entrada",
"command.terminal.toggle": "Mostrar u ocultar terminal",
"command.fileTree.toggle": "Mostrar u ocultar árbol de archivos",
"command.review.toggle": "Mostrar u ocultar revisión",
"command.terminal.toggle": "Alternar terminal",
"command.fileTree.toggle": "Alternar árbol de archivos",
"command.review.toggle": "Alternar revisión",
"command.terminal.new": "Nueva terminal",
"command.terminal.new.description": "Crear una nueva pestaña de terminal",
"command.steps.toggle": "Mostrar u ocultar pasos",
"command.steps.toggle": "Alternar pasos",
"command.steps.toggle.description": "Mostrar u ocultar pasos para el mensaje actual",
"command.message.previous": "Mensaje anterior",
"command.message.previous.description": "Ir al mensaje de usuario anterior",
@@ -65,19 +65,19 @@ export const dict = {
"command.message.next.description": "Ir al siguiente mensaje de usuario",
"command.model.choose": "Elegir modelo",
"command.model.choose.description": "Seleccionar un modelo diferente",
"command.mcp.toggle": "Activar o desactivar servidores MCP",
"command.mcp.toggle.description": "Activar o desactivar servidores MCP",
"command.agent.cycle": "Cambiar de agente",
"command.mcp.toggle": "Alternar MCPs",
"command.mcp.toggle.description": "Alternar MCPs",
"command.agent.cycle": "Alternar agente",
"command.agent.cycle.description": "Cambiar al siguiente agente",
"command.agent.cycle.reverse": "Cambiar al agente anterior",
"command.agent.cycle.reverse": "Alternar agente hacia atrás",
"command.agent.cycle.reverse.description": "Cambiar al agente anterior",
"command.model.variant.cycle": "Cambiar esfuerzo de razonamiento",
"command.model.variant.cycle": "Alternar esfuerzo de pensamiento",
"command.model.variant.cycle.description": "Cambiar al siguiente nivel de esfuerzo",
"command.prompt.mode.shell": "Shell",
"command.prompt.mode.normal": "Prompt",
"command.permissions.autoaccept.enable": "Aceptar permisos automáticamente",
"command.permissions.autoaccept.disable": "Dejar de aceptar permisos automáticamente",
"command.workspace.toggle": "Activar o desactivar espacios de trabajo",
"command.workspace.toggle": "Alternar espacios de trabajo",
"command.workspace.toggle.description": "Habilitar o deshabilitar múltiples espacios de trabajo en la barra lateral",
"command.session.undo": "Deshacer",
"command.session.undo.description": "Deshacer el último mensaje",
@@ -100,18 +100,17 @@ export const dict = {
"dialog.provider.search.placeholder": "Buscar proveedores",
"dialog.provider.empty": "No se encontraron proveedores",
"dialog.provider.group.popular": "Populares",
"dialog.provider.group.other": "Otros",
"dialog.provider.custom.label": "Proveedor personalizado compatible con OpenAI",
"dialog.provider.group.popular": "Popular",
"dialog.provider.group.other": "Otro",
"dialog.provider.tag.recommended": "Recomendado",
"dialog.provider.opencode.note": "Selección de modelos como Claude, GPT, Gemini y otros",
"dialog.provider.opencode.note": "Modelos seleccionados incluyendo Claude, GPT, Gemini y s",
"dialog.provider.opencode.tagline": "Modelos optimizados y fiables",
"dialog.provider.opencodeGo.tagline": "Suscripción económica para todos",
"dialog.provider.anthropic.note": "Acceso directo a modelos Claude, incluidos Pro y Max",
"dialog.provider.anthropic.note": "Acceso directo a modelos Claude, incluyendo Pro y Max",
"dialog.provider.copilot.note": "Modelos de IA para asistencia de codificación a través de GitHub Copilot",
"dialog.provider.openai.note": "Modelos GPT para tareas de IA generales rápidas y capaces",
"dialog.provider.google.note": "Modelos Gemini para respuestas rápidas y estructuradas",
"dialog.provider.openrouter.note": "Accede a todos los modelos compatibles desde un solo proveedor",
"dialog.provider.openrouter.note": "Accede a todos los modelos soportados desde un solo proveedor",
"dialog.provider.vercel.note": "Acceso unificado a modelos de IA con enrutamiento inteligente",
"dialog.model.select.title": "Seleccionar modelo",
@@ -119,11 +118,10 @@ export const dict = {
"dialog.model.empty": "Sin resultados de modelos",
"dialog.model.manage": "Gestionar modelos",
"dialog.model.manage.description": "Personalizar qué modelos aparecen en el selector de modelos.",
"dialog.model.manage.provider.toggle": "Mostrar u ocultar todos los modelos de {{provider}}",
"dialog.model.manage.provider.toggle": "Alternar todos los modelos de {{provider}}",
"dialog.model.unpaid.freeModels.title": "Modelos gratuitos proporcionados por OpenCode",
"dialog.model.unpaid.addMore.title": "Añadir más modelos de proveedores populares",
"dialog.model.unpaid.viewMoreProviders": "Ver más de 70 proveedores",
"dialog.provider.viewAll": "Ver más proveedores",
@@ -175,8 +173,7 @@ export const dict = {
"provider.custom.field.baseURL.placeholder": "https://api.miproveedor.com/v1",
"provider.custom.field.apiKey.label": "Clave API",
"provider.custom.field.apiKey.placeholder": "Clave API",
"provider.custom.field.apiKey.description":
"Opcional. Déjalo vacío si gestionas la autenticación mediante encabezados.",
"provider.custom.field.apiKey.description": "Opcional. Dejar vacío si gestionas la autenticación mediante cabeceras.",
"provider.custom.models.label": "Modelos",
"provider.custom.models.id.label": "ID",
"provider.custom.models.id.placeholder": "id-modelo",
@@ -184,13 +181,13 @@ export const dict = {
"provider.custom.models.name.placeholder": "Nombre para mostrar",
"provider.custom.models.remove": "Eliminar modelo",
"provider.custom.models.add": "Añadir modelo",
"provider.custom.headers.label": "Encabezados (opcional)",
"provider.custom.headers.key.label": "Encabezado",
"provider.custom.headers.key.placeholder": "Nombre-Encabezado",
"provider.custom.headers.label": "Cabeceras (opcional)",
"provider.custom.headers.key.label": "Cabecera",
"provider.custom.headers.key.placeholder": "Nombre-Cabecera",
"provider.custom.headers.value.label": "Valor",
"provider.custom.headers.value.placeholder": "valor",
"provider.custom.headers.remove": "Eliminar encabezado",
"provider.custom.headers.add": "Añadir encabezado",
"provider.custom.headers.remove": "Eliminar cabecera",
"provider.custom.headers.add": "Añadir cabecera",
"provider.custom.error.providerID.required": "El ID del proveedor es obligatorio",
"provider.custom.error.providerID.format": "Usa letras minúsculas, números, guiones o guiones bajos",
"provider.custom.error.providerID.exists": "Ese ID de proveedor ya existe",
@@ -204,7 +201,7 @@ export const dict = {
"provider.disconnect.toast.disconnected.description": "Los modelos de {{provider}} ya no están disponibles.",
"model.tag.free": "Gratis",
"model.tag.latest": "Más reciente",
"model.tag.latest": "Último",
"model.provider.anthropic": "Anthropic",
"model.provider.openai": "OpenAI",
"model.provider.google": "Google",
@@ -214,7 +211,7 @@ export const dict = {
"model.input.image": "imagen",
"model.input.audio": "audio",
"model.input.video": "video",
"model.input.pdf": "PDF",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Permite: {{inputs}}",
"model.tooltip.context.label": "Contexto",
"model.tooltip.inputs": "Entradas",
@@ -234,7 +231,7 @@ export const dict = {
"common.clear": "Limpiar",
"common.connect": "Conectar",
"common.disconnect": "Desconectar",
"common.continue": "Continuar",
"common.continue": "Enviar",
"common.submit": "Enviar",
"common.save": "Guardar",
"common.saving": "Guardando...",
@@ -253,7 +250,7 @@ export const dict = {
"session.child.backToParent": "Volver a la sesión principal.",
"prompt.example.1": "Arreglar un TODO en el código",
"prompt.example.2": "¿Qué tecnologías usa este proyecto?",
"prompt.example.2": "¿Cuál es el stack tecnológico de este proyecto?",
"prompt.example.3": "Arreglar pruebas rotas",
"prompt.example.4": "Explicar cómo funciona la autenticación",
"prompt.example.5": "Encontrar y arreglar vulnerabilidades de seguridad",
@@ -266,22 +263,22 @@ export const dict = {
"prompt.example.12": "Añadir validación de entrada",
"prompt.example.13": "Crear un nuevo componente para...",
"prompt.example.14": "¿Cómo despliego este proyecto?",
"prompt.example.15": "Revisar si mi código sigue las prácticas recomendadas",
"prompt.example.16": "Añadir gestión de errores a esta función",
"prompt.example.17": "Explicar este patrón de expresión regular",
"prompt.example.15": "Revisar mi código para mejores prácticas",
"prompt.example.16": "Añadir manejo de errores a esta función",
"prompt.example.17": "Explicar este patrón de regex",
"prompt.example.18": "Convertir esto a TypeScript",
"prompt.example.19": "Añadir registros en todo el código",
"prompt.example.19": "Añadir logging en todo el código",
"prompt.example.20": "¿Qué dependencias están desactualizadas?",
"prompt.example.21": "Ayúdame a escribir un script de migración",
"prompt.example.22": "Implementar caché para este punto de conexión",
"prompt.example.22": "Implementar caché para este endpoint",
"prompt.example.23": "Añadir paginación a esta lista",
"prompt.example.24": "Crear un comando CLI para...",
"prompt.example.25": "¿Cómo funcionan las variables de entorno aquí?",
"prompt.popover.emptyResults": "Sin resultados coincidentes",
"prompt.popover.emptyCommands": "Sin comandos coincidentes",
"prompt.dropzone.label": "Suelta aquí imágenes, archivos PDF o archivos de texto",
"prompt.dropzone.file.label": "Suelta para @mencionar el archivo",
"prompt.dropzone.label": "Suelta imágenes, PDFs o archivos de texto aquí",
"prompt.dropzone.file.label": "Suelta para @mencionar archivo",
"prompt.slash.badge.custom": "personalizado",
"prompt.slash.badge.skill": "skill",
"prompt.slash.badge.mcp": "mcp",
@@ -289,7 +286,7 @@ export const dict = {
"prompt.context.includeActiveFile": "Incluir archivo activo",
"prompt.context.removeActiveFile": "Eliminar archivo activo del contexto",
"prompt.context.removeFile": "Eliminar archivo del contexto",
"prompt.action.attachFile": "Añadir archivos",
"prompt.action.attachFile": "Adjuntar archivo",
"prompt.menu.addImagesAndFiles": "Añadir archivos y más",
"prompt.menu.imagesAndFiles": "Imágenes y archivos",
"prompt.menu.commands": "Comandos",
@@ -300,9 +297,7 @@ export const dict = {
"prompt.action.stop": "Detener",
"prompt.toast.pasteUnsupported.title": "Adjunto no compatible",
"prompt.toast.attachmentDuplicate.title": "Este archivo ya se ha subido",
"prompt.toast.pasteUnsupported.description":
"Aquí solo se pueden adjuntar imágenes, archivos PDF o archivos de texto.",
"prompt.toast.pasteUnsupported.description": "Solo se pueden adjuntar imágenes, PDFs o archivos de texto aquí.",
"prompt.toast.modelAgentRequired.title": "Selecciona un agente y modelo",
"prompt.toast.modelAgentRequired.description": "Elige un agente y modelo antes de enviar un prompt.",
"prompt.toast.worktreeCreateFailed.title": "Fallo al crear el árbol de trabajo",
@@ -312,16 +307,16 @@ export const dict = {
"prompt.toast.promptSendFailed.title": "Fallo al enviar prompt",
"prompt.toast.promptSendFailed.description": "No se pudo recuperar la sesión",
"dialog.mcp.title": "Servidores MCP",
"dialog.mcp.title": "MCPs",
"dialog.mcp.description": "{{enabled}} de {{total}} habilitados",
"dialog.mcp.empty": "No hay servidores MCP configurados",
"dialog.mcp.empty": "No hay MCPs configurados",
"dialog.lsp.empty": "Servidores LSP detectados automáticamente por tipo de archivo",
"dialog.lsp.empty": "LSPs detectados automáticamente por tipo de archivo",
"dialog.plugins.empty": "Plugins configurados en opencode.json",
"mcp.status.connected": "conectado",
"mcp.status.failed": "fallido",
"mcp.status.needs_auth": "requiere autenticación",
"mcp.status.needs_auth": "necesita auth",
"mcp.auth.clickToAuthenticate": "Haz clic para autenticar",
"mcp.status.disabled": "deshabilitado",
@@ -332,13 +327,13 @@ export const dict = {
"dialog.directory.action.selectFile": "Seleccionar archivo",
"dialog.directory.action.selectFolder": "Seleccionar carpeta",
"dialog.directory.root": "Raíz",
"dialog.directory.parent": "Carpeta superior",
"dialog.directory.parent": "Superior",
"dialog.directory.readError": "No se puede leer esta carpeta",
"dialog.server.title": "Servidores",
"dialog.server.description": "Cambiar el servidor de OpenCode al que se conecta esta aplicación.",
"dialog.server.description": "Cambiar a qué servidor de OpenCode se conecta esta app.",
"dialog.server.search.placeholder": "Buscar servidores",
"dialog.server.empty": "Aún no hay servidores",
"dialog.server.empty": "No hay servidores aún",
"dialog.server.add.title": "Añadir un servidor",
"dialog.server.add.url": "URL del servidor",
"dialog.server.add.placeholder": "http://localhost:4096",
@@ -352,7 +347,7 @@ export const dict = {
"dialog.server.edit.title": "Editar servidor",
"dialog.server.default.title": "Servidor predeterminado",
"dialog.server.default.description":
"Conectar a este servidor al iniciar la aplicación en lugar de iniciar un servidor local. Requiere reiniciar.",
"Conectar a este servidor al iniciar la app en lugar de iniciar un servidor local. Requiere reinicio.",
"dialog.server.default.none": "Ningún servidor seleccionado",
"dialog.server.default.set": "Establecer servidor actual como predeterminado",
"dialog.server.default.clear": "Limpiar",
@@ -360,7 +355,7 @@ export const dict = {
"dialog.server.menu.edit": "Editar",
"dialog.server.menu.default": "Establecer como predeterminado",
"dialog.server.menu.defaultRemove": "Quitar como predeterminado",
"dialog.server.menu.defaultRemove": "Quitar predeterminado",
"dialog.server.menu.delete": "Eliminar",
"dialog.server.current": "Servidor actual",
"dialog.server.status.default": "Predeterminado",
@@ -447,7 +442,7 @@ export const dict = {
"Se ejecuta después de crear un nuevo espacio de trabajo (árbol de trabajo).",
"dialog.project.edit.worktree.startup.placeholder": "p. ej. bun install",
"context.breakdown.title": "Desglose del contexto",
"context.breakdown.title": "Desglose de Contexto",
"context.breakdown.note":
'Desglose aproximado de tokens de entrada. "Otro" incluye definiciones de herramientas y sobrecarga.',
"context.breakdown.system": "Sistema",
@@ -456,25 +451,25 @@ export const dict = {
"context.breakdown.tool": "Llamadas a herramientas",
"context.breakdown.other": "Otro",
"context.systemPrompt.title": "Prompt del sistema",
"context.systemPrompt.title": "Prompt del Sistema",
"context.rawMessages.title": "Mensajes en bruto",
"context.stats.session": "Sesión",
"context.stats.messages": "Mensajes",
"context.stats.provider": "Proveedor",
"context.stats.model": "Modelo",
"context.stats.limit": "Límite de contexto",
"context.stats.totalTokens": "Tokens totales",
"context.stats.limit": "Límite de Contexto",
"context.stats.totalTokens": "Tokens Totales",
"context.stats.usage": "Uso",
"context.stats.inputTokens": "Tokens de entrada",
"context.stats.outputTokens": "Tokens de salida",
"context.stats.reasoningTokens": "Tokens de razonamiento",
"context.stats.cacheTokens": "Tokens de caché (lectura/escritura)",
"context.stats.userMessages": "Mensajes de usuario",
"context.stats.assistantMessages": "Mensajes de asistente",
"context.stats.totalCost": "Costo total",
"context.stats.sessionCreated": "Sesión creada",
"context.stats.lastActivity": "Última actividad",
"context.stats.inputTokens": "Tokens de Entrada",
"context.stats.outputTokens": "Tokens de Salida",
"context.stats.reasoningTokens": "Tokens de Razonamiento",
"context.stats.cacheTokens": "Tokens de Caché (lectura/escritura)",
"context.stats.userMessages": "Mensajes de Usuario",
"context.stats.assistantMessages": "Mensajes de Asistente",
"context.stats.totalCost": "Costo Total",
"context.stats.sessionCreated": "Sesión Creada",
"context.stats.lastActivity": "Última Actividad",
"context.usage.tokens": "Tokens",
"context.usage.usage": "Uso",
@@ -528,12 +523,12 @@ export const dict = {
"toast.session.share.copyFailed.title": "Fallo al copiar URL al portapapeles",
"toast.session.share.success.title": "Sesión compartida",
"toast.session.share.success.description": "Enlace para compartir copiado al portapapeles.",
"toast.session.share.success.description": "¡URL compartida copiada al portapapeles!",
"toast.session.share.failed.title": "Fallo al compartir sesión",
"toast.session.share.failed.description": "Ocurrió un error al compartir la sesión",
"toast.session.unshare.success.title": "La sesión dejó de compartirse",
"toast.session.unshare.success.description": "La sesión dejó de compartirse correctamente.",
"toast.session.unshare.success.title": "Sesión dejó de compartirse",
"toast.session.unshare.success.description": "¡La sesión dejó de compartirse exitosamente!",
"toast.session.unshare.failed.title": "Fallo al dejar de compartir sesión",
"toast.session.unshare.failed.description": "Ocurrió un error al dejar de compartir la sesión",
@@ -549,13 +544,13 @@ export const dict = {
"error.page.description.localServerStartup": "Ocurrió un error al iniciar el servidor local.",
"error.page.details.label": "Detalles del error",
"error.page.action.restart": "Reiniciar",
"error.page.action.report": "Informar del error",
"error.page.action.reported": "Error notificado",
"error.page.action.report": "Informar error",
"error.page.action.reported": "Error informado",
"error.page.action.exportLogs": "Exportar registros",
"error.page.action.checking": "Comprobando...",
"error.page.action.checkUpdates": "Buscar actualizaciones",
"error.page.action.updateTo": "Actualizar a {{version}}",
"error.page.report.prefix": "Informa de este error al equipo de OpenCode",
"error.page.report.prefix": "Por favor reporta este error al equipo de OpenCode",
"error.page.report.discord": "en Discord",
"error.page.version": "Versión: {{version}}",
@@ -571,10 +566,10 @@ export const dict = {
"error.chain.status": "Estado: {{status}}",
"error.chain.retryable": "Reintentable: {{retryable}}",
"error.chain.responseBody": "Cuerpo de la respuesta:\n{{body}}",
"error.chain.didYouMean": "¿Quizá quisiste decir {{suggestions}}?",
"error.chain.didYouMean": "¿Quisiste decir: {{suggestions}}",
"error.chain.modelNotFound": "Modelo no encontrado: {{provider}}/{{model}}",
"error.chain.checkConfig": "Comprueba los nombres de proveedor/modelo en tu configuración (opencode.json)",
"error.chain.mcpFailed": 'El servidor MCP "{{name}}" falló. Nota: OpenCode aún no admite la autenticación MCP.',
"error.chain.mcpFailed": 'El servidor MCP "{{name}}" falló. Nota, OpenCode no soporta autenticación MCP todavía.',
"error.chain.providerAuthFailed": "Autenticación de proveedor fallida ({{provider}}): {{message}}",
"error.chain.providerInitFailed":
'Fallo al inicializar proveedor "{{provider}}". Comprueba credenciales y configuración.',
@@ -627,12 +622,12 @@ export const dict = {
"session.error.notFound.description": "Esta pestaña apunta a una sesión que ya no existe en este servidor.",
"session.error.notFound.closeTab": "Cerrar pestaña",
"session.error.serverConnection": "No se puede conectar a este servidor",
"session.review.filesChanged": "Archivos modificados: {{count}}",
"session.review.filesChanged": "{{count}} Archivos Cambiados",
"session.review.change.one": "Cambio",
"session.review.change.other": "Cambios",
"session.review.loadingChanges": "Cargando cambios...",
"session.review.empty": "Aún no hay cambios en esta sesión",
"session.review.noVcs": "No se detectó ningún sistema de control de versiones Git; no se muestran los cambios",
"session.review.empty": "No hay cambios en esta sesión aún",
"session.review.noVcs": "No se detectó Sistema de Control de Versiones Git, los cambios no se muestran",
"session.review.noSnapshot":
"El seguimiento de instantáneas está deshabilitado en la configuración, por lo que los cambios de sesión no están disponibles",
"session.review.noChanges": "Sin cambios",
@@ -642,13 +637,13 @@ export const dict = {
"session.files.selectToOpen": "Selecciona un archivo para abrir",
"session.files.all": "Todos los archivos",
"session.files.empty": "Sin archivos",
"session.files.binaryContent": "Archivo binario (no se puede mostrar el contenido)",
"session.files.binaryContent": "Archivo binario (el contenido no puede ser mostrado)",
"session.messages.renderEarlier": "Mostrar mensajes anteriores",
"session.messages.renderEarlier": "Renderizar mensajes anteriores",
"session.messages.loadingEarlier": "Cargando mensajes anteriores...",
"session.messages.loadEarlier": "Cargar mensajes anteriores",
"session.messages.loading": "Cargando mensajes...",
"session.messages.jumpToLatest": "Ir al mensaje más reciente",
"session.messages.jumpToLatest": "Ir al último",
"session.context.addToContext": "Añadir {{selection}} al contexto",
"session.todo.title": "Tareas",
@@ -657,17 +652,14 @@ export const dict = {
"session.question.minimize": "Minimizar pregunta",
"session.question.restore": "Restaurar pregunta",
"session.question.pending.one": "{{count}} pregunta pendiente",
"session.question.pending.many": "{{count}} de preguntas pendientes",
"session.question.pending.other": "{{count}} preguntas pendientes",
"session.followupDock.summary.one": "{{count}} mensaje en cola",
"session.followupDock.summary.many": "{{count}} de mensajes en cola",
"session.followupDock.summary.other": "{{count}} mensajes en cola",
"session.followupDock.sendNow": "Enviar ahora",
"session.followupDock.edit": "Editar",
"session.followupDock.collapse": "Contraer mensajes en cola",
"session.followupDock.expand": "Expandir mensajes en cola",
"session.revertDock.summary.one": "{{count}} mensaje revertido",
"session.revertDock.summary.many": "{{count}} de mensajes revertidos",
"session.revertDock.summary.other": "{{count}} mensajes revertidos",
"session.revertDock.collapse": "Contraer mensajes revertidos",
"session.revertDock.expand": "Expandir mensajes revertidos",
@@ -701,9 +693,9 @@ export const dict = {
"status.popover.tab.mcp": "MCP",
"status.popover.tab.lsp": "LSP",
"status.popover.tab.plugins": "Plugins",
"status.popover.action.manageServers": "Gestionar servidores",
"status.popover.action.manageServers": "Administrar servidores",
"session.share.popover.title": "Publicar en la web",
"session.share.popover.title": "Publicar en web",
"session.share.popover.description.shared":
"Esta sesión es pública en la web. Es accesible para cualquiera con el enlace.",
"session.share.popover.description.unshared":
@@ -733,7 +725,7 @@ export const dict = {
"common.dismiss": "Descartar",
"common.requestFailed": "Solicitud fallida",
"common.moreOptions": "Más opciones",
"common.learnMore": "Más información",
"common.learnMore": "Saber más",
"common.rename": "Renombrar",
"common.reset": "Restablecer",
"common.archive": "Archivar",
@@ -743,15 +735,15 @@ export const dict = {
"common.loadMore": "Cargar más",
"common.key.esc": "ESC",
"sidebar.menu.toggle": "Mostrar u ocultar menú",
"sidebar.menu.toggle": "Alternar menú",
"sidebar.nav.projectsAndSessions": "Proyectos y sesiones",
"sidebar.settings": "Ajustes",
"sidebar.help": "Ayuda",
"sidebar.workspaces.enable": "Habilitar espacios de trabajo",
"sidebar.workspaces.disable": "Deshabilitar espacios de trabajo",
"sidebar.gettingStarted.title": "Primeros pasos",
"sidebar.gettingStarted.title": "Empezando",
"sidebar.gettingStarted.line1": "OpenCode incluye modelos gratuitos para que puedas empezar inmediatamente.",
"sidebar.gettingStarted.line2": "Conecta cualquier proveedor para usar modelos como Claude, GPT o Gemini.",
"sidebar.gettingStarted.line2": "Conecta cualquier proveedor para usar modelos, inc. Claude, GPT, Gemini etc.",
"sidebar.project.recentSessions": "Sesiones recientes",
"sidebar.project.viewAllSessions": "Ver todas las sesiones",
"sidebar.project.clearNotifications": "Borrar notificaciones",
@@ -779,8 +771,9 @@ export const dict = {
"settings.general.row.language.title": "Idioma",
"settings.general.row.language.description": "Cambiar el idioma de visualización para OpenCode",
"settings.general.row.shell.title": "Shell del terminal",
"settings.general.row.shell.description": "Shell que usan el terminal y las herramientas del agente",
"settings.general.row.shell.autoDefault": "Automático (predeterminado)",
"settings.general.row.shell.description":
"Elige el shell que se usará en el terminal. Los shells compatibles también se usarán para las llamadas a herramientas del agente.",
"settings.general.row.shell.autoDefault": "Automático (Predeterminado)",
"settings.general.row.shell.terminalOnly": "solo en el terminal",
"settings.general.row.appearance.title": "Apariencia",
"settings.general.row.appearance.description": "Personaliza cómo se ve OpenCode en tu dispositivo",
@@ -814,9 +807,8 @@ export const dict = {
"settings.general.row.mobileTitlebarBottom.title": "Navegación inferior",
"settings.general.row.mobileTitlebarBottom.description":
"Colocar la barra de título y las pestañas de sesión en la parte inferior de la pantalla en dispositivos móviles",
"settings.general.row.showCustomAgents.title": "Mostrar agente",
"settings.general.row.showCustomAgents.description":
"Cambiar de agente en el editor. Si se oculta, se usa el agente Build de forma predeterminada.",
"settings.general.row.showCustomAgents.title": "Agentes personalizados",
"settings.general.row.showCustomAgents.description": "Mostrar el selector de agentes en el editor",
"settings.general.row.reasoningSummaries.title": "Mostrar resúmenes de razonamiento",
"settings.general.row.reasoningSummaries.description":
"Mostrar resúmenes del razonamiento del modelo en la línea de tiempo",
@@ -835,9 +827,9 @@ export const dict = {
"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",
"Permitir ampliar con el gesto de pellizco del panel táctil y con Ctrl-scroll",
"settings.general.row.wayland.title": "Usar Wayland nativo",
"settings.general.row.wayland.description": "Deshabilitar el uso alternativo de X11 en Wayland. Requiere reiniciar.",
"settings.general.row.wayland.description": "Deshabilitar fallback a X11 en Wayland. Requiere reinicio.",
"settings.general.row.wayland.tooltip":
"En Linux con monitores de frecuencia de actualización mixta, Wayland nativo puede ser más estable.",
@@ -967,7 +959,8 @@ export const dict = {
"settings.permissions.tool.read.title": "Leer",
"settings.permissions.tool.read.description": "Leer un archivo (coincide con la ruta del archivo)",
"settings.permissions.tool.edit.title": "Editar",
"settings.permissions.tool.edit.description": "Modificar archivos mediante ediciones, escrituras y parches",
"settings.permissions.tool.edit.description":
"Modificar archivos, incluyendo ediciones, escrituras, parches y multi-ediciones",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "Coincidir archivos usando patrones glob",
"settings.permissions.tool.grep.title": "Grep",
@@ -977,20 +970,20 @@ export const dict = {
"settings.permissions.tool.bash.title": "Bash",
"settings.permissions.tool.bash.description": "Ejecutar comandos de shell",
"settings.permissions.tool.task.title": "Tarea",
"settings.permissions.tool.task.description": "Iniciar subagentes",
"settings.permissions.tool.task.description": "Lanzar sub-agentes",
"settings.permissions.tool.skill.title": "Habilidad",
"settings.permissions.tool.skill.description": "Cargar una habilidad por nombre",
"settings.permissions.tool.lsp.title": "LSP",
"settings.permissions.tool.lsp.description": "Ejecutar consultas de servidor de lenguaje",
"settings.permissions.tool.todowrite.title": "Escribir tareas",
"settings.permissions.tool.todowrite.title": "Escribir Todo",
"settings.permissions.tool.todowrite.description": "Actualizar la lista de tareas",
"settings.permissions.tool.webfetch.title": "Obtener contenido web",
"settings.permissions.tool.webfetch.title": "Web Fetch",
"settings.permissions.tool.webfetch.description": "Obtener contenido de una URL",
"settings.permissions.tool.websearch.title": "Búsqueda web",
"settings.permissions.tool.websearch.title": "Búsqueda Web",
"settings.permissions.tool.websearch.description": "Buscar en la web",
"settings.permissions.tool.external_directory.title": "Directorio externo",
"settings.permissions.tool.external_directory.title": "Directorio Externo",
"settings.permissions.tool.external_directory.description": "Acceder a archivos fuera del directorio del proyecto",
"settings.permissions.tool.doom_loop.title": "Bucle infinito",
"settings.permissions.tool.doom_loop.title": "Bucle Infinito",
"settings.permissions.tool.doom_loop.description": "Detectar llamadas a herramientas repetidas con entrada idéntica",
"session.delete.failed.title": "Fallo al eliminar sesión",
@@ -1004,13 +997,13 @@ export const dict = {
"workspace.create.failed.title": "Fallo al crear espacio de trabajo",
"workspace.delete.failed.title": "Fallo al eliminar espacio de trabajo",
"workspace.resetting.title": "Restableciendo espacio de trabajo",
"workspace.resetting.description": "Esto puede tardar un minuto.",
"workspace.resetting.description": "Esto puede tomar un minuto.",
"workspace.reset.failed.title": "Fallo al restablecer espacio de trabajo",
"workspace.reset.success.title": "Espacio de trabajo restablecido",
"workspace.reset.success.description": "El espacio de trabajo ahora coincide con la rama predeterminada.",
"workspace.error.stillPreparing": "El espacio de trabajo aún se está preparando",
"workspace.status.checking": "Comprobando cambios no fusionados...",
"workspace.status.error": "No se pudo verificar el estado de Git.",
"workspace.status.error": "No se pudo verificar el estado de git.",
"workspace.status.clean": "No se detectaron cambios no fusionados.",
"workspace.status.dirty": "Cambios no fusionados detectados en este espacio de trabajo.",
"workspace.delete.title": "Eliminar espacio de trabajo",
@@ -1052,9 +1045,6 @@ export const dict = {
"session.question.progress": "{{current}} de {{total}} preguntas",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "Explorador de archivos",
"session.header.reveal.finder": "Mostrar en Finder",
"session.header.reveal.fileExplorer": "Mostrar en el Explorador de archivos",
"session.header.reveal.containingFolder": "Abrir carpeta contenedora",
"session.header.open.fileManager": "Gestor de archivos",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
@@ -1073,13 +1063,13 @@ export const dict = {
"debugBar.na": "n/d",
"debugBar.nav.label": "NAV",
"debugBar.nav.tip":
"Última transición de ruta completada que afecta a una página de sesión, medida desde el inicio del enrutador hasta el primer renderizado tras estabilizarse.",
"Última transición de ruta completada tocando una página de sesión, medida desde el inicio del router hasta el primer pintado después de asentarse.",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "Cuadros por segundo en los últimos 5 segundos.",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "Peor tiempo de cuadro en los últimos 5 segundos.",
"debugBar.jank.label": "JANK",
"debugBar.jank.tip": "Cuadros superiores a 32 ms en los últimos 5 segundos.",
"debugBar.jank.tip": "Cuadros superiores a 32ms en los últimos 5 segundos.",
"debugBar.long.label": "LONG",
"debugBar.long.tip": "Tiempo bloqueado y recuento de tareas largas en los últimos 5 segundos. Tarea máx: {{max}}.",
"debugBar.delay.label": "DELAY",
@@ -1088,7 +1078,7 @@ export const dict = {
"debugBar.inp.tip":
"Duración aproximada de la interacción en los últimos 5 segundos. Esto es similar a INP, no el INP oficial de Web Vitals.",
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "Cambio de diseño acumulativo durante la ejecución actual de la aplicación.",
"debugBar.cls.tip": "Cambio de diseño acumulativo para la vida útil actual de la aplicación.",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "Heap JS usado vs límite de heap. Solo Chromium.",
"debugBar.mem.tip": "Heap JS usado vs límite de heap. {{used}} de {{limit}}.",
-1030
View File
@@ -1,1030 +0,0 @@
export const dict = {
"command.category.suggested": "Ehdotetut",
"command.category.view": "Näytä",
"command.category.project": "Projekti",
"command.category.provider": "Palveluntarjoaja",
"command.category.server": "Palvelin",
"command.category.session": "Istunto",
"command.category.theme": "Teema",
"command.category.language": "Kieli",
"command.category.file": "Tiedosto",
"command.category.context": "Konteksti",
"command.category.terminal": "Terminaali",
"command.category.model": "Malli",
"command.category.mcp": "MCP",
"command.category.agent": "Agentti",
"command.category.permissions": "Käyttöoikeudet",
"command.category.workspace": "Työtila",
"command.category.settings": "Asetukset",
"theme.scheme.system": "Järjestelmän mukaan",
"theme.scheme.light": "Vaalea",
"theme.scheme.dark": "Tumma",
"command.sidebar.toggle": "Näytä tai piilota sivupalkki",
"command.project.open": "Avaa projekti",
"command.project.previous": "Edellinen projekti",
"command.project.next": "Seuraava projekti",
"command.project.index": "Vaihda projektiin {{index}}",
"command.provider.connect": "Yhdistä palveluntarjoaja",
"command.server.switch": "Vaihda palvelinta",
"command.settings.open": "Avaa asetukset",
"command.session.previous": "Edellinen istunto",
"command.session.next": "Seuraava istunto",
"command.session.previous.unseen": "Edellinen lukematon istunto",
"command.session.next.unseen": "Seuraava lukematon istunto",
"command.session.archive": "Arkistoi istunto",
"command.palette": "Komentopaletti",
"command.theme.cycle": "Vaihda teemaa",
"command.theme.set": "Käytä teemaa: {{theme}}",
"command.theme.scheme.cycle": "Vaihda värimallia",
"command.theme.scheme.set": "Käytä värimallia: {{scheme}}",
"command.language.cycle": "Vaihda kieltä",
"command.language.set": "Käytä kieltä: {{language}}",
"command.session.new": "Uusi istunto",
"command.file.open": "Avaa tiedosto",
"command.tab.close": "Sulje välilehti",
"command.tab.reopenClosed": "Avaa suljettu välilehti uudelleen",
"command.context.addSelection": "Lisää valinta kontekstiin",
"command.context.addSelection.description": "Lisää valitut rivit nykyisestä tiedostosta",
"command.input.focus": "Kohdista syötekenttään",
"command.terminal.toggle": "Näytä tai piilota terminaali",
"command.fileTree.toggle": "Näytä tai piilota tiedostopuu",
"command.review.toggle": "Näytä tai piilota tarkistus",
"command.terminal.new": "Uusi terminaali",
"command.terminal.new.description": "Luo uusi terminaalivälilehti",
"command.steps.toggle": "Näytä tai piilota vaiheet",
"command.steps.toggle.description": "Näytä tai piilota nykyisen viestin vaiheet",
"command.message.previous": "Edellinen viesti",
"command.message.previous.description": "Siirry edelliseen käyttäjän viestiin",
"command.message.next": "Seuraava viesti",
"command.message.next.description": "Siirry seuraavaan käyttäjäviestiin",
"command.model.choose": "Valitse malli",
"command.model.choose.description": "Valitse eri malli",
"command.mcp.toggle": "Ota MCP:t käyttöön tai poista käytöstä",
"command.mcp.toggle.description": "Ota MCP:t käyttöön tai poista käytöstä",
"command.agent.cycle": "Vaihda agenttia",
"command.agent.cycle.description": "Vaihda seuraavaan agenttiin",
"command.agent.cycle.reverse": "Vaihda agenttia taaksepäin",
"command.agent.cycle.reverse.description": "Vaihda edelliseen agenttiin",
"command.model.variant.cycle": "Vaihda päättelyn tasoa",
"command.model.variant.cycle.description": "Vaihda seuraavalle päättelyn tasolle",
"command.prompt.mode.shell": "Shell",
"command.prompt.mode.normal": "Kehote",
"command.permissions.autoaccept.enable": "Hyväksy käyttöoikeudet automaattisesti",
"command.permissions.autoaccept.disable": "Lopeta käyttöoikeuksien automaattinen hyväksyminen",
"command.workspace.toggle": "Vaihda työtiloja",
"command.workspace.toggle.description": "Ota käyttöön tai poista käytöstä useita työtiloja sivupalkissa",
"command.session.undo": "Kumoa",
"command.session.undo.description": "Kumoa viimeinen viesti",
"command.session.redo": "Toista",
"command.session.redo.description": "Toista viimeisin kumottu viesti",
"command.session.compact": "Tiivistä istunto",
"command.session.compact.description": "Tee yhteenveto istunnosta pienentääksesi kontekstin kokoa",
"command.session.fork": "Haarauta viestistä",
"command.session.fork.description": "Luo uusi istunto edellisestä viestistä",
"command.session.share": "Jaa istunto",
"command.session.share.description": "Jaa tämä istunto ja kopioi URL-osoite leikepöydälle",
"command.session.unshare": "Peru istunnon jakaminen",
"command.session.unshare.description": "Lopeta tämän istunnon jakaminen",
"palette.search.placeholder": "Hae tiedostoja, komentoja ja istuntoja",
"palette.search.placeholder.home": "Hae komentoja ja istuntoja",
"palette.empty": "Tuloksia ei löytynyt",
"palette.group.commands": "Komennot",
"palette.group.files": "Tiedostot",
"dialog.provider.search.placeholder": "Etsi palveluntarjoajia",
"dialog.provider.empty": "Palveluntarjoajia ei löytynyt",
"dialog.provider.group.popular": "Suositut",
"dialog.provider.group.other": "Muut",
"dialog.provider.custom.label": "Mukautettu OpenAI-yhteensopiva palveluntarjoaja",
"dialog.provider.tag.recommended": "Suositeltu",
"dialog.provider.opencode.note": "Kuratoituja malleja, kuten Claude, GPT, Gemini ja muita",
"dialog.provider.opencode.tagline": "Luotettavat optimoidut mallit",
"dialog.provider.opencodeGo.tagline": "Edullinen tilaus kaikille",
"dialog.provider.anthropic.note": "Suora pääsy Claude-malleihin, mukaan lukien Pro ja Max",
"dialog.provider.copilot.note": "AI-malleja koodausapuun GitHub Copilotin kautta",
"dialog.provider.openai.note": "GPT-mallit nopeisiin, suorituskykyisiin yleisiin tekoälytehtäviin",
"dialog.provider.google.note": "Gemini-mallit nopeisiin, jäsenneltyihin vastauksiin",
"dialog.provider.openrouter.note": "Käytä kaikkia tuettuja malleja yhdeltä palveluntarjoajalta",
"dialog.provider.vercel.note": "Yhdistetty pääsy AI-malleihin älykkäällä reitityksellä",
"dialog.model.select.title": "Valitse malli",
"dialog.model.search.placeholder": "Hae malleja",
"dialog.model.empty": "Ei mallituloksia",
"dialog.model.manage": "Hallitse malleja",
"dialog.model.manage.description": "Mukauta, mitkä mallit näkyvät mallivalitsimessa.",
"dialog.model.manage.provider.toggle": "Ota kaikki palveluntarjoajan {{provider}} mallit käyttöön tai pois käytöstä",
"dialog.model.unpaid.freeModels.title": "OpenCoden tarjoamat ilmaiset mallit",
"dialog.model.unpaid.addMore.title": "Lisää malleja suosituilta palveluntarjoajilta",
"dialog.model.unpaid.viewMoreProviders": "Katso yli 70 muuta palveluntarjoajaa",
"dialog.provider.viewAll": "Näytä lisää palveluntarjoajia",
"provider.connect.title": "Yhdistä {{provider}}",
"provider.connect.title.anthropicProMax": "Kirjaudu sisään Claude Pro/Maxilla",
"provider.connect.selectMethod": "Valitse kirjautumistapa palvelulle {{provider}}.",
"provider.connect.method.apiKey": "API-avain",
"provider.connect.status.inProgress": "Valtuutus käynnissä...",
"provider.connect.status.waiting": "Odotetaan valtuutusta...",
"provider.connect.status.failed": "Valtuutus epäonnistui: {{error}}",
"provider.connect.apiKey.description":
"Anna {{provider}}-API-avaimesi yhdistääksesi tilisi ja käyttääksesi {{provider}}-malleja OpenCodessa.",
"provider.connect.apiKey.label": "{{provider}}-API-avain",
"provider.connect.apiKey.placeholder": "API-avain",
"provider.connect.apiKey.required": "API-avain vaaditaan",
"provider.connect.opencodeZen.line1":
"OpenCode Zen antaa sinulle pääsyn kuratoituun joukkoon luotettavia optimoituja malleja koodausagenteille.",
"provider.connect.opencodeZen.line2":
"Yhdellä API-avaimella pääset käyttämään malleja, kuten Claude, GPT, Gemini, GLM ja paljon muuta.",
"provider.connect.opencodeZen.visit.prefix": "Avaa ",
"provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
"provider.connect.opencodeZen.visit.suffix": " ja hae API-avaimesi.",
"provider.connect.oauth.code.visit.prefix": "Avaa ",
"provider.connect.oauth.code.visit.link": "tämä linkki",
"provider.connect.oauth.code.visit.suffix":
" ja hae valtuutuskoodi, jolla voit yhdistää tilisi ja käyttää {{provider}}-malleja OpenCodessa.",
"provider.connect.oauth.code.label": "Palvelun {{method}} valtuutuskoodi",
"provider.connect.oauth.code.placeholder": "Valtuutuskoodi",
"provider.connect.oauth.code.required": "Valtuutuskoodi vaaditaan",
"provider.connect.oauth.code.invalid": "Virheellinen valtuutuskoodi",
"provider.connect.oauth.auto.visit.prefix": "Avaa ",
"provider.connect.oauth.auto.visit.link": "tämä linkki",
"provider.connect.oauth.auto.visit.suffix":
" ja anna alla oleva koodi yhdistääksesi tilisi ja käyttääksesi {{provider}}-malleja OpenCodessa.",
"provider.connect.oauth.auto.confirmationCode": "Vahvistuskoodi",
"provider.connect.toast.connected.title": "{{provider}} yhdistetty",
"provider.connect.toast.connected.description": "{{provider}}-mallit ovat nyt käytettävissä.",
"provider.custom.title": "Mukautettu palveluntarjoaja",
"provider.custom.description.prefix": "Määritä OpenAI-yhteensopiva palveluntarjoaja. Katso ",
"provider.custom.description.link": "palveluntarjoajan asetusdokumentit",
"provider.custom.description.suffix": ".",
"provider.custom.field.providerID.label": "Palveluntarjoajan tunnus",
"provider.custom.field.providerID.placeholder": "myprovider",
"provider.custom.field.providerID.description": "Pienet kirjaimet, numerot, yhdysmerkit tai alaviivat",
"provider.custom.field.name.label": "Näyttönimi",
"provider.custom.field.name.placeholder": "Oma tekoälypalveluni",
"provider.custom.field.baseURL.label": "Perus-URL-osoite",
"provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1",
"provider.custom.field.apiKey.label": "API-avain",
"provider.custom.field.apiKey.placeholder": "API-avain",
"provider.custom.field.apiKey.description": "Valinnainen. Jätä tyhjäksi, jos hallitset todennusta otsikoiden avulla.",
"provider.custom.models.label": "Mallit",
"provider.custom.models.id.label": "ID",
"provider.custom.models.id.placeholder": "model-id",
"provider.custom.models.name.label": "Nimi",
"provider.custom.models.name.placeholder": "Näyttönimi",
"provider.custom.models.remove": "Poista malli",
"provider.custom.models.add": "Lisää malli",
"provider.custom.headers.label": "Otsikot (valinnainen)",
"provider.custom.headers.key.label": "Otsikko",
"provider.custom.headers.key.placeholder": "Header-Name",
"provider.custom.headers.value.label": "Arvo",
"provider.custom.headers.value.placeholder": "value",
"provider.custom.headers.remove": "Poista otsikko",
"provider.custom.headers.add": "Lisää otsikko",
"provider.custom.error.providerID.required": "Palveluntarjoajan tunnus vaaditaan",
"provider.custom.error.providerID.format": "Käytä pieniä kirjaimia, numeroita, tavuviivoja tai alaviivoja",
"provider.custom.error.providerID.exists": "Palveluntarjoajan tunnus on jo olemassa",
"provider.custom.error.name.required": "Näyttönimi vaaditaan",
"provider.custom.error.baseURL.required": "Perus-URL-osoite vaaditaan",
"provider.custom.error.baseURL.format": "Alussa on oltava http:// tai https://",
"provider.custom.error.required": "Pakollinen",
"provider.custom.error.duplicate": "Kaksoiskappale",
"provider.disconnect.toast.disconnected.title": "Yhteys palveluntarjoajaan {{provider}} katkaistu",
"provider.disconnect.toast.disconnected.description": "{{provider}}-mallit eivät ole enää saatavilla.",
"model.tag.free": "Ilmainen",
"model.tag.latest": "Uusin",
"model.provider.anthropic": "Anthropic",
"model.provider.openai": "OpenAI",
"model.provider.google": "Google",
"model.provider.xai": "xAI",
"model.provider.meta": "Meta",
"model.input.text": "teksti",
"model.input.image": "kuva",
"model.input.audio": "ääni",
"model.input.video": "video",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Sallitut syötteet: {{inputs}}",
"model.tooltip.context.label": "Konteksti",
"model.tooltip.inputs": "Syötteet",
"model.tooltip.model": "Malli",
"model.tooltip.provider": "Palveluntarjoaja",
"model.tooltip.reasoning": "Päättely",
"model.tooltip.reasoning.allowed": "Mahdollistaa päättelyn",
"model.tooltip.reasoning.none": "Ei päättelyä",
"model.tooltip.context": "Kontekstirajoitus {{limit}}",
"common.search.placeholder": "Etsi",
"common.goBack": "Siirry takaisin",
"common.goForward": "Siirry eteenpäin",
"common.loading": "Ladataan",
"common.loading.ellipsis": "...",
"common.cancel": "Peruuta",
"common.clear": "Tyhjennä",
"common.open": "Avaa",
"common.connect": "Yhdistä",
"common.disconnect": "Katkaise yhteys",
"common.continue": "Jatka",
"common.submit": "Lähetä",
"common.save": "Tallenna",
"common.saving": "Tallennetaan...",
"common.default": "Oletus",
"common.attachment": "liite",
"prompt.placeholder.shell": "Anna shell-komento... {{example}}",
"prompt.placeholder.normal": 'Kysy mitä tahansa... "{{example}}"',
"prompt.placeholder.simple": "Kysy mitä tahansa...",
"prompt.placeholder.summarizeComments": "Tiivistä kommentit…",
"prompt.placeholder.summarizeComment": "Tiivistä kommentti…",
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Kehote",
"prompt.mode.shell.exit": "poistu painamalla Esc",
"session.child.promptDisabled": "Aliagentti-istuntoihin ei voi lähettää kehotteita.",
"session.child.backToParent": "Takaisin pääistuntoon.",
"prompt.example.1": "Korjaa TODO koodikannassa",
"prompt.example.2": "Mikä on tämän projektin teknologiapino?",
"prompt.example.3": "Korjaa rikkinäiset testit",
"prompt.example.4": "Selitä, kuinka todennus toimii",
"prompt.example.5": "Etsi ja korjaa tietoturva-aukkoja",
"prompt.example.6": "Lisää yksikkötestejä käyttäjäpalveluun",
"prompt.example.7": "Refaktoroi tämä funktio luettavammaksi",
"prompt.example.8": "Mitä tämä virhe tarkoittaa?",
"prompt.example.9": "Auta minua selvittämään tämä ongelma",
"prompt.example.10": "Luo API-dokumentaatio",
"prompt.example.11": "Optimoi tietokantakyselyt",
"prompt.example.12": "Lisää syötteen validointi",
"prompt.example.13": "Luo uusi komponentti...",
"prompt.example.14": "Kuinka otan tämän projektin käyttöön?",
"prompt.example.15": "Tarkista koodini parhaat käytännöt",
"prompt.example.16": "Lisää tähän toimintoon virheenkäsittely",
"prompt.example.17": "Selitä tämä säännöllinen lauseke",
"prompt.example.18": "Muunna tämä TypeScriptiksi",
"prompt.example.19": "Lisää kirjaus koko koodikantaan",
"prompt.example.20": "Mitkä riippuvuudet ovat vanhentuneita?",
"prompt.example.21": "Auta minua kirjoittamaan migraatioskripti",
"prompt.example.22": "Ota välimuisti käyttöön tälle päätepisteelle",
"prompt.example.23": "Lisää sivutus tähän luetteloon",
"prompt.example.24": "Luo CLI-komento...",
"prompt.example.25": "Miten ympäristömuuttujat toimivat tässä?",
"prompt.popover.emptyResults": "Ei vastaavia tuloksia",
"prompt.popover.emptyCommands": "Ei vastaavia komentoja",
"prompt.dropzone.label": "Pudota kuvia, PDF-tiedostoja tai tekstitiedostoja tähän",
"prompt.dropzone.file.label": "Pudota lisätäksesi tiedoston @-mainintana",
"prompt.slash.badge.custom": "mukautettu",
"prompt.slash.badge.skill": "taito",
"prompt.slash.badge.mcp": "mcp",
"prompt.context.active": "aktiivinen",
"prompt.context.includeActiveFile": "Sisällytä aktiivinen tiedosto",
"prompt.context.removeActiveFile": "Poista aktiivinen tiedosto kontekstista",
"prompt.context.removeFile": "Poista tiedosto kontekstista",
"prompt.action.attachFile": "Lisää tiedostoja",
"prompt.menu.addImagesAndFiles": "Lisää tiedostoja ja paljon muuta",
"prompt.menu.imagesAndFiles": "Kuvia ja tiedostoja",
"prompt.menu.commands": "Komennot",
"prompt.menu.context": "Konteksti",
"prompt.menu.shellCommand": "Shell-komento",
"prompt.attachment.remove": "Poista liite",
"prompt.action.send": "Lähetä",
"prompt.action.stop": "Pysäytä",
"prompt.toast.pasteUnsupported.title": "Liitettä ei tueta",
"prompt.toast.pasteUnsupported.description": "Vain kuvia, PDF-tiedostoja tai tekstitiedostoja voi liittää tähän.",
"prompt.toast.attachmentDuplicate.title": "Tämä tiedosto on jo ladattu",
"prompt.toast.modelAgentRequired.title": "Valitse agentti ja malli",
"prompt.toast.modelAgentRequired.description": "Valitse agentti ja malli ennen kehotteen lähettämistä.",
"prompt.toast.worktreeCreateFailed.title": "Työpuun luominen epäonnistui",
"prompt.toast.sessionCreateFailed.title": "Istunnon luominen epäonnistui",
"prompt.toast.shellSendFailed.title": "Shell-komennon lähettäminen epäonnistui",
"prompt.toast.commandSendFailed.title": "Komennon lähettäminen epäonnistui",
"prompt.toast.promptSendFailed.title": "Kehotteen lähettäminen epäonnistui",
"prompt.toast.promptSendFailed.description": "Istuntoa ei voi noutaa",
"dialog.mcp.title": "MCP:t",
"dialog.mcp.description": "{{enabled}}/{{total}} käytössä",
"dialog.mcp.empty": "MCP:tä ei ole määritetty",
"dialog.lsp.empty": "LSP:t tunnistetaan automaattisesti tiedostotyypeistä",
"dialog.plugins.empty": "Laajennukset määritetään opencode.json-tiedostossa",
"mcp.status.connected": "yhdistetty",
"mcp.status.failed": "epäonnistunut",
"mcp.status.needs_auth": "tarvitsee todennusta",
"mcp.status.disabled": "pois käytöstä",
"mcp.auth.clickToAuthenticate": "Todenna napsauttamalla",
"dialog.fork.empty": "Ei viestejä, joista voisi haarauttaa",
"dialog.directory.search.placeholder": "Hae kansioita",
"dialog.directory.empty": "Kansioita ei löytynyt",
"dialog.directory.action.selectFile": "Valitse tiedosto",
"dialog.directory.action.selectFolder": "Valitse kansio",
"dialog.directory.root": "Juuri",
"dialog.directory.parent": "Ylätaso",
"dialog.directory.readError": "Tätä kansiota ei voi lukea",
"app.server.unreachable": "Palvelimeen {{server}} ei saatu yhteyttä",
"app.server.retrying": "Yritetään automaattisesti uudelleen...",
"app.server.otherServers": "Muut palvelimet",
"dialog.server.title": "Palvelimet",
"dialog.server.description": "Vaihda OpenCode-palvelimeen, johon tämä sovellus muodostaa yhteyden.",
"dialog.server.search.placeholder": "Etsi palvelimia",
"dialog.server.empty": "Ei vielä palvelimia",
"dialog.server.add.title": "Lisää palvelin",
"dialog.server.add.url": "Palvelimen osoite",
"dialog.server.add.placeholder": "http://localhost:4096",
"dialog.server.add.error": "Ei voitu muodostaa yhteyttä palvelimeen",
"dialog.server.add.checking": "Tarkistetaan...",
"dialog.server.add.button": "Lisää palvelin",
"dialog.server.add.name": "Palvelimen nimi (valinnainen)",
"dialog.server.add.namePlaceholder": "Localhost",
"dialog.server.add.username": "Käyttäjätunnus (valinnainen)",
"dialog.server.add.usernamePlaceholder": "käyttäjätunnus",
"dialog.server.add.password": "Salasana (valinnainen)",
"dialog.server.add.passwordPlaceholder": "salasana",
"dialog.server.edit.title": "Muokkaa palvelinta",
"dialog.server.default.title": "Oletuspalvelin",
"dialog.server.default.description":
"Yhdistä tähän palvelimeen sovelluksen käynnistyksen yhteydessä paikallisen palvelimen käynnistämisen sijaan. Vaatii uudelleenkäynnistyksen.",
"dialog.server.default.none": "Palvelinta ei ole valittu",
"dialog.server.default.set": "Aseta nykyinen palvelin oletukseksi",
"dialog.server.default.clear": "Tyhjennä",
"dialog.server.action.remove": "Poista palvelin",
"dialog.server.menu.edit": "Muokkaa",
"dialog.server.menu.default": "Aseta oletukseksi",
"dialog.server.menu.defaultRemove": "Poista oletuspalvelin",
"dialog.server.menu.delete": "Poista",
"dialog.server.current": "Nykyinen palvelin",
"dialog.server.status.default": "Oletus",
"wsl.server.add": "Lisää WSL-palvelin",
"wsl.server.addShort": "Lisää WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "WSL-palvelin",
"wsl.server.retryStart": "Yritä käynnistystä uudelleen",
"wsl.server.updating": "Päivitetään...",
"wsl.onboarding.step.distro": "Valitse jakelu",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "Tarkistetaan WSL...",
"wsl.onboarding.restartRequired": "Windows tarvitsee uudelleenkäynnistyksen WSL:n asennuksen viimeistelemiseksi.",
"wsl.onboarding.ready": "WSL on valmis.",
"wsl.onboarding.required": "WSL vaaditaan jatkamiseen.",
"wsl.onboarding.checkingDistros": "Tarkistetaan jakeluja...",
"wsl.onboarding.installingDistro": "Asennetaan {{distro}}...",
"wsl.onboarding.checkingDistro": "Tarkistetaan {{distro}}...",
"wsl.onboarding.listingDistros": "Luetteloidaan jakeluja...",
"wsl.onboarding.distroReady": "{{distro}} on valmis.",
"wsl.onboarding.distroNotInstalled": "{{distro}} ei ole vielä asennettu.",
"wsl.onboarding.openDistroOnce": "Avaa {{distro}} kerran viimeistelläksesi asetukset.",
"wsl.onboarding.finishingDistro": "Viimeistellään jakelun {{distro}} asennusta.",
"wsl.onboarding.pickDistro": "Valitse jakelu tai asenna sellainen alta.",
"wsl.onboarding.checkingOpencode": "Tarkistetaan OpenCodea...",
"wsl.onboarding.checkingOpencodeIn": "Tarkistetaan OpenCodea kohteessa {{distro}}...",
"wsl.onboarding.updatingOpencode": "Päivitetään OpenCodea...",
"wsl.onboarding.updatingOpencodeIn": "Päivitetään OpenCodea kohteessa {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "Päivitä OpenCode jakelussa {{distro}}.",
"wsl.onboarding.updateOpencode": "Päivitä OpenCode",
"wsl.onboarding.opencodeReadyIn": "OpenCode on valmis jakelussa {{distro}}.",
"wsl.onboarding.opencodeReady": "OpenCode on valmis.",
"wsl.onboarding.installOpencodeIn": "Asenna OpenCode jakeluun {{distro}}.",
"wsl.onboarding.installOpencode": "Asenna OpenCode",
"wsl.onboarding.chooseDistroFirst": "Valitse ensin jakelu.",
"wsl.onboarding.loadFailed": "WSL-tilan lataaminen epäonnistui.",
"wsl.onboarding.loading": "Ladataan...",
"wsl.onboarding.installedDistros": "Asennetut jakelut",
"wsl.onboarding.checkAgain": "Tarkista uudelleen",
"wsl.onboarding.distroStatus.ready": "Valmis",
"wsl.onboarding.distroStatus.checking": "Tarkistetaan...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCodea ei ole asennettu",
"wsl.onboarding.distroStatus.missingTools": "Puuttuu bash, curl",
"wsl.onboarding.distroStatus.unsupported": "Ei tuettu · Käytä WSL 2:ta",
"wsl.onboarding.needAnotherDistro": "Tarvitsetko toisen jakelun?",
"wsl.onboarding.needAnotherDistroHint": "Asenna Linux-jakelu WSL-luettelosta",
"wsl.onboarding.wslNotInstalled.title": "WSL:ää ei ole asennettu",
"wsl.onboarding.wslNotInstalled.description":
"WSL (Windows Subsystem for Linux) vaaditaan ennen kuin OpenCode voi lisätä WSL-palvelimen",
"wsl.onboarding.wslUnavailable.title": "WSL ei ole käytettävissä",
"wsl.onboarding.wslUnavailable.description": "OpenCode ei voinut vahvistaa WSL:ää tällä koneella.",
"wsl.onboarding.installWsl": "Asenna WSL",
"wsl.onboarding.windowsRestartRequired":
"Viimeistele WSL:n asennus käynnistämällä Windows uudelleen ja avaa sitten OpenCode uudelleen.",
"wsl.onboarding.next": "Seuraava",
"wsl.onboarding.refresh": "Päivitä",
"wsl.onboarding.allDistrosAdded": "Kaikki asennetut jakelut on jo lisätty.",
"wsl.onboarding.noDistros": "Jakeluja ei ole vielä havaittu.",
"wsl.onboarding.install": "Asenna",
"wsl.onboarding.installing": "Asennetaan...",
"wsl.onboarding.installDistro": "Asenna jakelu",
"wsl.onboarding.searchDistros": "Etsi jakeluja",
"wsl.onboarding.wsl2Required": "WSL 2 vaaditaan.",
"wsl.onboarding.toolsRequired": "Tämä jakelu tarvitsee bashin ja curlin.",
"wsl.onboarding.openTerminal": "Avaa terminaali",
"wsl.onboarding.path": "Polku: {{path}}",
"wsl.onboarding.notFound": "ei löytynyt",
"wsl.onboarding.version": "Versio: {{version}}",
"wsl.onboarding.unknown": "tuntematon",
"wsl.onboarding.desktopVersion": "Desktop {{version}}",
"wsl.onboarding.versionMismatch": "Asennettu versio ei vastaa työpöytäsovelluksen versiota.",
"wsl.onboarding.adding": "Lisätään...",
"server.row.noUsername": "ei käyttäjätunnusta",
"dialog.project.edit.title": "Muokkaa projektia",
"dialog.project.edit.name": "Nimi",
"dialog.project.edit.icon": "Kuvake",
"dialog.project.edit.icon.alt": "Projektikuvake",
"dialog.project.edit.icon.hint": "Napsauta tai vedä kuvaa",
"dialog.project.edit.icon.recommended": "Suositus: 128x128px",
"dialog.project.edit.color": "Väri",
"dialog.project.edit.color.select": "Valitse väri {{color}}",
"dialog.project.edit.worktree.startup": "Työtilan käynnistysskripti",
"dialog.project.edit.worktree.startup.description": "Suoritetaan uuden työtilan (työpuun) luomisen jälkeen.",
"dialog.project.edit.worktree.startup.placeholder": "esim. bun install",
"dialog.releaseNotes.action.getStarted": "Aloita",
"dialog.releaseNotes.action.next": "Seuraava",
"dialog.releaseNotes.action.hideFuture": "Älä näytä näitä jatkossa",
"dialog.releaseNotes.media.alt": "Julkaisun esikatselu",
"context.breakdown.title": "Kontekstin erittely",
"context.breakdown.note":
'Syötetokenien arvioitu jakautuminen. "Muut" sisältää työkalumäärittelyt ja muun oheissisällön.',
"context.breakdown.system": "Järjestelmä",
"context.breakdown.user": "Käyttäjä",
"context.breakdown.assistant": "Avustaja",
"context.breakdown.tool": "Työkalukutsut",
"context.breakdown.other": "Muut",
"context.systemPrompt.title": "Järjestelmäkehote",
"context.rawMessages.title": "Raakaviestit",
"context.stats.session": "Istunto",
"context.stats.messages": "Viestit",
"context.stats.provider": "Palveluntarjoaja",
"context.stats.model": "Malli",
"context.stats.limit": "Kontekstirajoitus",
"context.stats.totalTokens": "Tokenit yhteensä",
"context.stats.usage": "Käyttö",
"context.stats.inputTokens": "Syötetokenit",
"context.stats.outputTokens": "Tulostokenit",
"context.stats.reasoningTokens": "Päättelytokenit",
"context.stats.cacheTokens": "Välimuistitokenit (luku/kirjoitus)",
"context.stats.userMessages": "Käyttäjäviestit",
"context.stats.assistantMessages": "Avustajan viestit",
"context.stats.totalCost": "Kokonaiskustannukset",
"context.stats.sessionCreated": "Istunto luotu",
"context.stats.lastActivity": "Viimeisin toiminta",
"context.usage.tokens": "Tokenit",
"context.usage.usage": "Käyttö",
"context.usage.cost": "Kustannukset",
"context.usage.clickToView": "Näytä konteksti napsauttamalla",
"context.usage.view": "Näytä kontekstin käyttö",
"language.en": "English",
"language.zh": "简体中文",
"language.zht": "繁體中文",
"language.ko": "한국어",
"language.de": "Deutsch",
"language.es": "Español",
"language.fr": "Français",
"language.da": "Dansk",
"language.ja": "日本語",
"language.pl": "Polski",
"language.ru": "Русский",
"language.ar": "العربية",
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
"toast.language.title": "Kieli",
"toast.language.description": "Kieleksi vaihdettu {{language}}",
"toast.theme.title": "Teema vaihdettu",
"toast.scheme.title": "Värimalli",
"toast.workspace.enabled.title": "Työtilat käytössä",
"toast.workspace.enabled.description": "Sivupalkissa näkyy nyt useita työpuita",
"toast.workspace.disabled.title": "Työtilat pois käytöstä",
"toast.workspace.disabled.description": "Vain päätyöpuu näkyy sivupalkissa",
"toast.permissions.autoaccept.on.title": "Käyttöoikeudet hyväksytään automaattisesti",
"toast.permissions.autoaccept.on.description": "Lupapyynnöt hyväksytään automaattisesti",
"toast.permissions.autoaccept.off.title": "Lupien automaattinen hyväksyminen lopetettu",
"toast.permissions.autoaccept.off.description": "Lupapyynnöt vaativat hyväksynnän",
"toast.model.none.title": "Mallia ei ole valittu",
"toast.model.none.description": "Yhdistä palveluntarjoaja tehdäksesi yhteenvedon tästä istunnosta",
"toast.file.loadFailed.title": "Tiedoston lataaminen epäonnistui",
"toast.file.listFailed.title": "Tiedostojen luettelointi epäonnistui",
"toast.context.noLineSelection.title": "Ei rivivalintaa",
"toast.context.noLineSelection.description": "Valitse ensin riviväli tiedostovälilehdeltä.",
"toast.session.share.copyFailed.title": "URL-osoitteen kopioiminen leikepöydälle epäonnistui",
"toast.session.share.success.title": "Istunto jaettu",
"toast.session.share.success.description": "Jakolinkki kopioitu leikepöydälle!",
"toast.session.share.failed.title": "Istunnon jakaminen epäonnistui",
"toast.session.share.failed.description": "Istunnon jakamisessa tapahtui virhe",
"toast.session.unshare.success.title": "Istunnon jako peruttu",
"toast.session.unshare.success.description": "Istunnon jakaminen peruutettu onnistuneesti!",
"toast.session.unshare.failed.title": "Istunnon jakamisen peruuttaminen epäonnistui",
"toast.session.unshare.failed.description": "Virhe peruttaessa istunnon jakamista",
"toast.session.listFailed.title": "Projektin {{project}} istuntojen lataaminen epäonnistui",
"toast.project.reloadFailed.title": "Projektin {{project}} lataaminen uudelleen epäonnistui",
"toast.update.title": "Päivitys saatavilla",
"toast.update.description": "OpenCoden uusi versio ({{version}}) on nyt saatavana asennettavaksi.",
"toast.update.action.installRestart": "Asenna ja käynnistä uudelleen",
"toast.update.action.notYet": "Ei vielä",
"error.page.title": "Jotain meni pieleen",
"error.page.description": "Sovellusta ladattaessa tapahtui virhe.",
"error.page.description.localServerStartup": "Paikallista palvelinta käynnistettäessä tapahtui virhe.",
"error.page.details.label": "Virheen tiedot",
"error.page.action.restart": "Käynnistä uudelleen",
"error.page.action.report": "Ilmoita virheestä",
"error.page.action.reported": "Virhe raportoitu",
"error.page.action.exportLogs": "Vie lokit",
"error.page.action.checking": "Tarkistetaan...",
"error.page.action.checkUpdates": "Tarkista päivitykset",
"error.page.action.updateTo": "Päivitä versioon {{version}}",
"error.page.circular": "[Kehäviittaus]",
"error.page.report.prefix": "Ilmoita tästä virheestä OpenCode-tiimille",
"error.page.report.discord": "Discordissa",
"error.page.version": "Versio: {{version}}",
"error.dev.rootNotFound":
"Juurielementtiä ei löydy. Unohditko lisätä sen index.html-tiedostoosi? Tai ehkä id-attribuutti on kirjoitettu väärin?",
"error.serverSync.connectFailed":
"Ei voitu muodostaa yhteyttä palvelimeen. Onko osoitteessa `{{url}}` käynnissä palvelin?",
"error.serverSDK.noServerAvailable": "Palvelinta ei ole saatavilla",
"error.serverSDK.serverNotAvailable": "Palvelin ei ole käytettävissä",
"error.childStore.persistedCacheCreateFailed": "Pysyvän välimuistin luominen epäonnistui",
"error.childStore.persistedProjectMetadataCreateFailed": "Projektin pysyvien metatietojen luominen epäonnistui",
"error.childStore.persistedProjectIconCreateFailed": "Pysyvän projektin kuvakkeen luominen epäonnistui",
"error.childStore.storeCreateFailed": "Tietovaraston luominen epäonnistui",
"directory.error.invalidUrl": "Virheellinen hakemisto URL-osoitteessa.",
"error.chain.unknown": "Tuntematon virhe",
"error.server.invalidConfiguration": "Virheellinen määritys",
"error.chain.causedBy": "Aiheuttaja:",
"error.chain.apiError": "API-virhe",
"error.chain.status": "Tila: {{status}}",
"error.chain.retryable": "Voidaan yrittää uudelleen: {{retryable}}",
"error.chain.responseBody": "Vastausteksti:\n{{body}}",
"error.chain.didYouMean": "Tarkoititko: {{suggestions}}",
"error.chain.modelNotFound": "Mallia ei löydy: {{provider}}/{{model}}",
"error.chain.checkConfig": "Tarkista määritysten (opencode.json) palveluntarjoajien ja mallien nimet",
"error.chain.mcpFailed": 'MCP-palvelin "{{name}}" epäonnistui. Huomaa, että OpenCode ei vielä tue MCP-todennusta.',
"error.chain.providerAuthFailed": "Palveluntarjoajan todennus epäonnistui ({{provider}}): {{message}}",
"error.chain.providerInitFailed":
'Palveluntarjoajan "{{provider}}" alustaminen epäonnistui. Tarkista tunnistetiedot ja määritykset.',
"error.chain.configJsonInvalid": "Polun {{path}} määritystiedosto ei ole kelvollista JSON(C)-muotoa",
"error.chain.configJsonInvalidWithMessage":
"Polun {{path}} määritystiedosto ei ole kelvollista JSON(C)-muotoa: {{message}}",
"error.chain.configDirectoryTypo":
'Hakemisto "{{dir}}" polussa {{path}} ei kelpaa. Nimeä hakemisto uudelleen nimellä "{{suggestion}}" tai poista se. Tämä on yleinen kirjoitusvirhe.',
"error.chain.configFrontmatterError": "Polun {{path}} front matter -tietojen jäsentäminen epäonnistui:\n{{message}}",
"error.chain.configInvalid": "Polun {{path}} määritystiedosto on virheellinen",
"error.chain.configInvalidWithMessage": "Polun {{path}} määritystiedosto on virheellinen: {{message}}",
"notification.permission.title": "Lupa vaaditaan",
"notification.permission.description": "Istunto {{sessionTitle}} projektissa {{projectName}} tarvitsee luvan",
"notification.question.title": "Kysymys",
"notification.question.description": "Istunto {{sessionTitle}} projektissa {{projectName}} esittää kysymyksen",
"notification.action.goToSession": "Siirry istuntoon",
"notification.session.responseReady.title": "Vastaus valmiina",
"notification.session.error.title": "Istuntovirhe",
"notification.session.error.fallbackDescription": "Tapahtui virhe",
"home.recentProjects": "Viimeaikaiset projektit",
"home.empty.title": "Ei viimeaikaisia projekteja",
"home.empty.description": "Aloita avaamalla paikallinen projekti",
"home.title": "Etusivu",
"home.projects": "Projektit",
"home.project.add": "Lisää projekti",
"home.recentlyClosed": "Äskettäin suljettu",
"home.server.collapse": "Kutista palvelimen projektit",
"home.server.expand": "Laajenna palvelimen projektit",
"home.sessions.search.placeholder": "Hae istuntoja",
"home.sessions.search.placeholder.scoped": "Hae istuntoja kohteesta {{scope}}",
"home.sessions.search.sessions": "Istunnot",
"home.sessions.search.noResults": "Ei istuntoja haulle {{query}}",
"home.sessions.empty": "Ei täällä vielä mitään",
"home.sessions.empty.description": "Aloita luomalla istunto",
"home.sessions.group.today": "Tänään",
"home.sessions.group.yesterday": "Eilen",
"home.sessions.group.older": "Vanhemmat",
"home.providerTip": "Yhdistä yli 75 palveluntarjoajaan käyttääksesi muita malleja, kuten Claude, GPT, Gemini jne",
"session.tab.session": "Istunto",
"session.tab.review": "Tarkistus",
"session.tab.context": "Konteksti",
"session.tab.unknown": "Tuntematon istunto",
"session.panel.reviewAndFiles": "Tarkistus ja tiedostot",
"session.error.notFound": "Tätä istuntoa ei löydy",
"session.error.notFound.description": "Tämä välilehti osoittaa istuntoon, jota ei enää ole tällä palvelimella.",
"session.error.notFound.closeTab": "Sulje välilehti",
"session.error.serverConnection": "Ei voi muodostaa yhteyttä tähän palvelimeen",
"session.review.filesChanged": "Muutettuja tiedostoja: {{count}}",
"session.review.change.one": "Muutos",
"session.review.change.other": "Muutokset",
"session.review.loadingChanges": "Ladataan muutoksia...",
"session.review.empty": "Tässä istunnossa ei vielä muutoksia",
"session.review.noVcs": "Git-versionhallintaa ei havaittu, joten muutoksia ei näytetä",
"session.review.noVcs.createGit.title": "Luo Git-säilö",
"session.review.noVcs.createGit.description": "Seuraa, tarkista ja kumoa muutoksia tässä projektissa",
"session.review.noVcs.createGit.actionLoading": "Luodaan Git-säilöä...",
"session.review.noVcs.createGit.action": "Luo Git-säilö",
"session.review.noSnapshot":
"Tilannevedosten seuranta on poistettu käytöstä määrityksessä, joten istunnon muutokset eivät ole käytettävissä",
"session.review.noChanges": "Ei muutoksia",
"session.review.noUncommittedChanges": "Ei vielä sitomattomia muutoksia",
"session.review.noBranchChanges": "Ei vielä haaran muutoksia",
"session.files.selectToOpen": "Valitse avattava tiedosto",
"session.files.all": "Kaikki tiedostot",
"session.files.empty": "Ei tiedostoja",
"session.files.binaryContent": "Binääritiedosto (sisältöä ei voi näyttää)",
"session.messages.renderEarlier": "Hahmonna aiemmat viestit",
"session.messages.loadingEarlier": "Ladataan aikaisempia viestejä...",
"session.messages.loadEarlier": "Lataa aikaisemmat viestit",
"session.messages.loading": "Ladataan viestejä...",
"session.messages.jumpToLatest": "Siirry uusimpaan",
"session.context.addToContext": "Lisää {{selection}} kontekstiin",
"session.todo.title": "Tehtävät",
"session.todo.collapse": "Kutista",
"session.todo.expand": "Laajenna",
"session.todo.progress": "{{done}}/{{total}} tehtävää suoritettu",
"session.question.progress": "{{current}}/{{total}} kysymystä",
"session.question.minimize": "Pienennä kysymys",
"session.question.restore": "Palauta kysymys",
"session.question.pending.one": "{{count}} odottava kysymys",
"session.question.pending.other": "{{count}} odottavaa kysymystä",
"session.followupDock.summary.one": "{{count}} jonossa oleva viesti",
"session.followupDock.summary.other": "{{count}} jonossa olevaa viestiä",
"session.followupDock.sendNow": "Lähetä nyt",
"session.followupDock.edit": "Muokkaa",
"session.followupDock.collapse": "Kutista jonossa olevat viestit",
"session.followupDock.expand": "Laajenna jonossa olevia viestejä",
"session.revertDock.summary.one": "{{count}} palautettu viesti",
"session.revertDock.summary.other": "{{count}} palautettua viestiä",
"session.revertDock.collapse": "Kutista palautetut viestit",
"session.revertDock.expand": "Laajenna palautetut viestit",
"session.revertDock.restore": "Palauta viesti",
"session.new.title": "Rakenna mitä tahansa",
"session.new.project.new": "Uusi projekti",
"session.new.project.search": "Etsi projekteja",
"session.new.project.add": "Lisää projekti",
"session.new.worktree.main": "Päähaara",
"session.new.worktree.mainWithBranch": "Päähaara ({{branch}})",
"session.new.worktree.create": "Luo uusi työpuu",
"session.new.workspace.runIn": "Suorita istunto kohteessa",
"session.new.workspace.triggerLocal": "Paikallinen",
"session.new.workspace.local": "Paikallinen säilö",
"session.new.workspace.existing": "Työtila…",
"session.new.git.none": "Ei Gitiä",
"session.new.lastModified": "Viimeksi muokattu",
"session.header.search.placeholder": "Hae projektista {{project}}",
"session.header.searchFiles": "Etsi tiedostoja",
"session.header.openIn": "Avaa sovelluksessa",
"session.header.open.action": "Avaa {{app}}",
"session.header.open.ariaLabel": "Avaa sovelluksessa {{app}}",
"session.header.open.menu": "Avausvaihtoehdot",
"session.header.open.copyPath": "Kopioi polku",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "Tiedostonhallinta",
"session.header.open.fileManager": "Tiedostonhallinta",
"session.header.reveal.finder": "Näytä Finderissa",
"session.header.reveal.fileExplorer": "Näytä Resurssienhallinnassa",
"session.header.reveal.containingFolder": "Avaa tiedoston sisältävä kansio",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
"session.header.open.app.zed": "Zed",
"session.header.open.app.textmate": "TextMate",
"session.header.open.app.antigravity": "Antigravity",
"session.header.open.app.terminal": "Terminaali",
"session.header.open.app.iterm2": "iTerm2",
"session.header.open.app.ghostty": "Ghostty",
"session.header.open.app.warp": "Warp",
"session.header.open.app.xcode": "Xcode",
"session.header.open.app.androidStudio": "Android Studio",
"session.header.open.app.powershell": "PowerShell",
"session.header.open.app.sublimeText": "Sublime Text",
"status.popover.trigger": "Tila",
"status.popover.ariaLabel": "Palvelimen määritykset",
"status.popover.tab.servers": "Palvelimet",
"status.popover.tab.mcp": "MCP",
"status.popover.tab.lsp": "LSP",
"status.popover.tab.plugins": "Laajennukset",
"status.popover.action.manageServers": "Hallinnoi palvelimia",
"session.share.popover.title": "Julkaise verkossa",
"session.share.popover.description.shared":
"Tämä istunto on julkinen verkossa. Se on kaikkien linkin saaneiden käytettävissä.",
"session.share.popover.description.unshared":
"Jaa istunto julkisesti verkossa. Se on kaikkien linkin saaneiden käytettävissä.",
"session.share.action.share": "Jaa",
"session.share.action.publish": "Julkaise",
"session.share.action.publishing": "Julkaistaan...",
"session.share.action.unpublish": "Peruuta julkaisu",
"session.share.action.unpublishing": "Peruutetaan julkaisua...",
"session.share.action.view": "Näytä",
"session.share.copy.copied": "Kopioitu",
"session.share.copy.copyLink": "Kopioi linkki",
"lsp.tooltip.none": "Ei LSP-palvelimia",
"lsp.label.connected": "{{count}} LSP",
"prompt.loading": "Ladataan kehotetta...",
"terminal.loading": "Ladataan terminaalia...",
"terminal.title": "Terminaali",
"terminal.title.numbered": "Terminaali {{number}}",
"terminal.close": "Sulje terminaali",
"terminal.connectionLost.title": "Yhteys katkesi",
"terminal.connectionLost.abnormalClose": "WebSocket sulkeutui poikkeavasti: {{code}}",
"terminal.connectionLost.description":
"Terminaaliyhteys katkesi. Näin voi tapahtua, kun palvelin käynnistyy uudelleen.",
"common.closeTab": "Sulje välilehti",
"common.dismiss": "Hylkää",
"common.moreCountSuffix": " (+{{count}} muuta)",
"common.requestFailed": "Pyyntö epäonnistui",
"common.moreOptions": "Lisää vaihtoehtoja",
"common.learnMore": "Lue lisää",
"common.rename": "Nimeä uudelleen",
"common.reset": "Palauta",
"common.archive": "Arkistoi",
"common.delete": "Poista",
"common.close": "Sulje",
"common.edit": "Muokkaa",
"common.loadMore": "Lataa lisää",
"common.key.esc": "ESC",
"common.key.ctrl": "Ctrl",
"common.key.alt": "Alt",
"common.key.shift": "Shift",
"common.key.meta": "Meta",
"common.key.space": "Space",
"common.key.backspace": "Backspace",
"common.key.enter": "Enter",
"common.key.tab": "Tab",
"common.key.delete": "Delete",
"common.key.home": "Home",
"common.key.end": "End",
"common.key.pageUp": "Page Up",
"common.key.pageDown": "Page Down",
"common.key.insert": "Insert",
"common.unknown": "tuntematon",
"common.time.justNow": "Juuri nyt",
"common.time.minutesAgo.short": "{{count}} min sitten",
"common.time.hoursAgo.short": "{{count}} h sitten",
"common.time.daysAgo.short": "{{count}} pv sitten",
"sidebar.menu.toggle": "Näytä tai piilota valikko",
"sidebar.nav.projectsAndSessions": "Projektit ja istunnot",
"sidebar.settings": "Asetukset",
"sidebar.help": "Ohje",
"sidebar.workspaces.enable": "Ota työtilat käyttöön",
"sidebar.workspaces.disable": "Poista työtilat käytöstä",
"sidebar.gettingStarted.title": "Aloittaminen",
"sidebar.gettingStarted.line1": "OpenCode sisältää ilmaisia malleja, joten voit aloittaa heti.",
"sidebar.gettingStarted.line2":
"Yhdistä mikä tahansa palveluntarjoaja käyttääksesi malleja, mm. Claude, GPT, Gemini jne.",
"sidebar.project.recentSessions": "Viimeaikaiset istunnot",
"sidebar.project.viewAllSessions": "Näytä kaikki istunnot",
"sidebar.project.clearNotifications": "Tyhjennä ilmoitukset",
"sidebar.empty.title": "Ei avoimia projekteja",
"sidebar.empty.description": "Aloita avaamalla projekti",
"debugBar.ariaLabel": "Kehityksen suorituskyvyn diagnostiikka",
"debugBar.na": "n/a",
"debugBar.nav.label": "NAV",
"debugBar.nav.tip":
"Viimeisin valmis reittisiirtymä, joka koskee istuntosivua, mitattuna reitityksen alusta ensimmäiseen piirtoon siirtymän valmistumisen jälkeen.",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "Liukuva kuvataajuus viimeisten 5 sekunnin ajalta.",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "Pisin kuvan piirtoaika viimeisten 5 sekunnin aikana.",
"debugBar.jank.label": "JANK",
"debugBar.jank.tip": "Yli 32 ms kestäneet kuvat viimeisten 5 sekunnin aikana.",
"debugBar.long.label": "PITKÄ",
"debugBar.long.tip": "Estetty aika ja pitkien tehtävien määrä viimeisten 5 sekunnin aikana. Pisin tehtävä: {{max}}.",
"debugBar.delay.label": "VIIVE",
"debugBar.delay.tip": "Pisin havaittu syöttöviive viimeisten 5 sekunnin aikana.",
"debugBar.inp.label": "INP",
"debugBar.inp.tip":
"Vuorovaikutuksen arvioitu kesto viimeisen 5 sekunnin ajalta. Tämä on INP-tyyppinen, ei virallinen Web Vitals INP.",
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "Kumulatiivinen asettelusiirtymä sovelluksen nykyisen käyttöjakson aikana.",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "Käytetty JS-keko suhteessa keon rajaan. Vain Chromium.",
"debugBar.mem.tip": "Käytetty JS-keko suhteessa keon rajaan. {{used}} / {{limit}}.",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "Työpöytä",
"settings.section.server": "Palvelin",
"settings.tab.general": "Yleiset",
"settings.tab.shortcuts": "Pikanäppäimet",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "WSL-integraatio",
"settings.desktop.wsl.description": "Suorita OpenCode-palvelin WSL:n sisällä Windowsissa.",
"settings.general.section.appearance": "Ulkonäkö",
"settings.general.section.advanced": "Lisäasetukset",
"settings.general.section.notifications": "Järjestelmän ilmoitukset",
"settings.general.section.updates": "Päivitykset",
"settings.general.section.sounds": "Äänitehosteet",
"settings.general.section.feed": "Syöte",
"settings.general.section.display": "Näyttö",
"settings.general.row.language.title": "Kieli",
"settings.general.row.language.description": "Vaihda OpenCoden näyttökieli",
"settings.general.row.shell.title": "Terminaalin komentotulkki",
"settings.general.row.shell.description": "Terminaalin ja agenttityökalujen käyttämä komentotulkki",
"settings.general.row.shell.autoDefault": "Automaattinen (oletus)",
"settings.general.row.shell.terminalOnly": "vain terminaali",
"settings.general.row.appearance.title": "Ulkonäkö",
"settings.general.row.appearance.description": "Mukauta, miltä OpenCode näyttää laitteellasi",
"settings.general.row.colorScheme.title": "Värimalli",
"settings.general.row.colorScheme.description":
"Valitse, käyttääkö OpenCode järjestelmän mukaista, vaaleaa vai tummaa teemaa",
"settings.general.row.theme.title": "Teema",
"settings.general.row.theme.description": "Mukauta OpenCoden teemaa.",
"settings.general.row.font.title": "Koodifontti",
"settings.general.row.font.description": "Mukauta koodilohkoissa käytettyä fonttia",
"settings.general.row.terminalFont.title": "Terminaalin fontti",
"settings.general.row.terminalFont.description": "Mukauta terminaalissa käytettävää fonttia",
"settings.general.row.uiFont.title": "Käyttöliittymän fontti",
"settings.general.row.uiFont.description": "Mukauta koko käyttöliittymässä käytettyä fonttia",
"settings.general.row.followup.title": "Jatkokehotteiden toiminta",
"settings.general.row.followup.description": "Valitse, ohjaavatko jatkokehotteet heti vai odottavatko ne jonossa",
"settings.general.row.followup.option.queue": "Jonota",
"settings.general.row.followup.option.steer": "Ohjaa heti",
"settings.general.row.showFileTree.title": "Tiedostopuu",
"settings.general.row.showFileTree.description": "Näytä tiedostopuupaneeli istunnoissa",
"settings.general.row.showNavigation.title": "Navigointiohjaimet",
"settings.general.row.showNavigation.description":
"Näytä taaksepäin- ja eteenpäin-painikkeet työpöydän otsikkorivillä",
"settings.general.row.showSearch.title": "Komentopaletti",
"settings.general.row.showSearch.description": "Näytä haku- ja komentopalettipainike otsikkorivillä",
"settings.general.row.showTerminal.title": "Terminaali",
"settings.general.row.showTerminal.description": "Näytä terminaalipainike työpöydän otsikkorivillä",
"settings.general.row.showStatus.title": "Palvelimen tila",
"settings.general.row.showStatus.description": "Näytä palvelimen tilapainike otsikkorivillä",
"settings.general.row.mobileTitlebarBottom.title": "Navigointi alareunassa",
"settings.general.row.mobileTitlebarBottom.description":
"Sijoita otsikkopalkki ja istuntovälilehdet mobiililaitteen näytön alareunaan",
"settings.general.row.showCustomAgents.title": "Näytä agentin valinta",
"settings.general.row.showCustomAgents.description":
"Vaihda agenttien välillä viestikentässä. Kun valinta on piilotettu, Build-agenttia käytetään oletuksena.",
"settings.general.row.reasoningSummaries.title": "Näytä päättelyn yhteenvedot",
"settings.general.row.reasoningSummaries.description": "Näytä mallin päättelyn yhteenvedot aikajanalla",
"settings.general.row.shellToolPartsExpanded.title": "Laajenna shell-työkalun osat",
"settings.general.row.shellToolPartsExpanded.description":
"Näytä shell-työkalun osat oletuksena laajennettuina aikajanalla",
"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",
"settings.general.row.wayland.description":
"Poista X11-varatila käytöstä Waylandissa. Vaatii uudelleenkäynnistyksen.",
"settings.general.row.wayland.tooltip":
"Linuxissa alkuperäinen Wayland voi olla vakaampi käytettäessä näyttöjä, joiden virkistystaajuudet eroavat toisistaan.",
"settings.general.row.releaseNotes.title": "Julkaisutiedot",
"settings.general.row.releaseNotes.description": "Näytä Mitä uutta -ponnahdusikkunat päivitysten jälkeen",
"settings.updates.row.startup.title": "Tarkista päivitykset käynnistyksen yhteydessä",
"settings.updates.row.startup.description": "Tarkista päivitykset automaattisesti, kun OpenCode käynnistyy",
"settings.updates.row.check.title": "Tarkista päivitykset",
"settings.updates.row.check.description": "Tarkista päivitykset manuaalisesti ja asenna, jos niitä on saatavilla",
"settings.updates.action.checkNow": "Tarkista nyt",
"settings.updates.action.checking": "Tarkistetaan...",
"settings.updates.action.downloading": "Ladataan...",
"settings.updates.action.installing": "Asennetaan...",
"settings.updates.toast.latest.title": "Olet ajan tasalla",
"settings.updates.toast.latest.description": "Käytät OpenCoden uusinta versiota.",
"sound.option.none": "Ei mitään",
"sound.option.alert01": "Alert 01",
"sound.option.alert02": "Alert 02",
"sound.option.alert03": "Alert 03",
"sound.option.alert04": "Alert 04",
"sound.option.alert05": "Alert 05",
"sound.option.alert06": "Alert 06",
"sound.option.alert07": "Alert 07",
"sound.option.alert08": "Alert 08",
"sound.option.alert09": "Alert 09",
"sound.option.alert10": "Alert 10",
"sound.option.bipbop01": "Bip-bop 01",
"sound.option.bipbop02": "Bip-bop 02",
"sound.option.bipbop03": "Bip-bop 03",
"sound.option.bipbop04": "Bip-bop 04",
"sound.option.bipbop05": "Bip-bop 05",
"sound.option.bipbop06": "Bip-bop 06",
"sound.option.bipbop07": "Bip-bop 07",
"sound.option.bipbop08": "Bip-bop 08",
"sound.option.bipbop09": "Bip-bop 09",
"sound.option.bipbop10": "Bip-bop 10",
"sound.option.staplebops01": "Staplebops 01",
"sound.option.staplebops02": "Staplebops 02",
"sound.option.staplebops03": "Staplebops 03",
"sound.option.staplebops04": "Staplebops 04",
"sound.option.staplebops05": "Staplebops 05",
"sound.option.staplebops06": "Staplebops 06",
"sound.option.staplebops07": "Staplebops 07",
"sound.option.nope01": "Nope 01",
"sound.option.nope02": "Nope 02",
"sound.option.nope03": "Nope 03",
"sound.option.nope04": "Nope 04",
"sound.option.nope05": "Nope 05",
"sound.option.nope06": "Nope 06",
"sound.option.nope07": "Nope 07",
"sound.option.nope08": "Nope 08",
"sound.option.nope09": "Nope 09",
"sound.option.nope10": "Nope 10",
"sound.option.nope11": "Nope 11",
"sound.option.nope12": "Nope 12",
"sound.option.yup01": "Yup 01",
"sound.option.yup02": "Yup 02",
"sound.option.yup03": "Yup 03",
"sound.option.yup04": "Yup 04",
"sound.option.yup05": "Yup 05",
"sound.option.yup06": "Yup 06",
"settings.general.notifications.agent.title": "Agentti",
"settings.general.notifications.agent.description":
"Näytä järjestelmäilmoitus, kun agentti on valmis tai tarvitsee huomiota",
"settings.general.notifications.permissions.title": "Käyttöoikeudet",
"settings.general.notifications.permissions.description": "Näytä järjestelmäilmoitus, kun lupa vaaditaan",
"settings.general.notifications.errors.title": "Virheet",
"settings.general.notifications.errors.description": "Näytä järjestelmäilmoitus, kun tapahtuu virhe",
"settings.general.sounds.agent.title": "Agentti",
"settings.general.sounds.agent.description": "Toista ääni, kun agentti on valmis tai tarvitsee huomiota",
"settings.general.sounds.permissions.title": "Käyttöoikeudet",
"settings.general.sounds.permissions.description": "Toista ääni, kun vaaditaan lupa",
"settings.general.sounds.errors.title": "Virheet",
"settings.general.sounds.errors.description": "Toista ääni, kun tapahtuu virhe",
"settings.shortcuts.title": "Pikanäppäimet",
"settings.shortcuts.reset.button": "Palauta oletusasetukset",
"settings.shortcuts.reset.toast.title": "Pikanäppäimet palautettu",
"settings.shortcuts.reset.toast.description": "Pikanäppäimet on palautettu oletusasetuksiin.",
"settings.shortcuts.conflict.title": "Pikanäppäin on jo käytössä",
"settings.shortcuts.conflict.description": "{{keybind}} on jo määritetty toiminnolle {{titles}}.",
"settings.shortcuts.unassigned": "Ei määritetty",
"settings.shortcuts.pressKeys": "Paina näppäimiä",
"settings.shortcuts.search.placeholder": "Hae pikanäppäimiä",
"settings.shortcuts.search.empty": "Pikanäppäimiä ei löytynyt",
"settings.shortcuts.group.general": "Yleiset",
"settings.shortcuts.group.session": "Istunto",
"settings.shortcuts.group.navigation": "Navigointi",
"settings.shortcuts.group.modelAndAgent": "Malli ja agentti",
"settings.shortcuts.group.terminal": "Terminaali",
"settings.shortcuts.group.prompt": "Kehote",
"settings.providers.title": "Palveluntarjoajat",
"settings.providers.description": "Palveluntarjoajan asetukset voidaan määrittää täällä.",
"settings.providers.section.connected": "Yhdistetyt palveluntarjoajat",
"settings.providers.connected.empty": "Ei yhdistettyjä palveluntarjoajia",
"settings.providers.connected.environmentDescription": "Yhdistetty ympäristömuuttujien kautta",
"settings.providers.section.popular": "Suositut palveluntarjoajat",
"settings.providers.custom.description":
"Lisää OpenAI-yhteensopiva palveluntarjoaja perus-URL-osoitteen perusteella.",
"settings.providers.tag.environment": "Ympäristö",
"settings.providers.tag.config": "Määritys",
"settings.providers.tag.custom": "Mukautettu",
"settings.providers.tag.other": "Muut",
"settings.models.title": "Mallit",
"settings.models.description": "Mallin asetukset voidaan määrittää täällä.",
"settings.agents.title": "Agentit",
"settings.agents.description": "Agentin asetukset voidaan määrittää täällä.",
"settings.commands.title": "Komennot",
"settings.commands.description": "Komentoasetukset voidaan määrittää täällä.",
"settings.mcp.title": "MCP",
"settings.mcp.description": "MCP-asetukset voidaan määrittää täällä.",
"settings.permissions.title": "Käyttöoikeudet",
"settings.permissions.description": "Hallitse, mitä työkaluja palvelin voi käyttää oletuksena.",
"settings.permissions.section.tools": "Työkalut",
"settings.permissions.toast.updateFailed.title": "Käyttöoikeuksien päivittäminen epäonnistui",
"settings.permissions.action.allow": "Salli",
"settings.permissions.action.ask": "Kysy",
"settings.permissions.action.deny": "Kiellä",
"settings.permissions.tool.read.title": "Lue",
"settings.permissions.tool.read.description": "Tiedoston lukeminen (vastaa tiedostopolkua)",
"settings.permissions.tool.edit.title": "Muokkaa",
"settings.permissions.tool.edit.description":
"Tiedostojen muokkaaminen, mukaan lukien muokkaus-, kirjoitus- ja paikkaustoiminnot",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "Etsi glob-malleja vastaavia tiedostoja",
"settings.permissions.tool.grep.title": "Grep",
"settings.permissions.tool.grep.description": "Hae tiedostojen sisällöstä säännöllisten lausekkeiden avulla",
"settings.permissions.tool.list.title": "Luettelo",
"settings.permissions.tool.list.description": "Listaa tiedostot hakemistossa",
"settings.permissions.tool.bash.title": "Bash",
"settings.permissions.tool.bash.description": "Suorita shell-komennot",
"settings.permissions.tool.task.title": "Tehtävä",
"settings.permissions.tool.task.description": "Käynnistä aliagentit",
"settings.permissions.tool.skill.title": "Taito",
"settings.permissions.tool.skill.description": "Lataa taito nimen perusteella",
"settings.permissions.tool.lsp.title": "LSP",
"settings.permissions.tool.lsp.description": "Suorita kielipalvelinkyselyt",
"settings.permissions.tool.todowrite.title": "Tehtävälistan päivitys",
"settings.permissions.tool.todowrite.description": "Päivitä tehtävälista",
"settings.permissions.tool.webfetch.title": "Web Fetch",
"settings.permissions.tool.webfetch.description": "Nouda sisältöä URL-osoitteesta",
"settings.permissions.tool.websearch.title": "Verkkohaku",
"settings.permissions.tool.websearch.description": "Hae verkosta",
"settings.permissions.tool.external_directory.title": "Ulkoinen hakemisto",
"settings.permissions.tool.external_directory.description": "Käytä tiedostoja projektihakemiston ulkopuolella",
"settings.permissions.tool.doom_loop.title": "Doom Loop",
"settings.permissions.tool.doom_loop.description": "Tunnista toistuvat työkalukutsut samalla syötteellä",
"session.delete.failed.title": "Istunnon poistaminen epäonnistui",
"session.delete.title": "Poista istunto",
"session.delete.confirm": 'Poistetaanko istunto "{{name}}"?',
"session.delete.button": "Poista istunto",
"workspace.new": "Uusi työtila",
"workspace.type.local": "paikallinen",
"workspace.type.sandbox": "hiekkalaatikko",
"workspace.create.failed.title": "Työtilan luominen epäonnistui",
"workspace.delete.failed.title": "Työtilan poistaminen epäonnistui",
"workspace.resetting.title": "Palautetaan työtilaa",
"workspace.resetting.description": "Tämä voi kestää minuutin.",
"workspace.reset.failed.title": "Työtilan palauttaminen epäonnistui",
"workspace.reset.success.title": "Työtila palautettu",
"workspace.reset.success.description": "Työtila vastaa nyt oletushaaraa.",
"workspace.error.stillPreparing": "Työtilaa valmistellaan vielä",
"workspace.status.checking": "Tarkistetaan yhdistämättömiä muutoksia...",
"workspace.status.error": "Gitin tilaa ei voi vahvistaa.",
"workspace.status.clean": "Yhdistämättömiä muutoksia ei havaittu.",
"workspace.status.dirty": "Tässä työtilassa havaittu yhdistämättömiä muutoksia.",
"workspace.delete.title": "Poista työtila",
"workspace.delete.confirm": 'Poistetaanko työtila "{{name}}"?',
"workspace.delete.button": "Poista työtila",
"workspace.reset.title": "Palauta työtila",
"workspace.reset.confirm": 'Palautetaanko työtila "{{name}}"?',
"workspace.reset.button": "Palauta työtila",
"workspace.reset.archived.none": "Aktiivisia istuntoja ei arkistoida.",
"workspace.reset.archived.one": "1 istunto arkistoidaan.",
"workspace.reset.archived.many": "{{count}} istuntoa arkistoidaan.",
"workspace.reset.note": "Tämä palauttaa työtilan vastaamaan oletushaaraa.",
}
+88 -103
View File
@@ -29,8 +29,8 @@ export const dict = {
"command.settings.open": "Ouvrir les paramètres",
"command.session.previous": "Session précédente",
"command.session.next": "Session suivante",
"command.session.previous.unseen": "Session précédente non lue",
"command.session.next.unseen": "Session suivante non lue",
"command.session.previous.unseen": "Session non lue précédente",
"command.session.next.unseen": "Session non lue suivante",
"command.session.archive": "Archiver la session",
"command.palette": "Palette de commandes",
"command.theme.cycle": "Changer de thème",
@@ -45,7 +45,7 @@ export const dict = {
"command.tab.reopenClosed": "Rouvrir l'onglet fermé",
"command.context.addSelection": "Ajouter la sélection au contexte",
"command.context.addSelection.description": "Ajouter les lignes sélectionnées du fichier actuel",
"command.input.focus": "Activer la zone de saisie",
"command.input.focus": "Focus sur l'entrée",
"command.terminal.toggle": "Basculer le terminal",
"command.fileTree.toggle": "Basculer l'arborescence des fichiers",
"command.review.toggle": "Basculer la revue",
@@ -59,8 +59,8 @@ export const dict = {
"command.message.next.description": "Aller au message utilisateur suivant",
"command.model.choose": "Choisir le modèle",
"command.model.choose.description": "Sélectionner un modèle différent",
"command.mcp.toggle": "Activer ou désactiver les MCP",
"command.mcp.toggle.description": "Activer ou désactiver les MCP",
"command.mcp.toggle": "Basculer MCP",
"command.mcp.toggle.description": "Basculer les MCPs",
"command.agent.cycle": "Changer d'agent",
"command.agent.cycle.description": "Passer à l'agent suivant",
"command.agent.cycle.reverse": "Changer d'agent (inverse)",
@@ -68,7 +68,7 @@ export const dict = {
"command.model.variant.cycle": "Changer l'effort de réflexion",
"command.model.variant.cycle.description": "Passer au niveau d'effort suivant",
"command.prompt.mode.shell": "Shell",
"command.prompt.mode.normal": "Invite",
"command.prompt.mode.normal": "Prompt",
"command.permissions.autoaccept.enable": "Accepter automatiquement les permissions",
"command.permissions.autoaccept.disable": "Arrêter d'accepter automatiquement les permissions",
"command.workspace.toggle": "Basculer les espaces de travail",
@@ -92,9 +92,8 @@ export const dict = {
"palette.group.files": "Fichiers",
"dialog.provider.search.placeholder": "Rechercher des fournisseurs",
"dialog.provider.empty": "Aucun fournisseur trouvé",
"dialog.provider.group.popular": "Populaires",
"dialog.provider.group.other": "Autres",
"dialog.provider.custom.label": "Fournisseur personnalisé compatible avec OpenAI",
"dialog.provider.group.popular": "Populaire",
"dialog.provider.group.other": "Autre",
"dialog.provider.tag.recommended": "Recommandé",
"dialog.provider.opencode.note": "Modèles sélectionnés incluant Claude, GPT, Gemini et plus",
"dialog.provider.opencode.tagline": "Modèles optimisés et fiables",
@@ -110,10 +109,9 @@ export const dict = {
"dialog.model.empty": "Aucun résultat de modèle",
"dialog.model.manage": "Gérer les modèles",
"dialog.model.manage.description": "Personnalisez les modèles qui apparaissent dans le sélecteur.",
"dialog.model.manage.provider.toggle": "Activer ou désactiver tous les modèles {{provider}}",
"dialog.model.manage.provider.toggle": "Basculer tous les modèles {{provider}}",
"dialog.model.unpaid.freeModels.title": "Modèles gratuits fournis par OpenCode",
"dialog.model.unpaid.addMore.title": "Ajouter plus de modèles de fournisseurs populaires",
"dialog.model.unpaid.viewMoreProviders": "Voir plus de 70 autres fournisseurs",
"dialog.provider.viewAll": "Voir plus de fournisseurs",
"provider.connect.title": "Connecter {{provider}}",
"provider.connect.title.anthropicProMax": "Connexion avec Claude Pro/Max",
@@ -150,21 +148,19 @@ export const dict = {
"provider.connect.toast.connected.title": "{{provider}} connecté",
"provider.connect.toast.connected.description": "Les modèles {{provider}} sont maintenant disponibles.",
"provider.custom.title": "Fournisseur personnalisé",
"provider.custom.description.prefix": "Configurez un fournisseur compatible avec OpenAI. Consultez la ",
"provider.custom.description.link": "documentation sur la configuration des fournisseurs",
"provider.custom.description.prefix": "Configurer un fournisseur compatible OpenAI. Voir la ",
"provider.custom.description.link": "doc de config fournisseur",
"provider.custom.description.suffix": ".",
"provider.custom.field.providerID.label": "ID du fournisseur",
"provider.custom.field.providerID.placeholder": "monfournisseur",
"provider.custom.field.providerID.description":
"Lettres minuscules, chiffres, traits d'union ou traits de soulignement",
"provider.custom.field.providerID.description": "Lettres minuscules, chiffres, traits d'union ou tirets bas",
"provider.custom.field.name.label": "Nom d'affichage",
"provider.custom.field.name.placeholder": "Mon fournisseur IA",
"provider.custom.field.baseURL.label": "URL de base",
"provider.custom.field.baseURL.placeholder": "https://api.monfournisseur.com/v1",
"provider.custom.field.apiKey.label": "Clé API",
"provider.custom.field.apiKey.placeholder": "Clé API",
"provider.custom.field.apiKey.description":
"Facultatif. Laissez ce champ vide si vous gérez l'authentification au moyen des en-têtes.",
"provider.custom.field.apiKey.description": "Optionnel. Laisser vide si vous gérez l'auth via les en-têtes.",
"provider.custom.models.label": "Modèles",
"provider.custom.models.id.label": "ID",
"provider.custom.models.id.placeholder": "id-modele",
@@ -180,8 +176,7 @@ export const dict = {
"provider.custom.headers.remove": "Supprimer l'en-tête",
"provider.custom.headers.add": "Ajouter un en-tête",
"provider.custom.error.providerID.required": "L'ID du fournisseur est requis",
"provider.custom.error.providerID.format":
"Utilisez des lettres minuscules, des chiffres, des traits d'union ou des traits de soulignement",
"provider.custom.error.providerID.format": "Utilisez des lettres minuscules, chiffres, traits d'union ou tirets bas",
"provider.custom.error.providerID.exists": "Cet ID de fournisseur existe déjà",
"provider.custom.error.name.required": "Le nom d'affichage est requis",
"provider.custom.error.baseURL.required": "L'URL de base est requise",
@@ -191,7 +186,7 @@ export const dict = {
"provider.disconnect.toast.disconnected.title": "{{provider}} déconnecté",
"provider.disconnect.toast.disconnected.description": "Les modèles {{provider}} ne sont plus disponibles.",
"model.tag.free": "Gratuit",
"model.tag.latest": "Le plus récent",
"model.tag.latest": "Dernier",
"model.provider.anthropic": "Anthropic",
"model.provider.openai": "OpenAI",
"model.provider.google": "Google",
@@ -202,29 +197,29 @@ export const dict = {
"model.input.audio": "audio",
"model.input.video": "vidéo",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Formats pris en charge : {{inputs}}",
"model.tooltip.allows": "Autorise : {{inputs}}",
"model.tooltip.context.label": "Contexte",
"model.tooltip.inputs": "Entrées",
"model.tooltip.model": "Modèle",
"model.tooltip.provider": "Fournisseur",
"model.tooltip.reasoning": "Raisonnement",
"model.tooltip.reasoning.allowed": "Raisonnement pris en charge",
"model.tooltip.reasoning.allowed": "Autorise le raisonnement",
"model.tooltip.reasoning.none": "Sans raisonnement",
"model.tooltip.context": "Limite de contexte {{limit}}",
"common.search.placeholder": "Rechercher",
"common.goBack": "Retour",
"common.goForward": "Suivant",
"common.goForward": "Avancer",
"common.loading": "Chargement",
"common.loading.ellipsis": "...",
"common.cancel": "Annuler",
"common.clear": "Effacer",
"common.connect": "Connecter",
"common.disconnect": "Déconnecter",
"common.continue": "Continuer",
"common.continue": "Soumettre",
"common.submit": "Soumettre",
"common.save": "Enregistrer",
"common.saving": "Enregistrement...",
"common.default": "Par défaut",
"common.default": "Défaut",
"common.attachment": "pièce jointe",
"prompt.placeholder.shell": "Entrez une commande shell... {{example}}",
"prompt.placeholder.normal": 'Demandez n\'importe quoi... "{{example}}"',
@@ -232,8 +227,8 @@ export const dict = {
"prompt.placeholder.summarizeComments": "Résumer les commentaires…",
"prompt.placeholder.summarizeComment": "Résumer le commentaire…",
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Invite",
"prompt.mode.shell.exit": "Échap pour quitter",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "esc pour quitter",
"session.child.promptDisabled": "Les sessions de sous-agents ne peuvent pas recevoir de messages.",
"session.child.backToParent": "Revenir à la session principale.",
"prompt.example.1": "Corriger un TODO dans la base de code",
@@ -242,7 +237,7 @@ export const dict = {
"prompt.example.4": "Expliquer comment fonctionne l'authentification",
"prompt.example.5": "Trouver et corriger les vulnérabilités de sécurité",
"prompt.example.6": "Ajouter des tests unitaires pour le service utilisateur",
"prompt.example.7": "Refactoriser cette fonction pour la rendre plus lisible",
"prompt.example.7": "Refactoriser cette fonction pour être plus lisible",
"prompt.example.8": "Que signifie cette erreur ?",
"prompt.example.9": "Aidez-moi à déboguer ce problème",
"prompt.example.10": "Générer la documentation de l'API",
@@ -250,11 +245,11 @@ export const dict = {
"prompt.example.12": "Ajouter une validation d'entrée",
"prompt.example.13": "Créer un nouveau composant pour...",
"prompt.example.14": "Comment déployer ce projet ?",
"prompt.example.15": "Vérifier que mon code respecte les bonnes pratiques",
"prompt.example.15": "Vérifier mon code pour les meilleures pratiques",
"prompt.example.16": "Ajouter la gestion des erreurs à cette fonction",
"prompt.example.17": "Expliquer cette expression régulière",
"prompt.example.17": "Expliquer ce modèle regex",
"prompt.example.18": "Convertir ceci en TypeScript",
"prompt.example.19": "Ajouter une journalisation dans toute la base de code",
"prompt.example.19": "Ajouter des logs dans toute la base de code",
"prompt.example.20": "Quelles dépendances sont obsolètes ?",
"prompt.example.21": "Aidez-moi à écrire un script de migration",
"prompt.example.22": "Implémenter la mise en cache pour ce point de terminaison",
@@ -266,7 +261,7 @@ export const dict = {
"prompt.dropzone.label": "Déposez des images, des PDF ou des fichiers texte ici",
"prompt.dropzone.file.label": "Déposez pour @mentionner le fichier",
"prompt.slash.badge.custom": "personnalisé",
"prompt.slash.badge.skill": "compétence",
"prompt.slash.badge.skill": "skill",
"prompt.slash.badge.mcp": "mcp",
"prompt.context.active": "actif",
"prompt.context.includeActiveFile": "Inclure le fichier actif",
@@ -282,25 +277,24 @@ export const dict = {
"prompt.action.send": "Envoyer",
"prompt.action.stop": "Arrêter",
"prompt.toast.pasteUnsupported.title": "Pièce jointe non prise en charge",
"prompt.toast.attachmentDuplicate.title": "Ce fichier a déjà été téléversé",
"prompt.toast.pasteUnsupported.description":
"Seules les images, les PDF ou les fichiers texte peuvent être joints ici.",
"prompt.toast.modelAgentRequired.title": "Sélectionnez un agent et un modèle",
"prompt.toast.modelAgentRequired.description": "Choisissez un agent et un modèle avant d'envoyer une invite.",
"prompt.toast.modelAgentRequired.description": "Choisissez un agent et un modèle avant d'envoyer un message.",
"prompt.toast.worktreeCreateFailed.title": "Échec de la création de l'arbre de travail",
"prompt.toast.sessionCreateFailed.title": "Échec de la création de la session",
"prompt.toast.shellSendFailed.title": "Échec de l'envoi de la commande shell",
"prompt.toast.commandSendFailed.title": "Échec de l'envoi de la commande",
"prompt.toast.promptSendFailed.title": "Échec de l'envoi de l'invite",
"prompt.toast.promptSendFailed.title": "Échec de l'envoi du message",
"prompt.toast.promptSendFailed.description": "Impossible de récupérer la session",
"dialog.mcp.title": "MCP",
"dialog.mcp.description": "MCP actifs : {{enabled}} sur {{total}}",
"dialog.mcp.title": "MCPs",
"dialog.mcp.description": "{{enabled}} sur {{total}} activés",
"dialog.mcp.empty": "Aucun MCP configuré",
"dialog.lsp.empty": "Serveurs LSP détectés automatiquement selon le type de fichier",
"dialog.plugins.empty": "Extensions configurées dans opencode.json",
"dialog.lsp.empty": "LSPs détectés automatiquement par type de fichier",
"dialog.plugins.empty": "Plugins configurés dans opencode.json",
"mcp.status.connected": "connecté",
"mcp.status.failed": "en échec",
"mcp.status.needs_auth": "authentification requise",
"mcp.status.failed": "échoué",
"mcp.status.needs_auth": "nécessite auth",
"mcp.auth.clickToAuthenticate": "Cliquez pour vous authentifier",
"mcp.status.disabled": "désactivé",
"dialog.fork.empty": "Aucun message à partir duquel bifurquer",
@@ -335,7 +329,7 @@ export const dict = {
"dialog.server.action.remove": "Supprimer le serveur",
"dialog.server.menu.edit": "Modifier",
"dialog.server.menu.default": "Définir par défaut",
"dialog.server.menu.defaultRemove": "Ne plus utiliser par défaut",
"dialog.server.menu.defaultRemove": "Supprimer par défaut",
"dialog.server.menu.delete": "Supprimer",
"dialog.server.current": "Serveur actuel",
"dialog.server.status.default": "Défaut",
@@ -405,8 +399,8 @@ export const dict = {
"wsl.onboarding.notFound": "introuvable",
"wsl.onboarding.version": "Version : {{version}}",
"wsl.onboarding.unknown": "inconnue",
"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.desktopVersion": "desktop {{version}}",
"wsl.onboarding.versionMismatch": "La version installée ne correspond pas à celle de l'application desktop.",
"wsl.onboarding.adding": "Ajout...",
"dialog.project.edit.title": "Modifier le projet",
"dialog.project.edit.name": "Nom",
@@ -422,13 +416,13 @@ export const dict = {
"dialog.project.edit.worktree.startup.placeholder": "p. ex. bun install",
"context.breakdown.title": "Répartition du contexte",
"context.breakdown.note":
"Répartition approximative des jetons d'entrée. \"Autre\" inclut les définitions d'outils et les données annexes.",
"Répartition approximative des jetons d'entrée. \"Autre\" inclut les définitions d'outils et les frais généraux.",
"context.breakdown.system": "Système",
"context.breakdown.user": "Utilisateur",
"context.breakdown.assistant": "Assistant",
"context.breakdown.tool": "Appels d'outils",
"context.breakdown.other": "Autre",
"context.systemPrompt.title": "Invite système",
"context.systemPrompt.title": "Prompt système",
"context.rawMessages.title": "Messages bruts",
"context.stats.session": "Session",
"context.stats.messages": "Messages",
@@ -442,7 +436,7 @@ export const dict = {
"context.stats.reasoningTokens": "Jetons de raisonnement",
"context.stats.cacheTokens": "Jetons de cache (lecture/écriture)",
"context.stats.userMessages": "Messages utilisateur",
"context.stats.assistantMessages": "Messages de l'assistant",
"context.stats.assistantMessages": "Messages assistant",
"context.stats.totalCost": "Coût total",
"context.stats.sessionCreated": "Session créée",
"context.stats.lastActivity": "Dernière activité",
@@ -470,16 +464,16 @@ export const dict = {
"language.th": "ไทย",
"language.tr": "Türkçe",
"toast.language.title": "Langue",
"toast.language.description": "Langue définie sur {{language}}",
"toast.language.description": "Passé à {{language}}",
"toast.theme.title": "Thème changé",
"toast.scheme.title": "Schéma de couleurs",
"toast.workspace.enabled.title": "Espaces de travail activés",
"toast.workspace.enabled.description": "Plusieurs arbres de travail sont désormais affichés dans la barre latérale",
"toast.workspace.enabled.description": "Plusieurs worktrees sont désormais affichés dans la barre latérale",
"toast.workspace.disabled.title": "Espaces de travail désactivés",
"toast.workspace.disabled.description": "Seul l'arbre de travail principal est affiché dans la barre latérale",
"toast.workspace.disabled.description": "Seul le worktree principal est affiché dans la barre latérale",
"toast.permissions.autoaccept.on.title": "Acceptation automatique des permissions",
"toast.permissions.autoaccept.on.description": "Les demandes de permission seront approuvées automatiquement",
"toast.permissions.autoaccept.off.title": "Acceptation automatique des permissions désactivée",
"toast.permissions.autoaccept.off.title": "Acceptation automatique des permissions arrêtée",
"toast.permissions.autoaccept.off.description": "Les demandes de permission nécessiteront une approbation",
"toast.model.none.title": "Aucun modèle sélectionné",
"toast.model.none.description": "Connectez un fournisseur pour résumer cette session",
@@ -492,18 +486,17 @@ export const dict = {
"toast.session.share.success.description": "URL de partage copiée dans le presse-papiers !",
"toast.session.share.failed.title": "Échec du partage de la session",
"toast.session.share.failed.description": "Une erreur s'est produite lors du partage de la session",
"toast.session.unshare.success.title": "Partage de la session désactivé",
"toast.session.unshare.success.description": "Le partage de la session a bien été désactivé.",
"toast.session.unshare.failed.title": "Échec de la désactivation du partage",
"toast.session.unshare.failed.description":
"Une erreur s'est produite lors de la désactivation du partage de la session",
"toast.session.unshare.success.title": "Session non partagée",
"toast.session.unshare.success.description": "Session non partagée avec succès !",
"toast.session.unshare.failed.title": "Échec de l'annulation du partage",
"toast.session.unshare.failed.description": "Une erreur s'est produite lors de l'annulation du partage de la session",
"toast.session.listFailed.title": "Échec du chargement des sessions pour {{project}}",
"toast.update.title": "Mise à jour disponible",
"toast.update.description":
"Une nouvelle version d'OpenCode ({{version}}) est maintenant disponible pour installation.",
"toast.update.action.installRestart": "Installer et redémarrer",
"toast.update.action.notYet": "Plus tard",
"error.page.title": "Un problème est survenu",
"toast.update.action.notYet": "Pas encore",
"error.page.title": "Quelque chose s'est mal passé",
"error.page.description": "Une erreur s'est produite lors du chargement de l'application.",
"error.page.description.localServerStartup": "Une erreur s'est produite lors du démarrage du serveur local.",
"error.page.details.label": "Détails de l'erreur",
@@ -526,13 +519,13 @@ export const dict = {
"error.chain.causedBy": "Causé par :",
"error.chain.apiError": "Erreur API",
"error.chain.status": "Statut : {{status}}",
"error.chain.retryable": "Nouvelle tentative possible : {{retryable}}",
"error.chain.retryable": "Réessayable : {{retryable}}",
"error.chain.responseBody": "Corps de la réponse :\n{{body}}",
"error.chain.didYouMean": "Vouliez-vous dire : {{suggestions}}",
"error.chain.modelNotFound": "Modèle introuvable : {{provider}}/{{model}}",
"error.chain.checkConfig": "Vérifiez les noms de fournisseur et de modèle dans votre configuration (opencode.json)",
"error.chain.checkConfig": "Vérifiez votre configuration (opencode.json) pour les noms de fournisseur/modèle",
"error.chain.mcpFailed":
"Le serveur MCP \"{{name}}\" a échoué. Notez qu'OpenCode ne prend pas encore en charge l'authentification MCP.",
"Le serveur MCP \"{{name}}\" a échoué. Notez qu'OpenCode ne supporte pas encore l'authentification MCP.",
"error.chain.providerAuthFailed": "Échec de l'authentification du fournisseur ({{provider}}) : {{message}}",
"error.chain.providerInitFailed":
'Échec de l\'initialisation du fournisseur "{{provider}}". Vérifiez les identifiants et la configuration.',
@@ -541,7 +534,7 @@ export const dict = {
"Le fichier de configuration à {{path}} n'est pas un JSON(C) valide : {{message}}",
"error.chain.configDirectoryTypo":
'Le répertoire "{{dir}}" dans {{path}} n\'est pas valide. Renommez le répertoire en "{{suggestion}}" ou supprimez-le. C\'est une faute de frappe courante.',
"error.chain.configFrontmatterError": "Échec de l'analyse de l'en-tête dans {{path}} :\n{{message}}",
"error.chain.configFrontmatterError": "Échec de l'analyse du frontmatter dans {{path}} :\n{{message}}",
"error.chain.configInvalid": "Le fichier de configuration à {{path}} est invalide",
"error.chain.configInvalidWithMessage": "Le fichier de configuration à {{path}} est invalide : {{message}}",
"notification.permission.title": "Permission requise",
@@ -589,7 +582,7 @@ export const dict = {
"session.review.noChanges": "Aucune modification",
"session.review.noUncommittedChanges": "Aucune modification non validée pour l'instant",
"session.review.noBranchChanges": "Aucune modification de branche pour l'instant",
"session.review.noVcs": "Aucun système de gestion de versions Git détecté ; modifications non affichées",
"session.review.noVcs": "Aucun système de contrôle de version Git détecté, modifications non affichées",
"session.review.noSnapshot":
"Le suivi des instantanés est désactivé dans la configuration, les modifications de session sont donc indisponibles",
"session.files.selectToOpen": "Sélectionnez un fichier à ouvrir",
@@ -600,7 +593,7 @@ export const dict = {
"session.messages.loadingEarlier": "Chargement des messages précédents...",
"session.messages.loadEarlier": "Charger les messages précédents",
"session.messages.loading": "Chargement des messages...",
"session.messages.jumpToLatest": "Aller au message le plus récent",
"session.messages.jumpToLatest": "Aller au dernier",
"session.context.addToContext": "Ajouter {{selection}} au contexte",
"session.todo.title": "Tâches",
"session.todo.collapse": "Réduire",
@@ -608,17 +601,14 @@ export const dict = {
"session.question.minimize": "Réduire la question",
"session.question.restore": "Restaurer la question",
"session.question.pending.one": "{{count}} question en attente",
"session.question.pending.many": "{{count}} de questions en attente",
"session.question.pending.other": "{{count}} questions en attente",
"session.followupDock.summary.one": "{{count}} message en file d'attente",
"session.followupDock.summary.many": "{{count}} de messages en file d'attente",
"session.followupDock.summary.other": "{{count}} messages en file d'attente",
"session.followupDock.sendNow": "Envoyer maintenant",
"session.followupDock.edit": "Modifier",
"session.followupDock.collapse": "Réduire les messages en file d'attente",
"session.followupDock.expand": "Développer les messages en file d'attente",
"session.revertDock.summary.one": "{{count}} message annulé",
"session.revertDock.summary.many": "{{count}} de messages annulés",
"session.revertDock.summary.other": "{{count}} messages annulés",
"session.revertDock.collapse": "Réduire les messages annulés",
"session.revertDock.expand": "Développer les messages annulés",
@@ -644,17 +634,17 @@ export const dict = {
"session.header.open.menu": "Options d'ouverture",
"session.header.open.copyPath": "Copier le chemin",
"status.popover.trigger": "Statut",
"status.popover.ariaLabel": "Configuration des serveurs",
"status.popover.ariaLabel": "Configurations des serveurs",
"status.popover.tab.servers": "Serveurs",
"status.popover.tab.mcp": "MCP",
"status.popover.tab.lsp": "LSP",
"status.popover.tab.plugins": "Plugins",
"status.popover.action.manageServers": "Gérer les serveurs",
"session.share.popover.title": "Publier sur le Web",
"session.share.popover.title": "Publier sur le web",
"session.share.popover.description.shared":
"Cette session est publique sur le Web. Elle est accessible à toute personne disposant du lien.",
"Cette session est publique sur le web. Elle est accessible à toute personne disposant du lien.",
"session.share.popover.description.unshared":
"Rendre la session publique sur le Web. Elle sera accessible à toute personne disposant du lien.",
"Partager la session publiquement sur le web. Elle sera accessible à toute personne disposant du lien.",
"session.share.action.share": "Partager",
"session.share.action.publish": "Publier",
"session.share.action.publishing": "Publication...",
@@ -665,7 +655,7 @@ export const dict = {
"session.share.copy.copyLink": "Copier le lien",
"lsp.tooltip.none": "Aucun serveur LSP",
"lsp.label.connected": "{{count}} LSP",
"prompt.loading": "Chargement de l'invite...",
"prompt.loading": "Chargement du prompt...",
"terminal.loading": "Chargement du terminal...",
"terminal.title": "Terminal",
"terminal.title.numbered": "Terminal {{number}}",
@@ -703,7 +693,7 @@ export const dict = {
"sidebar.empty.title": "Aucun projet ouvert",
"sidebar.empty.description": "Ouvrez un projet pour commencer",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "Application de bureau",
"settings.section.desktop": "Bureau",
"settings.section.server": "Serveur",
"settings.tab.general": "Général",
"settings.tab.shortcuts": "Raccourcis",
@@ -719,10 +709,10 @@ export const dict = {
"settings.general.section.display": "Affichage",
"settings.general.row.language.title": "Langue",
"settings.general.row.language.description": "Changer la langue d'affichage pour OpenCode",
"settings.general.row.shell.title": "Interpréteur de commandes du terminal",
"settings.general.row.shell.title": "Shell du terminal",
"settings.general.row.shell.description":
"Choisissez le shell utilisé par votre terminal. Les shells compatibles sont également utilisés pour les appels d'outils de l'agent.",
"settings.general.row.shell.autoDefault": "Automatique (par défaut)",
"settings.general.row.shell.autoDefault": "Auto (par défaut)",
"settings.general.row.shell.terminalOnly": "terminal uniquement",
"settings.general.row.appearance.title": "Apparence",
"settings.general.row.appearance.description": "Personnaliser l'apparence d'OpenCode sur votre appareil",
@@ -736,22 +726,22 @@ export const dict = {
"settings.general.row.terminalFont.description": "Personnalisez la police utilisée dans le terminal",
"settings.general.row.uiFont.title": "Police de l'interface",
"settings.general.row.uiFont.description": "Personnaliser la police utilisée dans toute l'interface",
"settings.general.row.followup.title": "Comportement des messages de suivi",
"settings.general.row.followup.title": "Comportement de suivi",
"settings.general.row.followup.description":
"Choisissez si les messages de suivi orientent immédiatement l'agent ou sont placés dans une file d'attente",
"Choisissez si les messages de suivi dirigent immédiatement ou attendent dans une file d'attente",
"settings.general.row.followup.option.queue": "File d'attente",
"settings.general.row.followup.option.steer": "Orienter",
"settings.general.row.followup.option.steer": "Diriger",
"settings.general.row.showFileTree.title": "Arborescence des fichiers",
"settings.general.row.showFileTree.description": "Afficher le panneau d'arborescence des fichiers dans les sessions",
"settings.general.row.showNavigation.title": "Commandes de navigation",
"settings.general.row.showNavigation.description":
"Afficher les boutons précédent et suivant dans la barre de titre de l'application de bureau",
"Afficher les boutons précédent et suivant dans la barre de titre de l'application desktop",
"settings.general.row.showSearch.title": "Palette de commandes",
"settings.general.row.showSearch.description":
"Afficher le bouton de recherche et de palette de commandes dans la barre de titre",
"settings.general.row.showTerminal.title": "Terminal",
"settings.general.row.showTerminal.description":
"Afficher le bouton du terminal dans la barre de titre de l'application de bureau",
"Afficher le bouton du terminal dans la barre de titre de l'application desktop",
"settings.general.row.showStatus.title": "État du serveur",
"settings.general.row.showStatus.description": "Afficher le bouton d'état du serveur dans la barre de titre",
"settings.general.row.mobileTitlebarBottom.title": "Navigation en bas",
@@ -783,13 +773,11 @@ export const dict = {
"settings.general.row.wayland.tooltip":
"Sur Linux avec des moniteurs à taux de rafraîchissement mixte, Wayland natif peut être plus stable.",
"settings.general.row.releaseNotes.title": "Notes de version",
"settings.general.row.releaseNotes.description":
"Afficher les fenêtres contextuelles « Quoi de neuf » après les mises à jour",
"settings.general.row.releaseNotes.description": 'Afficher des pop-ups "Quoi de neuf" après les mises à jour',
"settings.updates.row.startup.title": "Vérifier les mises à jour au démarrage",
"settings.updates.row.startup.description": "Vérifier automatiquement les mises à jour au lancement d'OpenCode",
"settings.updates.row.check.title": "Vérifier les mises à jour",
"settings.updates.row.check.description":
"Rechercher manuellement les mises à jour et installer toute mise à jour disponible",
"settings.updates.row.check.description": "Vérifier manuellement les mises à jour et installer si disponible",
"settings.updates.action.checkNow": "Vérifier maintenant",
"settings.updates.action.checking": "Vérification...",
"settings.updates.action.downloading": "Téléchargement...",
@@ -857,12 +845,12 @@ export const dict = {
"settings.general.sounds.errors.title": "Erreurs",
"settings.general.sounds.errors.description": "Jouer un son lorsqu'une erreur se produit",
"settings.shortcuts.title": "Raccourcis clavier",
"settings.shortcuts.reset.button": "Rétablir les valeurs par défaut",
"settings.shortcuts.reset.button": "Rétablir les défauts",
"settings.shortcuts.reset.toast.title": "Raccourcis réinitialisés",
"settings.shortcuts.reset.toast.description": "Les raccourcis clavier ont été réinitialisés aux valeurs par défaut.",
"settings.shortcuts.conflict.title": "Raccourci déjà utilisé",
"settings.shortcuts.conflict.description": "{{keybind}} est déjà attribué à {{titles}}.",
"settings.shortcuts.unassigned": "Non attribué",
"settings.shortcuts.conflict.description": "{{keybind}} est déjà assigné à {{titles}}.",
"settings.shortcuts.unassigned": "Non assigné",
"settings.shortcuts.pressKeys": "Appuyez sur les touches",
"settings.shortcuts.search.placeholder": "Rechercher des raccourcis",
"settings.shortcuts.search.empty": "Aucun raccourci trouvé",
@@ -871,7 +859,7 @@ export const dict = {
"settings.shortcuts.group.navigation": "Navigation",
"settings.shortcuts.group.modelAndAgent": "Modèle et agent",
"settings.shortcuts.group.terminal": "Terminal",
"settings.shortcuts.group.prompt": "Invite",
"settings.shortcuts.group.prompt": "Prompt",
"settings.providers.title": "Fournisseurs",
"settings.providers.description": "Les paramètres des fournisseurs seront configurables ici.",
"settings.providers.section.connected": "Fournisseurs connectés",
@@ -900,9 +888,9 @@ export const dict = {
"settings.permissions.tool.read.description": "Lecture d'un fichier (correspond au chemin du fichier)",
"settings.permissions.tool.edit.title": "Modifier",
"settings.permissions.tool.edit.description":
"Modifier des fichiers, notamment au moyen des outils edit, write et patch",
"Modifier des fichiers, y compris les modifications, écritures, patchs et multi-modifications",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "Rechercher des fichiers à l'aide de motifs glob",
"settings.permissions.tool.glob.description": "Correspondre aux fichiers utilisant des modèles glob",
"settings.permissions.tool.grep.title": "Grep",
"settings.permissions.tool.grep.description":
"Rechercher dans le contenu des fichiers à l'aide d'expressions régulières",
@@ -916,12 +904,12 @@ export const dict = {
"settings.permissions.tool.skill.description": "Charger une compétence par son nom",
"settings.permissions.tool.lsp.title": "LSP",
"settings.permissions.tool.lsp.description": "Exécuter des requêtes de serveur de langage",
"settings.permissions.tool.todowrite.title": "Écrire les tâches",
"settings.permissions.tool.todowrite.title": "Écrire Todo",
"settings.permissions.tool.todowrite.description": "Mettre à jour la liste de tâches",
"settings.permissions.tool.webfetch.title": "Récupération Web",
"settings.permissions.tool.webfetch.description": "Récupérer le contenu d'une URL",
"settings.permissions.tool.websearch.title": "Recherche Web",
"settings.permissions.tool.websearch.description": "Rechercher sur le Web",
"settings.permissions.tool.websearch.description": "Rechercher sur le web",
"settings.permissions.tool.external_directory.title": "Répertoire externe",
"settings.permissions.tool.external_directory.description": "Accéder aux fichiers en dehors du répertoire du projet",
"settings.permissions.tool.doom_loop.title": "Boucle infernale",
@@ -942,7 +930,7 @@ export const dict = {
"workspace.reset.success.description": "L'espace de travail correspond maintenant à la branche par défaut.",
"workspace.error.stillPreparing": "L'espace de travail est encore en cours de préparation",
"workspace.status.checking": "Vérification des modifications non fusionnées...",
"workspace.status.error": "Impossible de vérifier l'état de Git.",
"workspace.status.error": "Impossible de vérifier le statut git.",
"workspace.status.clean": "Aucune modification non fusionnée détectée.",
"workspace.status.dirty": "Modifications non fusionnées détectées dans cet espace de travail.",
"workspace.delete.title": "Supprimer l'espace de travail",
@@ -964,9 +952,9 @@ export const dict = {
"error.server.invalidConfiguration": "Configuration invalide",
"common.moreCountSuffix": " (+{{count}} de plus)",
"common.time.justNow": "À l'instant",
"common.time.minutesAgo.short": "il y a {{count}} min",
"common.time.hoursAgo.short": "il y a {{count}} h",
"common.time.daysAgo.short": "il y a {{count}} j",
"common.time.minutesAgo.short": "il y a {{count}}m",
"common.time.hoursAgo.short": "il y a {{count}}h",
"common.time.daysAgo.short": "il y a {{count}}j",
"settings.providers.connected.environmentDescription": "Connecté à partir de vos variables d'environnement",
"settings.providers.custom.description": "Ajouter un fournisseur compatible avec OpenAI via l'URL de base.",
@@ -984,9 +972,6 @@ export const dict = {
"session.question.progress": "{{current}} questions sur {{total}}",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "Explorateur de fichiers",
"session.header.reveal.finder": "Afficher dans le Finder",
"session.header.reveal.fileExplorer": "Afficher dans lExplorateur de fichiers",
"session.header.reveal.containingFolder": "Ouvrir le dossier contenant",
"session.header.open.fileManager": "Gestionnaire de fichiers",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
@@ -1007,11 +992,11 @@ export const dict = {
"debugBar.nav.tip":
"Dernière transition de route terminée touchant une page de session, mesurée du début du routeur jusqu'au premier affichage après stabilisation.",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "Fréquence d'images calculée sur les 5 dernières secondes.",
"debugBar.fps.tip": "Images par seconde glissantes sur les 5 dernières secondes.",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "Durée d'image maximale sur les 5 dernières secondes.",
"debugBar.frame.tip": "Pire temps d'image sur les 5 dernières secondes.",
"debugBar.jank.label": "JANK",
"debugBar.jank.tip": "Images de plus de 32 ms au cours des 5 dernières secondes.",
"debugBar.jank.tip": "Images de plus de 32ms au cours des 5 dernières secondes.",
"debugBar.long.label": "LONG",
"debugBar.long.tip":
"Temps bloqué et nombre de tâches longues au cours des 5 dernières secondes. Tâche max : {{max}}.",
@@ -1019,7 +1004,7 @@ export const dict = {
"debugBar.delay.tip": "Pire délai d'entrée observé au cours des 5 dernières secondes.",
"debugBar.inp.label": "INP",
"debugBar.inp.tip":
"Durée approximative d'interaction au cours des 5 dernières secondes. Il s'agit d'une mesure similaire à l'INP, et non de l'INP officiel des Web Vitals.",
"Durée approximative d'interaction au cours des 5 dernières secondes. Ceci est similaire à INP, pas le INP officiel des Web Vitals.",
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "Décalage cumulatif de la mise en page pour la durée de vie actuelle de l'application.",
"debugBar.mem.label": "MEM",
-1020
View File
@@ -1,1020 +0,0 @@
export const dict = {
"command.category.suggested": "सुझाए गए",
"command.category.view": "दृश्य",
"command.category.project": "प्रोजेक्ट",
"command.category.provider": "प्रोवाइडर",
"command.category.server": "सर्वर",
"command.category.session": "सेशन",
"command.category.theme": "थीम",
"command.category.language": "भाषा",
"command.category.file": "फ़ाइल",
"command.category.context": "कॉन्टेक्स्ट",
"command.category.terminal": "टर्मिनल",
"command.category.model": "मॉडल",
"command.category.mcp": "MCP",
"command.category.agent": "एजेंट",
"command.category.permissions": "अनुमतियाँ",
"command.category.workspace": "वर्कस्पेस",
"command.category.settings": "सेटिंग्स",
"theme.scheme.system": "सिस्टम",
"theme.scheme.light": "हल्की",
"theme.scheme.dark": "गहरी",
"command.sidebar.toggle": "साइडबार टॉगल करें",
"command.project.open": "प्रोजेक्ट खोलें",
"command.project.previous": "पिछला प्रोजेक्ट",
"command.project.next": "अगला प्रोजेक्ट",
"command.project.index": "प्रोजेक्ट {{index}} पर स्विच करें",
"command.provider.connect": "प्रोवाइडर कनेक्ट करें",
"command.server.switch": "सर्वर स्विच करें",
"command.settings.open": "सेटिंग्स खोलें",
"command.session.previous": "पिछला सेशन",
"command.session.next": "अगला सेशन",
"command.session.previous.unseen": "पिछला अपठित सेशन",
"command.session.next.unseen": "अगला अपठित सेशन",
"command.session.archive": "सेशन संग्रहित करें",
"command.palette": "कमांड पैलेट",
"command.theme.cycle": "थीम बदलें",
"command.theme.set": "थीम का उपयोग करें: {{theme}}",
"command.theme.scheme.cycle": "रंग योजना बदलें",
"command.theme.scheme.set": "रंग योजना का उपयोग करें: {{scheme}}",
"command.language.cycle": "भाषा बदलें",
"command.language.set": "भाषा का प्रयोग करें: {{language}}",
"command.session.new": "नया सेशन",
"command.file.open": "फ़ाइल खोलें",
"command.tab.close": "टैब बंद करें",
"command.tab.reopenClosed": "बंद टैब पुनः खोलें",
"command.context.addSelection": "कॉन्टेक्स्ट में चयन जोड़ें",
"command.context.addSelection.description": "वर्तमान फ़ाइल से चयनित पंक्तियाँ जोड़ें",
"command.input.focus": "इनपुट पर फ़ोकस करें",
"command.terminal.toggle": "टर्मिनल टॉगल करें",
"command.fileTree.toggle": "फ़ाइल ट्री टॉगल करें",
"command.review.toggle": "समीक्षा टॉगल करें",
"command.terminal.new": "नया टर्मिनल",
"command.terminal.new.description": "एक नया टर्मिनल टैब बनाएं",
"command.steps.toggle": "चरण टॉगल करें",
"command.steps.toggle.description": "वर्तमान संदेश के लिए चरण दिखाएँ या छिपाएँ",
"command.message.previous": "पिछला संदेश",
"command.message.previous.description": "पिछले उपयोगकर्ता संदेश पर जाएँ",
"command.message.next": "अगला संदेश",
"command.message.next.description": "अगले उपयोगकर्ता संदेश पर जाएँ",
"command.model.choose": "मॉडल चुनें",
"command.model.choose.description": "एक अलग मॉडल चुनें",
"command.mcp.toggle": "MCPs टॉगल करें",
"command.mcp.toggle.description": "MCPs टॉगल करें",
"command.agent.cycle": "एजेंट बदलें",
"command.agent.cycle.description": "अगले एजेंट पर स्विच करें",
"command.agent.cycle.reverse": "पिछला एजेंट चुनें",
"command.agent.cycle.reverse.description": "पिछले एजेंट पर स्विच करें",
"command.model.variant.cycle": "तर्क का स्तर बदलें",
"command.model.variant.cycle.description": "तर्क के अगले स्तर पर जाएँ",
"command.prompt.mode.shell": "शेल",
"command.prompt.mode.normal": "प्रॉम्प्ट",
"command.permissions.autoaccept.enable": "अनुमतियाँ स्वतः स्वीकार करें",
"command.permissions.autoaccept.disable": "अनुमतियाँ स्वत: स्वीकार करना बंद करें",
"command.workspace.toggle": "वर्कस्पेस टॉगल करें",
"command.workspace.toggle.description": "साइडबार में एकाधिक वर्कस्पेस को सक्षम या अक्षम करें",
"command.session.undo": "पूर्ववत",
"command.session.undo.description": "अंतिम संदेश पूर्ववत करें",
"command.session.redo": "फिर से करें",
"command.session.redo.description": "अंतिम पूर्ववत संदेश को पुनः करें",
"command.session.compact": "सेशन संक्षिप्त करें",
"command.session.compact.description": "कॉन्टेक्स्ट आकार को कम करने के लिए सेशन को सारांशित करें",
"command.session.fork": "संदेश से फ़ोर्क",
"command.session.fork.description": "पिछले संदेश से एक नया सेशन बनाएं",
"command.session.share": "सेशन साझा करें",
"command.session.share.description": "इस सेशन को साझा करें और URL को क्लिपबोर्ड पर कॉपी करें",
"command.session.unshare": "सेशन साझा करना बंद करें",
"command.session.unshare.description": "इस सेशन को साझा करना बंद करें",
"palette.search.placeholder": "फ़ाइलें, कमांड और सेशन खोजें",
"palette.search.placeholder.home": "कमांड और सेशन खोजें",
"palette.empty": "कोई परिणाम नहीं मिला",
"palette.group.commands": "कमांड",
"palette.group.files": "फ़ाइलें",
"dialog.provider.search.placeholder": "प्रोवाइडर खोजें",
"dialog.provider.empty": "कोई प्रोवाइडर नहीं मिला",
"dialog.provider.group.popular": "लोकप्रिय",
"dialog.provider.group.other": "अन्य",
"dialog.provider.custom.label": "कस्टम OpenAI-संगत प्रोवाइडर",
"dialog.provider.tag.recommended": "अनुशंसित",
"dialog.provider.opencode.note": "Claude, GPT, Gemini और अधिक सहित क्यूरेटेड मॉडल",
"dialog.provider.opencode.tagline": "विश्वसनीय अनुकूलित मॉडल",
"dialog.provider.opencodeGo.tagline": "सभी के लिए कम लागत वाली सदस्यता",
"dialog.provider.anthropic.note": "प्रो और मैक्स सहित Claude मॉडल तक सीधी पहुँच",
"dialog.provider.copilot.note": "GitHub Copilot के माध्यम से कोडिंग सहायता के लिए AI मॉडल",
"dialog.provider.openai.note": "तेज़, सक्षम सामान्य AI कार्यों के लिए GPT मॉडल",
"dialog.provider.google.note": "तेज़, संरचित प्रतिक्रियाओं के लिए Gemini मॉडल",
"dialog.provider.openrouter.note": "एक प्रोवाइडर से सभी समर्थित मॉडल तक पहुँचें",
"dialog.provider.vercel.note": "स्मार्ट रूटिंग के साथ AI मॉडल तक एकीकृत पहुँच",
"dialog.model.select.title": "मॉडल चुनें",
"dialog.model.search.placeholder": "मॉडल खोजें",
"dialog.model.empty": "कोई मॉडल परिणाम नहीं",
"dialog.model.manage": "मॉडल प्रबंधित करें",
"dialog.model.manage.description": "तय करें कि मॉडल चयनकर्ता में कौन-से मॉडल दिखाई दें।",
"dialog.model.manage.provider.toggle": "सभी {{provider}} मॉडल को टॉगल करें",
"dialog.model.unpaid.freeModels.title": "OpenCode द्वारा उपलब्ध निःशुल्क मॉडल",
"dialog.model.unpaid.addMore.title": "लोकप्रिय प्रोवाइडर से अधिक मॉडल जोड़ें",
"dialog.model.unpaid.viewMoreProviders": "70+ अधिक प्रोवाइडर देखें",
"dialog.provider.viewAll": "और प्रोवाइडर दिखाएँ",
"provider.connect.title": "{{provider}} कनेक्ट करें",
"provider.connect.title.anthropicProMax": "Claude प्रो/मैक्स के साथ लॉगिन करें",
"provider.connect.selectMethod": "{{provider}} के लिए लॉगिन विधि चुनें।",
"provider.connect.method.apiKey": "API कुंजी",
"provider.connect.status.inProgress": "प्राधिकरण प्रगति पर है...",
"provider.connect.status.waiting": "प्राधिकरण की प्रतीक्षा हो रही है...",
"provider.connect.status.failed": "प्राधिकरण विफल: {{error}}",
"provider.connect.apiKey.description":
"अपने खाते को कनेक्ट करने के लिए अपनी {{provider}} API कुंजी दर्ज करें और OpenCode में {{provider}} मॉडल का उपयोग करें।",
"provider.connect.apiKey.label": "{{provider}} API कुंजी",
"provider.connect.apiKey.placeholder": "API कुंजी",
"provider.connect.apiKey.required": "API कुंजी आवश्यक है",
"provider.connect.opencodeZen.line1":
"OpenCode Zen आपको कोडिंग एजेंटों के लिए चुने गए विश्वसनीय, अनुकूलित मॉडलों तक पहुँच देता है।",
"provider.connect.opencodeZen.line2": "एक API कुंजी से आपको Claude, GPT, Gemini, GLM जैसे कई मॉडलों तक पहुँच मिलेगी।",
"provider.connect.opencodeZen.visit.prefix": "यहाँ जाएँ: ",
"provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
"provider.connect.opencodeZen.visit.suffix": " अपनी API कुंजी प्राप्त करने के लिए।",
"provider.connect.oauth.code.visit.prefix": "यहाँ जाएँ: ",
"provider.connect.oauth.code.visit.link": "इस लिंक",
"provider.connect.oauth.code.visit.suffix":
" अपने खाते को कनेक्ट करने और OpenCode में {{provider}} मॉडल का उपयोग करने के लिए अपना प्राधिकरण कोड प्राप्त करें।",
"provider.connect.oauth.code.label": "{{method}} प्राधिकरण कोड",
"provider.connect.oauth.code.placeholder": "प्राधिकरण कोड",
"provider.connect.oauth.code.required": "प्राधिकरण कोड आवश्यक है",
"provider.connect.oauth.code.invalid": "अमान्य प्राधिकरण कोड",
"provider.connect.oauth.auto.visit.prefix": "यहाँ जाएँ: ",
"provider.connect.oauth.auto.visit.link": "इस लिंक",
"provider.connect.oauth.auto.visit.suffix":
" और अपने खाते को कनेक्ट करने तथा OpenCode में {{provider}} मॉडल का उपयोग करने के लिए नीचे दिया गया कोड दर्ज करें।",
"provider.connect.oauth.auto.confirmationCode": "पुष्टि कोड",
"provider.connect.toast.connected.title": "{{provider}} कनेक्ट हो गया",
"provider.connect.toast.connected.description": "{{provider}} मॉडल अब उपयोग के लिए उपलब्ध हैं।",
"provider.custom.title": "कस्टम प्रोवाइडर",
"provider.custom.description.prefix": "एक OpenAI-संगत प्रोवाइडर कॉन्फ़िगर करें। देखें ",
"provider.custom.description.link": "प्रोवाइडर कॉन्फ़िगरेशन दस्तावेज़",
"provider.custom.description.suffix": ".",
"provider.custom.field.providerID.label": "प्रोवाइडर ID",
"provider.custom.field.providerID.placeholder": "myprovider",
"provider.custom.field.providerID.description": "छोटे अक्षर, संख्याएँ, हाइफ़न, या अंडरस्कोर",
"provider.custom.field.name.label": "प्रदर्शित होने वाला नाम",
"provider.custom.field.name.placeholder": "मेरा AI प्रोवाइडर",
"provider.custom.field.baseURL.label": "आधार URL",
"provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1",
"provider.custom.field.apiKey.label": "API कुंजी",
"provider.custom.field.apiKey.placeholder": "API कुंजी",
"provider.custom.field.apiKey.description":
"वैकल्पिक। यदि आप हेडर के माध्यम से प्रमाणीकरण प्रबंधित करते हैं तो खाली छोड़ दें।",
"provider.custom.models.label": "मॉडल",
"provider.custom.models.id.label": "ID",
"provider.custom.models.id.placeholder": "model-id",
"provider.custom.models.name.label": "नाम",
"provider.custom.models.name.placeholder": "प्रदर्शित होने वाला नाम",
"provider.custom.models.remove": "मॉडल हटाएँ",
"provider.custom.models.add": "मॉडल जोड़ें",
"provider.custom.headers.label": "हेडर (वैकल्पिक)",
"provider.custom.headers.key.label": "हेडर",
"provider.custom.headers.key.placeholder": "Header-Name",
"provider.custom.headers.value.label": "मान",
"provider.custom.headers.value.placeholder": "value",
"provider.custom.headers.remove": "हेडर हटाएँ",
"provider.custom.headers.add": "हेडर जोड़ें",
"provider.custom.error.providerID.required": "प्रोवाइडर ID आवश्यक है",
"provider.custom.error.providerID.format": "छोटे अक्षरों, संख्याओं, हाइफ़न या अंडरस्कोर का उपयोग करें",
"provider.custom.error.providerID.exists": "वह प्रोवाइडर ID पहले से मौजूद है",
"provider.custom.error.name.required": "प्रदर्शन नाम आवश्यक है",
"provider.custom.error.baseURL.required": "आधार URL आवश्यक है",
"provider.custom.error.baseURL.format": "http:// या https:// से प्रारंभ होना चाहिए",
"provider.custom.error.required": "आवश्यक",
"provider.custom.error.duplicate": "डुप्लिकेट",
"provider.disconnect.toast.disconnected.title": "{{provider}} डिस्कनेक्ट हो गया",
"provider.disconnect.toast.disconnected.description": "{{provider}} मॉडल अब उपलब्ध नहीं हैं।",
"model.tag.free": "निःशुल्क",
"model.tag.latest": "नवीनतम",
"model.provider.anthropic": "Anthropic",
"model.provider.openai": "OpenAI",
"model.provider.google": "Google",
"model.provider.xai": "xAI",
"model.provider.meta": "Meta",
"model.input.text": "टेक्स्ट",
"model.input.image": "छवि",
"model.input.audio": "ऑडियो",
"model.input.video": "वीडियो",
"model.input.pdf": "PDF",
"model.tooltip.allows": "अनुमति देता है: {{inputs}}",
"model.tooltip.context.label": "कॉन्टेक्स्ट",
"model.tooltip.inputs": "इनपुट",
"model.tooltip.model": "मॉडल",
"model.tooltip.provider": "प्रोवाइडर",
"model.tooltip.reasoning": "तर्क",
"model.tooltip.reasoning.allowed": "तर्क करने की अनुमति देता है",
"model.tooltip.reasoning.none": "कोई तर्क नहीं",
"model.tooltip.context": "कॉन्टेक्स्ट सीमा {{limit}}",
"common.search.placeholder": "खोज",
"common.goBack": "पीछे जाएँ",
"common.goForward": "आगे जाएँ",
"common.loading": "लोड हो रहा है",
"common.loading.ellipsis": "...",
"common.cancel": "रद्द करें",
"common.clear": "साफ़ करें",
"common.open": "खोलें",
"common.connect": "कनेक्ट करें",
"common.disconnect": "डिस्कनेक्ट करें",
"common.continue": "जारी रखें",
"common.submit": "जमा करें",
"common.save": "सहेजें",
"common.saving": "सहेजा जा रहा है...",
"common.default": "डिफ़ॉल्ट",
"common.attachment": "अटैचमेंट",
"prompt.placeholder.shell": "शेल कमांड... {{example}} दर्ज करें",
"prompt.placeholder.normal": 'कुछ भी पूछें... "{{example}}"',
"prompt.placeholder.simple": "कुछ भी पूछें...",
"prompt.placeholder.summarizeComments": "टिप्पणियों को सारांशित करें...",
"prompt.placeholder.summarizeComment": "टिप्पणी को सारांशित करें...",
"prompt.mode.shell": "शेल",
"prompt.mode.normal": "प्रॉम्प्ट",
"prompt.mode.shell.exit": "बाहर निकलने के लिए esc",
"session.child.promptDisabled": "सबएजेंट सेशन में प्रॉम्प्ट नहीं भेजा जा सकता।",
"session.child.backToParent": "मुख्य सेशन पर वापस जाएँ।",
"prompt.example.1": "कोडबेस में एक TODO ठीक करें",
"prompt.example.2": "इस प्रोजेक्ट का तकनीकी स्टैक क्या है?",
"prompt.example.3": "टूटे हुए परीक्षणों को ठीक करें",
"prompt.example.4": "बताएं कि प्रमाणीकरण कैसे काम करता है",
"prompt.example.5": "सुरक्षा कमजोरियाँ खोजें और ठीक करें",
"prompt.example.6": "उपयोगकर्ता सेवा के लिए यूनिट परीक्षण जोड़ें",
"prompt.example.7": "इस फ़ंक्शन को अधिक पठनीय बनाने के लिए रीफ़ैक्टर करें",
"prompt.example.8": "इस त्रुटि का मतलब क्या है?",
"prompt.example.9": "इस मुद्दे को डीबग करने में मेरी सहायता करें",
"prompt.example.10": "API दस्तावेज़ तैयार करें",
"prompt.example.11": "डेटाबेस क्वेरीज़ को अनुकूलित करें",
"prompt.example.12": "इनपुट सत्यापन जोड़ें",
"prompt.example.13": "इसके लिए एक नया कॉम्पोनेंट बनाएँ...",
"prompt.example.14": "मैं इस प्रोजेक्ट को कैसे तैनात करूं?",
"prompt.example.15": "सर्वोत्तम प्रथाओं के लिए मेरे कोड की समीक्षा करें",
"prompt.example.16": "इस फ़ंक्शन में त्रुटि प्रबंधन जोड़ें",
"prompt.example.17": "इस रेगेक्स पैटर्न को समझाइये",
"prompt.example.18": "इसे TypeScript में बदलें",
"prompt.example.19": "पूरे कोडबेस में लॉगिंग जोड़ें",
"prompt.example.20": "कौन सी निर्भरताएँ पुरानी हो चुकी हैं?",
"prompt.example.21": "माइग्रेशन स्क्रिप्ट लिखने में मेरी सहायता करें",
"prompt.example.22": "इस समापन बिंदु के लिए कैशिंग लागू करें",
"prompt.example.23": "इस सूची में पेजिनेशन जोड़ें",
"prompt.example.24": "इसके लिए एक CLI कमांड बनाएं...",
"prompt.example.25": "पर्यावरण चर यहाँ कैसे काम करते हैं?",
"prompt.popover.emptyResults": "कोई मेल खाता परिणाम नहीं",
"prompt.popover.emptyCommands": "कोई मेल खाता कमांड नहीं",
"prompt.dropzone.label": "छवियाँ, PDFs, या टेक्स्ट फ़ाइलें यहां छोड़ें",
"prompt.dropzone.file.label": "फ़ाइल का @mention करने के लिए छोड़ें",
"prompt.slash.badge.custom": "कस्टम",
"prompt.slash.badge.skill": "कौशल",
"prompt.slash.badge.mcp": "mcp",
"prompt.context.active": "सक्रिय",
"prompt.context.includeActiveFile": "सक्रिय फ़ाइल शामिल करें",
"prompt.context.removeActiveFile": "कॉन्टेक्स्ट से सक्रिय फ़ाइल हटाएँ",
"prompt.context.removeFile": "कॉन्टेक्स्ट से फ़ाइल हटाएँ",
"prompt.action.attachFile": "फ़ाइलें जोड़ें",
"prompt.menu.addImagesAndFiles": "फ़ाइलें और बहुत कुछ जोड़ें",
"prompt.menu.imagesAndFiles": "छवियाँ और फ़ाइलें",
"prompt.menu.commands": "कमांड",
"prompt.menu.context": "कॉन्टेक्स्ट",
"prompt.menu.shellCommand": "शेल कमांड",
"prompt.attachment.remove": "अनुलग्नक हटाएँ",
"prompt.action.send": "भेजें",
"prompt.action.stop": "रोकें",
"prompt.toast.pasteUnsupported.title": "असमर्थित अनुलग्नक",
"prompt.toast.pasteUnsupported.description": "यहां केवल छवियां, PDFs, या टेक्स्ट फ़ाइलें संलग्न की जा सकती हैं।",
"prompt.toast.attachmentDuplicate.title": "यह फ़ाइल पहले ही अपलोड की जा चुकी है",
"prompt.toast.modelAgentRequired.title": "एक एजेंट और मॉडल चुनें",
"prompt.toast.modelAgentRequired.description": "प्रॉम्प्ट भेजने से पहले एक एजेंट और मॉडल चुनें।",
"prompt.toast.worktreeCreateFailed.title": "वर्कट्री बनाने में विफल",
"prompt.toast.sessionCreateFailed.title": "सेशन बनाने में विफल",
"prompt.toast.shellSendFailed.title": "शेल कमांड भेजने में विफल",
"prompt.toast.commandSendFailed.title": "कमांड भेजने में विफल",
"prompt.toast.promptSendFailed.title": "प्रॉम्प्ट भेजने में विफल",
"prompt.toast.promptSendFailed.description": "सेशन पुनः प्राप्त करने में असमर्थ",
"dialog.mcp.title": "MCPs",
"dialog.mcp.description": "{{total}} में से {{enabled}} सक्षम",
"dialog.mcp.empty": "कोई MCP कॉन्फ़िगर नहीं किया गया",
"dialog.lsp.empty": "फ़ाइल प्रकारों से LSP का स्वतः पता लगाया जाता है",
"dialog.plugins.empty": "प्लगइन opencode.json में कॉन्फ़िगर किए गए हैं",
"mcp.status.connected": "कनेक्टेड",
"mcp.status.failed": "असफल",
"mcp.status.needs_auth": "प्रमाणीकरण की आवश्यकता है",
"mcp.status.disabled": "अक्षम",
"mcp.auth.clickToAuthenticate": "प्रमाणित करने के लिए क्लिक करें",
"dialog.fork.empty": "फ़ोर्क करने के लिए कोई संदेश नहीं",
"dialog.directory.search.placeholder": "फ़ोल्डर खोजें",
"dialog.directory.empty": "कोई फ़ोल्डर नहीं मिला",
"dialog.directory.action.selectFile": "फ़ाइल का चयन करें",
"dialog.directory.action.selectFolder": "फ़ोल्डर चुनें",
"dialog.directory.root": "रूट",
"dialog.directory.parent": "पैरेंट",
"dialog.directory.readError": "इस फ़ोल्डर को पढ़ने में असमर्थ",
"app.server.unreachable": "{{server}} तक नहीं पहुँचा जा सका",
"app.server.retrying": "स्वचालित रूप से पुनः प्रयास किया जा रहा है...",
"app.server.otherServers": "अन्य सर्वर",
"dialog.server.title": "सर्वर",
"dialog.server.description": "स्विच करें कि यह ऐप किस OpenCode सर्वर से कनेक्ट होता है।",
"dialog.server.search.placeholder": "सर्वर खोजें",
"dialog.server.empty": "अभी तक कोई सर्वर नहीं है",
"dialog.server.add.title": "सर्वर जोड़ें",
"dialog.server.add.url": "सर्वर पता",
"dialog.server.add.placeholder": "http://localhost:4096",
"dialog.server.add.error": "सर्वर से कनेक्ट नहीं कर सका",
"dialog.server.add.checking": "जाँच हो रही है...",
"dialog.server.add.button": "सर्वर जोड़ें",
"dialog.server.add.name": "सर्वर नाम (वैकल्पिक)",
"dialog.server.add.namePlaceholder": "Localhost",
"dialog.server.add.username": "उपयोगकर्ता नाम (वैकल्पिक)",
"dialog.server.add.usernamePlaceholder": "उपयोक्तानाम",
"dialog.server.add.password": "पासवर्ड (वैकल्पिक)",
"dialog.server.add.passwordPlaceholder": "पासवर्ड",
"dialog.server.edit.title": "सर्वर संपादित करें",
"dialog.server.default.title": "डिफ़ॉल्ट सर्वर",
"dialog.server.default.description":
"स्थानीय सर्वर शुरू करने के बजाय ऐप लॉन्च होने पर इस सर्वर से कनेक्ट करें। पुनः आरंभ करना आवश्यक है।",
"dialog.server.default.none": "कोई सर्वर चयनित नहीं",
"dialog.server.default.set": "वर्तमान सर्वर को डिफ़ॉल्ट के रूप में सेट करें",
"dialog.server.default.clear": "साफ़ करें",
"dialog.server.action.remove": "सर्वर हटाएँ",
"dialog.server.menu.edit": "संपादित करें",
"dialog.server.menu.default": "डिफाल्ट के रूप में सेट",
"dialog.server.menu.defaultRemove": "डिफ़ॉल्ट हटाएँ",
"dialog.server.menu.delete": "हटाएँ",
"dialog.server.current": "वर्तमान सर्वर",
"dialog.server.status.default": "डिफ़ॉल्ट",
"wsl.server.add": "WSL सर्वर जोड़ें",
"wsl.server.addShort": "WSL जोड़ें",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "WSL सर्वर",
"wsl.server.retryStart": "पुन: प्रयास प्रारंभ करें",
"wsl.server.updating": "अद्यतन किया जा रहा है...",
"wsl.onboarding.step.distro": "डिस्ट्रो चुनें",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "WSL की जाँच हो रही है...",
"wsl.onboarding.restartRequired": "WSL की स्थापना पूरी करने के लिए Windows को पुनः आरंभ करना होगा।",
"wsl.onboarding.ready": "WSL तैयार है।",
"wsl.onboarding.required": "जारी रखने के लिए WSL आवश्यक है।",
"wsl.onboarding.checkingDistros": "डिस्ट्रोज़ की जाँच हो रही है...",
"wsl.onboarding.installingDistro": "{{distro}} इंस्टॉल किया जा रहा है...",
"wsl.onboarding.checkingDistro": "{{distro}} की जाँच हो रही है...",
"wsl.onboarding.listingDistros": "डिस्ट्रो की सूची बनाई जा रही है...",
"wsl.onboarding.distroReady": "{{distro}} तैयार है।",
"wsl.onboarding.distroNotInstalled": "{{distro}} अभी तक इंस्टॉल नहीं है।",
"wsl.onboarding.openDistroOnce": "सेटअप पूरा करने के लिए एक बार {{distro}} खोलें।",
"wsl.onboarding.finishingDistro": "{{distro}} का सेटअप पूरा किया जा रहा है।",
"wsl.onboarding.pickDistro": "एक डिस्ट्रो चुनें या नीचे एक स्थापित करें।",
"wsl.onboarding.checkingOpencode": "OpenCode की जाँच हो रही है...",
"wsl.onboarding.checkingOpencodeIn": "{{distro}} में OpenCode की जाँच हो रही है...",
"wsl.onboarding.updatingOpencode": "OpenCode अपडेट हो रहा है...",
"wsl.onboarding.updatingOpencodeIn": "{{distro}} में OpenCode अपडेट हो रहा है...",
"wsl.onboarding.updateOpencodeIn": "{{distro}} में OpenCode को अपडेट करें।",
"wsl.onboarding.updateOpencode": "OpenCode को अपडेट करें",
"wsl.onboarding.opencodeReadyIn": "OpenCode {{distro}} में तैयार है।",
"wsl.onboarding.opencodeReady": "OpenCode तैयार है।",
"wsl.onboarding.installOpencodeIn": "{{distro}} में OpenCode स्थापित करें।",
"wsl.onboarding.installOpencode": "OpenCode स्थापित करें",
"wsl.onboarding.chooseDistroFirst": "पहले एक डिस्ट्रो चुनें।",
"wsl.onboarding.loadFailed": "WSL स्थिति लोड करने में विफल।",
"wsl.onboarding.loading": "लोड हो रहा है...",
"wsl.onboarding.installedDistros": "स्थापित डिस्ट्रोस",
"wsl.onboarding.checkAgain": "फिर से जाँचें",
"wsl.onboarding.distroStatus.ready": "तैयार",
"wsl.onboarding.distroStatus.checking": "जाँच हो रही है...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode स्थापित नहीं है",
"wsl.onboarding.distroStatus.missingTools": "गायब बैश, कर्ल",
"wsl.onboarding.distroStatus.unsupported": "असमर्थित · WSL 2 का उपयोग करें",
"wsl.onboarding.needAnotherDistro": "एक और डिस्ट्रो की आवश्यकता है?",
"wsl.onboarding.needAnotherDistroHint": "WSL कैटलॉग से Linux वितरण स्थापित करें",
"wsl.onboarding.wslNotInstalled.title": "WSL स्थापित नहीं है",
"wsl.onboarding.wslNotInstalled.description":
"OpenCode द्वारा WSL सर्वर जोड़ने से पहले WSL (Linux के लिए Windows सबसिस्टम) आवश्यक है",
"wsl.onboarding.wslUnavailable.title": "WSL अनुपलब्ध है",
"wsl.onboarding.wslUnavailable.description": "OpenCode इस मशीन पर WSL को सत्यापित नहीं कर सका।",
"wsl.onboarding.installWsl": "WSL स्थापित करें",
"wsl.onboarding.windowsRestartRequired":
"WSL की स्थापना समाप्त करने के लिए Windows को पुनरारंभ करें, फिर OpenCode को फिर से खोलें।",
"wsl.onboarding.next": "अगला",
"wsl.onboarding.refresh": "रीफ़्रेश करें",
"wsl.onboarding.allDistrosAdded": "सभी स्थापित डिस्ट्रो पहले ही जोड़े जा चुके हैं।",
"wsl.onboarding.noDistros": "अभी तक कोई डिस्ट्रो नहीं मिला।",
"wsl.onboarding.install": "स्थापित करें",
"wsl.onboarding.installing": "स्थापित किया जा रहा है...",
"wsl.onboarding.installDistro": "डिस्ट्रो स्थापित करें",
"wsl.onboarding.searchDistros": "डिस्ट्रोस खोजें",
"wsl.onboarding.wsl2Required": "WSL 2 आवश्यक है।",
"wsl.onboarding.toolsRequired": "इस डिस्ट्रो को बैश और कर्ल की जरूरत है।",
"wsl.onboarding.openTerminal": "टर्मिनल खोलें",
"wsl.onboarding.path": "पथ: {{path}}",
"wsl.onboarding.notFound": "नहीं मिला",
"wsl.onboarding.version": "संस्करण: {{version}}",
"wsl.onboarding.unknown": "अज्ञात",
"wsl.onboarding.desktopVersion": "डेस्कटॉप {{version}}",
"wsl.onboarding.versionMismatch": "इंस्टॉल किया गया संस्करण डेस्कटॉप ऐप संस्करण से मेल नहीं खाता।",
"wsl.onboarding.adding": "जोड़ा जा रहा है...",
"server.row.noUsername": "कोई उपयोगकर्ता नाम नहीं",
"dialog.project.edit.title": "प्रोजेक्ट संपादित करें",
"dialog.project.edit.name": "नाम",
"dialog.project.edit.icon": "आइकन",
"dialog.project.edit.icon.alt": "प्रोजेक्ट आइकन",
"dialog.project.edit.icon.hint": "किसी छवि को क्लिक करें या खींचें",
"dialog.project.edit.icon.recommended": "अनुशंसित: 128x128px",
"dialog.project.edit.color": "रंग",
"dialog.project.edit.color.select": "{{color}} रंग चुनें",
"dialog.project.edit.worktree.startup": "वर्कस्पेस स्टार्टअप स्क्रिप्ट",
"dialog.project.edit.worktree.startup.description": "एक नया वर्कस्पेस (वर्कट्री) बनाने के बाद चलता है।",
"dialog.project.edit.worktree.startup.placeholder": "जैसे: bun install",
"dialog.releaseNotes.action.getStarted": "शुरू करें",
"dialog.releaseNotes.action.next": "अगला",
"dialog.releaseNotes.action.hideFuture": "भविष्य में इन्हें न दिखाएँ",
"dialog.releaseNotes.media.alt": "रिलीज़ पूर्वावलोकन",
"context.breakdown.title": "कॉन्टेक्स्ट ब्रेकडाउन",
"context.breakdown.note": 'इनपुट टोकन का अनुमानित विभाजन। "अन्य" में टूल की परिभाषाएँ और अतिरिक्त खर्च शामिल हैं।',
"context.breakdown.system": "सिस्टम",
"context.breakdown.user": "उपयोगकर्ता",
"context.breakdown.assistant": "सहायक",
"context.breakdown.tool": "टूल कॉल",
"context.breakdown.other": "अन्य",
"context.systemPrompt.title": "सिस्टम प्रॉम्प्ट",
"context.rawMessages.title": "मूल संदेश",
"context.stats.session": "सेशन",
"context.stats.messages": "संदेश",
"context.stats.provider": "प्रोवाइडर",
"context.stats.model": "मॉडल",
"context.stats.limit": "कॉन्टेक्स्ट सीमा",
"context.stats.totalTokens": "कुल टोकन",
"context.stats.usage": "उपयोग",
"context.stats.inputTokens": "इनपुट टोकन",
"context.stats.outputTokens": "आउटपुट टोकन",
"context.stats.reasoningTokens": "तर्क टोकन",
"context.stats.cacheTokens": "कैश टोकन (पढ़ें/लिखें)",
"context.stats.userMessages": "उपयोगकर्ता संदेश",
"context.stats.assistantMessages": "सहायक संदेश",
"context.stats.totalCost": "कुल लागत",
"context.stats.sessionCreated": "सेशन बनाया गया",
"context.stats.lastActivity": "अंतिम गतिविधि",
"context.usage.tokens": "टोकन",
"context.usage.usage": "उपयोग",
"context.usage.cost": "लागत",
"context.usage.clickToView": "कॉन्टेक्स्ट देखने के लिए क्लिक करें",
"context.usage.view": "कॉन्टेक्स्ट उपयोग देखें",
"language.en": "English",
"language.zh": "简体中文",
"language.zht": "繁體中文",
"language.ko": "한국어",
"language.de": "Deutsch",
"language.es": "Español",
"language.fr": "Français",
"language.da": "Dansk",
"language.ja": "日本語",
"language.pl": "Polski",
"language.ru": "Русский",
"language.ar": "العربية",
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
"toast.language.title": "भाषा",
"toast.language.description": "{{language}} पर स्विच किया गया",
"toast.theme.title": "थीम स्विच किया गया",
"toast.scheme.title": "रंग योजना",
"toast.workspace.enabled.title": "वर्कस्पेस सक्षम",
"toast.workspace.enabled.description": "एकाधिक वर्कट्री अब साइडबार में दिखाए गए हैं",
"toast.workspace.disabled.title": "वर्कस्पेस अक्षम",
"toast.workspace.disabled.description": "साइडबार में केवल मुख्य वर्कट्री दिखाया गया है",
"toast.permissions.autoaccept.on.title": "अनुमतियाँ स्वतः स्वीकार करना",
"toast.permissions.autoaccept.on.description": "अनुमति अनुरोध स्वचालित रूप से स्वीकृत हो जाएंगे",
"toast.permissions.autoaccept.off.title": "अनुमतियों को स्वतः स्वीकार करना बंद कर दिया गया",
"toast.permissions.autoaccept.off.description": "अनुमति अनुरोधों के लिए अनुमोदन की आवश्यकता होगी",
"toast.model.none.title": "कोई मॉडल चयनित नहीं",
"toast.model.none.description": "इस सेशन को सारांशित करने के लिए एक प्रोवाइडर कनेक्ट करें",
"toast.file.loadFailed.title": "फ़ाइल लोड करने में विफल",
"toast.file.listFailed.title": "फ़ाइलें सूचीबद्ध करने में विफल",
"toast.context.noLineSelection.title": "कोई पंक्ति चयन नहीं",
"toast.context.noLineSelection.description": "पहले फ़ाइल टैब में एक पंक्ति श्रेणी का चयन करें।",
"toast.session.share.copyFailed.title": "URL को क्लिपबोर्ड पर कॉपी करने में विफल",
"toast.session.share.success.title": "सेशन साझा किया गया",
"toast.session.share.success.description": "साझा URL क्लिपबोर्ड पर कॉपी किया गया!",
"toast.session.share.failed.title": "सेशन साझा करने में विफल",
"toast.session.share.failed.description": "सेशन साझा करते समय एक त्रुटि उत्पन्न हुई",
"toast.session.unshare.success.title": "सेशन अनशेयर किया गया",
"toast.session.unshare.success.description": "सेशन सफलतापूर्वक अनशेयर किया गया!",
"toast.session.unshare.failed.title": "सेशन को अनशेयर करने में विफल",
"toast.session.unshare.failed.description": "सेशन को अनशेयर करते समय एक त्रुटि उत्पन्न हुई",
"toast.session.listFailed.title": "{{project}} के लिए सेशन लोड करने में विफल",
"toast.project.reloadFailed.title": "{{project}} को पुनः लोड करने में विफल",
"toast.update.title": "उपलब्ध अद्यतन",
"toast.update.description": "OpenCode ({{version}}) का एक नया संस्करण अब इंस्टॉल करने के लिए उपलब्ध है।",
"toast.update.action.installRestart": "स्थापित करें और पुनः आरंभ करें",
"toast.update.action.notYet": "अभी नहीं",
"error.page.title": "कुछ गलत हो गया",
"error.page.description": "एप्लिकेशन लोड करते समय एक त्रुटि हुई।",
"error.page.description.localServerStartup": "स्थानीय सर्वर शुरू करते समय एक त्रुटि हुई।",
"error.page.details.label": "त्रुटि विवरण",
"error.page.action.restart": "पुनः आरंभ करें",
"error.page.action.report": "त्रुटि की रिपोर्ट करें",
"error.page.action.reported": "त्रुटि रिपोर्ट की गई",
"error.page.action.exportLogs": "लॉग निर्यात करें",
"error.page.action.checking": "जाँच हो रही है...",
"error.page.action.checkUpdates": "अद्यतन के लिए जाँच",
"error.page.action.updateTo": "{{version}} पर अपडेट करें",
"error.page.circular": "[Circular]",
"error.page.report.prefix": "कृपया इस त्रुटि की रिपोर्ट OpenCode टीम को करें",
"error.page.report.discord": "Discord पर",
"error.page.version": "संस्करण: {{version}}",
"error.dev.rootNotFound":
"मूल तत्व नहीं मिला. क्या आप इसे अपने index.html में जोड़ना भूल गए? या हो सकता है कि आईडी विशेषता गलत वर्तनी हो गई हो?",
"error.serverSync.connectFailed": "सर्वर से कनेक्ट नहीं कर सका। क्या `{{url}}` पर कोई सर्वर चल रहा है?",
"error.serverSDK.noServerAvailable": "कोई सर्वर उपलब्ध नहीं है",
"error.serverSDK.serverNotAvailable": "सर्वर उपलब्ध नहीं है",
"error.childStore.persistedCacheCreateFailed": "सतत कैश बनाने में विफल",
"error.childStore.persistedProjectMetadataCreateFailed": "निरंतर प्रोजेक्ट मेटाडेटा बनाने में विफल",
"error.childStore.persistedProjectIconCreateFailed": "स्थायी प्रोजेक्ट आइकन बनाने में विफल",
"error.childStore.storeCreateFailed": "स्टोर बनाने में विफल",
"directory.error.invalidUrl": "URL में अमान्य निर्देशिका।",
"error.chain.unknown": "अज्ञात त्रुटि",
"error.server.invalidConfiguration": "अमान्य कॉन्फ़िगरेशन",
"error.chain.causedBy": "कारण:",
"error.chain.apiError": "API त्रुटि",
"error.chain.status": "स्थिति: {{status}}",
"error.chain.retryable": "पुनः प्रयास योग्य: {{retryable}}",
"error.chain.responseBody": "प्रतिक्रिया निकाय:\n{{body}}",
"error.chain.didYouMean": "क्या आपका मतलब था: {{suggestions}}",
"error.chain.modelNotFound": "मॉडल नहीं मिला: {{provider}}/{{model}}",
"error.chain.checkConfig": "अपने कॉन्फ़िगरेशन (opencode.json) प्रोवाइडर/मॉडल नामों की जाँच करें",
"error.chain.mcpFailed":
'MCP सर्वर "{{name}}" विफल रहा। ध्यान दें, OpenCode अभी तक MCP प्रमाणीकरण का समर्थन नहीं करता है।',
"error.chain.providerAuthFailed": "प्रोवाइडर प्रमाणीकरण विफल ({{provider}}): {{message}}",
"error.chain.providerInitFailed":
'प्रोवाइडर "{{provider}}" शुरू नहीं किया जा सका। क्रेडेंशियल और कॉन्फ़िगरेशन की जाँच करें।',
"error.chain.configJsonInvalid": "{{path}} पर कॉन्फ़िगरेशन फ़ाइल वैध JSON(C) नहीं है",
"error.chain.configJsonInvalidWithMessage": "{{path}} पर कॉन्फ़िगरेशन फ़ाइल वैध नहीं है JSON(C): {{message}}",
"error.chain.configDirectoryTypo":
'{{path}} में निर्देशिका "{{dir}}" मान्य नहीं है। निर्देशिका का नाम बदलकर "{{suggestion}}" करें या इसे हटा दें। यह वर्तनी की एक सामान्य त्रुटि है।',
"error.chain.configFrontmatterError": "{{path}} में फ्रंटमैटर को पार्स करने में विफल:\n{{message}}",
"error.chain.configInvalid": "{{path}} पर कॉन्फ़िगरेशन फ़ाइल अमान्य है",
"error.chain.configInvalidWithMessage": "{{path}} पर कॉन्फ़िगरेशन फ़ाइल अमान्य है: {{message}}",
"notification.permission.title": "अनुमति आवश्यक है",
"notification.permission.description": "{{projectName}} में {{sessionTitle}} को अनुमति की आवश्यकता है",
"notification.question.title": "प्रश्न",
"notification.question.description": "{{projectName}} में {{sessionTitle}} का एक प्रश्न है",
"notification.action.goToSession": "सेशन पर जाएं",
"notification.session.responseReady.title": "प्रतिक्रिया तैयार",
"notification.session.error.title": "सेशन त्रुटि",
"notification.session.error.fallbackDescription": "एक त्रुटि पाई गई",
"home.recentProjects": "हाल के प्रोजेक्ट",
"home.empty.title": "कोई हालिया प्रोजेक्ट नहीं",
"home.empty.description": "स्थानीय प्रोजेक्ट खोलकर शुरुआत करें",
"home.title": "होम",
"home.projects": "प्रोजेक्ट",
"home.project.add": "प्रोजेक्ट जोड़ें",
"home.recentlyClosed": "हाल ही में बंद हुआ",
"home.server.collapse": "सर्वर प्रोजेक्ट को संक्षिप्त करें",
"home.server.expand": "सर्वर प्रोजेक्ट का विस्तार करें",
"home.sessions.search.placeholder": "सेशन खोजें",
"home.sessions.search.placeholder.scoped": "{{scope}} में सेशन खोजें",
"home.sessions.search.sessions": "सेशन",
"home.sessions.search.noResults": "{{query}} के लिए कोई सेशन नहीं मिला",
"home.sessions.empty": "अभी तक यहां कुछ भी नहीं है",
"home.sessions.empty.description": "आरंभ करने के लिए एक सेशन बनाएं",
"home.sessions.group.today": "आज",
"home.sessions.group.yesterday": "कल",
"home.sessions.group.older": "पुराने",
"home.providerTip": "Claude, GPT, Gemini आदि सहित अन्य मॉडल का उपयोग करने के लिए 75+ प्रोवाइडर से कनेक्ट करें",
"session.tab.session": "सेशन",
"session.tab.review": "समीक्षा",
"session.tab.context": "कॉन्टेक्स्ट",
"session.tab.unknown": "अज्ञात सेशन",
"session.panel.reviewAndFiles": "समीक्षा और फ़ाइलें",
"session.error.notFound": "यह सेशन नहीं मिल सका",
"session.error.notFound.description": "यह टैब एक सेशन की ओर इशारा करता है जो अब इस सर्वर पर मौजूद नहीं है।",
"session.error.notFound.closeTab": "टैब बंद करें",
"session.error.serverConnection": "इस सर्वर से कनेक्ट नहीं किया जा सकता",
"session.review.filesChanged": "बदली गई फ़ाइलें: {{count}}",
"session.review.change.one": "परिवर्तन",
"session.review.change.other": "परिवर्तन",
"session.review.loadingChanges": "परिवर्तन लोड हो रहे हैं...",
"session.review.empty": "इस सेशन में अभी तक कोई बदलाव नहीं हुआ है",
"session.review.noVcs": "कोई Git संस्करण नियंत्रण प्रणाली नहीं पाई गई, परिवर्तन प्रदर्शित नहीं हुए",
"session.review.noVcs.createGit.title": "एक Git रिपॉजिटरी बनाएं",
"session.review.noVcs.createGit.description":
"इस प्रोजेक्ट में परिवर्तनों को ट्रैक करें, समीक्षा करें और पूर्ववत करें",
"session.review.noVcs.createGit.actionLoading": "Git रिपॉजिटरी बनाई जा रही है...",
"session.review.noVcs.createGit.action": "Git रिपॉजिटरी बनाएं",
"session.review.noSnapshot": "कॉन्फ़िगरेशन में स्नैपशॉट ट्रैकिंग अक्षम है, इसलिए सेशन परिवर्तन अनुपलब्ध हैं",
"session.review.noChanges": "कोई परिवर्तन नहीं",
"session.review.noUncommittedChanges": "अभी तक कोई अप्रतिबद्ध परिवर्तन नहीं",
"session.review.noBranchChanges": "अभी तक शाखा में कोई परिवर्तन नहीं",
"session.files.selectToOpen": "खोलने के लिए एक फ़ाइल का चयन करें",
"session.files.all": "सभी फ़ाइलें",
"session.files.empty": "कोई फ़ाइल नहीं",
"session.files.binaryContent": "बाइनरी फ़ाइल (सामग्री प्रदर्शित नहीं की जा सकती)",
"session.messages.renderEarlier": "पहले के संदेश रेंडर करें",
"session.messages.loadingEarlier": "पुराने संदेश लोड हो रहे हैं...",
"session.messages.loadEarlier": "पहले के संदेश लोड करें",
"session.messages.loading": "संदेश लोड हो रहे हैं...",
"session.messages.jumpToLatest": "नवीनतम पर जाएं",
"session.context.addToContext": "{{selection}} को कॉन्टेक्स्ट में जोड़ें",
"session.todo.title": "कार्य सूची",
"session.todo.collapse": "संकुचित करें",
"session.todo.expand": "विस्तृत करें",
"session.todo.progress": "{{total}} में से {{done}} कार्य पूरे हुए",
"session.question.progress": "{{total}} प्रश्नों में से {{current}}",
"session.question.minimize": "प्रश्न छोटा करें",
"session.question.restore": "प्रश्न पुनर्स्थापित करें",
"session.question.pending.one": "{{count}} लंबित प्रश्न",
"session.question.pending.other": "{{count}} लंबित प्रश्न",
"session.followupDock.summary.one": "कतार में {{count}} संदेश",
"session.followupDock.summary.other": "कतार में {{count}} संदेश",
"session.followupDock.sendNow": "अब भेजें",
"session.followupDock.edit": "संपादित करें",
"session.followupDock.collapse": "कतार के संदेश संकुचित करें",
"session.followupDock.expand": "कतार के संदेश विस्तृत करें",
"session.revertDock.summary.one": "{{count}} संदेश वापस लिया गया",
"session.revertDock.summary.other": "{{count}} संदेश वापस लिए गए",
"session.revertDock.collapse": "रोलबैक संदेशों को संक्षिप्त करें",
"session.revertDock.expand": "वापस लाये गए संदेशों का विस्तार करें",
"session.revertDock.restore": "संदेश पुनर्स्थापित करें",
"session.new.title": "कुछ भी बनाएँ",
"session.new.project.new": "नया प्रोजेक्ट",
"session.new.project.search": "प्रोजेक्ट खोजें",
"session.new.project.add": "प्रोजेक्ट जोड़ें",
"session.new.worktree.main": "मुख्य शाखा",
"session.new.worktree.mainWithBranch": "मुख्य शाखा ({{branch}})",
"session.new.worktree.create": "नया वर्कट्री बनाएं",
"session.new.workspace.runIn": "सेशन यहाँ चलाएँ",
"session.new.workspace.triggerLocal": "स्थानीय",
"session.new.workspace.local": "स्थानीय रिपॉजिटरी",
"session.new.workspace.existing": "वर्कस्पेस…",
"session.new.git.none": "कोई Git नहीं",
"session.new.lastModified": "अंतिम बार संशोधित",
"session.header.search.placeholder": "{{project}} खोजें",
"session.header.searchFiles": "फ़ाइलें खोजें",
"session.header.openIn": "में खोलें",
"session.header.open.action": "{{app}} खोलें",
"session.header.open.ariaLabel": "{{app}} में खोलें",
"session.header.open.menu": "विकल्प खोलें",
"session.header.open.copyPath": "पथ कॉपी करें",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "File Explorer",
"session.header.open.fileManager": "File Manager",
"session.header.reveal.finder": "Finder में प्रकट करें",
"session.header.reveal.fileExplorer": "File Explorer में प्रकट करें",
"session.header.reveal.containingFolder": "मूल फ़ोल्डर खोलें",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
"session.header.open.app.zed": "Zed",
"session.header.open.app.textmate": "TextMate",
"session.header.open.app.antigravity": "Antigravity",
"session.header.open.app.terminal": "टर्मिनल",
"session.header.open.app.iterm2": "iTerm2",
"session.header.open.app.ghostty": "Ghostty",
"session.header.open.app.warp": "Warp",
"session.header.open.app.xcode": "Xcode",
"session.header.open.app.androidStudio": "Android Studio",
"session.header.open.app.powershell": "PowerShell",
"session.header.open.app.sublimeText": "Sublime Text",
"status.popover.trigger": "स्थिति",
"status.popover.ariaLabel": "सर्वर कॉन्फ़िगरेशन",
"status.popover.tab.servers": "सर्वर",
"status.popover.tab.mcp": "MCP",
"status.popover.tab.lsp": "LSP",
"status.popover.tab.plugins": "प्लग-इन",
"status.popover.action.manageServers": "सर्वर प्रबंधित करें",
"session.share.popover.title": "वेब पर प्रकाशित करें",
"session.share.popover.description.shared":
"यह सेशन वेब पर सार्वजनिक है। यह लिंक वाले किसी भी व्यक्ति के लिए सुलभ है।",
"session.share.popover.description.unshared":
"सेशन को वेब पर सार्वजनिक रूप से साझा करें। यह लिंक वाले किसी भी व्यक्ति के लिए सुलभ होगा।",
"session.share.action.share": "साझा करें",
"session.share.action.publish": "प्रकाशित करें",
"session.share.action.publishing": "प्रकाशित किया जा रहा है...",
"session.share.action.unpublish": "प्रकाशन हटाएँ",
"session.share.action.unpublishing": "प्रकाशन हटाया जा रहा है...",
"session.share.action.view": "देखें",
"session.share.copy.copied": "कॉपी किया गया",
"session.share.copy.copyLink": "लिंक कॉपी करें",
"lsp.tooltip.none": "कोई LSP सर्वर नहीं",
"lsp.label.connected": "{{count}} LSP",
"prompt.loading": "प्रॉम्प्ट लोड हो रहा है...",
"terminal.loading": "टर्मिनल लोड हो रहा है...",
"terminal.title": "टर्मिनल",
"terminal.title.numbered": "टर्मिनल {{number}}",
"terminal.close": "टर्मिनल बंद करें",
"terminal.connectionLost.title": "कनेक्शन टूट गया",
"terminal.connectionLost.abnormalClose": "WebSocket असामान्य रूप से बंद हुआ: {{code}}",
"terminal.connectionLost.description": "टर्मिनल कनेक्शन बाधित हो गया था। ऐसा तब हो सकता है जब सर्वर पुनरारंभ हो।",
"common.closeTab": "टैब बंद करें",
"common.dismiss": "हटाएँ",
"common.moreCountSuffix": " (+{{count}} और)",
"common.requestFailed": "अनुरोध विफल रहा",
"common.moreOptions": "अधिक विकल्प",
"common.learnMore": "और अधिक जानें",
"common.rename": "नाम बदलें",
"common.reset": "रीसेट करें",
"common.archive": "संग्रहित करें",
"common.delete": "हटाएँ",
"common.close": "बंद करें",
"common.edit": "संपादित करें",
"common.loadMore": "और लोड करें",
"common.key.esc": "ESC",
"common.key.ctrl": "Ctrl",
"common.key.alt": "Alt",
"common.key.shift": "Shift",
"common.key.meta": "Meta",
"common.key.space": "Space",
"common.key.backspace": "Backspace",
"common.key.enter": "Enter",
"common.key.tab": "Tab",
"common.key.delete": "Delete",
"common.key.home": "Home",
"common.key.end": "End",
"common.key.pageUp": "Page Up",
"common.key.pageDown": "Page Down",
"common.key.insert": "Insert",
"common.unknown": "अज्ञात",
"common.time.justNow": "अभी-अभी",
"common.time.minutesAgo.short": "{{count}}m पहले",
"common.time.hoursAgo.short": "{{count}}h पहले",
"common.time.daysAgo.short": "{{count}}d पहले",
"sidebar.menu.toggle": "मेनू टॉगल करें",
"sidebar.nav.projectsAndSessions": "प्रोजेक्ट और सेशन",
"sidebar.settings": "सेटिंग्स",
"sidebar.help": "मदद",
"sidebar.workspaces.enable": "वर्कस्पेस सक्षम करें",
"sidebar.workspaces.disable": "वर्कस्पेस अक्षम करें",
"sidebar.gettingStarted.title": "शुरुआत करें",
"sidebar.gettingStarted.line1": "OpenCode में निःशुल्क मॉडल शामिल है ताकि आप तुरंत शुरू कर सकें।",
"sidebar.gettingStarted.line2": "Claude, GPT, Gemini आदि मॉडल उपयोग करने के लिए किसी भी प्रोवाइडर को कनेक्ट करें।",
"sidebar.project.recentSessions": "हाल ही में सेशन",
"sidebar.project.viewAllSessions": "सभी सेशन देखें",
"sidebar.project.clearNotifications": "सूचनाएँ साफ़ करें",
"sidebar.empty.title": "कोई प्रोजेक्ट खुला नहीं",
"sidebar.empty.description": "आरंभ करने के लिए एक प्रोजेक्ट खोलें",
"debugBar.ariaLabel": "विकास प्रदर्शन निदान",
"debugBar.na": "एन/ए",
"debugBar.nav.label": "NAV",
"debugBar.nav.tip":
"सेशन पृष्ठ को छूते हुए अंतिम पूर्ण मार्ग परिवर्तन, राउटर प्रारंभ से लेकर उसके व्यवस्थित होने के बाद पहले पेंट तक मापा जाता है।",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "पिछले 5 सेकंड में फ़्रेम प्रति सेकंड रोलिंग।",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "पिछले 5 सेकंड में सबसे खराब फ़्रेम समय।",
"debugBar.jank.label": "JANK",
"debugBar.jank.tip": "अंतिम 5 सेकंड में 32 एमएस से अधिक फ़्रेम।",
"debugBar.long.label": "LONG",
"debugBar.long.tip": "पिछले 5 सेकंड में अवरुद्ध समय और लंबे कार्यों की संख्या। सबसे लंबा कार्य: {{max}}।",
"debugBar.delay.label": "DELAY",
"debugBar.delay.tip": "पिछले 5 सेकंड में सबसे खराब इनपुट विलंब देखा गया।",
"debugBar.inp.label": "INP",
"debugBar.inp.tip": "पिछले 5 सेकंड में अनुमानित इंटरैक्शन अवधि। यह INP जैसा है, आधिकारिक Web Vitals INP नहीं।",
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "वर्तमान ऐप जीवनकाल के लिए संचयी लेआउट बदलाव।",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "उपयोग किया गया JS हीप बनाम हीप सीमा। केवल Chromium।",
"debugBar.mem.tip": "उपयोग किया गया JS हीप बनाम हीप सीमा। {{limit}} में से {{used}}।",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "डेस्कटॉप",
"settings.section.server": "सर्वर",
"settings.tab.general": "सामान्य",
"settings.tab.shortcuts": "शॉर्टकट",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "WSL एकीकरण",
"settings.desktop.wsl.description": "Windows पर WSL के अंदर OpenCode सर्वर चलाएँ।",
"settings.general.section.appearance": "उपस्थिति",
"settings.general.section.advanced": "उन्नत",
"settings.general.section.notifications": "सिस्टम सूचनाएँ",
"settings.general.section.updates": "अपडेट",
"settings.general.section.sounds": "ध्वनि प्रभाव",
"settings.general.section.feed": "फ़ीड",
"settings.general.section.display": "प्रदर्शन",
"settings.general.row.language.title": "भाषा",
"settings.general.row.language.description": "OpenCode के लिए प्रदर्शन भाषा बदलें",
"settings.general.row.shell.title": "टर्मिनल शेल",
"settings.general.row.shell.description": "शेल का उपयोग टर्मिनल और एजेंट टूल द्वारा किया जाता है",
"settings.general.row.shell.autoDefault": "स्वतः (डिफ़ॉल्ट)",
"settings.general.row.shell.terminalOnly": "केवल टर्मिनल",
"settings.general.row.appearance.title": "उपस्थिति",
"settings.general.row.appearance.description": "अनुकूलित करें कि OpenCode आपके डिवाइस पर कैसा दिखता है",
"settings.general.row.colorScheme.title": "रंग योजना",
"settings.general.row.colorScheme.description": "चुनें कि OpenCode सिस्टम, हल्की या गहरी थीम में से किसका उपयोग करे",
"settings.general.row.theme.title": "थीम",
"settings.general.row.theme.description": "अनुकूलित करें कि OpenCode की थीम कैसी है।",
"settings.general.row.font.title": "कोड फ़ॉन्ट",
"settings.general.row.font.description": "कोड ब्लॉक में प्रयुक्त फ़ॉन्ट को अनुकूलित करें",
"settings.general.row.terminalFont.title": "टर्मिनल फ़ॉन्ट",
"settings.general.row.terminalFont.description": "टर्मिनल में प्रयुक्त फ़ॉन्ट को अनुकूलित करें",
"settings.general.row.uiFont.title": "UI फ़ॉन्ट",
"settings.general.row.uiFont.description": "पूरे इंटरफ़ेस में उपयोग किए गए फ़ॉन्ट को कस्टमाइज़ करें",
"settings.general.row.followup.title": "अनुवर्ती व्यवहार",
"settings.general.row.followup.description":
"चुनें कि क्या अनुवर्ती प्रॉम्प्ट तुरंत आगे बढ़ेगा या कतार में प्रतीक्षा करेगा",
"settings.general.row.followup.option.queue": "कतार",
"settings.general.row.followup.option.steer": "तुरंत निर्देश दें",
"settings.general.row.showFileTree.title": "फ़ाइल वृक्ष",
"settings.general.row.showFileTree.description": "सेशन में फ़ाइल ट्री पैनल दिखाएँ",
"settings.general.row.showNavigation.title": "नेविगेशन नियंत्रण",
"settings.general.row.showNavigation.description": "डेस्कटॉप टाइटल बार में पीछे और आगे के बटन दिखाएँ",
"settings.general.row.showSearch.title": "कमांड पैलेट",
"settings.general.row.showSearch.description": "टाइटल बार में खोज और कमांड पैलेट बटन दिखाएँ",
"settings.general.row.showTerminal.title": "टर्मिनल",
"settings.general.row.showTerminal.description": "डेस्कटॉप टाइटल बार में टर्मिनल बटन दिखाएँ",
"settings.general.row.showStatus.title": "सर्वर की स्थिति",
"settings.general.row.showStatus.description": "टाइटल बार में सर्वर स्थिति बटन दिखाएँ",
"settings.general.row.mobileTitlebarBottom.title": "निचला नेविगेशन",
"settings.general.row.mobileTitlebarBottom.description": "मोबाइल पर स्क्रीन के नीचे टाइटल बार और सेशन टैब रखें",
"settings.general.row.showCustomAgents.title": "एजेंट दिखाएँ",
"settings.general.row.showCustomAgents.description":
"कंपोज़र में एजेंट के बीच स्विच करें। छिपाए जाने पर, डिफ़ॉल्ट रूप से बिल्ड एजेंट हो जाता है।",
"settings.general.row.reasoningSummaries.title": "तर्क सारांश दिखाएँ",
"settings.general.row.reasoningSummaries.description": "टाइमलाइन में मॉडल तर्क सारांश प्रदर्शित करें",
"settings.general.row.shellToolPartsExpanded.title": "शेल टूल पार्ट्स का विस्तार करें",
"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 का उपयोग करें",
"settings.general.row.wayland.description": "Wayland पर X11 फ़ॉलबैक अक्षम करें। पुनः आरंभ करना आवश्यक है।",
"settings.general.row.wayland.tooltip":
"अलग-अलग रीफ़्रेश दर वाले मॉनिटर के साथ Linux पर नेटिव Wayland अधिक स्थिर हो सकता है।",
"settings.general.row.releaseNotes.title": "रिलीज़ नोट्स",
"settings.general.row.releaseNotes.description": "अपडेट के बाद 'नया क्या है' पॉपअप दिखाएँ",
"settings.updates.row.startup.title": "स्टार्टअप पर अपडेट की जाँच करें",
"settings.updates.row.startup.description": "OpenCode लॉन्च होने पर अपने-आप अपडेट की जाँच करें",
"settings.updates.row.check.title": "अद्यतन के लिए जाँच",
"settings.updates.row.check.description": "अपडेट के लिए मैन्युअल रूप से जाँच करें और यदि उपलब्ध हो तो इंस्टॉल करें",
"settings.updates.action.checkNow": "अभी जाँचें",
"settings.updates.action.checking": "जाँच हो रही है...",
"settings.updates.action.downloading": "डाउनलोड हो रहा है...",
"settings.updates.action.installing": "स्थापित किया जा रहा है...",
"settings.updates.toast.latest.title": "आपके पास नवीनतम संस्करण है",
"settings.updates.toast.latest.description": "आप OpenCode का नवीनतम संस्करण चला रहे हैं।",
"sound.option.none": "कोई नहीं",
"sound.option.alert01": "Alert 01",
"sound.option.alert02": "Alert 02",
"sound.option.alert03": "Alert 03",
"sound.option.alert04": "Alert 04",
"sound.option.alert05": "Alert 05",
"sound.option.alert06": "Alert 06",
"sound.option.alert07": "Alert 07",
"sound.option.alert08": "Alert 08",
"sound.option.alert09": "Alert 09",
"sound.option.alert10": "Alert 10",
"sound.option.bipbop01": "Bip-bop 01",
"sound.option.bipbop02": "Bip-bop 02",
"sound.option.bipbop03": "Bip-bop 03",
"sound.option.bipbop04": "Bip-bop 04",
"sound.option.bipbop05": "Bip-bop 05",
"sound.option.bipbop06": "Bip-bop 06",
"sound.option.bipbop07": "Bip-bop 07",
"sound.option.bipbop08": "Bip-bop 08",
"sound.option.bipbop09": "Bip-bop 09",
"sound.option.bipbop10": "Bip-bop 10",
"sound.option.staplebops01": "Staplebops 01",
"sound.option.staplebops02": "Staplebops 02",
"sound.option.staplebops03": "Staplebops 03",
"sound.option.staplebops04": "Staplebops 04",
"sound.option.staplebops05": "Staplebops 05",
"sound.option.staplebops06": "Staplebops 06",
"sound.option.staplebops07": "Staplebops 07",
"sound.option.nope01": "Nope 01",
"sound.option.nope02": "Nope 02",
"sound.option.nope03": "Nope 03",
"sound.option.nope04": "Nope 04",
"sound.option.nope05": "Nope 05",
"sound.option.nope06": "Nope 06",
"sound.option.nope07": "Nope 07",
"sound.option.nope08": "Nope 08",
"sound.option.nope09": "Nope 09",
"sound.option.nope10": "Nope 10",
"sound.option.nope11": "Nope 11",
"sound.option.nope12": "Nope 12",
"sound.option.yup01": "Yup 01",
"sound.option.yup02": "Yup 02",
"sound.option.yup03": "Yup 03",
"sound.option.yup04": "Yup 04",
"sound.option.yup05": "Yup 05",
"sound.option.yup06": "Yup 06",
"settings.general.notifications.agent.title": "एजेंट",
"settings.general.notifications.agent.description":
"जब एजेंट पूरा हो जाए या ध्यान देने की आवश्यकता हो तो सिस्टम अधिसूचना दिखाएं",
"settings.general.notifications.permissions.title": "अनुमतियाँ",
"settings.general.notifications.permissions.description": "अनुमति की आवश्यकता होने पर सिस्टम अधिसूचना दिखाएं",
"settings.general.notifications.errors.title": "त्रुटियाँ",
"settings.general.notifications.errors.description": "त्रुटि होने पर सिस्टम अधिसूचना दिखाएं",
"settings.general.sounds.agent.title": "एजेंट",
"settings.general.sounds.agent.description": "जब एजेंट पूरा हो जाए या ध्यान देने की आवश्यकता हो तो ध्वनि बजाएं",
"settings.general.sounds.permissions.title": "अनुमतियाँ",
"settings.general.sounds.permissions.description": "अनुमति की आवश्यकता होने पर ध्वनि बजाएं",
"settings.general.sounds.errors.title": "त्रुटियाँ",
"settings.general.sounds.errors.description": "कोई त्रुटि होने पर ध्वनि बजाएं",
"settings.shortcuts.title": "कीबोर्ड शॉर्टकट",
"settings.shortcuts.reset.button": "डिफ़ॉल्ट पर पुनः सेट करें",
"settings.shortcuts.reset.toast.title": "शॉर्टकट रीसेट",
"settings.shortcuts.reset.toast.description": "कीबोर्ड शॉर्टकट को डिफ़ॉल्ट पर रीसेट कर दिया गया है।",
"settings.shortcuts.conflict.title": "शॉर्टकट पहले से ही उपयोग में है",
"settings.shortcuts.conflict.description": "{{keybind}} पहले से ही {{titles}} को सौंपा गया है।",
"settings.shortcuts.unassigned": "सौंपे नहीं गए",
"settings.shortcuts.pressKeys": "कुंजियाँ दबाएँ",
"settings.shortcuts.search.placeholder": "शॉर्टकट खोजें",
"settings.shortcuts.search.empty": "कोई शॉर्टकट नहीं मिला",
"settings.shortcuts.group.general": "सामान्य",
"settings.shortcuts.group.session": "सेशन",
"settings.shortcuts.group.navigation": "नेविगेशन",
"settings.shortcuts.group.modelAndAgent": "मॉडल और एजेंट",
"settings.shortcuts.group.terminal": "टर्मिनल",
"settings.shortcuts.group.prompt": "प्रॉम्प्ट",
"settings.providers.title": "प्रोवाइडर",
"settings.providers.description": "प्रोवाइडर सेटिंग्स यहां कॉन्फ़िगर करने योग्य होंगी।",
"settings.providers.section.connected": "कनेक्टेड प्रोवाइडर",
"settings.providers.connected.empty": "कोई कनेक्टेड प्रोवाइडर नहीं",
"settings.providers.connected.environmentDescription": "आपके एनवायरनमेंट वेरिएबल से कनेक्ट किया गया",
"settings.providers.section.popular": "लोकप्रिय प्रोवाइडर",
"settings.providers.custom.description": "आधार URL द्वारा एक OpenAI-संगत प्रोवाइडर जोड़ें।",
"settings.providers.tag.environment": "एनवायरनमेंट",
"settings.providers.tag.config": "कॉन्फ़िगरेशन",
"settings.providers.tag.custom": "कस्टम",
"settings.providers.tag.other": "अन्य",
"settings.models.title": "मॉडल",
"settings.models.description": "मॉडल सेटिंग्स यहां कॉन्फ़िगर करने योग्य होंगी।",
"settings.agents.title": "एजेंट",
"settings.agents.description": "एजेंट सेटिंग्स यहां कॉन्फ़िगर करने योग्य होंगी।",
"settings.commands.title": "कमांड",
"settings.commands.description": "कमांड सेटिंग्स यहां कॉन्फ़िगर करने योग्य होंगी।",
"settings.mcp.title": "MCP",
"settings.mcp.description": "MCP सेटिंग्स यहां कॉन्फ़िगर करने योग्य होंगी।",
"settings.permissions.title": "अनुमतियाँ",
"settings.permissions.description": "नियंत्रित करें कि सर्वर डिफ़ॉल्ट रूप से कौन से टूल का उपयोग कर सकता है।",
"settings.permissions.section.tools": "टूल",
"settings.permissions.toast.updateFailed.title": "अनुमतियाँ अद्यतन करने में विफल",
"settings.permissions.action.allow": "अनुमति दें",
"settings.permissions.action.ask": "पूछें",
"settings.permissions.action.deny": "अस्वीकार करें",
"settings.permissions.tool.read.title": "पढ़ें",
"settings.permissions.tool.read.description": "फ़ाइल पढ़ना (फ़ाइल पथ से मेल खाता है)",
"settings.permissions.tool.edit.title": "संपादित करें",
"settings.permissions.tool.edit.description": "संपादन, लेखन और पैच सहित फ़ाइलों को संशोधित करें",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "ग्लोब पैटर्न का उपयोग करके फ़ाइलों का मिलान करें",
"settings.permissions.tool.grep.title": "Grep",
"settings.permissions.tool.grep.description": "रेगुलर एक्सप्रेशन का उपयोग करके फ़ाइल सामग्री खोजें",
"settings.permissions.tool.list.title": "सूची",
"settings.permissions.tool.list.description": "किसी निर्देशिका में फ़ाइलों की सूची बनाएं",
"settings.permissions.tool.bash.title": "Bash",
"settings.permissions.tool.bash.description": "शेल कमांड चलाएँ",
"settings.permissions.tool.task.title": "कार्य",
"settings.permissions.tool.task.description": "उप-एजेंट लॉन्च करें",
"settings.permissions.tool.skill.title": "कौशल",
"settings.permissions.tool.skill.description": "किसी कौशल को नाम से लोड करें",
"settings.permissions.tool.lsp.title": "LSP",
"settings.permissions.tool.lsp.description": "भाषा सर्वर क्वेरी चलाएँ",
"settings.permissions.tool.todowrite.title": "Todo Write",
"settings.permissions.tool.todowrite.description": "कार्य सूची अद्यतन करें",
"settings.permissions.tool.webfetch.title": "Web Fetch",
"settings.permissions.tool.webfetch.description": "URL से सामग्री प्राप्त करें",
"settings.permissions.tool.websearch.title": "Web Search",
"settings.permissions.tool.websearch.description": "वेब खोज",
"settings.permissions.tool.external_directory.title": "बाह्य निर्देशिका",
"settings.permissions.tool.external_directory.description": "प्रोजेक्ट निर्देशिका के बाहर फ़ाइलों तक पहुँचें",
"settings.permissions.tool.doom_loop.title": "Doom Loop",
"settings.permissions.tool.doom_loop.description": "समान इनपुट के साथ बार-बार टूल कॉल का पता लगाएं",
"session.delete.failed.title": "सेशन को हटाने में विफल",
"session.delete.title": "सेशन हटाएं",
"session.delete.confirm": 'सेशन "{{name}}" हटाएं?',
"session.delete.button": "सेशन हटाएं",
"workspace.new": "नया वर्कस्पेस",
"workspace.type.local": "स्थानीय",
"workspace.type.sandbox": "सैंडबॉक्स",
"workspace.create.failed.title": "वर्कस्पेस बनाने में विफल",
"workspace.delete.failed.title": "वर्कस्पेस को हटाने में विफल",
"workspace.resetting.title": "वर्कस्पेस को रीसेट करना",
"workspace.resetting.description": "इसमें एक मिनट लग सकता है।",
"workspace.reset.failed.title": "वर्कस्पेस को रीसेट करने में विफल",
"workspace.reset.success.title": "वर्कस्पेस रीसेट",
"workspace.reset.success.description": "वर्कस्पेस अब डिफ़ॉल्ट शाखा से मेल खाता है।",
"workspace.error.stillPreparing": "वर्कस्पेस अभी भी तैयारी कर रहा है",
"workspace.status.checking": "मर्ज न किए गए परिवर्तनों की जाँच हो रही है...",
"workspace.status.error": "Git स्थिति सत्यापित नहीं की जा सकी।",
"workspace.status.clean": "मर्ज न किए गए कोई परिवर्तन नहीं मिले।",
"workspace.status.dirty": "इस वर्कस्पेस में मर्ज न किए गए परिवर्तन मिले।",
"workspace.delete.title": "वर्कस्पेस हटाएं",
"workspace.delete.confirm": 'वर्कस्पेस "{{name}}" हटाएं?',
"workspace.delete.button": "वर्कस्पेस हटाएं",
"workspace.reset.title": "वर्कस्पेस रीसेट करें",
"workspace.reset.confirm": 'वर्कस्पेस "{{name}}" रीसेट करें?',
"workspace.reset.button": "वर्कस्पेस रीसेट करें",
"workspace.reset.archived.none": "कोई सक्रिय सेशन संग्रहित नहीं किया जाएगा।",
"workspace.reset.archived.one": "1 सेशन संग्रहित किया जाएगा।",
"workspace.reset.archived.many": "{{count}} सेशन संग्रहित किए जाएँगे।",
"workspace.reset.note": "यह डिफ़ॉल्ट शाखा से मिलान करने के लिए वर्कस्पेस को रीसेट कर देगा।",
}
-1105
View File
@@ -1,1105 +0,0 @@
export const dict = {
"command.category.suggested": "Disarankan",
"command.category.view": "Tampilan",
"command.category.project": "Proyek",
"command.category.provider": "Penyedia",
"command.category.server": "Server",
"command.category.session": "Sesi",
"command.category.theme": "Tema",
"command.category.language": "Bahasa",
"command.category.file": "Berkas",
"command.category.context": "Konteks",
"command.category.terminal": "Terminal",
"command.category.model": "Model",
"command.category.mcp": "MCP",
"command.category.agent": "Agen",
"command.category.permissions": "Izin",
"command.category.workspace": "Ruang kerja",
"command.category.settings": "Pengaturan",
"theme.scheme.system": "Sistem",
"theme.scheme.light": "Terang",
"theme.scheme.dark": "Gelap",
"command.sidebar.toggle": "Alihkan panel samping",
"command.project.open": "Buka proyek",
"command.project.previous": "Proyek sebelumnya",
"command.project.next": "Proyek berikutnya",
"command.project.index": "Beralih ke proyek {{index}}",
"command.provider.connect": "Hubungkan penyedia",
"command.server.switch": "Ganti server",
"command.settings.open": "Buka pengaturan",
"command.session.previous": "Sesi sebelumnya",
"command.session.next": "Sesi berikutnya",
"command.session.previous.unseen": "Sesi sebelumnya yang belum dibaca",
"command.session.next.unseen": "Sesi berikutnya yang belum dibaca",
"command.session.archive": "Arsipkan sesi",
"command.palette": "Palet perintah",
"command.theme.cycle": "Ganti tema",
"command.theme.set": "Gunakan tema: {{theme}}",
"command.theme.scheme.cycle": "Ganti skema warna",
"command.theme.scheme.set": "Gunakan skema warna: {{scheme}}",
"command.language.cycle": "Ganti bahasa",
"command.language.set": "Gunakan bahasa: {{language}}",
"command.session.new": "Sesi baru",
"command.file.open": "Buka berkas",
"command.tab.close": "Tutup tab",
"command.tab.reopenClosed": "Buka kembali tab yang ditutup",
"command.context.addSelection": "Tambahkan pilihan ke konteks",
"command.context.addSelection.description": "Tambahkan baris yang dipilih dari berkas saat ini",
"command.input.focus": "Fokuskan masukan",
"command.terminal.toggle": "Alihkan terminal",
"command.fileTree.toggle": "Alihkan pohon berkas",
"command.review.toggle": "Alihkan tinjauan",
"command.terminal.new": "Terminal baru",
"command.terminal.new.description": "Buat tab terminal baru",
"command.steps.toggle": "Alihkan langkah",
"command.steps.toggle.description": "Tampilkan atau sembunyikan langkah untuk pesan saat ini",
"command.message.previous": "Pesan sebelumnya",
"command.message.previous.description": "Pergi ke pesan pengguna sebelumnya",
"command.message.next": "Pesan berikutnya",
"command.message.next.description": "Pergi ke pesan pengguna berikutnya",
"command.model.choose": "Pilih model",
"command.model.choose.description": "Pilih model yang berbeda",
"command.mcp.toggle": "Alihkan MCP",
"command.mcp.toggle.description": "Alihkan MCP",
"command.agent.cycle": "Ganti agen",
"command.agent.cycle.description": "Beralih ke agen berikutnya",
"command.agent.cycle.reverse": "Ganti agen mundur",
"command.agent.cycle.reverse.description": "Beralih ke agen sebelumnya",
"command.model.variant.cycle": "Ganti usaha berpikir",
"command.model.variant.cycle.description": "Beralih ke tingkat usaha berikutnya",
"command.prompt.mode.shell": "Shell",
"command.prompt.mode.normal": "Prompt",
"command.permissions.autoaccept.enable": "Terima izin otomatis",
"command.permissions.autoaccept.disable": "Hentikan penerimaan izin otomatis",
"command.workspace.toggle": "Alihkan ruang kerja",
"command.workspace.toggle.description": "Aktifkan atau nonaktifkan beberapa ruang kerja di panel samping",
"command.session.undo": "Urungkan",
"command.session.undo.description": "Urungkan pesan terakhir",
"command.session.redo": "Ulangi",
"command.session.redo.description": "Ulangi pesan yang diurungkan",
"command.session.compact": "Ringkas sesi",
"command.session.compact.description": "Ringkas sesi untuk mengurangi ukuran konteks",
"command.session.fork": "Fork dari pesan",
"command.session.fork.description": "Buat sesi baru dari pesan sebelumnya",
"command.session.share": "Bagikan sesi",
"command.session.share.description": "Bagikan sesi ini dan salin URL ke papan klip",
"command.session.unshare": "Hentikan berbagi",
"command.session.unshare.description": "Hentikan berbagi sesi ini",
"palette.search.placeholder": "Cari berkas, perintah, dan sesi",
"palette.search.placeholder.home": "Cari perintah dan sesi",
"palette.empty": "Hasil tidak ditemukan",
"palette.group.commands": "Perintah",
"palette.group.files": "Berkas",
"dialog.provider.search.placeholder": "Cari penyedia",
"dialog.provider.empty": "Penyedia tidak ditemukan",
"dialog.provider.group.popular": "Populer",
"dialog.provider.group.other": "Lainnya",
"dialog.provider.custom.label": "Penyedia kustom yang kompatibel dengan OpenAI",
"dialog.provider.tag.recommended": "Direkomendasikan",
"dialog.provider.opencode.note": "Model pilihan, termasuk Claude, GPT, Gemini, dan lainnya",
"dialog.provider.opencode.tagline": "Model andal yang dioptimalkan",
"dialog.provider.opencodeGo.tagline": "Langganan terjangkau untuk semua orang",
"dialog.provider.anthropic.note": "Akses langsung ke model Claude, termasuk Pro dan Max",
"dialog.provider.copilot.note": "Model AI untuk bantuan pengodean melalui GitHub Copilot",
"dialog.provider.openai.note": "Model GPT untuk tugas AI umum yang cepat dan mumpuni",
"dialog.provider.google.note": "Model Gemini untuk respons cepat dan terstruktur",
"dialog.provider.openrouter.note": "Akses semua model yang didukung dari satu penyedia",
"dialog.provider.vercel.note": "Akses terpadu ke model AI dengan perutean cerdas",
"dialog.model.select.title": "Pilih model",
"dialog.model.search.placeholder": "Cari model",
"dialog.model.empty": "Tidak ada hasil model",
"dialog.model.manage": "Kelola model",
"dialog.model.manage.description": "Sesuaikan model mana yang muncul di pemilih model.",
"dialog.model.manage.provider.toggle": "Alihkan semua model {{provider}}",
"dialog.model.unpaid.freeModels.title": "Model gratis disediakan oleh OpenCode",
"dialog.model.unpaid.addMore.title": "Tambahkan lebih banyak model dari penyedia populer",
"dialog.model.unpaid.viewMoreProviders": "Lihat 70+ penyedia lainnya",
"dialog.provider.viewAll": "Tampilkan lebih banyak penyedia",
"provider.connect.title": "Hubungkan {{provider}}",
"provider.connect.title.anthropicProMax": "Masuk dengan Claude Pro/Max",
"provider.connect.selectMethod": "Pilih metode masuk untuk {{provider}}.",
"provider.connect.method.apiKey": "Kunci API",
"provider.connect.status.inProgress": "Otorisasi sedang berlangsung...",
"provider.connect.status.waiting": "Menunggu otorisasi...",
"provider.connect.status.failed": "Otorisasi gagal: {{error}}",
"provider.connect.apiKey.description":
"Masukkan kunci API {{provider}} untuk menghubungkan akun Anda dan gunakan model {{provider}} di OpenCode.",
"provider.connect.apiKey.label": "Kunci API {{provider}}",
"provider.connect.apiKey.placeholder": "Kunci API",
"provider.connect.apiKey.required": "Kunci API diperlukan",
"provider.connect.opencodeZen.line1":
"OpenCode Zen memberi Anda akses ke serangkaian model andal yang dioptimalkan untuk agen pengodean.",
"provider.connect.opencodeZen.line2":
"Dengan satu kunci API, Anda akan mendapatkan akses ke model seperti Claude, GPT, Gemini, GLM dan lainnya.",
"provider.connect.opencodeZen.visit.prefix": "Kunjungi ",
"provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
"provider.connect.opencodeZen.visit.suffix": " untuk mendapatkan kunci API Anda.",
"provider.connect.oauth.code.visit.prefix": "Kunjungi ",
"provider.connect.oauth.code.visit.link": "tautan ini",
"provider.connect.oauth.code.visit.suffix":
" untuk mendapatkan kode otorisasi guna menghubungkan akun Anda dan menggunakan model {{provider}} di OpenCode.",
"provider.connect.oauth.code.label": "Kode otorisasi {{method}}",
"provider.connect.oauth.code.placeholder": "Kode otorisasi",
"provider.connect.oauth.code.required": "Kode otorisasi diperlukan",
"provider.connect.oauth.code.invalid": "Kode otorisasi tidak valid",
"provider.connect.oauth.auto.visit.prefix": "Kunjungi ",
"provider.connect.oauth.auto.visit.link": "tautan ini",
"provider.connect.oauth.auto.visit.suffix":
" dan masukkan kode di bawah untuk menghubungkan akun dan menggunakan model {{provider}} di OpenCode.",
"provider.connect.oauth.auto.confirmationCode": "Kode konfirmasi",
"provider.connect.toast.connected.title": "{{provider}} terhubung",
"provider.connect.toast.connected.description": "Model {{provider}} sekarang tersedia untuk digunakan.",
"provider.custom.title": "Penyedia kustom",
"provider.custom.description.prefix": "Konfigurasikan penyedia yang kompatibel dengan OpenAI. Lihat ",
"provider.custom.description.link": "dokumen konfigurasi penyedia",
"provider.custom.description.suffix": ".",
"provider.custom.field.providerID.label": "ID Penyedia",
"provider.custom.field.providerID.placeholder": "penyediaku",
"provider.custom.field.providerID.description": "Huruf kecil, angka, tanda hubung, atau garis bawah",
"provider.custom.field.name.label": "Nama tampilan",
"provider.custom.field.name.placeholder": "Penyedia AI Saya",
"provider.custom.field.baseURL.label": "URL Dasar",
"provider.custom.field.baseURL.placeholder": "https://api.penyediaku.com/v1",
"provider.custom.field.apiKey.label": "Kunci API",
"provider.custom.field.apiKey.placeholder": "Kunci API",
"provider.custom.field.apiKey.description": "Opsional. Kosongkan jika Anda mengelola autentikasi melalui tajuk.",
"provider.custom.models.label": "Model",
"provider.custom.models.id.label": "ID",
"provider.custom.models.id.placeholder": "model-id",
"provider.custom.models.name.label": "Nama",
"provider.custom.models.name.placeholder": "Nama Tampilan",
"provider.custom.models.remove": "Hapus model",
"provider.custom.models.add": "Tambah model",
"provider.custom.headers.label": "Tajuk (opsional)",
"provider.custom.headers.key.label": "Tajuk",
"provider.custom.headers.key.placeholder": "Nama-Tajuk",
"provider.custom.headers.value.label": "Nilai",
"provider.custom.headers.value.placeholder": "nilai",
"provider.custom.headers.remove": "Hapus tajuk",
"provider.custom.headers.add": "Tambah tajuk",
"provider.custom.error.providerID.required": "ID Penyedia diperlukan",
"provider.custom.error.providerID.format": "Gunakan huruf kecil, angka, tanda hubung, atau garis bawah",
"provider.custom.error.providerID.exists": "ID penyedia tersebut sudah ada",
"provider.custom.error.name.required": "Nama tampilan diperlukan",
"provider.custom.error.baseURL.required": "URL Dasar diperlukan",
"provider.custom.error.baseURL.format": "Harus dimulai dengan http:// atau https://",
"provider.custom.error.required": "Diperlukan",
"provider.custom.error.duplicate": "Duplikat",
"provider.disconnect.toast.disconnected.title": "{{provider}} terputus",
"provider.disconnect.toast.disconnected.description": "Model {{provider}} tidak lagi tersedia.",
"model.tag.free": "Gratis",
"model.tag.latest": "Terbaru",
"model.provider.anthropic": "Anthropic",
"model.provider.openai": "OpenAI",
"model.provider.google": "Google",
"model.provider.xai": "xAI",
"model.provider.meta": "Meta",
"model.input.text": "teks",
"model.input.image": "gambar",
"model.input.audio": "audio",
"model.input.video": "video",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Mengizinkan: {{inputs}}",
"model.tooltip.context.label": "Konteks",
"model.tooltip.inputs": "Masukan",
"model.tooltip.model": "Model",
"model.tooltip.provider": "Penyedia",
"model.tooltip.reasoning": "Penalaran",
"model.tooltip.reasoning.allowed": "Mengizinkan penalaran",
"model.tooltip.reasoning.none": "Tanpa penalaran",
"model.tooltip.context": "Batas konteks {{limit}}",
"common.search.placeholder": "Cari",
"common.goBack": "Navigasi mundur",
"common.goForward": "Navigasi maju",
"common.loading": "Memuat",
"common.loading.ellipsis": "...",
"common.cancel": "Batal",
"common.clear": "Bersihkan",
"common.open": "Buka",
"common.connect": "Hubungkan",
"common.disconnect": "Putuskan",
"common.continue": "Lanjutkan",
"common.submit": "Kirim",
"common.save": "Simpan",
"common.saving": "Menyimpan...",
"common.default": "Bawaan",
"common.attachment": "lampiran",
"prompt.placeholder.shell": "Masukkan perintah shell... {{example}}",
"prompt.placeholder.normal": 'Tanyakan apa saja... "{{example}}"',
"prompt.placeholder.simple": "Tanyakan apa saja...",
"prompt.placeholder.summarizeComments": "Ringkas komentar…",
"prompt.placeholder.summarizeComment": "Ringkas komentar…",
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "esc untuk keluar",
"session.child.promptDisabled": "Sesi subagen tidak dapat diberi prompt.",
"session.child.backToParent": "Kembali ke sesi utama.",
"prompt.example.1": "Perbaiki TODO di basis kode",
"prompt.example.2": "Apa tumpukan teknologi proyek ini?",
"prompt.example.3": "Perbaiki tes yang rusak",
"prompt.example.4": "Jelaskan cara kerja autentikasi",
"prompt.example.5": "Temukan dan perbaiki kerentanan keamanan",
"prompt.example.6": "Tambahkan pengujian unit untuk layanan pengguna",
"prompt.example.7": "Refaktor fungsi ini agar lebih mudah dibaca",
"prompt.example.8": "Apa arti kesalahan ini?",
"prompt.example.9": "Bantu saya mengawakutu masalah ini",
"prompt.example.10": "Hasilkan dokumentasi API",
"prompt.example.11": "Optimalkan kueri basis data",
"prompt.example.12": "Tambahkan validasi masukan",
"prompt.example.13": "Buat komponen baru untuk...",
"prompt.example.14": "Bagaimana cara menerapkan proyek ini?",
"prompt.example.15": "Tinjau kode saya untuk praktik terbaik",
"prompt.example.16": "Tambahkan penanganan kesalahan ke fungsi ini",
"prompt.example.17": "Jelaskan pola regex ini",
"prompt.example.18": "Konversi ini ke TypeScript",
"prompt.example.19": "Tambahkan pencatatan log di seluruh basis kode",
"prompt.example.20": "Dependensi mana yang sudah kedaluwarsa?",
"prompt.example.21": "Bantu saya menulis skrip migrasi",
"prompt.example.22": "Terapkan penembolokan untuk titik akhir ini",
"prompt.example.23": "Tambahkan paginasi ke daftar ini",
"prompt.example.24": "Buat perintah CLI untuk...",
"prompt.example.25": "Bagaimana cara kerja variabel lingkungan di sini?",
"prompt.popover.emptyResults": "Tidak ada hasil yang cocok",
"prompt.popover.emptyCommands": "Tidak ada perintah yang cocok",
"prompt.dropzone.label": "Letakkan gambar, PDF, atau berkas teks di sini",
"prompt.dropzone.file.label": "Letakkan untuk menyebut berkas dengan @",
"prompt.slash.badge.custom": "kustom",
"prompt.slash.badge.skill": "keahlian",
"prompt.slash.badge.mcp": "mcp",
"prompt.context.active": "aktif",
"prompt.context.includeActiveFile": "Sertakan berkas aktif",
"prompt.context.removeActiveFile": "Hapus berkas aktif dari konteks",
"prompt.context.removeFile": "Hapus berkas dari konteks",
"prompt.action.attachFile": "Tambah berkas",
"prompt.menu.addImagesAndFiles": "Tambah berkas dan lainnya",
"prompt.menu.imagesAndFiles": "Gambar dan berkas",
"prompt.menu.commands": "Perintah",
"prompt.menu.context": "Konteks",
"prompt.menu.shellCommand": "Perintah shell",
"prompt.attachment.remove": "Hapus lampiran",
"prompt.action.send": "Kirim",
"prompt.action.stop": "Hentikan",
"prompt.toast.pasteUnsupported.title": "Lampiran tidak didukung",
"prompt.toast.pasteUnsupported.description": "Hanya gambar, PDF, atau berkas teks yang dapat dilampirkan di sini.",
"prompt.toast.attachmentDuplicate.title": "Berkas ini sudah diunggah",
"prompt.toast.modelAgentRequired.title": "Pilih agen dan model",
"prompt.toast.modelAgentRequired.description": "Pilih agen dan model sebelum mengirim prompt.",
"prompt.toast.worktreeCreateFailed.title": "Gagal membuat worktree",
"prompt.toast.sessionCreateFailed.title": "Gagal membuat sesi",
"prompt.toast.shellSendFailed.title": "Gagal mengirim perintah shell",
"prompt.toast.commandSendFailed.title": "Gagal mengirim perintah",
"prompt.toast.promptSendFailed.title": "Gagal mengirim prompt",
"prompt.toast.promptSendFailed.description": "Tidak dapat mengambil sesi",
"dialog.mcp.title": "MCP",
"dialog.mcp.description": "{{enabled}} dari {{total}} diaktifkan",
"dialog.mcp.empty": "Tidak ada MCP yang dikonfigurasi",
"dialog.lsp.empty": "LSP terdeteksi otomatis dari jenis berkas",
"dialog.plugins.empty": "Plugin dikonfigurasi di opencode.json",
"mcp.status.connected": "terhubung",
"mcp.status.failed": "gagal",
"mcp.status.needs_auth": "perlu autentikasi",
"mcp.status.disabled": "nonaktif",
"mcp.auth.clickToAuthenticate": "Klik untuk mengautentikasi",
"dialog.fork.empty": "Tidak ada pesan yang dapat dicabangkan",
"dialog.directory.search.placeholder": "Cari folder",
"dialog.directory.empty": "Folder tidak ditemukan",
"dialog.directory.action.selectFile": "Pilih berkas",
"dialog.directory.action.selectFolder": "Pilih folder",
"dialog.directory.root": "Akar",
"dialog.directory.parent": "Induk",
"dialog.directory.readError": "Tidak dapat membaca folder ini",
"app.server.unreachable": "Tidak dapat menjangkau {{server}}",
"app.server.retrying": "Mencoba ulang secara otomatis...",
"app.server.otherServers": "Server lainnya",
"dialog.server.title": "Server",
"dialog.server.description": "Ganti server OpenCode mana yang terhubung dengan aplikasi ini.",
"dialog.server.search.placeholder": "Cari server",
"dialog.server.empty": "Belum ada server",
"dialog.server.add.title": "Tambah server",
"dialog.server.add.url": "Alamat server",
"dialog.server.add.placeholder": "http://localhost:4096",
"dialog.server.add.error": "Tidak dapat terhubung ke server",
"dialog.server.add.checking": "Memeriksa...",
"dialog.server.add.button": "Tambah server",
"dialog.server.add.name": "Nama server (opsional)",
"dialog.server.add.namePlaceholder": "Localhost",
"dialog.server.add.username": "Nama pengguna (opsional)",
"dialog.server.add.usernamePlaceholder": "nama pengguna",
"dialog.server.add.password": "Kata sandi (opsional)",
"dialog.server.add.passwordPlaceholder": "kata sandi",
"dialog.server.edit.title": "Sunting server",
"dialog.server.default.title": "Server bawaan",
"dialog.server.default.description":
"Hubungkan ke server ini saat aplikasi diluncurkan, alih-alih memulai server lokal. Memerlukan mulai ulang.",
"dialog.server.default.none": "Tidak ada server dipilih",
"dialog.server.default.set": "Tetapkan server saat ini sebagai bawaan",
"dialog.server.default.clear": "Hapus",
"dialog.server.action.remove": "Hapus server",
"dialog.server.menu.edit": "Sunting",
"dialog.server.menu.default": "Tetapkan sebagai bawaan",
"dialog.server.menu.defaultRemove": "Hapus bawaan",
"dialog.server.menu.delete": "Hapus",
"dialog.server.current": "Server Saat Ini",
"dialog.server.status.default": "Bawaan",
"wsl.server.add": "Tambah server WSL",
"wsl.server.addShort": "Tambah WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "Server WSL",
"wsl.server.retryStart": "Coba mulai ulang",
"wsl.server.updating": "Memperbarui...",
"wsl.onboarding.step.distro": "Pilih distro",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "Memeriksa WSL...",
"wsl.onboarding.restartRequired": "Windows perlu dimulai ulang untuk menyelesaikan instalasi WSL.",
"wsl.onboarding.ready": "WSL siap.",
"wsl.onboarding.required": "WSL diperlukan untuk melanjutkan.",
"wsl.onboarding.checkingDistros": "Memeriksa distro...",
"wsl.onboarding.installingDistro": "Menginstal {{distro}}...",
"wsl.onboarding.checkingDistro": "Memeriksa {{distro}}...",
"wsl.onboarding.listingDistros": "Memuat daftar distro...",
"wsl.onboarding.distroReady": "{{distro}} siap.",
"wsl.onboarding.distroNotInstalled": "{{distro}} belum terinstal.",
"wsl.onboarding.openDistroOnce": "Buka {{distro}} sekali untuk menyelesaikan pengaturan.",
"wsl.onboarding.finishingDistro": "Menyelesaikan pengaturan untuk {{distro}}.",
"wsl.onboarding.pickDistro": "Pilih distro atau instal salah satu di bawah.",
"wsl.onboarding.checkingOpencode": "Memeriksa OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "Memeriksa OpenCode di {{distro}}...",
"wsl.onboarding.updatingOpencode": "Memperbarui OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "Memperbarui OpenCode di {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "Perbarui OpenCode di {{distro}}.",
"wsl.onboarding.updateOpencode": "Perbarui OpenCode",
"wsl.onboarding.opencodeReadyIn": "OpenCode siap di {{distro}}.",
"wsl.onboarding.opencodeReady": "OpenCode siap.",
"wsl.onboarding.installOpencodeIn": "Instal OpenCode di {{distro}}.",
"wsl.onboarding.installOpencode": "Instal OpenCode",
"wsl.onboarding.chooseDistroFirst": "Pilih distro terlebih dahulu.",
"wsl.onboarding.loadFailed": "Gagal memuat keadaan WSL.",
"wsl.onboarding.loading": "Memuat...",
"wsl.onboarding.installedDistros": "Distro terinstal",
"wsl.onboarding.checkAgain": "Periksa lagi",
"wsl.onboarding.distroStatus.ready": "Siap",
"wsl.onboarding.distroStatus.checking": "Memeriksa...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode belum terinstal",
"wsl.onboarding.distroStatus.missingTools": "bash dan curl tidak tersedia",
"wsl.onboarding.distroStatus.unsupported": "Tidak didukung · Gunakan WSL 2",
"wsl.onboarding.needAnotherDistro": "Perlu distro lain?",
"wsl.onboarding.needAnotherDistroHint": "Instal distribusi Linux dari katalog WSL",
"wsl.onboarding.wslNotInstalled.title": "WSL belum terinstal",
"wsl.onboarding.wslNotInstalled.description":
"WSL (Windows Subsystem for Linux) diperlukan sebelum OpenCode dapat menambahkan server WSL",
"wsl.onboarding.wslUnavailable.title": "WSL tidak tersedia",
"wsl.onboarding.wslUnavailable.description": "OpenCode tidak dapat memverifikasi WSL di komputer ini.",
"wsl.onboarding.installWsl": "Instal WSL",
"wsl.onboarding.windowsRestartRequired":
"Mulai ulang Windows untuk menyelesaikan instalasi WSL, lalu buka kembali OpenCode.",
"wsl.onboarding.next": "Berikutnya",
"wsl.onboarding.refresh": "Muat ulang",
"wsl.onboarding.allDistrosAdded": "Semua distro yang terinstal sudah ditambahkan.",
"wsl.onboarding.noDistros": "Belum ada distro terdeteksi.",
"wsl.onboarding.install": "Instal",
"wsl.onboarding.installing": "Menginstal...",
"wsl.onboarding.installDistro": "Instal distro",
"wsl.onboarding.searchDistros": "Cari distro",
"wsl.onboarding.wsl2Required": "WSL 2 diperlukan.",
"wsl.onboarding.toolsRequired": "Distro ini memerlukan bash dan curl.",
"wsl.onboarding.openTerminal": "Buka terminal",
"wsl.onboarding.path": "Jalur: {{path}}",
"wsl.onboarding.notFound": "tidak ditemukan",
"wsl.onboarding.version": "Versi: {{version}}",
"wsl.onboarding.unknown": "tidak diketahui",
"wsl.onboarding.desktopVersion": "desktop {{version}}",
"wsl.onboarding.versionMismatch": "Versi terinstal tidak cocok dengan versi aplikasi desktop.",
"wsl.onboarding.adding": "Menambahkan...",
"server.row.noUsername": "tanpa nama pengguna",
"dialog.project.edit.title": "Sunting proyek",
"dialog.project.edit.name": "Nama",
"dialog.project.edit.icon": "Ikon",
"dialog.project.edit.icon.alt": "Ikon proyek",
"dialog.project.edit.icon.hint": "Klik atau seret gambar",
"dialog.project.edit.icon.recommended": "Disarankan: 128x128px",
"dialog.project.edit.color": "Warna",
"dialog.project.edit.color.select": "Pilih warna {{color}}",
"dialog.project.edit.worktree.startup": "Skrip awal ruang kerja",
"dialog.project.edit.worktree.startup.description": "Berjalan setelah membuat ruang kerja (worktree) baru.",
"dialog.project.edit.worktree.startup.placeholder": "mis. bun install",
"dialog.releaseNotes.action.getStarted": "Mulai",
"dialog.releaseNotes.action.next": "Berikutnya",
"dialog.releaseNotes.action.hideFuture": "Jangan tampilkan ini di masa depan",
"dialog.releaseNotes.media.alt": "Pratinjau rilis",
"context.breakdown.title": "Rincian Konteks",
"context.breakdown.note": 'Perkiraan rincian token masukan. "Lainnya" mencakup definisi alat dan beban tambahan.',
"context.breakdown.system": "Sistem",
"context.breakdown.user": "Pengguna",
"context.breakdown.assistant": "Asisten",
"context.breakdown.tool": "Panggilan Alat",
"context.breakdown.other": "Lainnya",
"context.systemPrompt.title": "Prompt Sistem",
"context.rawMessages.title": "Pesan mentah",
"context.stats.session": "Sesi",
"context.stats.messages": "Pesan",
"context.stats.provider": "Penyedia",
"context.stats.model": "Model",
"context.stats.limit": "Batas Konteks",
"context.stats.totalTokens": "Total Token",
"context.stats.usage": "Penggunaan",
"context.stats.inputTokens": "Token Masukan",
"context.stats.outputTokens": "Token Keluaran",
"context.stats.reasoningTokens": "Token Penalaran",
"context.stats.cacheTokens": "Token Tembolok (baca/tulis)",
"context.stats.userMessages": "Pesan Pengguna",
"context.stats.assistantMessages": "Pesan Asisten",
"context.stats.totalCost": "Total Biaya",
"context.stats.sessionCreated": "Sesi Dibuat",
"context.stats.lastActivity": "Aktivitas Terakhir",
"context.usage.tokens": "Token",
"context.usage.usage": "Penggunaan",
"context.usage.cost": "Biaya",
"context.usage.clickToView": "Klik untuk melihat konteks",
"context.usage.view": "Lihat penggunaan konteks",
"language.en": "English",
"language.zh": "简体中文",
"language.zht": "繁體中文",
"language.ko": "한국어",
"language.de": "Deutsch",
"language.es": "Español",
"language.fr": "Français",
"language.da": "Dansk",
"language.ja": "日本語",
"language.pl": "Polski",
"language.ru": "Русский",
"language.ar": "العربية",
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
"toast.language.title": "Bahasa",
"toast.language.description": "Beralih ke {{language}}",
"toast.theme.title": "Tema diganti",
"toast.scheme.title": "Skema warna",
"toast.workspace.enabled.title": "Ruang kerja diaktifkan",
"toast.workspace.enabled.description": "Beberapa worktree sekarang ditampilkan di panel samping",
"toast.workspace.disabled.title": "Ruang kerja dinonaktifkan",
"toast.workspace.disabled.description": "Hanya worktree utama yang ditampilkan di panel samping",
"toast.permissions.autoaccept.on.title": "Menerima izin secara otomatis",
"toast.permissions.autoaccept.on.description": "Permintaan izin akan disetujui secara otomatis",
"toast.permissions.autoaccept.off.title": "Berhenti menerima izin otomatis",
"toast.permissions.autoaccept.off.description": "Permintaan izin akan memerlukan persetujuan",
"toast.model.none.title": "Tidak ada model dipilih",
"toast.model.none.description": "Hubungkan penyedia untuk meringkas sesi ini",
"toast.file.loadFailed.title": "Gagal memuat berkas",
"toast.file.listFailed.title": "Gagal mendaftar berkas",
"toast.context.noLineSelection.title": "Tidak ada pilihan baris",
"toast.context.noLineSelection.description": "Pilih rentang baris di tab berkas terlebih dahulu.",
"toast.session.share.copyFailed.title": "Gagal menyalin URL ke papan klip",
"toast.session.share.success.title": "Sesi dibagikan",
"toast.session.share.success.description": "URL berbagi disalin ke papan klip!",
"toast.session.share.failed.title": "Gagal membagikan sesi",
"toast.session.share.failed.description": "Terjadi kesalahan saat membagikan sesi",
"toast.session.unshare.success.title": "Berbagi sesi dihentikan",
"toast.session.unshare.success.description": "Berbagi sesi berhasil dihentikan!",
"toast.session.unshare.failed.title": "Gagal menghentikan berbagi sesi",
"toast.session.unshare.failed.description": "Terjadi kesalahan saat menghentikan berbagi sesi",
"toast.session.listFailed.title": "Gagal memuat sesi untuk {{project}}",
"toast.project.reloadFailed.title": "Gagal memuat ulang {{project}}",
"toast.update.title": "Pembaruan tersedia",
"toast.update.description": "Versi baru OpenCode ({{version}}) sekarang tersedia untuk diinstal.",
"toast.update.action.installRestart": "Instal dan mulai ulang",
"toast.update.action.notYet": "Nanti saja",
"error.page.title": "Terjadi kesalahan",
"error.page.description": "Terjadi kesalahan saat memuat aplikasi.",
"error.page.description.localServerStartup": "Terjadi kesalahan saat memulai server lokal.",
"error.page.details.label": "Detail Kesalahan",
"error.page.action.restart": "Mulai Ulang",
"error.page.action.report": "Laporkan Kesalahan",
"error.page.action.reported": "Kesalahan Dilaporkan",
"error.page.action.exportLogs": "Ekspor Log",
"error.page.action.checking": "Memeriksa...",
"error.page.action.checkUpdates": "Periksa pembaruan",
"error.page.action.updateTo": "Perbarui ke {{version}}",
"error.page.circular": "[Sirkular]",
"error.page.report.prefix": "Harap laporkan kesalahan ini ke tim OpenCode",
"error.page.report.discord": "di Discord",
"error.page.version": "Versi: {{version}}",
"error.dev.rootNotFound":
"Elemen root tidak ditemukan. Apakah Anda lupa menambahkannya ke index.html? Atau mungkin atribut id salah eja?",
"error.serverSync.connectFailed": "Tidak dapat terhubung ke server. Apakah ada server yang berjalan di `{{url}}`?",
"error.serverSDK.noServerAvailable": "Tidak ada server tersedia",
"error.serverSDK.serverNotAvailable": "Server tidak tersedia",
"error.childStore.persistedCacheCreateFailed": "Gagal membuat tembolok persisten",
"error.childStore.persistedProjectMetadataCreateFailed": "Gagal membuat metadata proyek persisten",
"error.childStore.persistedProjectIconCreateFailed": "Gagal membuat ikon proyek persisten",
"error.childStore.storeCreateFailed": "Gagal membuat penyimpanan",
"directory.error.invalidUrl": "Direktori tidak valid di URL.",
"error.chain.unknown": "Kesalahan tidak diketahui",
"error.server.invalidConfiguration": "Konfigurasi tidak valid",
"error.chain.causedBy": "Disebabkan oleh:",
"error.chain.apiError": "Kesalahan API",
"error.chain.status": "Status: {{status}}",
"error.chain.retryable": "Dapat dicoba ulang: {{retryable}}",
"error.chain.responseBody": "Isi respons:\n{{body}}",
"error.chain.didYouMean": "Maksud Anda: {{suggestions}}",
"error.chain.modelNotFound": "Model tidak ditemukan: {{provider}}/{{model}}",
"error.chain.checkConfig": "Periksa nama penyedia/model di konfigurasi Anda (opencode.json)",
"error.chain.mcpFailed": 'Server MCP "{{name}}" gagal. Catatan: OpenCode belum mendukung autentikasi MCP.',
"error.chain.providerAuthFailed": "Autentikasi penyedia gagal ({{provider}}): {{message}}",
"error.chain.providerInitFailed":
'Gagal menginisialisasi penyedia "{{provider}}". Periksa kredensial dan konfigurasi.',
"error.chain.configJsonInvalid": "Berkas konfigurasi di {{path}} bukan JSON(C) yang valid",
"error.chain.configJsonInvalidWithMessage": "Berkas konfigurasi di {{path}} bukan JSON(C) yang valid: {{message}}",
"error.chain.configDirectoryTypo":
'Direktori "{{dir}}" di {{path}} tidak valid. Ganti nama direktori menjadi "{{suggestion}}" atau hapus. Ini adalah kesalahan ketik yang umum.',
"error.chain.configFrontmatterError": "Gagal mengurai frontmatter di {{path}}:\n{{message}}",
"error.chain.configInvalid": "Berkas konfigurasi di {{path}} tidak valid",
"error.chain.configInvalidWithMessage": "Berkas konfigurasi di {{path}} tidak valid: {{message}}",
"notification.permission.title": "Izin diperlukan",
"notification.permission.description": "{{sessionTitle}} di {{projectName}} memerlukan izin",
"notification.question.title": "Pertanyaan",
"notification.question.description": "{{sessionTitle}} di {{projectName}} memiliki pertanyaan",
"notification.action.goToSession": "Pergi ke sesi",
"notification.session.responseReady.title": "Respons siap",
"notification.session.error.title": "Kesalahan sesi",
"notification.session.error.fallbackDescription": "Terjadi kesalahan",
"home.recentProjects": "Proyek terbaru",
"home.empty.title": "Tidak ada proyek terbaru",
"home.empty.description": "Mulai dengan membuka proyek lokal",
"home.title": "Beranda",
"home.projects": "Proyek",
"home.project.add": "Tambah proyek",
"home.recentlyClosed": "Baru saja ditutup",
"home.server.collapse": "Ciutkan proyek server",
"home.server.expand": "Bentangkan proyek server",
"home.sessions.search.placeholder": "Cari sesi",
"home.sessions.search.placeholder.scoped": "Cari sesi di {{scope}}",
"home.sessions.search.sessions": "Sesi",
"home.sessions.search.noResults": "Tidak ada sesi ditemukan untuk {{query}}",
"home.sessions.empty": "Belum ada apa pun di sini",
"home.sessions.empty.description": "Buat sesi untuk memulai",
"home.sessions.group.today": "Hari ini",
"home.sessions.group.yesterday": "Kemarin",
"home.sessions.group.older": "Lebih lama",
"home.providerTip":
"Hubungkan ke 75+ penyedia untuk menggunakan model lain, termasuk Claude, GPT, Gemini, dan lainnya",
"session.tab.session": "Sesi",
"session.tab.review": "Tinjauan",
"session.tab.context": "Konteks",
"session.tab.unknown": "Sesi Tidak Dikenal",
"session.panel.reviewAndFiles": "Tinjauan dan berkas",
"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.error.serverConnection": "Tidak dapat terhubung ke server ini",
"session.review.filesChanged": "{{count}} Berkas Berubah",
"session.review.change.one": "Perubahan",
"session.review.change.other": "Perubahan",
"session.review.loadingChanges": "Memuat perubahan...",
"session.review.empty": "Belum ada perubahan di sesi ini",
"session.review.noVcs": "Tidak ada sistem kontrol versi Git yang terdeteksi, perubahan tidak ditampilkan",
"session.review.noVcs.createGit.title": "Buat repositori Git",
"session.review.noVcs.createGit.description": "Lacak, tinjau, dan urungkan perubahan di proyek ini",
"session.review.noVcs.createGit.actionLoading": "Membuat repositori Git...",
"session.review.noVcs.createGit.action": "Buat repositori Git",
"session.review.noSnapshot":
"Pelacakan snapshot dinonaktifkan di konfigurasi, sehingga perubahan sesi tidak tersedia",
"session.review.noChanges": "Tidak ada perubahan",
"session.review.noUncommittedChanges": "Belum ada perubahan yang belum dikomit",
"session.review.noBranchChanges": "Belum ada perubahan cabang",
"session.files.selectToOpen": "Pilih berkas untuk dibuka",
"session.files.all": "Semua berkas",
"session.files.empty": "Tidak ada berkas",
"session.files.binaryContent": "Berkas biner (konten tidak dapat ditampilkan)",
"session.messages.renderEarlier": "Tampilkan pesan sebelumnya",
"session.messages.loadingEarlier": "Memuat pesan sebelumnya...",
"session.messages.loadEarlier": "Muat pesan sebelumnya",
"session.messages.loading": "Memuat pesan...",
"session.messages.jumpToLatest": "Lompat ke pesan terbaru",
"session.context.addToContext": "Tambahkan {{selection}} ke konteks",
"session.todo.title": "Tugas",
"session.todo.collapse": "Ciutkan",
"session.todo.expand": "Bentangkan",
"session.todo.progress": "{{done}} dari {{total}} tugas selesai",
"session.question.progress": "{{current}} dari {{total}} pertanyaan",
"session.question.minimize": "Minimalkan pertanyaan",
"session.question.restore": "Pulihkan pertanyaan",
"session.question.pending.one": "{{count}} pertanyaan tertunda",
"session.question.pending.other": "{{count}} pertanyaan tertunda",
"session.followupDock.summary.one": "{{count}} pesan dalam antrean",
"session.followupDock.summary.other": "{{count}} pesan dalam antrean",
"session.followupDock.sendNow": "Kirim sekarang",
"session.followupDock.edit": "Sunting",
"session.followupDock.collapse": "Ciutkan pesan dalam antrean",
"session.followupDock.expand": "Bentangkan pesan dalam antrean",
"session.revertDock.summary.one": "{{count}} pesan diurungkan",
"session.revertDock.summary.other": "{{count}} pesan diurungkan",
"session.revertDock.collapse": "Ciutkan pesan yang diurungkan",
"session.revertDock.expand": "Bentangkan pesan yang diurungkan",
"session.revertDock.restore": "Pulihkan pesan",
"session.new.title": "Buat apa saja",
"session.new.project.new": "Proyek baru",
"session.new.project.search": "Cari proyek",
"session.new.project.add": "Tambah proyek",
"session.new.worktree.main": "Cabang utama",
"session.new.worktree.mainWithBranch": "Cabang utama ({{branch}})",
"session.new.worktree.create": "Buat worktree baru",
"session.new.workspace.runIn": "Jalankan sesi dalam",
"session.new.workspace.triggerLocal": "Lokal",
"session.new.workspace.local": "Repositori lokal",
"session.new.workspace.existing": "Ruang kerja…",
"session.new.git.none": "Tanpa Git",
"session.new.lastModified": "Terakhir diubah",
"session.header.search.placeholder": "Cari {{project}}",
"session.header.searchFiles": "Cari berkas",
"session.header.openIn": "Buka di",
"session.header.open.action": "Buka {{app}}",
"session.header.open.ariaLabel": "Buka di {{app}}",
"session.header.open.menu": "Opsi buka",
"session.header.open.copyPath": "Salin jalur",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "File Explorer",
"session.header.open.fileManager": "File Manager",
"session.header.reveal.finder": "Tampilkan di Finder",
"session.header.reveal.fileExplorer": "Tampilkan di File Explorer",
"session.header.reveal.containingFolder": "Buka folder yang memuatnya",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
"session.header.open.app.zed": "Zed",
"session.header.open.app.textmate": "TextMate",
"session.header.open.app.antigravity": "Antigravity",
"session.header.open.app.terminal": "Terminal",
"session.header.open.app.iterm2": "iTerm2",
"session.header.open.app.ghostty": "Ghostty",
"session.header.open.app.warp": "Warp",
"session.header.open.app.xcode": "Xcode",
"session.header.open.app.androidStudio": "Android Studio",
"session.header.open.app.sublimeText": "Sublime Text",
"session.header.open.app.powershell": "PowerShell",
"status.popover.trigger": "Status",
"status.popover.ariaLabel": "Konfigurasi server",
"status.popover.tab.servers": "Server",
"status.popover.tab.mcp": "MCP",
"status.popover.tab.lsp": "LSP",
"status.popover.tab.plugins": "Plugin",
"status.popover.action.manageServers": "Kelola server",
"session.share.popover.title": "Publikasikan di web",
"session.share.popover.description.shared": "Sesi ini publik di web. Siapa pun dengan tautan dapat mengaksesnya.",
"session.share.popover.description.unshared":
"Bagikan sesi secara publik di web. Siapa pun dengan tautan dapat mengaksesnya.",
"session.share.action.share": "Bagikan",
"session.share.action.publish": "Publikasikan",
"session.share.action.publishing": "Mempublikasikan...",
"session.share.action.unpublish": "Batalkan publikasi",
"session.share.action.unpublishing": "Membatalkan publikasi...",
"session.share.action.view": "Lihat",
"session.share.copy.copied": "Tersalin",
"session.share.copy.copyLink": "Salin tautan",
"lsp.tooltip.none": "Tidak ada server LSP",
"lsp.label.connected": "{{count}} LSP",
"prompt.loading": "Memuat prompt...",
"terminal.loading": "Memuat terminal...",
"terminal.title": "Terminal",
"terminal.title.numbered": "Terminal {{number}}",
"terminal.close": "Tutup terminal",
"terminal.connectionLost.title": "Koneksi Terputus",
"terminal.connectionLost.abnormalClose": "WebSocket ditutup secara tidak normal: {{code}}",
"terminal.connectionLost.description": "Koneksi terminal terputus. Ini bisa terjadi saat server dimulai ulang.",
"common.closeTab": "Tutup tab",
"common.dismiss": "Tutup",
"common.moreCountSuffix": " (+{{count}} lainnya)",
"common.requestFailed": "Permintaan gagal",
"common.moreOptions": "Opsi lainnya",
"common.learnMore": "Pelajari lebih lanjut",
"common.rename": "Ganti nama",
"common.reset": "Atur ulang",
"common.archive": "Arsipkan",
"common.delete": "Hapus",
"common.close": "Tutup",
"common.edit": "Sunting",
"common.loadMore": "Muat lebih banyak",
"common.key.esc": "ESC",
"common.key.ctrl": "Ctrl",
"common.key.alt": "Alt",
"common.key.shift": "Shift",
"common.key.meta": "Meta",
"common.key.space": "Spasi",
"common.key.backspace": "Backspace",
"common.key.enter": "Enter",
"common.key.tab": "Tab",
"common.key.delete": "Delete",
"common.key.home": "Home",
"common.key.end": "End",
"common.key.pageUp": "Page Up",
"common.key.pageDown": "Page Down",
"common.key.insert": "Insert",
"common.unknown": "tidak diketahui",
"common.time.justNow": "Baru saja",
"common.time.minutesAgo.short": "{{count}}m lalu",
"common.time.hoursAgo.short": "{{count}}j lalu",
"common.time.daysAgo.short": "{{count}}h lalu",
"sidebar.menu.toggle": "Alihkan menu",
"sidebar.nav.projectsAndSessions": "Proyek dan sesi",
"sidebar.settings": "Pengaturan",
"sidebar.help": "Bantuan",
"sidebar.workspaces.enable": "Aktifkan ruang kerja",
"sidebar.workspaces.disable": "Nonaktifkan ruang kerja",
"sidebar.gettingStarted.title": "Memulai",
"sidebar.gettingStarted.line1": "OpenCode menyertakan model gratis sehingga Anda dapat memulai dengan segera.",
"sidebar.gettingStarted.line2":
"Hubungkan penyedia mana pun untuk menggunakan model, termasuk Claude, GPT, Gemini, dll.",
"sidebar.project.recentSessions": "Sesi terbaru",
"sidebar.project.viewAllSessions": "Lihat semua sesi",
"sidebar.project.clearNotifications": "Hapus notifikasi",
"sidebar.empty.title": "Tidak ada proyek terbuka",
"sidebar.empty.description": "Buka proyek untuk memulai",
"debugBar.ariaLabel": "Diagnostik kinerja pengembangan",
"debugBar.na": "n/a",
"debugBar.nav.label": "NAV",
"debugBar.nav.tip":
"Transisi rute terakhir yang mencapai halaman sesi, diukur sejak perute dimulai hingga render pertama setelah stabil.",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "Frame per detik yang dihitung secara bergulir selama 5 detik terakhir.",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "Waktu frame terburuk selama 5 detik terakhir.",
"debugBar.jank.label": "JANK",
"debugBar.jank.tip": "Frame di atas 32ms dalam 5 detik terakhir.",
"debugBar.long.label": "LONG",
"debugBar.long.tip": "Waktu terblokir dan jumlah tugas panjang dalam 5 detik terakhir. Tugas maks: {{max}}.",
"debugBar.delay.label": "DELAY",
"debugBar.delay.tip": "Penundaan masukan terburuk yang diamati dalam 5 detik terakhir.",
"debugBar.inp.label": "INP",
"debugBar.inp.tip": "Perkiraan durasi interaksi selama 5 detik terakhir. Ini mirip INP, bukan INP Web Vitals resmi.",
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "Pergeseran tata letak kumulatif untuk masa pakai aplikasi saat ini.",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "Heap JS terpakai vs batas heap. Khusus Chromium.",
"debugBar.mem.tip": "Heap JS terpakai vs batas heap. {{used}} dari {{limit}}.",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "Desktop",
"settings.section.server": "Server",
"settings.tab.general": "Umum",
"settings.tab.shortcuts": "Pintasan",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "Integrasi WSL",
"settings.desktop.wsl.description": "Jalankan server OpenCode di dalam WSL di Windows.",
"settings.general.section.appearance": "Tampilan",
"settings.general.section.advanced": "Lanjutan",
"settings.general.section.notifications": "Notifikasi sistem",
"settings.general.section.updates": "Pembaruan",
"settings.general.section.sounds": "Efek suara",
"settings.general.section.feed": "Umpan",
"settings.general.section.display": "Tampilan",
"settings.general.row.language.title": "Bahasa",
"settings.general.row.language.description": "Ubah bahasa tampilan untuk OpenCode",
"settings.general.row.shell.title": "Shell terminal",
"settings.general.row.shell.description": "Shell yang digunakan oleh terminal dan alat agen",
"settings.general.row.shell.autoDefault": "Otomatis (Bawaan)",
"settings.general.row.shell.terminalOnly": "hanya terminal",
"settings.general.row.appearance.title": "Tampilan",
"settings.general.row.appearance.description": "Sesuaikan tampilan OpenCode di perangkat Anda",
"settings.general.row.colorScheme.title": "Skema warna",
"settings.general.row.colorScheme.description": "Pilih apakah OpenCode mengikuti tema sistem, terang, atau gelap",
"settings.general.row.theme.title": "Tema",
"settings.general.row.theme.description": "Sesuaikan tema OpenCode.",
"settings.general.row.font.title": "Font kode",
"settings.general.row.font.description": "Sesuaikan font yang digunakan di blok kode",
"settings.general.row.terminalFont.title": "Font terminal",
"settings.general.row.terminalFont.description": "Sesuaikan font yang digunakan di terminal",
"settings.general.row.uiFont.title": "Font UI",
"settings.general.row.uiFont.description": "Sesuaikan font yang digunakan di seluruh antarmuka",
"settings.general.row.followup.title": "Perilaku lanjutan",
"settings.general.row.followup.description":
"Pilih apakah prompt lanjutan segera mengarahkan atau menunggu dalam antrean",
"settings.general.row.followup.option.queue": "Antrean",
"settings.general.row.followup.option.steer": "Arahkan",
"settings.general.row.showFileTree.title": "Pohon berkas",
"settings.general.row.showFileTree.description": "Tampilkan panel pohon berkas di sesi",
"settings.general.row.showNavigation.title": "Kontrol navigasi",
"settings.general.row.showNavigation.description": "Tampilkan tombol mundur dan maju di bilah judul desktop",
"settings.general.row.showSearch.title": "Palet perintah",
"settings.general.row.showSearch.description": "Tampilkan tombol pencarian dan palet perintah di bilah judul",
"settings.general.row.showTerminal.title": "Terminal",
"settings.general.row.showTerminal.description": "Tampilkan tombol terminal di bilah judul desktop",
"settings.general.row.showStatus.title": "Status server",
"settings.general.row.showStatus.description": "Tampilkan tombol status server di bilah judul",
"settings.general.row.mobileTitlebarBottom.title": "Navigasi bawah",
"settings.general.row.mobileTitlebarBottom.description":
"Tempatkan bilah judul dan tab sesi di bagian bawah layar pada perangkat seluler",
"settings.general.row.showCustomAgents.title": "Tampilkan agen",
"settings.general.row.showCustomAgents.description":
"Beralih antaragen di penyusun. Saat disembunyikan, Agen Build digunakan sebagai bawaan.",
"settings.general.row.reasoningSummaries.title": "Tampilkan ringkasan penalaran",
"settings.general.row.reasoningSummaries.description": "Tampilkan ringkasan penalaran model di linimasa",
"settings.general.row.shellToolPartsExpanded.title": "Bentangkan bagian alat shell",
"settings.general.row.shellToolPartsExpanded.description":
"Tampilkan bagian alat shell yang dibentangkan secara bawaan di linimasa",
"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",
"settings.general.row.wayland.title": "Gunakan Wayland asli",
"settings.general.row.wayland.description": "Nonaktifkan sistem cadangan X11 di Wayland. Memerlukan mulai ulang.",
"settings.general.row.wayland.tooltip":
"Di Linux dengan monitor berlaju penyegaran berbeda, Wayland asli bisa lebih stabil.",
"settings.general.row.releaseNotes.title": "Catatan rilis",
"settings.general.row.releaseNotes.description": "Tampilkan pop-up Apa yang Baru setelah pembaruan",
"settings.updates.row.startup.title": "Periksa pembaruan saat dimulai",
"settings.updates.row.startup.description": "Secara otomatis memeriksa pembaruan saat OpenCode diluncurkan",
"settings.updates.row.check.title": "Periksa pembaruan",
"settings.updates.row.check.description": "Periksa pembaruan secara manual dan instal jika tersedia",
"settings.updates.action.checkNow": "Periksa sekarang",
"settings.updates.action.checking": "Memeriksa...",
"settings.updates.action.downloading": "Mengunduh...",
"settings.updates.action.installing": "Menginstal...",
"settings.updates.toast.latest.title": "Versi Anda sudah terbaru",
"settings.updates.toast.latest.description": "Anda menjalankan versi terbaru OpenCode.",
"sound.option.none": "Tidak ada",
"sound.option.alert01": "Peringatan 01",
"sound.option.alert02": "Peringatan 02",
"sound.option.alert03": "Peringatan 03",
"sound.option.alert04": "Peringatan 04",
"sound.option.alert05": "Peringatan 05",
"sound.option.alert06": "Peringatan 06",
"sound.option.alert07": "Peringatan 07",
"sound.option.alert08": "Peringatan 08",
"sound.option.alert09": "Peringatan 09",
"sound.option.alert10": "Peringatan 10",
"sound.option.bipbop01": "Bip-bop 01",
"sound.option.bipbop02": "Bip-bop 02",
"sound.option.bipbop03": "Bip-bop 03",
"sound.option.bipbop04": "Bip-bop 04",
"sound.option.bipbop05": "Bip-bop 05",
"sound.option.bipbop06": "Bip-bop 06",
"sound.option.bipbop07": "Bip-bop 07",
"sound.option.bipbop08": "Bip-bop 08",
"sound.option.bipbop09": "Bip-bop 09",
"sound.option.bipbop10": "Bip-bop 10",
"sound.option.staplebops01": "Staplebops 01",
"sound.option.staplebops02": "Staplebops 02",
"sound.option.staplebops03": "Staplebops 03",
"sound.option.staplebops04": "Staplebops 04",
"sound.option.staplebops05": "Staplebops 05",
"sound.option.staplebops06": "Staplebops 06",
"sound.option.staplebops07": "Staplebops 07",
"sound.option.nope01": "Nope 01",
"sound.option.nope02": "Nope 02",
"sound.option.nope03": "Nope 03",
"sound.option.nope04": "Nope 04",
"sound.option.nope05": "Nope 05",
"sound.option.nope06": "Nope 06",
"sound.option.nope07": "Nope 07",
"sound.option.nope08": "Nope 08",
"sound.option.nope09": "Nope 09",
"sound.option.nope10": "Nope 10",
"sound.option.nope11": "Nope 11",
"sound.option.nope12": "Nope 12",
"sound.option.yup01": "Yup 01",
"sound.option.yup02": "Yup 02",
"sound.option.yup03": "Yup 03",
"sound.option.yup04": "Yup 04",
"sound.option.yup05": "Yup 05",
"sound.option.yup06": "Yup 06",
"settings.general.notifications.agent.title": "Agen",
"settings.general.notifications.agent.description":
"Tampilkan notifikasi sistem saat agen selesai atau memerlukan perhatian",
"settings.general.notifications.permissions.title": "Izin",
"settings.general.notifications.permissions.description": "Tampilkan notifikasi sistem saat izin diperlukan",
"settings.general.notifications.errors.title": "Kesalahan",
"settings.general.notifications.errors.description": "Tampilkan notifikasi sistem saat terjadi kesalahan",
"settings.general.sounds.agent.title": "Agen",
"settings.general.sounds.agent.description": "Mainkan suara saat agen selesai atau memerlukan perhatian",
"settings.general.sounds.permissions.title": "Izin",
"settings.general.sounds.permissions.description": "Mainkan suara saat izin diperlukan",
"settings.general.sounds.errors.title": "Kesalahan",
"settings.general.sounds.errors.description": "Mainkan suara saat terjadi kesalahan",
"settings.shortcuts.title": "Pintasan keyboard",
"settings.shortcuts.reset.button": "Atur ulang ke bawaan",
"settings.shortcuts.reset.toast.title": "Pintasan diatur ulang",
"settings.shortcuts.reset.toast.description": "Pintasan keyboard telah diatur ulang ke bawaan.",
"settings.shortcuts.conflict.title": "Pintasan sudah digunakan",
"settings.shortcuts.conflict.description": "{{keybind}} sudah ditetapkan ke {{titles}}.",
"settings.shortcuts.unassigned": "Belum ditetapkan",
"settings.shortcuts.pressKeys": "Tekan tombol",
"settings.shortcuts.search.placeholder": "Cari pintasan",
"settings.shortcuts.search.empty": "Tidak ada pintasan ditemukan",
"settings.shortcuts.group.general": "Umum",
"settings.shortcuts.group.session": "Sesi",
"settings.shortcuts.group.navigation": "Navigasi",
"settings.shortcuts.group.modelAndAgent": "Model dan agen",
"settings.shortcuts.group.terminal": "Terminal",
"settings.shortcuts.group.prompt": "Prompt",
"settings.providers.title": "Penyedia",
"settings.providers.description": "Pengaturan penyedia akan dapat dikonfigurasi di sini.",
"settings.providers.section.connected": "Penyedia terhubung",
"settings.providers.connected.empty": "Tidak ada penyedia terhubung",
"settings.providers.connected.environmentDescription": "Terhubung dari variabel lingkungan Anda",
"settings.providers.section.popular": "Penyedia populer",
"settings.providers.custom.description": "Tambahkan penyedia yang kompatibel dengan OpenAI berdasarkan URL dasar.",
"settings.providers.tag.environment": "Lingkungan",
"settings.providers.tag.config": "Konfigurasi",
"settings.providers.tag.custom": "Kustom",
"settings.providers.tag.other": "Lainnya",
"settings.models.title": "Model",
"settings.models.description": "Pengaturan model akan dapat dikonfigurasi di sini.",
"settings.agents.title": "Agen",
"settings.agents.description": "Pengaturan agen akan dapat dikonfigurasi di sini.",
"settings.commands.title": "Perintah",
"settings.commands.description": "Pengaturan perintah akan dapat dikonfigurasi di sini.",
"settings.mcp.title": "MCP",
"settings.mcp.description": "Pengaturan MCP akan dapat dikonfigurasi di sini.",
"settings.permissions.title": "Izin",
"settings.permissions.description": "Kontrol alat apa yang dapat digunakan server secara bawaan.",
"settings.permissions.section.tools": "Alat",
"settings.permissions.toast.updateFailed.title": "Gagal memperbarui izin",
"settings.permissions.action.allow": "Izinkan",
"settings.permissions.action.ask": "Tanya",
"settings.permissions.action.deny": "Tolak",
"settings.permissions.tool.read.title": "Baca",
"settings.permissions.tool.read.description": "Membaca berkas (mencocokkan jalur berkas)",
"settings.permissions.tool.edit.title": "Sunting",
"settings.permissions.tool.edit.description": "Memodifikasi berkas, termasuk suntingan, tulisan, dan patch",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "Cocokkan berkas menggunakan pola glob",
"settings.permissions.tool.grep.title": "Grep",
"settings.permissions.tool.grep.description": "Cari konten berkas menggunakan ekspresi reguler",
"settings.permissions.tool.list.title": "Daftar",
"settings.permissions.tool.list.description": "Daftarkan berkas dalam direktori",
"settings.permissions.tool.bash.title": "Bash",
"settings.permissions.tool.bash.description": "Jalankan perintah shell",
"settings.permissions.tool.task.title": "Tugas",
"settings.permissions.tool.task.description": "Luncurkan sub-agen",
"settings.permissions.tool.skill.title": "Keahlian",
"settings.permissions.tool.skill.description": "Muat keahlian berdasarkan nama",
"settings.permissions.tool.lsp.title": "LSP",
"settings.permissions.tool.lsp.description": "Jalankan kueri server bahasa",
"settings.permissions.tool.todowrite.title": "Tulis Tugas",
"settings.permissions.tool.todowrite.description": "Perbarui daftar tugas",
"settings.permissions.tool.webfetch.title": "Web Fetch",
"settings.permissions.tool.webfetch.description": "Ambil konten dari URL",
"settings.permissions.tool.websearch.title": "Pencarian Web",
"settings.permissions.tool.websearch.description": "Cari di web",
"settings.permissions.tool.external_directory.title": "Direktori Eksternal",
"settings.permissions.tool.external_directory.description": "Akses berkas di luar direktori proyek",
"settings.permissions.tool.doom_loop.title": "Doom Loop",
"settings.permissions.tool.doom_loop.description": "Deteksi panggilan alat berulang dengan masukan yang identik",
"session.delete.failed.title": "Gagal menghapus sesi",
"session.delete.title": "Hapus sesi",
"session.delete.confirm": 'Hapus sesi "{{name}}"?',
"session.delete.button": "Hapus sesi",
"workspace.new": "Ruang kerja baru",
"workspace.type.local": "lokal",
"workspace.type.sandbox": "sandbox",
"workspace.create.failed.title": "Gagal membuat ruang kerja",
"workspace.delete.failed.title": "Gagal menghapus ruang kerja",
"workspace.resetting.title": "Mengatur ulang ruang kerja",
"workspace.resetting.description": "Ini mungkin memakan waktu sebentar.",
"workspace.reset.failed.title": "Gagal mengatur ulang ruang kerja",
"workspace.reset.success.title": "Ruang kerja diatur ulang",
"workspace.reset.success.description": "Ruang kerja sekarang cocok dengan cabang bawaan.",
"workspace.error.stillPreparing": "Ruang kerja masih disiapkan",
"workspace.status.checking": "Memeriksa perubahan yang belum digabung...",
"workspace.status.error": "Tidak dapat memverifikasi status Git.",
"workspace.status.clean": "Tidak terdeteksi perubahan yang belum digabung.",
"workspace.status.dirty": "Terdeteksi perubahan yang belum digabung di ruang kerja ini.",
"workspace.delete.title": "Hapus ruang kerja",
"workspace.delete.confirm": 'Hapus ruang kerja "{{name}}"?',
"workspace.delete.button": "Hapus ruang kerja",
"workspace.reset.title": "Atur ulang ruang kerja",
"workspace.reset.confirm": 'Atur ulang ruang kerja "{{name}}"?',
"workspace.reset.button": "Atur ulang ruang kerja",
"workspace.reset.archived.none": "Tidak ada sesi aktif yang akan diarsipkan.",
"workspace.reset.archived.one": "1 sesi akan diarsipkan.",
"workspace.reset.archived.many": "{{count}} sesi akan diarsipkan.",
"workspace.reset.note": "Ini akan mengatur ulang ruang kerja agar cocok dengan cabang bawaan.",
}
-1038
View File
@@ -1,1038 +0,0 @@
export const dict = {
"command.category.suggested": "Suggeriti",
"command.category.view": "Visualizzazione",
"command.category.project": "Progetto",
"command.category.provider": "Provider",
"command.category.server": "Server",
"command.category.session": "Sessione",
"command.category.theme": "Tema",
"command.category.language": "Lingua",
"command.category.file": "File",
"command.category.context": "Contesto",
"command.category.terminal": "Terminale",
"command.category.model": "Modello",
"command.category.mcp": "MCP",
"command.category.agent": "Agente",
"command.category.permissions": "Autorizzazioni",
"command.category.workspace": "Area di lavoro",
"command.category.settings": "Impostazioni",
"theme.scheme.system": "Sistema",
"theme.scheme.light": "Chiaro",
"theme.scheme.dark": "Scuro",
"command.sidebar.toggle": "Mostra o nascondi la barra laterale",
"command.project.open": "Apri progetto",
"command.project.previous": "Progetto precedente",
"command.project.next": "Progetto successivo",
"command.project.index": "Passa al progetto {{index}}",
"command.provider.connect": "Connetti provider",
"command.server.switch": "Cambia server",
"command.settings.open": "Apri le impostazioni",
"command.session.previous": "Sessione precedente",
"command.session.next": "Sessione successiva",
"command.session.previous.unseen": "Sessione precedente non letta",
"command.session.next.unseen": "Sessione successiva non letta",
"command.session.archive": "Archivia sessione",
"command.palette": "Palette dei comandi",
"command.theme.cycle": "Cambia tema",
"command.theme.set": "Usa tema: {{theme}}",
"command.theme.scheme.cycle": "Cambia combinazione di colori",
"command.theme.scheme.set": "Usa combinazione di colori: {{scheme}}",
"command.language.cycle": "Cambia lingua",
"command.language.set": "Usa la lingua: {{language}}",
"command.session.new": "Nuova sessione",
"command.file.open": "Apri file",
"command.tab.close": "Chiudi scheda",
"command.tab.reopenClosed": "Riapri la scheda chiusa",
"command.context.addSelection": "Aggiungi la selezione al contesto",
"command.context.addSelection.description": "Aggiungi le righe selezionate dal file corrente",
"command.input.focus": "Attiva il campo di inserimento",
"command.terminal.toggle": "Mostra o nascondi il terminale",
"command.fileTree.toggle": "Mostra o nascondi l'albero dei file",
"command.review.toggle": "Mostra o nascondi la revisione",
"command.terminal.new": "Nuovo terminale",
"command.terminal.new.description": "Crea una nuova scheda terminale",
"command.steps.toggle": "Mostra o nascondi i passaggi",
"command.steps.toggle.description": "Mostra o nascondi i passaggi per il messaggio corrente",
"command.message.previous": "Messaggio precedente",
"command.message.previous.description": "Vai al messaggio utente precedente",
"command.message.next": "Messaggio successivo",
"command.message.next.description": "Vai al messaggio utente successivo",
"command.model.choose": "Scegli il modello",
"command.model.choose.description": "Seleziona un modello diverso",
"command.mcp.toggle": "Attiva o disattiva gli MCP",
"command.mcp.toggle.description": "Attiva o disattiva gli MCP",
"command.agent.cycle": "Cambia agente",
"command.agent.cycle.description": "Passa all'agente successivo",
"command.agent.cycle.reverse": "Cambia agente all'indietro",
"command.agent.cycle.reverse.description": "Passa all'agente precedente",
"command.model.variant.cycle": "Cambia livello di ragionamento",
"command.model.variant.cycle.description": "Passa al livello di ragionamento successivo",
"command.prompt.mode.shell": "Shell",
"command.prompt.mode.normal": "Prompt",
"command.permissions.autoaccept.enable": "Accetta automaticamente le autorizzazioni",
"command.permissions.autoaccept.disable": "Interrompi l'accettazione automatica delle autorizzazioni",
"command.workspace.toggle": "Attiva o disattiva le aree di lavoro",
"command.workspace.toggle.description": "Abilita o disabilita più aree di lavoro nella barra laterale",
"command.session.undo": "Annulla",
"command.session.undo.description": "Annulla l'ultimo messaggio",
"command.session.redo": "Ripeti",
"command.session.redo.description": "Ripristina l'ultimo messaggio annullato",
"command.session.compact": "Compatta sessione",
"command.session.compact.description": "Riepiloga la sessione per ridurre le dimensioni del contesto",
"command.session.fork": "Crea sessione dal messaggio",
"command.session.fork.description": "Crea una nuova sessione da un messaggio precedente",
"command.session.share": "Condividi sessione",
"command.session.share.description": "Condividi questa sessione e copia l'URL negli appunti",
"command.session.unshare": "Annulla condivisione sessione",
"command.session.unshare.description": "Interrompi la condivisione di questa sessione",
"palette.search.placeholder": "Cerca file, comandi e sessioni",
"palette.search.placeholder.home": "Cerca comandi e sessioni",
"palette.empty": "Nessun risultato trovato",
"palette.group.commands": "Comandi",
"palette.group.files": "File",
"dialog.provider.search.placeholder": "Cerca provider",
"dialog.provider.empty": "Nessun provider trovato",
"dialog.provider.group.popular": "Popolari",
"dialog.provider.group.other": "Altro",
"dialog.provider.custom.label": "Provider personalizzato compatibile con OpenAI",
"dialog.provider.tag.recommended": "Consigliato",
"dialog.provider.opencode.note": "Modelli selezionati tra cui Claude, GPT, Gemini e altri",
"dialog.provider.opencode.tagline": "Modelli affidabili e ottimizzati",
"dialog.provider.opencodeGo.tagline": "Abbonamento economico per tutti",
"dialog.provider.anthropic.note": "Accesso diretto ai modelli Claude, inclusi Pro e Max",
"dialog.provider.copilot.note": "Modelli di IA per assistere nella programmazione tramite GitHub Copilot",
"dialog.provider.openai.note": "Modelli GPT veloci e potenti per attività generiche di IA",
"dialog.provider.google.note": "Modelli Gemini per risposte rapide e strutturate",
"dialog.provider.openrouter.note": "Accedi a tutti i modelli supportati da un unico provider",
"dialog.provider.vercel.note": "Accesso unificato ai modelli di IA con instradamento intelligente",
"dialog.model.select.title": "Seleziona modello",
"dialog.model.search.placeholder": "Cerca modelli",
"dialog.model.empty": "Nessun modello trovato",
"dialog.model.manage": "Gestisci modelli",
"dialog.model.manage.description": "Personalizza quali modelli appaiono nel selettore del modello.",
"dialog.model.manage.provider.toggle": "Attiva o disattiva tutti i modelli {{provider}}",
"dialog.model.unpaid.freeModels.title": "Modelli gratuiti forniti da OpenCode",
"dialog.model.unpaid.addMore.title": "Aggiungi altri modelli dai provider più diffusi",
"dialog.model.unpaid.viewMoreProviders": "Scopri oltre 70 provider",
"dialog.provider.viewAll": "Mostra altri provider",
"provider.connect.title": "Connetti {{provider}}",
"provider.connect.title.anthropicProMax": "Accedi con Claude Pro/Max",
"provider.connect.selectMethod": "Seleziona il metodo di accesso per {{provider}}.",
"provider.connect.method.apiKey": "Chiave API",
"provider.connect.status.inProgress": "Autorizzazione in corso...",
"provider.connect.status.waiting": "In attesa di autorizzazione...",
"provider.connect.status.failed": "Autorizzazione fallita: {{error}}",
"provider.connect.apiKey.description":
"Inserisci la chiave API di {{provider}} per connettere il tuo account e utilizzare i modelli {{provider}} in OpenCode.",
"provider.connect.apiKey.label": "Chiave API di {{provider}}",
"provider.connect.apiKey.placeholder": "Chiave API",
"provider.connect.apiKey.required": "È richiesta la chiave API",
"provider.connect.opencodeZen.line1":
"OpenCode Zen offre l'accesso a una selezione di modelli affidabili e ottimizzati per gli agenti di programmazione.",
"provider.connect.opencodeZen.line2":
"Con una sola chiave API avrai accesso a modelli come Claude, GPT, Gemini, GLM e altri.",
"provider.connect.opencodeZen.visit.prefix": "Visita ",
"provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
"provider.connect.opencodeZen.visit.suffix": " per ottenere la tua chiave API.",
"provider.connect.oauth.code.visit.prefix": "Visita ",
"provider.connect.oauth.code.visit.link": "questo collegamento",
"provider.connect.oauth.code.visit.suffix":
" per ottenere il codice di autorizzazione, connettere il tuo account e usare i modelli {{provider}} in OpenCode.",
"provider.connect.oauth.code.label": "Codice di autorizzazione {{method}}",
"provider.connect.oauth.code.placeholder": "Codice di autorizzazione",
"provider.connect.oauth.code.required": "È richiesto il codice di autorizzazione",
"provider.connect.oauth.code.invalid": "Codice di autorizzazione non valido",
"provider.connect.oauth.auto.visit.prefix": "Visita ",
"provider.connect.oauth.auto.visit.link": "questo collegamento",
"provider.connect.oauth.auto.visit.suffix":
" e inserisci il codice qui sotto per connettere il tuo account e usare i modelli {{provider}} in OpenCode.",
"provider.connect.oauth.auto.confirmationCode": "Codice di conferma",
"provider.connect.toast.connected.title": "{{provider}} connesso",
"provider.connect.toast.connected.description": "I modelli {{provider}} sono ora disponibili per l'uso.",
"provider.custom.title": "Provider personalizzato",
"provider.custom.description.prefix": "Configura un provider compatibile con OpenAI. Consulta la ",
"provider.custom.description.link": "documentazione sulla configurazione dei provider",
"provider.custom.description.suffix": ".",
"provider.custom.field.providerID.label": "ID provider",
"provider.custom.field.providerID.placeholder": "myprovider",
"provider.custom.field.providerID.description": "Lettere minuscole, numeri, trattini o trattini bassi",
"provider.custom.field.name.label": "Nome da visualizzare",
"provider.custom.field.name.placeholder": "Il mio provider IA",
"provider.custom.field.baseURL.label": "URL di base",
"provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1",
"provider.custom.field.apiKey.label": "Chiave API",
"provider.custom.field.apiKey.placeholder": "Chiave API",
"provider.custom.field.apiKey.description":
"Opzionale. Lascia vuoto se gestisci l'autenticazione tramite intestazioni.",
"provider.custom.models.label": "Modelli",
"provider.custom.models.id.label": "ID",
"provider.custom.models.id.placeholder": "model-id",
"provider.custom.models.name.label": "Nome",
"provider.custom.models.name.placeholder": "Nome da visualizzare",
"provider.custom.models.remove": "Rimuovi il modello",
"provider.custom.models.add": "Aggiungi modello",
"provider.custom.headers.label": "Intestazioni (facoltative)",
"provider.custom.headers.key.label": "Intestazione",
"provider.custom.headers.key.placeholder": "Header-Name",
"provider.custom.headers.value.label": "Valore",
"provider.custom.headers.value.placeholder": "valore",
"provider.custom.headers.remove": "Rimuovi intestazione",
"provider.custom.headers.add": "Aggiungi intestazione",
"provider.custom.error.providerID.required": "L'ID provider è obbligatorio",
"provider.custom.error.providerID.format": "Utilizza lettere minuscole, numeri, trattini o trattini bassi",
"provider.custom.error.providerID.exists": "Questo ID provider esiste già",
"provider.custom.error.name.required": "Il nome visualizzato è obbligatorio",
"provider.custom.error.baseURL.required": "L'URL di base è obbligatorio",
"provider.custom.error.baseURL.format": "Deve iniziare con http:// o https://",
"provider.custom.error.required": "Necessario",
"provider.custom.error.duplicate": "Duplicato",
"provider.disconnect.toast.disconnected.title": "{{provider}} disconnesso",
"provider.disconnect.toast.disconnected.description": "I modelli {{provider}} non sono più disponibili.",
"model.tag.free": "Gratuito",
"model.tag.latest": "Più recente",
"model.provider.anthropic": "Anthropic",
"model.provider.openai": "OpenAI",
"model.provider.google": "Google",
"model.provider.xai": "xAI",
"model.provider.meta": "Meta",
"model.input.text": "testo",
"model.input.image": "immagine",
"model.input.audio": "audio",
"model.input.video": "video",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Supporta: {{inputs}}",
"model.tooltip.context.label": "Contesto",
"model.tooltip.inputs": "Input",
"model.tooltip.model": "Modello",
"model.tooltip.provider": "Provider",
"model.tooltip.reasoning": "Ragionamento",
"model.tooltip.reasoning.allowed": "Supporta il ragionamento",
"model.tooltip.reasoning.none": "Nessun ragionamento",
"model.tooltip.context": "Limite del contesto: {{limit}}",
"common.search.placeholder": "Cerca",
"common.goBack": "Torna indietro",
"common.goForward": "Vai avanti",
"common.loading": "Caricamento",
"common.loading.ellipsis": "...",
"common.cancel": "Annulla",
"common.clear": "Cancella",
"common.open": "Apri",
"common.connect": "Connetti",
"common.disconnect": "Disconnetti",
"common.continue": "Continua",
"common.submit": "Invia",
"common.save": "Salva",
"common.saving": "Salvataggio...",
"common.default": "Predefinito",
"common.attachment": "allegato",
"prompt.placeholder.shell": "Inserisci il comando shell... {{example}}",
"prompt.placeholder.normal": 'Chiedi qualsiasi cosa... "{{example}}"',
"prompt.placeholder.simple": "Chiedi qualsiasi cosa...",
"prompt.placeholder.summarizeComments": "Riepiloga i commenti...",
"prompt.placeholder.summarizeComment": "Riepiloga il commento...",
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "esc per uscire",
"session.child.promptDisabled": "Non è possibile inviare prompt alle sessioni dei subagenti.",
"session.child.backToParent": "Torna alla sessione principale.",
"prompt.example.1": "Correggi un TODO nel codice sorgente",
"prompt.example.2": "Qual è lo stack tecnologico di questo progetto?",
"prompt.example.3": "Correggi i test non funzionanti",
"prompt.example.4": "Spiega come funziona l'autenticazione",
"prompt.example.5": "Trova e correggi le vulnerabilità di sicurezza",
"prompt.example.6": "Aggiungi test unitari per il servizio utente",
"prompt.example.7": "Rifattorizza questa funzione per renderla più leggibile",
"prompt.example.8": "Cosa significa questo errore?",
"prompt.example.9": "Aiutami a eseguire il debug di questo problema",
"prompt.example.10": "Genera documentazione API",
"prompt.example.11": "Ottimizza le query del database",
"prompt.example.12": "Aggiungi la convalida dell'input",
"prompt.example.13": "Crea un nuovo componente per...",
"prompt.example.14": "Come distribuisco questo progetto?",
"prompt.example.15": "Esamina il mio codice verificando che rispetti le buone pratiche",
"prompt.example.16": "Aggiungi la gestione degli errori a questa funzione",
"prompt.example.17": "Spiega questa espressione regolare",
"prompt.example.18": "Convertilo in TypeScript",
"prompt.example.19": "Aggiungi log in tutto il codice sorgente",
"prompt.example.20": "Quali dipendenze sono obsolete?",
"prompt.example.21": "Aiutami a scrivere uno script di migrazione",
"prompt.example.22": "Implementa la cache per questo endpoint",
"prompt.example.23": "Aggiungi la paginazione a questo elenco",
"prompt.example.24": "Crea un comando CLI per...",
"prompt.example.25": "Come funzionano le variabili d'ambiente qui?",
"prompt.popover.emptyResults": "Nessun risultato corrispondente",
"prompt.popover.emptyCommands": "Nessun comando corrispondente",
"prompt.dropzone.label": "Trascina qui immagini, PDF o file di testo",
"prompt.dropzone.file.label": "Trascina per menzionare il file con @",
"prompt.slash.badge.custom": "personalizzato",
"prompt.slash.badge.skill": "skill",
"prompt.slash.badge.mcp": "mcp",
"prompt.context.active": "attivo",
"prompt.context.includeActiveFile": "Includi file attivo",
"prompt.context.removeActiveFile": "Rimuovi il file attivo dal contesto",
"prompt.context.removeFile": "Rimuovi il file dal contesto",
"prompt.action.attachFile": "Aggiungi file",
"prompt.menu.addImagesAndFiles": "Aggiungi file e altro ancora",
"prompt.menu.imagesAndFiles": "Immagini e file",
"prompt.menu.commands": "Comandi",
"prompt.menu.context": "Contesto",
"prompt.menu.shellCommand": "Comando della shell",
"prompt.attachment.remove": "Rimuovi l'allegato",
"prompt.action.send": "Invia",
"prompt.action.stop": "Interrompi",
"prompt.toast.pasteUnsupported.title": "Allegato non supportato",
"prompt.toast.pasteUnsupported.description": "Qui è possibile allegare solo immagini, PDF o file di testo.",
"prompt.toast.attachmentDuplicate.title": "Questo file è già stato caricato",
"prompt.toast.modelAgentRequired.title": "Seleziona un agente e un modello",
"prompt.toast.modelAgentRequired.description": "Scegli un agente e un modello prima di inviare un prompt.",
"prompt.toast.worktreeCreateFailed.title": "Impossibile creare il worktree",
"prompt.toast.sessionCreateFailed.title": "Impossibile creare la sessione",
"prompt.toast.shellSendFailed.title": "Impossibile inviare il comando shell",
"prompt.toast.commandSendFailed.title": "Impossibile inviare il comando",
"prompt.toast.promptSendFailed.title": "Impossibile inviare il prompt",
"prompt.toast.promptSendFailed.description": "Impossibile recuperare la sessione",
"dialog.mcp.title": "MCP",
"dialog.mcp.description": "{{enabled}} di {{total}} abilitati",
"dialog.mcp.empty": "Nessun MCP configurato",
"dialog.lsp.empty": "LSP rilevati automaticamente in base ai tipi di file",
"dialog.plugins.empty": "Plugin configurati in opencode.json",
"mcp.status.connected": "collegato",
"mcp.status.failed": "fallito",
"mcp.status.needs_auth": "richiede l'autenticazione",
"mcp.status.disabled": "disabilitato",
"mcp.auth.clickToAuthenticate": "Fai clic per autenticarti",
"dialog.fork.empty": "Nessun messaggio da cui effettuare il fork",
"dialog.directory.search.placeholder": "Cerca cartelle",
"dialog.directory.empty": "Nessuna cartella trovata",
"dialog.directory.action.selectFile": "Seleziona file",
"dialog.directory.action.selectFolder": "Seleziona la cartella",
"dialog.directory.root": "Radice",
"dialog.directory.parent": "Cartella superiore",
"dialog.directory.readError": "Impossibile leggere questa cartella",
"app.server.unreachable": "Impossibile raggiungere {{server}}",
"app.server.retrying": "Nuovo tentativo automatico...",
"app.server.otherServers": "Altri server",
"dialog.server.title": "Server",
"dialog.server.description": "Cambia il server OpenCode a cui si connette l'app.",
"dialog.server.search.placeholder": "Cerca server",
"dialog.server.empty": "Ancora nessun server",
"dialog.server.add.title": "Aggiungi server",
"dialog.server.add.url": "Indirizzo del server",
"dialog.server.add.placeholder": "http://localhost:4096",
"dialog.server.add.error": "Impossibile connettersi al server",
"dialog.server.add.checking": "Controllo...",
"dialog.server.add.button": "Aggiungi server",
"dialog.server.add.name": "Nome del server (facoltativo)",
"dialog.server.add.namePlaceholder": "Host locale",
"dialog.server.add.username": "Nome utente (facoltativo)",
"dialog.server.add.usernamePlaceholder": "nomeutente",
"dialog.server.add.password": "Password (facoltativa)",
"dialog.server.add.passwordPlaceholder": "password",
"dialog.server.edit.title": "Modifica server",
"dialog.server.default.title": "Server predefinito",
"dialog.server.default.description":
"Connettiti a questo server all'avvio dell'app invece di avviare un server locale. Richiede il riavvio.",
"dialog.server.default.none": "Nessun server selezionato",
"dialog.server.default.set": "Imposta il server corrente come predefinito",
"dialog.server.default.clear": "Cancella",
"dialog.server.action.remove": "Rimuovi server",
"dialog.server.menu.edit": "Modifica",
"dialog.server.menu.default": "Imposta come predefinito",
"dialog.server.menu.defaultRemove": "Rimuovi predefinito",
"dialog.server.menu.delete": "Elimina",
"dialog.server.current": "Server corrente",
"dialog.server.status.default": "Predefinito",
"wsl.server.add": "Aggiungi il server WSL",
"wsl.server.addShort": "Aggiungi WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "Server WSL",
"wsl.server.retryStart": "Riprova l'avvio",
"wsl.server.updating": "Aggiornamento...",
"wsl.onboarding.step.distro": "Scegli la distribuzione",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "Controllo WSL...",
"wsl.onboarding.restartRequired": "Windows deve essere riavviato per completare l'installazione di WSL.",
"wsl.onboarding.ready": "WSL è pronto.",
"wsl.onboarding.required": "WSL è necessario per continuare.",
"wsl.onboarding.checkingDistros": "Controllo delle distribuzioni...",
"wsl.onboarding.installingDistro": "Installazione di {{distro}}...",
"wsl.onboarding.checkingDistro": "Controllo {{distro}}...",
"wsl.onboarding.listingDistros": "Elenco delle distribuzioni...",
"wsl.onboarding.distroReady": "{{distro}} è pronto.",
"wsl.onboarding.distroNotInstalled": "{{distro}} non è ancora installato.",
"wsl.onboarding.openDistroOnce": "Apri {{distro}} una volta per completare la configurazione.",
"wsl.onboarding.finishingDistro": "Completamento della configurazione di {{distro}}.",
"wsl.onboarding.pickDistro": "Scegli una distribuzione o installane una qui sotto.",
"wsl.onboarding.checkingOpencode": "Controllo OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "Controllo OpenCode in {{distro}}...",
"wsl.onboarding.updatingOpencode": "Aggiornamento OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "Aggiornamento OpenCode in {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "Aggiorna OpenCode in {{distro}}.",
"wsl.onboarding.updateOpencode": "Aggiorna OpenCode",
"wsl.onboarding.opencodeReadyIn": "OpenCode è pronto in {{distro}}.",
"wsl.onboarding.opencodeReady": "OpenCode è pronto.",
"wsl.onboarding.installOpencodeIn": "Installa OpenCode in {{distro}}.",
"wsl.onboarding.installOpencode": "Installa OpenCode",
"wsl.onboarding.chooseDistroFirst": "Scegli prima una distribuzione.",
"wsl.onboarding.loadFailed": "Impossibile caricare lo stato WSL.",
"wsl.onboarding.loading": "Caricamento...",
"wsl.onboarding.installedDistros": "Distribuzioni installate",
"wsl.onboarding.checkAgain": "Controlla di nuovo",
"wsl.onboarding.distroStatus.ready": "Pronto",
"wsl.onboarding.distroStatus.checking": "Controllo...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode non installato",
"wsl.onboarding.distroStatus.missingTools": "bash e curl non disponibili",
"wsl.onboarding.distroStatus.unsupported": "Non supportato · Utilizza WSL 2",
"wsl.onboarding.needAnotherDistro": "Hai bisogno di un'altra distribuzione?",
"wsl.onboarding.needAnotherDistroHint": "Installa una distribuzione Linux dal catalogo WSL",
"wsl.onboarding.wslNotInstalled.title": "WSL non installato",
"wsl.onboarding.wslNotInstalled.description":
"WSL (Sottosistema Windows per Linux) è necessario prima che OpenCode possa aggiungere un server WSL",
"wsl.onboarding.wslUnavailable.title": "WSL non disponibile",
"wsl.onboarding.wslUnavailable.description": "OpenCode non ha potuto verificare WSL su questa macchina.",
"wsl.onboarding.installWsl": "Installa WSL",
"wsl.onboarding.windowsRestartRequired":
"Riavvia Windows per completare l'installazione WSL, quindi riapri OpenCode.",
"wsl.onboarding.next": "Avanti",
"wsl.onboarding.refresh": "Aggiorna",
"wsl.onboarding.allDistrosAdded": "Tutte le distribuzioni installate sono già aggiunte.",
"wsl.onboarding.noDistros": "Nessuna distribuzione ancora rilevata.",
"wsl.onboarding.install": "Installa",
"wsl.onboarding.installing": "Installazione...",
"wsl.onboarding.installDistro": "Installa la distribuzione",
"wsl.onboarding.searchDistros": "Cerca distribuzioni",
"wsl.onboarding.wsl2Required": "WSL 2 è obbligatorio.",
"wsl.onboarding.toolsRequired": "Questa distribuzione richiede bash e curl.",
"wsl.onboarding.openTerminal": "Apri terminale",
"wsl.onboarding.path": "Percorso: {{path}}",
"wsl.onboarding.notFound": "non trovato",
"wsl.onboarding.version": "Versione: {{version}}",
"wsl.onboarding.unknown": "sconosciuto",
"wsl.onboarding.desktopVersion": "desktop {{version}}",
"wsl.onboarding.versionMismatch": "La versione installata non corrisponde alla versione dell'app desktop.",
"wsl.onboarding.adding": "Aggiunta...",
"server.row.noUsername": "nessun nome utente",
"dialog.project.edit.title": "Modifica progetto",
"dialog.project.edit.name": "Nome",
"dialog.project.edit.icon": "Icona",
"dialog.project.edit.icon.alt": "Icona del progetto",
"dialog.project.edit.icon.hint": "Fai clic o trascina un'immagine",
"dialog.project.edit.icon.recommended": "Consigliato: 128x128px",
"dialog.project.edit.color": "Colore",
"dialog.project.edit.color.select": "Seleziona il colore {{color}}",
"dialog.project.edit.worktree.startup": "Script di avvio dell'area di lavoro",
"dialog.project.edit.worktree.startup.description":
"Viene eseguito dopo la creazione di una nuova area di lavoro (worktree).",
"dialog.project.edit.worktree.startup.placeholder": "es. bun install",
"dialog.releaseNotes.action.getStarted": "Inizia",
"dialog.releaseNotes.action.next": "Avanti",
"dialog.releaseNotes.action.hideFuture": "Non mostrarli in futuro",
"dialog.releaseNotes.media.alt": "Anteprima delle novità",
"context.breakdown.title": "Ripartizione del contesto",
"context.breakdown.note":
'Ripartizione approssimativa dei token di input. "Altro" include le definizioni degli strumenti e i dati aggiuntivi.',
"context.breakdown.system": "Sistema",
"context.breakdown.user": "Utente",
"context.breakdown.assistant": "Assistente",
"context.breakdown.tool": "Chiamate agli strumenti",
"context.breakdown.other": "Altro",
"context.systemPrompt.title": "Prompt di sistema",
"context.rawMessages.title": "Messaggi non elaborati",
"context.stats.session": "Sessione",
"context.stats.messages": "Messaggi",
"context.stats.provider": "Provider",
"context.stats.model": "Modello",
"context.stats.limit": "Limite del contesto",
"context.stats.totalTokens": "Token totali",
"context.stats.usage": "Utilizzo",
"context.stats.inputTokens": "Token di input",
"context.stats.outputTokens": "Token di output",
"context.stats.reasoningTokens": "Token di ragionamento",
"context.stats.cacheTokens": "Token cache (lettura/scrittura)",
"context.stats.userMessages": "Messaggi utente",
"context.stats.assistantMessages": "Messaggi dell'assistente",
"context.stats.totalCost": "Costo totale",
"context.stats.sessionCreated": "Sessione creata",
"context.stats.lastActivity": "Ultima attività",
"context.usage.tokens": "Token",
"context.usage.usage": "Utilizzo",
"context.usage.cost": "Costo",
"context.usage.clickToView": "Fai clic per visualizzare il contesto",
"context.usage.view": "Visualizza l'utilizzo del contesto",
"language.en": "English",
"language.zh": "简体中文",
"language.zht": "繁體中文",
"language.ko": "한국어",
"language.de": "Deutsch",
"language.es": "Español",
"language.fr": "Français",
"language.da": "Dansk",
"language.ja": "日本語",
"language.pl": "Polski",
"language.ru": "Русский",
"language.ar": "العربية",
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
"toast.language.title": "Lingua",
"toast.language.description": "Lingua impostata su {{language}}",
"toast.theme.title": "Tema cambiato",
"toast.scheme.title": "Combinazione di colori",
"toast.workspace.enabled.title": "Aree di lavoro abilitate",
"toast.workspace.enabled.description": "Nella barra laterale vengono ora visualizzati più worktree",
"toast.workspace.disabled.title": "Aree di lavoro disabilitate",
"toast.workspace.disabled.description": "Nella barra laterale viene mostrato solo il worktree principale",
"toast.permissions.autoaccept.on.title": "Accettazione automatica delle autorizzazioni",
"toast.permissions.autoaccept.on.description": "Le richieste di autorizzazione verranno approvate automaticamente",
"toast.permissions.autoaccept.off.title": "Accettazione automatica delle autorizzazioni disattivata",
"toast.permissions.autoaccept.off.description": "Le richieste di autorizzazione richiederanno l'approvazione",
"toast.model.none.title": "Nessun modello selezionato",
"toast.model.none.description": "Connetti un provider per riepilogare questa sessione",
"toast.file.loadFailed.title": "Impossibile caricare il file",
"toast.file.listFailed.title": "Impossibile elencare i file",
"toast.context.noLineSelection.title": "Nessuna riga selezionata",
"toast.context.noLineSelection.description": "Selezionare prima un intervallo di righe nella scheda di un file.",
"toast.session.share.copyFailed.title": "Impossibile copiare l'URL negli appunti",
"toast.session.share.success.title": "Sessione condivisa",
"toast.session.share.success.description": "URL di condivisione copiato negli appunti",
"toast.session.share.failed.title": "Impossibile condividere la sessione",
"toast.session.share.failed.description": "Si è verificato un errore durante la condivisione della sessione",
"toast.session.unshare.success.title": "Sessione non condivisa",
"toast.session.unshare.success.description": "Condivisione della sessione annullata!",
"toast.session.unshare.failed.title": "Impossibile annullare la condivisione della sessione",
"toast.session.unshare.failed.description":
"Si è verificato un errore durante l'annullamento della condivisione della sessione",
"toast.session.listFailed.title": "Impossibile caricare le sessioni per {{project}}",
"toast.project.reloadFailed.title": "Impossibile ricaricare {{project}}",
"toast.update.title": "Aggiornamento disponibile",
"toast.update.description": "Una nuova versione di OpenCode ({{version}}) è ora disponibile per l'installazione.",
"toast.update.action.installRestart": "Installa e riavvia",
"toast.update.action.notYet": "Non ancora",
"error.page.title": "Qualcosa è andato storto",
"error.page.description": "Si è verificato un errore durante il caricamento dell'applicazione.",
"error.page.description.localServerStartup": "Si è verificato un errore durante l'avvio del server locale.",
"error.page.details.label": "Dettagli errore",
"error.page.action.restart": "Riavvia",
"error.page.action.report": "Segnala errore",
"error.page.action.reported": "Errore segnalato",
"error.page.action.exportLogs": "Esporta log",
"error.page.action.checking": "Controllo...",
"error.page.action.checkUpdates": "Controlla gli aggiornamenti",
"error.page.action.updateTo": "Aggiorna a {{version}}",
"error.page.circular": "[Circular]",
"error.page.report.prefix": "Segnala questo errore al team OpenCode",
"error.page.report.discord": "su Discord",
"error.page.version": "Versione: {{version}}",
"error.dev.rootNotFound":
"Elemento radice non trovato. Hai dimenticato di aggiungerlo al tuo index.html? O forse l'attributo id è stato scritto in modo errato?",
"error.serverSync.connectFailed": "Impossibile connettersi al server. C'è un server in esecuzione a `{{url}}`?",
"error.serverSDK.noServerAvailable": "Nessun server disponibile",
"error.serverSDK.serverNotAvailable": "Server non disponibile",
"error.childStore.persistedCacheCreateFailed": "Impossibile creare la cache persistente",
"error.childStore.persistedProjectMetadataCreateFailed": "Impossibile creare metadati di progetto persistenti",
"error.childStore.persistedProjectIconCreateFailed": "Impossibile creare l'icona del progetto persistente",
"error.childStore.storeCreateFailed": "Impossibile creare lo store",
"directory.error.invalidUrl": "Cartella non valida nell'URL.",
"error.chain.unknown": "Errore sconosciuto",
"error.server.invalidConfiguration": "Configurazione non valida",
"error.chain.causedBy": "Causato da:",
"error.chain.apiError": "Errore API",
"error.chain.status": "Stato: {{status}}",
"error.chain.retryable": "Nuovo tentativo possibile: {{retryable}}",
"error.chain.responseBody": "Corpo della risposta:\n{{body}}",
"error.chain.didYouMean": "Forse intendi: {{suggestions}}",
"error.chain.modelNotFound": "Modello non trovato: {{provider}}/{{model}}",
"error.chain.checkConfig": "Controlla i nomi di provider e modelli nella configurazione (opencode.json)",
"error.chain.mcpFailed":
'Il server MCP "{{name}}" non ha funzionato. Nota: OpenCode non supporta ancora l\'autenticazione MCP.',
"error.chain.providerAuthFailed": "Autenticazione del provider non riuscita ({{provider}}): {{message}}",
"error.chain.providerInitFailed":
'Impossibile inizializzare il provider "{{provider}}". Controlla credenziali e configurazione.',
"error.chain.configJsonInvalid": "Il file di configurazione in {{path}} non è valido JSON(C)",
"error.chain.configJsonInvalidWithMessage": "Il file di configurazione in {{path}} non è valido JSON(C): {{message}}",
"error.chain.configDirectoryTypo":
'La directory "{{dir}}" in {{path}} non è valida. Rinominare la directory in "{{suggestion}}" o rimuoverla. Questo è un errore di battitura comune.',
"error.chain.configFrontmatterError": "Impossibile analizzare il frontmatter in {{path}}:\n{{message}}",
"error.chain.configInvalid": "Il file di configurazione in {{path}} non è valido",
"error.chain.configInvalidWithMessage": "Il file di configurazione in {{path}} non è valido: {{message}}",
"notification.permission.title": "Autorizzazione richiesta",
"notification.permission.description": "{{sessionTitle}} in {{projectName}} necessita dell'autorizzazione",
"notification.question.title": "Domanda",
"notification.question.description": "{{sessionTitle}} in {{projectName}} ha una domanda",
"notification.action.goToSession": "Vai alla sessione",
"notification.session.responseReady.title": "Risposta pronta",
"notification.session.error.title": "Errore di sessione",
"notification.session.error.fallbackDescription": "Si è verificato un errore",
"home.recentProjects": "Progetti recenti",
"home.empty.title": "Nessun progetto recente",
"home.empty.description": "Inizia aprendo un progetto locale",
"home.title": "Home",
"home.projects": "Progetti",
"home.project.add": "Aggiungi progetto",
"home.recentlyClosed": "Chiusi di recente",
"home.server.collapse": "Comprimi progetti server",
"home.server.expand": "Espandi i progetti server",
"home.sessions.search.placeholder": "Cerca sessioni",
"home.sessions.search.placeholder.scoped": "Cerca sessioni in {{scope}}",
"home.sessions.search.sessions": "Sessioni",
"home.sessions.search.noResults": "Nessuna sessione trovata per {{query}}",
"home.sessions.empty": "Ancora nessun elemento",
"home.sessions.empty.description": "Crea una sessione per iniziare",
"home.sessions.group.today": "Oggi",
"home.sessions.group.yesterday": "Ieri",
"home.sessions.group.older": "Meno recenti",
"home.providerTip": "Connettiti a oltre 75 provider per utilizzare altri modelli, inclusi Claude, GPT, Gemini, ecc.",
"session.tab.session": "Sessione",
"session.tab.review": "Revisione",
"session.tab.context": "Contesto",
"session.tab.unknown": "Sessione sconosciuta",
"session.panel.reviewAndFiles": "Revisione e file",
"session.error.notFound": "Impossibile trovare questa sessione",
"session.error.notFound.description": "Questa scheda punta a una sessione che non esiste più su questo server.",
"session.error.notFound.closeTab": "Chiudi scheda",
"session.error.serverConnection": "Impossibile connettersi a questo server",
"session.review.filesChanged": "{{count}} file modificati",
"session.review.change.one": "Modifica",
"session.review.change.other": "Modifiche",
"session.review.loadingChanges": "Caricamento modifiche...",
"session.review.empty": "Nessuna modifica ancora in questa sessione",
"session.review.noVcs": "Nessun sistema di controllo della versione Git rilevato, modifiche non visualizzate",
"session.review.noVcs.createGit.title": "Crea un repository Git",
"session.review.noVcs.createGit.description": "Tieni traccia, rivedi e annulla le modifiche in questo progetto",
"session.review.noVcs.createGit.actionLoading": "Creazione del repository Git in corso...",
"session.review.noVcs.createGit.action": "Crea un repository Git",
"session.review.noSnapshot":
"Il tracciamento degli snapshot è disabilitato nella configurazione, quindi le modifiche della sessione non sono disponibili",
"session.review.noChanges": "Nessuna modifica",
"session.review.noUncommittedChanges": "Ancora nessuna modifica senza commit",
"session.review.noBranchChanges": "Ancora nessuna modifica del branch",
"session.files.selectToOpen": "Seleziona un file da aprire",
"session.files.all": "Tutti i file",
"session.files.empty": "Nessun file",
"session.files.binaryContent": "File binario (il contenuto non può essere visualizzato)",
"session.messages.renderEarlier": "Visualizza i messaggi precedenti",
"session.messages.loadingEarlier": "Caricamento dei messaggi precedenti...",
"session.messages.loadEarlier": "Carica i messaggi precedenti",
"session.messages.loading": "Caricamento messaggi...",
"session.messages.jumpToLatest": "Vai all'ultimo",
"session.context.addToContext": "Aggiungi {{selection}} al contesto",
"session.todo.title": "Attività",
"session.todo.collapse": "Comprimi",
"session.todo.expand": "Espandi",
"session.todo.progress": "{{done}} di {{total}} attività completate",
"session.question.progress": "{{current}} di {{total}} domande",
"session.question.minimize": "Riduci la domanda",
"session.question.restore": "Ripristina la domanda",
"session.question.pending.one": "{{count}} domanda in sospeso",
"session.question.pending.many": "{{count}} di domande in sospeso",
"session.question.pending.other": "{{count}} domande in sospeso",
"session.followupDock.summary.one": "{{count}} messaggio in coda",
"session.followupDock.summary.many": "{{count}} di messaggi in coda",
"session.followupDock.summary.other": "{{count}} messaggi in coda",
"session.followupDock.sendNow": "Invia ora",
"session.followupDock.edit": "Modifica",
"session.followupDock.collapse": "Comprimi i messaggi in coda",
"session.followupDock.expand": "Espandi i messaggi in coda",
"session.revertDock.summary.one": "{{count}} messaggio annullato",
"session.revertDock.summary.many": "{{count}} di messaggi annullati",
"session.revertDock.summary.other": "{{count}} messaggi annullati",
"session.revertDock.collapse": "Comprimi i messaggi annullati",
"session.revertDock.expand": "Espandi i messaggi annullati",
"session.revertDock.restore": "Ripristina il messaggio",
"session.new.title": "Crea qualsiasi cosa",
"session.new.project.new": "Nuovo progetto",
"session.new.project.search": "Cerca progetti",
"session.new.project.add": "Aggiungi progetto",
"session.new.worktree.main": "Branch principale",
"session.new.worktree.mainWithBranch": "Branch principale ({{branch}})",
"session.new.worktree.create": "Crea un nuovo worktree",
"session.new.workspace.runIn": "Esegui la sessione in",
"session.new.workspace.triggerLocal": "Locale",
"session.new.workspace.local": "Repository locale",
"session.new.workspace.existing": "Area di lavoro...",
"session.new.git.none": "Senza Git",
"session.new.lastModified": "Ultima modifica",
"session.header.search.placeholder": "Cerca {{project}}",
"session.header.searchFiles": "Cerca file",
"session.header.openIn": "Apri in",
"session.header.open.action": "Apri {{app}}",
"session.header.open.ariaLabel": "Apri in {{app}}",
"session.header.open.menu": "Opzioni di apertura",
"session.header.open.copyPath": "Copia percorso",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "Esplora file",
"session.header.open.fileManager": "Gestore file",
"session.header.reveal.finder": "Mostra nel Finder",
"session.header.reveal.fileExplorer": "Mostra in Esplora file",
"session.header.reveal.containingFolder": "Apri la cartella contenente",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
"session.header.open.app.zed": "Zed",
"session.header.open.app.textmate": "TextMate",
"session.header.open.app.antigravity": "Antigravity",
"session.header.open.app.terminal": "Terminale",
"session.header.open.app.iterm2": "iTerm2",
"session.header.open.app.ghostty": "Ghostty",
"session.header.open.app.warp": "Warp",
"session.header.open.app.xcode": "Xcode",
"session.header.open.app.androidStudio": "Android Studio",
"session.header.open.app.powershell": "PowerShell",
"session.header.open.app.sublimeText": "Sublime Text",
"status.popover.trigger": "Stato",
"status.popover.ariaLabel": "Configurazioni del server",
"status.popover.tab.servers": "Server",
"status.popover.tab.mcp": "MCP",
"status.popover.tab.lsp": "LSP",
"status.popover.tab.plugins": "Plugin",
"status.popover.action.manageServers": "Gestisci server",
"session.share.popover.title": "Pubblica sul web",
"session.share.popover.description.shared":
"Questa sessione è pubblica sul web. È accessibile a chiunque abbia il collegamento.",
"session.share.popover.description.unshared":
"Condividi la sessione pubblicamente sul web. Sarà accessibile a chiunque abbia il collegamento.",
"session.share.action.share": "Condividi",
"session.share.action.publish": "Pubblica",
"session.share.action.publishing": "Pubblicazione...",
"session.share.action.unpublish": "Annulla pubblicazione",
"session.share.action.unpublishing": "Annullamento della pubblicazione...",
"session.share.action.view": "Visualizza",
"session.share.copy.copied": "Copiato",
"session.share.copy.copyLink": "Copia collegamento",
"lsp.tooltip.none": "Nessun server LSP",
"lsp.label.connected": "{{count}} LSP",
"prompt.loading": "Caricamento del prompt...",
"terminal.loading": "Caricamento terminale...",
"terminal.title": "Terminale",
"terminal.title.numbered": "Terminale {{number}}",
"terminal.close": "Chiudi il terminale",
"terminal.connectionLost.title": "Connessione persa",
"terminal.connectionLost.abnormalClose": "WebSocket chiuso in modo anomalo: {{code}}",
"terminal.connectionLost.description":
"La connessione del terminale è stata interrotta. Ciò può verificarsi al riavvio del server.",
"common.closeTab": "Chiudi scheda",
"common.dismiss": "Ignora",
"common.moreCountSuffix": " (+ altri {{count}})",
"common.requestFailed": "Richiesta non riuscita",
"common.moreOptions": "Altre opzioni",
"common.learnMore": "Saperne di più",
"common.rename": "Rinomina",
"common.reset": "Ripristina",
"common.archive": "Archivia",
"common.delete": "Elimina",
"common.close": "Chiudi",
"common.edit": "Modifica",
"common.loadMore": "Carica altri elementi",
"common.key.esc": "ESC",
"common.key.ctrl": "Ctrl",
"common.key.alt": "Alt",
"common.key.shift": "Maiusc",
"common.key.meta": "Meta",
"common.key.space": "Spazio",
"common.key.backspace": "Backspace",
"common.key.enter": "Invio",
"common.key.tab": "Tab",
"common.key.delete": "Canc",
"common.key.home": "Home",
"common.key.end": "Fine",
"common.key.pageUp": "Pag su",
"common.key.pageDown": "Pag giù",
"common.key.insert": "Ins",
"common.unknown": "sconosciuto",
"common.time.justNow": "Adesso",
"common.time.minutesAgo.short": "{{count}}m fa",
"common.time.hoursAgo.short": "{{count}}h fa",
"common.time.daysAgo.short": "{{count}}d fa",
"sidebar.menu.toggle": "Mostra o nascondi il menu",
"sidebar.nav.projectsAndSessions": "Progetti e sessioni",
"sidebar.settings": "Impostazioni",
"sidebar.help": "Aiuto",
"sidebar.workspaces.enable": "Abilita aree di lavoro",
"sidebar.workspaces.disable": "Disabilita aree di lavoro",
"sidebar.gettingStarted.title": "Introduzione",
"sidebar.gettingStarted.line1": "OpenCode include modelli gratuiti così puoi iniziare immediatamente.",
"sidebar.gettingStarted.line2": "Connetti un provider per usare altri modelli, tra cui Claude, GPT, Gemini e altri.",
"sidebar.project.recentSessions": "Sessioni recenti",
"sidebar.project.viewAllSessions": "Visualizza tutte le sessioni",
"sidebar.project.clearNotifications": "Cancella notifiche",
"sidebar.empty.title": "Nessun progetto aperto",
"sidebar.empty.description": "Apri un progetto per iniziare",
"debugBar.ariaLabel": "Diagnostica delle prestazioni di sviluppo",
"debugBar.na": "n/d",
"debugBar.nav.label": "NAV",
"debugBar.nav.tip":
"Ultima transizione completata relativa a una pagina di sessione, misurata dall'avvio del router fino al primo rendering dopo la stabilizzazione.",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "Media mobile dei fotogrammi al secondo negli ultimi 5 secondi.",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "Tempo di rendering del fotogramma peggiore negli ultimi 5 secondi.",
"debugBar.jank.label": "JANK",
"debugBar.jank.tip": "Fotogrammi con durata superiore a 32 ms negli ultimi 5 secondi.",
"debugBar.long.label": "LONG",
"debugBar.long.tip":
"Tempo bloccato e numero di attività lunghe negli ultimi 5 secondi. Attività più lunga: {{max}}.",
"debugBar.delay.label": "DELAY",
"debugBar.delay.tip": "Peggiore ritardo di risposta all'input osservato negli ultimi 5 secondi.",
"debugBar.inp.label": "INP",
"debugBar.inp.tip":
"Durata approssimativa dell'interazione negli ultimi 5 secondi. È una misura simile a INP, non l'INP ufficiale di Web Vitals.",
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "Spostamento cumulativo del layout per la durata corrente dell'app.",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "Heap JS utilizzato rispetto al limite dell'heap. Solo Chromium.",
"debugBar.mem.tip": "Heap JS utilizzato rispetto al limite dell'heap. {{used}} di {{limit}}.",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "Desktop",
"settings.section.server": "Server",
"settings.tab.general": "Generale",
"settings.tab.shortcuts": "Scorciatoie",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "Integrazione WSL",
"settings.desktop.wsl.description": "Esegui il server OpenCode all'interno di WSL su Windows.",
"settings.general.section.appearance": "Aspetto",
"settings.general.section.advanced": "Avanzato",
"settings.general.section.notifications": "Notifiche di sistema",
"settings.general.section.updates": "Aggiornamenti",
"settings.general.section.sounds": "Effetti sonori",
"settings.general.section.feed": "Feed",
"settings.general.section.display": "Visualizzazione",
"settings.general.row.language.title": "Lingua",
"settings.general.row.language.description": "Cambia la lingua di visualizzazione per OpenCode",
"settings.general.row.shell.title": "Shell del terminale",
"settings.general.row.shell.description": "Shell utilizzata dal terminale e dagli strumenti dell'agente",
"settings.general.row.shell.autoDefault": "Automatico (predefinito)",
"settings.general.row.shell.terminalOnly": "solo terminale",
"settings.general.row.appearance.title": "Aspetto",
"settings.general.row.appearance.description": "Personalizza l'aspetto di OpenCode sul tuo dispositivo",
"settings.general.row.colorScheme.title": "Combinazione di colori",
"settings.general.row.colorScheme.description": "Scegli se OpenCode segue il tema di sistema, chiaro o scuro",
"settings.general.row.theme.title": "Tema",
"settings.general.row.theme.description": "Personalizza il tema di OpenCode.",
"settings.general.row.font.title": "Carattere del codice",
"settings.general.row.font.description": "Personalizza il carattere utilizzato nei blocchi di codice",
"settings.general.row.terminalFont.title": "Carattere terminale",
"settings.general.row.terminalFont.description": "Personalizza il carattere utilizzato nel terminale",
"settings.general.row.uiFont.title": "Carattere dell'interfaccia utente",
"settings.general.row.uiFont.description": "Personalizza il carattere utilizzato nell'interfaccia",
"settings.general.row.followup.title": "Gestione dei prompt successivi",
"settings.general.row.followup.description": "Scegli se i prompt successivi intervengono subito o attendono in coda",
"settings.general.row.followup.option.queue": "Coda",
"settings.general.row.followup.option.steer": "Intervieni subito",
"settings.general.row.showFileTree.title": "Albero dei file",
"settings.general.row.showFileTree.description": "Mostra il pannello dell'albero dei file nelle sessioni",
"settings.general.row.showNavigation.title": "Controlli di navigazione",
"settings.general.row.showNavigation.description":
"Mostra i pulsanti Avanti e Indietro nella barra del titolo del desktop",
"settings.general.row.showSearch.title": "Palette dei comandi",
"settings.general.row.showSearch.description":
"Mostra il pulsante di ricerca e della palette dei comandi nella barra del titolo",
"settings.general.row.showTerminal.title": "Terminale",
"settings.general.row.showTerminal.description":
"Mostra il pulsante del terminale nella barra del titolo del desktop",
"settings.general.row.showStatus.title": "Stato del server",
"settings.general.row.showStatus.description": "Mostra il pulsante di stato del server nella barra del titolo",
"settings.general.row.mobileTitlebarBottom.title": "Navigazione in basso",
"settings.general.row.mobileTitlebarBottom.description":
"Posiziona la barra del titolo e le schede della sessione nella parte inferiore dello schermo sul dispositivo mobile",
"settings.general.row.showCustomAgents.title": "Mostra agente",
"settings.general.row.showCustomAgents.description":
"Passa da un agente all'altro nel campo di composizione. Se nascosto, viene usato l'agente Build.",
"settings.general.row.reasoningSummaries.title": "Mostra riassunti del ragionamento",
"settings.general.row.reasoningSummaries.description":
"Visualizza i riepiloghi del ragionamento del modello nella sequenza temporale",
"settings.general.row.shellToolPartsExpanded.title": "Espandi le parti dello strumento Shell",
"settings.general.row.shellToolPartsExpanded.description":
"Mostra le parti dello strumento Shell espanse per impostazione predefinita nella sequenza temporale",
"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",
"settings.general.row.wayland.title": "Usa Wayland nativo",
"settings.general.row.wayland.description": "Disabilita il fallback X11 su Wayland. Richiede il riavvio.",
"settings.general.row.wayland.tooltip":
"Su Linux con monitor dalle diverse frequenze di aggiornamento, Wayland nativo può essere più stabile.",
"settings.general.row.releaseNotes.title": "Note sulla versione",
"settings.general.row.releaseNotes.description": "Mostra i popup Novità dopo gli aggiornamenti",
"settings.updates.row.startup.title": "Controlla gli aggiornamenti all'avvio",
"settings.updates.row.startup.description": "Controlla automaticamente gli aggiornamenti all'avvio di OpenCode",
"settings.updates.row.check.title": "Controlla gli aggiornamenti",
"settings.updates.row.check.description": "Controlla manualmente gli aggiornamenti e installali se disponibili",
"settings.updates.action.checkNow": "Controlla ora",
"settings.updates.action.checking": "Controllo...",
"settings.updates.action.downloading": "Download in corso...",
"settings.updates.action.installing": "Installazione...",
"settings.updates.toast.latest.title": "OpenCode è aggiornato",
"settings.updates.toast.latest.description": "Stai utilizzando l'ultima versione di OpenCode.",
"sound.option.none": "Nessuno",
"sound.option.alert01": "Avviso 01",
"sound.option.alert02": "Avviso 02",
"sound.option.alert03": "Avviso 03",
"sound.option.alert04": "Avviso 04",
"sound.option.alert05": "Avviso 05",
"sound.option.alert06": "Avviso 06",
"sound.option.alert07": "Avviso 07",
"sound.option.alert08": "Avviso 08",
"sound.option.alert09": "Avviso 09",
"sound.option.alert10": "Avviso 10",
"sound.option.bipbop01": "Bip-bop 01",
"sound.option.bipbop02": "Bip-bop 02",
"sound.option.bipbop03": "Bip-bop 03",
"sound.option.bipbop04": "Bip-bop 04",
"sound.option.bipbop05": "Bip-bop 05",
"sound.option.bipbop06": "Bip-bop 06",
"sound.option.bipbop07": "Bip-bop 07",
"sound.option.bipbop08": "Bip-bop 08",
"sound.option.bipbop09": "Bip-bop 09",
"sound.option.bipbop10": "Bip-bop 10",
"sound.option.staplebops01": "Staplebops 01",
"sound.option.staplebops02": "Staplebops 02",
"sound.option.staplebops03": "Staplebops 03",
"sound.option.staplebops04": "Staplebops 04",
"sound.option.staplebops05": "Staplebops 05",
"sound.option.staplebops06": "Staplebops 06",
"sound.option.staplebops07": "Staplebops 07",
"sound.option.nope01": "No 01",
"sound.option.nope02": "No 02",
"sound.option.nope03": "No 03",
"sound.option.nope04": "No 04",
"sound.option.nope05": "No 05",
"sound.option.nope06": "No 06",
"sound.option.nope07": "No 07",
"sound.option.nope08": "No 08",
"sound.option.nope09": "No 09",
"sound.option.nope10": "No 10",
"sound.option.nope11": "No 11",
"sound.option.nope12": "No 12",
"sound.option.yup01": "Sì 01",
"sound.option.yup02": "Sì 02",
"sound.option.yup03": "Sì 03",
"sound.option.yup04": "Sì 04",
"sound.option.yup05": "Sì 05",
"sound.option.yup06": "Sì 06",
"settings.general.notifications.agent.title": "Agente",
"settings.general.notifications.agent.description":
"Mostra una notifica di sistema quando l'agente ha terminato o richiede attenzione",
"settings.general.notifications.permissions.title": "Autorizzazioni",
"settings.general.notifications.permissions.description":
"Mostra la notifica di sistema quando è richiesta un'autorizzazione",
"settings.general.notifications.errors.title": "Errori",
"settings.general.notifications.errors.description": "Mostra la notifica di sistema quando si verifica un errore",
"settings.general.sounds.agent.title": "Agente",
"settings.general.sounds.agent.description": "Riproduci un suono quando l'agente ha terminato o richiede attenzione",
"settings.general.sounds.permissions.title": "Autorizzazioni",
"settings.general.sounds.permissions.description": "Riproduci l'audio quando è richiesta un'autorizzazione",
"settings.general.sounds.errors.title": "Errori",
"settings.general.sounds.errors.description": "Riproduci un suono quando si verifica un errore",
"settings.shortcuts.title": "Scorciatoie da tastiera",
"settings.shortcuts.reset.button": "Ripristina le impostazioni predefinite",
"settings.shortcuts.reset.toast.title": "Scorciatoie ripristinate",
"settings.shortcuts.reset.toast.description":
"Le scorciatoie da tastiera sono state ripristinate ai valori predefiniti.",
"settings.shortcuts.conflict.title": "Scorciatoia già in uso",
"settings.shortcuts.conflict.description": "{{keybind}} è già assegnato a {{titles}}.",
"settings.shortcuts.unassigned": "Non assegnato",
"settings.shortcuts.pressKeys": "Premi i tasti",
"settings.shortcuts.search.placeholder": "Cerca scorciatoie",
"settings.shortcuts.search.empty": "Nessuna scorciatoia trovata",
"settings.shortcuts.group.general": "Generale",
"settings.shortcuts.group.session": "Sessione",
"settings.shortcuts.group.navigation": "Navigazione",
"settings.shortcuts.group.modelAndAgent": "Modello e agente",
"settings.shortcuts.group.terminal": "Terminale",
"settings.shortcuts.group.prompt": "Prompt",
"settings.providers.title": "Provider",
"settings.providers.description": "Le impostazioni dei provider saranno configurabili qui.",
"settings.providers.section.connected": "Provider connessi",
"settings.providers.connected.empty": "Nessun provider connesso",
"settings.providers.connected.environmentDescription": "Connesso tramite le variabili di ambiente",
"settings.providers.section.popular": "Provider più diffusi",
"settings.providers.custom.description": "Aggiungi un provider compatibile con OpenAI tramite l'URL di base.",
"settings.providers.tag.environment": "Ambiente",
"settings.providers.tag.config": "Configurazione",
"settings.providers.tag.custom": "Personalizzato",
"settings.providers.tag.other": "Altro",
"settings.models.title": "Modelli",
"settings.models.description": "Le impostazioni del modello saranno configurabili qui.",
"settings.agents.title": "Agenti",
"settings.agents.description": "Le impostazioni dell'agente saranno configurabili qui.",
"settings.commands.title": "Comandi",
"settings.commands.description": "Le impostazioni dei comandi saranno configurabili qui.",
"settings.mcp.title": "MCP",
"settings.mcp.description": "Le impostazioni MCP saranno configurabili qui.",
"settings.permissions.title": "Autorizzazioni",
"settings.permissions.description":
"Controlla quali strumenti può utilizzare il server per impostazione predefinita.",
"settings.permissions.section.tools": "Strumenti",
"settings.permissions.toast.updateFailed.title": "Impossibile aggiornare le autorizzazioni",
"settings.permissions.action.allow": "Consenti",
"settings.permissions.action.ask": "Chiedi",
"settings.permissions.action.deny": "Nega",
"settings.permissions.tool.read.title": "Lettura",
"settings.permissions.tool.read.description": "Lettura di un file (corrisponde al percorso del file)",
"settings.permissions.tool.edit.title": "Modifica",
"settings.permissions.tool.edit.description": "Modifica file, incluse modifiche, scritture e patch",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "Trova corrispondenze tra file usando pattern glob",
"settings.permissions.tool.grep.title": "Grep",
"settings.permissions.tool.grep.description": "Cerca il contenuto del file utilizzando le espressioni regolari",
"settings.permissions.tool.list.title": "Elenco",
"settings.permissions.tool.list.description": "Elenca i file all'interno di una directory",
"settings.permissions.tool.bash.title": "Bash",
"settings.permissions.tool.bash.description": "Esegui i comandi della shell",
"settings.permissions.tool.task.title": "Attività",
"settings.permissions.tool.task.description": "Avvia subagenti",
"settings.permissions.tool.skill.title": "Skill",
"settings.permissions.tool.skill.description": "Carica una skill in base al nome",
"settings.permissions.tool.lsp.title": "LSP",
"settings.permissions.tool.lsp.description": "Esegui query sul server di linguaggio",
"settings.permissions.tool.todowrite.title": "Scrittura attività",
"settings.permissions.tool.todowrite.description": "Aggiorna l'elenco delle attività",
"settings.permissions.tool.webfetch.title": "Recupero dal web",
"settings.permissions.tool.webfetch.description": "Recupera contenuto da un URL",
"settings.permissions.tool.websearch.title": "Ricerca sul web",
"settings.permissions.tool.websearch.description": "Cerca sul web",
"settings.permissions.tool.external_directory.title": "Directory esterna",
"settings.permissions.tool.external_directory.description": "Accedi ai file all'esterno della directory del progetto",
"settings.permissions.tool.doom_loop.title": "Ciclo ripetitivo",
"settings.permissions.tool.doom_loop.description": "Rileva chiamate ripetute di strumenti con input identico",
"session.delete.failed.title": "Impossibile eliminare la sessione",
"session.delete.title": "Elimina sessione",
"session.delete.confirm": 'Eliminare la sessione "{{name}}"?',
"session.delete.button": "Elimina sessione",
"workspace.new": "Nuova area di lavoro",
"workspace.type.local": "locale",
"workspace.type.sandbox": "sandbox",
"workspace.create.failed.title": "Impossibile creare l'area di lavoro",
"workspace.delete.failed.title": "Impossibile eliminare l'area di lavoro",
"workspace.resetting.title": "Reimpostazione dell'area di lavoro",
"workspace.resetting.description": "L'operazione potrebbe richiedere un minuto.",
"workspace.reset.failed.title": "Impossibile reimpostare l'area di lavoro",
"workspace.reset.success.title": "Area di lavoro reimpostata",
"workspace.reset.success.description": "L'area di lavoro ora corrisponde al branch predefinito.",
"workspace.error.stillPreparing": "L'area di lavoro è ancora in preparazione",
"workspace.status.checking": "Verifica delle modifiche non integrate in corso...",
"workspace.status.error": "Impossibile verificare lo stato di Git.",
"workspace.status.clean": "Nessuna modifica non integrata rilevata.",
"workspace.status.dirty": "Modifiche non integrate rilevate in quest'area di lavoro.",
"workspace.delete.title": "Elimina l'area di lavoro",
"workspace.delete.confirm": 'Eliminare l\'area di lavoro "{{name}}"?',
"workspace.delete.button": "Elimina l'area di lavoro",
"workspace.reset.title": "Reimposta l'area di lavoro",
"workspace.reset.confirm": 'Reimpostare l\'area di lavoro "{{name}}"?',
"workspace.reset.button": "Reimposta l'area di lavoro",
"workspace.reset.archived.none": "Nessuna sessione attiva verrà archiviata.",
"workspace.reset.archived.one": "1 sessione verrà archiviata.",
"workspace.reset.archived.many": "Verranno archiviate {{count}} sessioni.",
"workspace.reset.note": "L'area di lavoro verrà reimpostata in modo che corrisponda al branch predefinito.",
}
+17 -25
View File
@@ -94,14 +94,13 @@ export const dict = {
"dialog.provider.empty": "プロバイダーが見つかりません",
"dialog.provider.group.popular": "人気",
"dialog.provider.group.other": "その他",
"dialog.provider.custom.label": "OpenAI互換のカスタムプロバイダー",
"dialog.provider.tag.recommended": "推奨",
"dialog.provider.opencode.note": "Claude, GPT, Geminiなどを含む厳選されたモデル",
"dialog.provider.opencode.tagline": "信頼性の高い最適化モデル",
"dialog.provider.opencodeGo.tagline": "すべての人に低価格のサブスクリプション",
"dialog.provider.anthropic.note": "ProMaxを含むClaudeモデルに直接アクセス",
"dialog.provider.copilot.note": "GitHub Copilotを通じてコーディングを支援するAIモデル",
"dialog.provider.openai.note": "高速で高性能な汎用AIタスク向けのGPTモデル",
"dialog.provider.anthropic.note": "Claude Pro/MaxまたはAPIキーで接続",
"dialog.provider.copilot.note": "CopilotまたはAPIキーで接続",
"dialog.provider.openai.note": "ChatGPT Pro/PlusまたはAPIキーで接続",
"dialog.provider.google.note": "高速で構造化された応答のためのGeminiモデル",
"dialog.provider.openrouter.note": "1つのプロバイダーからすべてのサポートされているモデルにアクセス",
"dialog.provider.vercel.note": "スマートルーターによるAIモデルへの統合アクセス",
@@ -113,7 +112,6 @@ export const dict = {
"dialog.model.manage.provider.toggle": "すべての{{provider}}モデルを切り替え",
"dialog.model.unpaid.freeModels.title": "OpenCodeが提供する無料モデル",
"dialog.model.unpaid.addMore.title": "人気のプロバイダーからモデルを追加",
"dialog.model.unpaid.viewMoreProviders": "その他70以上のプロバイダーを見る",
"dialog.provider.viewAll": "さらにプロバイダーを表示",
"provider.connect.title": "{{provider}}を接続",
"provider.connect.title.anthropicProMax": "Claude Pro/Maxでログイン",
@@ -197,7 +195,7 @@ export const dict = {
"model.input.image": "画像",
"model.input.audio": "音声",
"model.input.video": "動画",
"model.input.pdf": "PDF",
"model.input.pdf": "pdf",
"model.tooltip.allows": "対応: {{inputs}}",
"model.tooltip.context.label": "コンテキスト",
"model.tooltip.inputs": "入力",
@@ -216,7 +214,7 @@ export const dict = {
"common.clear": "クリア",
"common.connect": "接続",
"common.disconnect": "切断",
"common.continue": "続行",
"common.continue": "送信",
"common.submit": "送信",
"common.save": "保存",
"common.saving": "保存中...",
@@ -260,7 +258,7 @@ export const dict = {
"prompt.popover.emptyResults": "一致する結果がありません",
"prompt.popover.emptyCommands": "一致するコマンドがありません",
"prompt.dropzone.label": "画像、PDF、またはテキストファイルをここにドロップしてください",
"prompt.dropzone.file.label": "ドロップしてファイルを@メンション",
"prompt.dropzone.file.label": "ドロップして@メンションファイルを追加",
"prompt.slash.badge.custom": "カスタム",
"prompt.slash.badge.skill": "スキル",
"prompt.slash.badge.mcp": "mcp",
@@ -278,7 +276,6 @@ export const dict = {
"prompt.action.send": "送信",
"prompt.action.stop": "停止",
"prompt.toast.pasteUnsupported.title": "サポートされていない添付ファイル",
"prompt.toast.attachmentDuplicate.title": "このファイルはすでにアップロードされています",
"prompt.toast.pasteUnsupported.description": "画像、PDF、またはテキストファイルのみ添付できます。",
"prompt.toast.modelAgentRequired.title": "エージェントとモデルを選択",
"prompt.toast.modelAgentRequired.description": "プロンプトを送信する前にエージェントとモデルを選択してください。",
@@ -569,7 +566,7 @@ export const dict = {
"session.error.notFound.description": "このタブが参照するセッションは、このサーバーには存在しません。",
"session.error.notFound.closeTab": "タブを閉じる",
"session.error.serverConnection": "このサーバーに接続できません",
"session.review.filesChanged": "変更されたファイル: {{count}}",
"session.review.filesChanged": "{{count}} ファイル変更",
"session.review.change.one": "変更",
"session.review.change.other": "変更",
"session.review.loadingChanges": "変更を読み込み中...",
@@ -659,10 +656,10 @@ export const dict = {
"ターミナルの接続が中断されました。これはサーバーが再起動したときに発生することがあります。",
"common.closeTab": "タブを閉じる",
"common.dismiss": "閉じる",
"common.requestFailed": "リクエスト失敗しました",
"common.requestFailed": "リクエスト失敗",
"common.moreOptions": "その他のオプション",
"common.learnMore": "詳細",
"common.rename": "名前変更",
"common.rename": "名前変更",
"common.reset": "リセット",
"common.archive": "アーカイブ",
"common.delete": "削除",
@@ -736,9 +733,8 @@ export const dict = {
"settings.general.row.mobileTitlebarBottom.title": "下部ナビゲーション",
"settings.general.row.mobileTitlebarBottom.description":
"モバイルではタイトルバーとセッションタブを画面下部に配置します",
"settings.general.row.showCustomAgents.title": "エージェントを表示",
"settings.general.row.showCustomAgents.description":
"コンポーザーでエージェントを切り替えます。非表示の場合は、デフォルトでBuildエージェントが使用されます。",
"settings.general.row.showCustomAgents.title": "カスタムエージェント",
"settings.general.row.showCustomAgents.description": "コンポーザーにエージェント選択を表示します",
"settings.general.row.reasoningSummaries.title": "推論の要約を表示",
"settings.general.row.reasoningSummaries.description": "タイムラインにモデルの推論の要約を表示します",
"settings.general.row.shellToolPartsExpanded.title": "shell ツールパーツを展開",
@@ -849,7 +845,7 @@ export const dict = {
"settings.shortcuts.group.terminal": "ターミナル",
"settings.shortcuts.group.prompt": "プロンプト",
"settings.providers.title": "プロバイダー",
"settings.providers.description": "プロバイダー設定は今後ここで構成できるようになります。",
"settings.providers.description": "プロバイダー設定はここで構成できます。",
"settings.providers.section.connected": "接続済みプロバイダー",
"settings.providers.connected.empty": "接続済みプロバイダーはありません",
"settings.providers.section.popular": "人気のプロバイダー",
@@ -858,13 +854,13 @@ export const dict = {
"settings.providers.tag.custom": "カスタム",
"settings.providers.tag.other": "その他",
"settings.models.title": "モデル",
"settings.models.description": "モデル設定は今後ここで構成できるようになります。",
"settings.models.description": "モデル設定はここで構成できます。",
"settings.agents.title": "エージェント",
"settings.agents.description": "エージェント設定は今後ここで構成できるようになります。",
"settings.agents.description": "エージェント設定はここで構成できます。",
"settings.commands.title": "コマンド",
"settings.commands.description": "コマンド設定は今後ここで構成できるようになります。",
"settings.commands.description": "コマンド設定はここで構成できます。",
"settings.mcp.title": "MCP",
"settings.mcp.description": "MCP設定は今後ここで構成できるようになります。",
"settings.mcp.description": "MCP設定はここで構成できます。",
"settings.permissions.title": "権限",
"settings.permissions.description": "サーバーがデフォルトで使用できるツールを制御します。",
"settings.permissions.section.tools": "ツール",
@@ -958,9 +954,6 @@ export const dict = {
"session.question.progress": "{{total}} 問中 {{current}} 問",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "エクスプローラー",
"session.header.reveal.finder": "Finderで表示",
"session.header.reveal.fileExplorer": "エクスプローラーで表示",
"session.header.reveal.containingFolder": "親フォルダーを開く",
"session.header.open.fileManager": "ファイルマネージャー",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
@@ -978,8 +971,7 @@ export const dict = {
"debugBar.ariaLabel": "開発パフォーマンス診断",
"debugBar.na": "n/a",
"debugBar.nav.label": "NAV",
"debugBar.nav.tip":
"セッションページに関係する最後に完了したルート遷移。ルーターの開始から処理完了後の最初の描画までを測定。",
"debugBar.nav.tip": "セッションページに触れる最後に完了したルート遷移。ルーター開始から安定後の最初の描画まで測定。",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "過去5秒間のローリングフレーム/秒。",
"debugBar.frame.label": "FRAME",
+23 -30
View File
@@ -19,7 +19,7 @@ export const dict = {
"theme.scheme.system": "시스템",
"theme.scheme.light": "라이트",
"theme.scheme.dark": "다크",
"command.sidebar.toggle": "사이드바 표시/숨기기",
"command.sidebar.toggle": "사이드바 토글",
"command.project.open": "프로젝트 열기",
"command.provider.connect": "공급자 연결",
"command.server.switch": "서버 전환",
@@ -42,12 +42,12 @@ export const dict = {
"command.context.addSelection": "선택 영역을 컨텍스트에 추가",
"command.context.addSelection.description": "현재 파일에서 선택한 줄을 추가",
"command.input.focus": "입력창 포커스",
"command.terminal.toggle": "터미널 표시/숨기기",
"command.fileTree.toggle": "파일 트리 표시/숨기기",
"command.review.toggle": "검토 표시/숨기기",
"command.terminal.toggle": "터미널 토글",
"command.fileTree.toggle": "파일 트리 토글",
"command.review.toggle": "검토 토글",
"command.terminal.new": "새 터미널",
"command.terminal.new.description": "새 터미널 탭 생성",
"command.steps.toggle": "단계 표시/숨기기",
"command.steps.toggle": "단계 토글",
"command.steps.toggle.description": "현재 메시지의 단계 표시/숨기기",
"command.message.previous": "이전 메시지",
"command.message.previous.description": "이전 사용자 메시지로 이동",
@@ -55,8 +55,8 @@ export const dict = {
"command.message.next.description": "다음 사용자 메시지로 이동",
"command.model.choose": "모델 선택",
"command.model.choose.description": "다른 모델 선택",
"command.mcp.toggle": "MCP 전환",
"command.mcp.toggle.description": "MCP 전환",
"command.mcp.toggle": "MCP 토글",
"command.mcp.toggle.description": "MCP 토글",
"command.agent.cycle": "에이전트 순환",
"command.agent.cycle.description": "다음 에이전트로 전환",
"command.agent.cycle.reverse": "에이전트 역순환",
@@ -90,14 +90,13 @@ export const dict = {
"dialog.provider.empty": "공급자 없음",
"dialog.provider.group.popular": "인기",
"dialog.provider.group.other": "기타",
"dialog.provider.custom.label": "OpenAI 호환 사용자 지정 공급자",
"dialog.provider.tag.recommended": "추천",
"dialog.provider.opencode.note": "Claude, GPT, Gemini 등을 포함한 엄선된 모델",
"dialog.provider.opencode.tagline": "신뢰할 수 있는 최적화 모델",
"dialog.provider.opencodeGo.tagline": "모두를 위한 저렴한 구독",
"dialog.provider.anthropic.note": "Pro 및 Max를 포함한 Claude 모델에 직접 액세스",
"dialog.provider.copilot.note": "GitHub Copilot을 통한 코딩 지원용 AI 모델",
"dialog.provider.openai.note": "빠르고 강력한 범용 AI 작업을 위한 GPT 모델",
"dialog.provider.anthropic.note": "Claude Pro/Max 또는 API 키로 연결",
"dialog.provider.copilot.note": "Copilot 또는 API 키로 연결",
"dialog.provider.openai.note": "ChatGPT Pro/Plus 또는 API 키로 연결",
"dialog.provider.google.note": "빠르고 구조화된 응답을 위한 Gemini 모델",
"dialog.provider.openrouter.note": "모든 지원 모델을 단일 공급자에서 액세스",
"dialog.provider.vercel.note": "스마트 라우팅을 통한 AI 모델 통합 액세스",
@@ -109,7 +108,6 @@ export const dict = {
"dialog.model.manage.provider.toggle": "모든 {{provider}} 모델 토글",
"dialog.model.unpaid.freeModels.title": "OpenCode에서 제공하는 무료 모델",
"dialog.model.unpaid.addMore.title": "인기 공급자의 모델 추가",
"dialog.model.unpaid.viewMoreProviders": "70개 이상의 공급자 더 보기",
"dialog.provider.viewAll": "더 많은 공급자 보기",
"provider.connect.title": "{{provider}} 연결",
"provider.connect.title.anthropicProMax": "Claude Pro/Max로 로그인",
@@ -193,7 +191,7 @@ export const dict = {
"model.input.image": "이미지",
"model.input.audio": "오디오",
"model.input.video": "비디오",
"model.input.pdf": "PDF",
"model.input.pdf": "pdf",
"model.tooltip.allows": "지원: {{inputs}}",
"model.tooltip.reasoning.allowed": "추론 허용",
"model.tooltip.reasoning.none": "추론 없음",
@@ -206,7 +204,7 @@ export const dict = {
"common.cancel": "취소",
"common.connect": "연결",
"common.disconnect": "연결 해제",
"common.continue": "계속",
"common.continue": "제출",
"common.submit": "제출",
"common.save": "저장",
"common.saving": "저장 중...",
@@ -256,7 +254,7 @@ export const dict = {
"prompt.context.includeActiveFile": "활성 파일 포함",
"prompt.context.removeActiveFile": "컨텍스트에서 활성 파일 제거",
"prompt.context.removeFile": "컨텍스트에서 파일 제거",
"prompt.action.attachFile": "파일 추가",
"prompt.action.attachFile": "파일 첨부",
"prompt.menu.addImagesAndFiles": "파일 및 기타 항목 추가",
"prompt.menu.imagesAndFiles": "이미지 및 파일",
"prompt.menu.commands": "명령어",
@@ -266,7 +264,6 @@ export const dict = {
"prompt.action.send": "전송",
"prompt.action.stop": "중지",
"prompt.toast.pasteUnsupported.title": "지원되지 않는 첨부 파일",
"prompt.toast.attachmentDuplicate.title": "이 파일은 이미 업로드되었습니다",
"prompt.toast.pasteUnsupported.description": "이미지, PDF 또는 텍스트 파일만 첨부할 수 있습니다.",
"prompt.toast.modelAgentRequired.title": "에이전트 및 모델 선택",
"prompt.toast.modelAgentRequired.description": "프롬프트를 보내기 전에 에이전트와 모델을 선택하세요.",
@@ -591,15 +588,15 @@ export const dict = {
"settings.general.row.followup.title": "후속 조치 동작",
"settings.general.row.followup.description": "후속 프롬프트를 즉시 실행할지 대기열에 넣을지 선택하세요",
"settings.general.row.followup.option.queue": "대기열",
"settings.general.row.followup.option.steer": "즉시 반영",
"settings.general.row.followup.option.steer": "조종",
"settings.general.row.reasoningSummaries.title": "추론 요약 표시",
"settings.general.row.reasoningSummaries.description": "타임라인에 모델 추론 요약 표시",
"settings.general.row.shellToolPartsExpanded.title": "shell 도구 항목 펼치기",
"settings.general.row.shellToolPartsExpanded.title": "shell 도구 파트 펼치기",
"settings.general.row.shellToolPartsExpanded.description":
"타임라인에서 기본적으로 shell 도구 항목을 펼친 상태로 표시합니다",
"settings.general.row.editToolPartsExpanded.title": "edit 도구 항목 펼치기",
"타임라인에서 기본적으로 shell 도구 파트를 펼친 상태로 표시합니다",
"settings.general.row.editToolPartsExpanded.title": "edit 도구 파트 펼치기",
"settings.general.row.editToolPartsExpanded.description":
"타임라인에서 기본적으로 edit, write, patch 도구 항목을 펼친 상태로 표시합니다",
"타임라인에서 기본적으로 edit, write, patch 도구 파트를 펼친 상태로 표시합니다",
"settings.general.row.wayland.title": "네이티브 Wayland 사용",
"settings.general.row.wayland.description": "Wayland에서 X11 폴백을 비활성화합니다. 다시 시작해야 합니다.",
"settings.general.row.wayland.tooltip":
@@ -726,8 +723,8 @@ export const dict = {
"settings.permissions.tool.bash.description": "셸 명령어 실행",
"settings.permissions.tool.task.title": "작업",
"settings.permissions.tool.task.description": "하위 에이전트 실행",
"settings.permissions.tool.skill.title": "스킬",
"settings.permissions.tool.skill.description": "이름으로 스킬 불러오기",
"settings.permissions.tool.skill.title": "기술",
"settings.permissions.tool.skill.description": "이름으로 기술 로드",
"settings.permissions.tool.lsp.title": "LSP",
"settings.permissions.tool.lsp.description": "언어 서버 쿼리 실행",
"settings.permissions.tool.todowrite.title": "할 일 쓰기",
@@ -798,9 +795,6 @@ export const dict = {
"session.question.progress": "{{total}}개의 질문 중 {{current}}개",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "파일 탐색기",
"session.header.reveal.finder": "Finder에서 보기",
"session.header.reveal.fileExplorer": "파일 탐색기에서 보기",
"session.header.reveal.containingFolder": "이 항목이 있는 폴더 열기",
"session.header.open.fileManager": "파일 관리자",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
@@ -962,7 +956,7 @@ export const dict = {
"home.sessions.group.today": "오늘",
"home.sessions.group.yesterday": "어제",
"home.sessions.group.older": "이전",
"home.providerTip": "75개 이상의 공급자에 연결하여 Claude, GPT, Gemini 등의 다른 모델을 사용하세요",
"home.providerTip": "75개 이상의 제공업체에 연결하여 Claude, GPT, Gemini 등의 다른 모델을 사용하세요",
"session.tab.unknown": "알 수 없는 세션",
"session.error.notFound": "이 세션을 찾을 수 없습니다",
@@ -1005,9 +999,8 @@ export const dict = {
"settings.general.row.showStatus.description": "제목 표시줄에 서버 상태 버튼 표시",
"settings.general.row.mobileTitlebarBottom.title": "하단 탐색",
"settings.general.row.mobileTitlebarBottom.description": "모바일에서 제목 표시줄과 세션 탭을 화면 하단에 배치",
"settings.general.row.showCustomAgents.title": "에이전트 표시",
"settings.general.row.showCustomAgents.description":
"입력창에서 에이전트를 전환합니다. 숨기면 기본적으로 Build 에이전트를 사용합니다.",
"settings.general.row.showCustomAgents.title": "사용자 지정 에이전트",
"settings.general.row.showCustomAgents.description": "입력창에 에이전트 선택기 표시",
"settings.general.row.newInterface.title": "새 레이아웃",
"settings.general.row.newInterface.badge": "신규",
"settings.general.row.newInterface.description":
-1034
View File
@@ -1,1034 +0,0 @@
export const dict = {
"command.category.suggested": "Voorgesteld",
"command.category.view": "Weergave",
"command.category.project": "Project",
"command.category.provider": "Aanbieder",
"command.category.server": "Server",
"command.category.session": "Sessie",
"command.category.theme": "Thema",
"command.category.language": "Taal",
"command.category.file": "Bestand",
"command.category.context": "Context",
"command.category.terminal": "Terminal",
"command.category.model": "Model",
"command.category.mcp": "MCP",
"command.category.agent": "Agent",
"command.category.permissions": "Machtigingen",
"command.category.workspace": "Werkruimte",
"command.category.settings": "Instellingen",
"theme.scheme.system": "Systeem",
"theme.scheme.light": "Licht",
"theme.scheme.dark": "Donker",
"command.sidebar.toggle": "Zijbalk tonen of verbergen",
"command.project.open": "Project openen",
"command.project.previous": "Vorig project",
"command.project.next": "Volgende project",
"command.project.index": "Ga naar project {{index}}",
"command.provider.connect": "Verbinding maken met aanbieder",
"command.server.switch": "Van server wisselen",
"command.settings.open": "Instellingen openen",
"command.session.previous": "Vorige sessie",
"command.session.next": "Volgende sessie",
"command.session.previous.unseen": "Vorige ongelezen sessie",
"command.session.next.unseen": "Volgende ongelezen sessie",
"command.session.archive": "Sessie archiveren",
"command.palette": "Commandopalet",
"command.theme.cycle": "Volgend thema",
"command.theme.set": "Gebruik thema: {{theme}}",
"command.theme.scheme.cycle": "Volgend kleurenschema",
"command.theme.scheme.set": "Gebruik kleurenschema: {{scheme}}",
"command.language.cycle": "Volgende taal",
"command.language.set": "Gebruik taal: {{language}}",
"command.session.new": "Nieuwe sessie",
"command.file.open": "Bestand openen",
"command.tab.close": "Tabblad sluiten",
"command.tab.reopenClosed": "Gesloten tabblad opnieuw openen",
"command.context.addSelection": "Voeg selectie toe aan context",
"command.context.addSelection.description": "Voeg geselecteerde regels uit het huidige bestand toe",
"command.input.focus": "Invoerveld activeren",
"command.terminal.toggle": "Terminal tonen of verbergen",
"command.fileTree.toggle": "Bestandsstructuur tonen of verbergen",
"command.review.toggle": "Beoordeling tonen of verbergen",
"command.terminal.new": "Nieuwe terminal",
"command.terminal.new.description": "Maak een nieuw terminaltabblad",
"command.steps.toggle": "Stappen tonen of verbergen",
"command.steps.toggle.description": "Toon of verberg stappen voor het huidige bericht",
"command.message.previous": "Vorig bericht",
"command.message.previous.description": "Ga naar het vorige gebruikersbericht",
"command.message.next": "Volgend bericht",
"command.message.next.description": "Ga naar het volgende gebruikersbericht",
"command.model.choose": "Kies model",
"command.model.choose.description": "Selecteer een ander model",
"command.mcp.toggle": "MCP's in- of uitschakelen",
"command.mcp.toggle.description": "MCP's in- of uitschakelen",
"command.agent.cycle": "Volgende agent",
"command.agent.cycle.description": "Schakel over naar de volgende agent",
"command.agent.cycle.reverse": "Vorige agent",
"command.agent.cycle.reverse.description": "Schakel over naar de vorige agent",
"command.model.variant.cycle": "Volgend denkniveau",
"command.model.variant.cycle.description": "Ga naar het volgende inspanningsniveau",
"command.prompt.mode.shell": "Shell",
"command.prompt.mode.normal": "Prompt",
"command.permissions.autoaccept.enable": "Machtigingen automatisch accepteren",
"command.permissions.autoaccept.disable": "Stop met het automatisch accepteren van machtigingen",
"command.workspace.toggle": "Werkruimten in- of uitschakelen",
"command.workspace.toggle.description": "Schakel meerdere werkruimten in de zijbalk in of uit",
"command.session.undo": "Ongedaan maken",
"command.session.undo.description": "Maak het laatste bericht ongedaan",
"command.session.redo": "Opnieuw uitvoeren",
"command.session.redo.description": "Voer het laatste ongedaan gemaakte bericht opnieuw uit",
"command.session.compact": "Sessie comprimeren",
"command.session.compact.description": "Vat de sessie samen om de contextgrootte te verkleinen",
"command.session.fork": "Afsplitsen vanaf bericht",
"command.session.fork.description": "Maak een nieuwe sessie op basis van een eerder bericht",
"command.session.share": "Sessie delen",
"command.session.share.description": "Deel deze sessie en kopieer de URL naar het klembord",
"command.session.unshare": "Sessie niet meer delen",
"command.session.unshare.description": "Stop met het delen van deze sessie",
"palette.search.placeholder": "Zoek naar bestanden, opdrachten en sessies",
"palette.search.placeholder.home": "Opdrachten en sessies zoeken",
"palette.empty": "Geen resultaten gevonden",
"palette.group.commands": "Commando's",
"palette.group.files": "Bestanden",
"dialog.provider.search.placeholder": "Aanbieders zoeken",
"dialog.provider.empty": "Geen aanbieders gevonden",
"dialog.provider.group.popular": "Populair",
"dialog.provider.group.other": "Anders",
"dialog.provider.custom.label": "Aangepaste OpenAI-compatibele aanbieder",
"dialog.provider.tag.recommended": "Aanbevolen",
"dialog.provider.opencode.note": "Samengestelde modellen, waaronder Claude, GPT, Gemini en meer",
"dialog.provider.opencode.tagline": "Betrouwbare geoptimaliseerde modellen",
"dialog.provider.opencodeGo.tagline": "Goedkoop abonnement voor iedereen",
"dialog.provider.anthropic.note": "Directe toegang tot Claude-modellen, inclusief Pro en Max",
"dialog.provider.copilot.note": "AI-modellen voor codeerondersteuning via GitHub Copilot",
"dialog.provider.openai.note": "GPT-modellen voor snelle, capabele algemene AI-taken",
"dialog.provider.google.note": "Gemini-modellen voor snelle, gestructureerde reacties",
"dialog.provider.openrouter.note": "Toegang tot alle ondersteunde modellen via één aanbieder",
"dialog.provider.vercel.note": "Uniforme toegang tot AI-modellen met slimme routering",
"dialog.model.select.title": "Selecteer model",
"dialog.model.search.placeholder": "Zoek modellen",
"dialog.model.empty": "Geen modelresultaten",
"dialog.model.manage": "Beheer modellen",
"dialog.model.manage.description": "Pas aan welke modellen in de modelkiezer verschijnen.",
"dialog.model.manage.provider.toggle": "Alle {{provider}}-modellen in- of uitschakelen",
"dialog.model.unpaid.freeModels.title": "Gratis modellen geleverd door OpenCode",
"dialog.model.unpaid.addMore.title": "Voeg meer modellen toe van populaire aanbieders",
"dialog.model.unpaid.viewMoreProviders": "Bekijk nog 70+ aanbieders",
"dialog.provider.viewAll": "Toon meer aanbieders",
"provider.connect.title": "Verbinding maken met {{provider}}",
"provider.connect.title.anthropicProMax": "Inloggen met Claude Pro/Max",
"provider.connect.selectMethod": "Selecteer de aanmeldingsmethode voor {{provider}}.",
"provider.connect.method.apiKey": "API-sleutel",
"provider.connect.status.inProgress": "Autorisatie in behandeling...",
"provider.connect.status.waiting": "Wachten op autorisatie...",
"provider.connect.status.failed": "Autorisatie mislukt: {{error}}",
"provider.connect.apiKey.description":
"Voer je {{provider}}-API-sleutel in om je account te koppelen en {{provider}}-modellen in OpenCode te gebruiken.",
"provider.connect.apiKey.label": "{{provider}}-API-sleutel",
"provider.connect.apiKey.placeholder": "API-sleutel",
"provider.connect.apiKey.required": "API-sleutel is vereist",
"provider.connect.opencodeZen.line1":
"OpenCode Zen geeft je toegang tot een samengestelde set betrouwbare, geoptimaliseerde modellen voor codeeragenten.",
"provider.connect.opencodeZen.line2":
"Met één API-sleutel krijg je toegang tot modellen zoals Claude, GPT, Gemini, GLM en meer.",
"provider.connect.opencodeZen.visit.prefix": "Ga naar ",
"provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
"provider.connect.opencodeZen.visit.suffix": " om je API-sleutel op te halen.",
"provider.connect.oauth.code.visit.prefix": "Ga naar ",
"provider.connect.oauth.code.visit.link": "deze link",
"provider.connect.oauth.code.visit.suffix":
" om je autorisatiecode op te halen, je account te koppelen en {{provider}}-modellen in OpenCode te gebruiken.",
"provider.connect.oauth.code.label": "{{method}}-autorisatiecode",
"provider.connect.oauth.code.placeholder": "Autorisatiecode",
"provider.connect.oauth.code.required": "Autorisatiecode is vereist",
"provider.connect.oauth.code.invalid": "Ongeldige autorisatiecode",
"provider.connect.oauth.auto.visit.prefix": "Ga naar ",
"provider.connect.oauth.auto.visit.link": "deze link",
"provider.connect.oauth.auto.visit.suffix":
" en voer de onderstaande code in om je account te koppelen en {{provider}}-modellen in OpenCode te gebruiken.",
"provider.connect.oauth.auto.confirmationCode": "Bevestigingscode",
"provider.connect.toast.connected.title": "Verbonden met {{provider}}",
"provider.connect.toast.connected.description": "{{provider}}-modellen zijn nu beschikbaar voor gebruik.",
"provider.custom.title": "Aangepaste aanbieder",
"provider.custom.description.prefix": "Configureer een OpenAI-compatibele aanbieder. Bekijk de ",
"provider.custom.description.link": "documentatie over aanbiedersconfiguratie",
"provider.custom.description.suffix": ".",
"provider.custom.field.providerID.label": "Aanbieder-ID",
"provider.custom.field.providerID.placeholder": "myprovider",
"provider.custom.field.providerID.description": "Kleine letters, cijfers, koppeltekens of onderstrepingstekens",
"provider.custom.field.name.label": "Weergavenaam",
"provider.custom.field.name.placeholder": "Mijn AI-aanbieder",
"provider.custom.field.baseURL.label": "Basis-URL",
"provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1",
"provider.custom.field.apiKey.label": "API-sleutel",
"provider.custom.field.apiKey.placeholder": "API-sleutel",
"provider.custom.field.apiKey.description": "Optioneel. Laat leeg als je de authenticatie via headers beheert.",
"provider.custom.models.label": "Modellen",
"provider.custom.models.id.label": "ID",
"provider.custom.models.id.placeholder": "model-id",
"provider.custom.models.name.label": "Naam",
"provider.custom.models.name.placeholder": "Weergavenaam",
"provider.custom.models.remove": "Model verwijderen",
"provider.custom.models.add": "Voeg model toe",
"provider.custom.headers.label": "Headers (optioneel)",
"provider.custom.headers.key.label": "Header",
"provider.custom.headers.key.placeholder": "Header-Naam",
"provider.custom.headers.value.label": "Waarde",
"provider.custom.headers.value.placeholder": "waarde",
"provider.custom.headers.remove": "Header verwijderen",
"provider.custom.headers.add": "Header toevoegen",
"provider.custom.error.providerID.required": "Aanbieder-ID is vereist",
"provider.custom.error.providerID.format": "Gebruik kleine letters, cijfers, koppeltekens of onderstrepingstekens",
"provider.custom.error.providerID.exists": "Die aanbieder-ID bestaat al",
"provider.custom.error.name.required": "Weergavenaam is vereist",
"provider.custom.error.baseURL.required": "Basis-URL is vereist",
"provider.custom.error.baseURL.format": "Moet beginnen met http:// of https://",
"provider.custom.error.required": "Vereist",
"provider.custom.error.duplicate": "Duplicaat",
"provider.disconnect.toast.disconnected.title": "Verbinding met {{provider}} verbroken",
"provider.disconnect.toast.disconnected.description": "{{provider}}-modellen zijn niet langer beschikbaar.",
"model.tag.free": "Gratis",
"model.tag.latest": "Nieuwste",
"model.provider.anthropic": "Anthropic",
"model.provider.openai": "OpenAI",
"model.provider.google": "Google",
"model.provider.xai": "xAI",
"model.provider.meta": "Meta",
"model.input.text": "tekst",
"model.input.image": "afbeelding",
"model.input.audio": "audio",
"model.input.video": "video",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Staat toe: {{inputs}}",
"model.tooltip.context.label": "Context",
"model.tooltip.inputs": "Invoer",
"model.tooltip.model": "Model",
"model.tooltip.provider": "Aanbieder",
"model.tooltip.reasoning": "Redenering",
"model.tooltip.reasoning.allowed": "Maakt redeneren mogelijk",
"model.tooltip.reasoning.none": "Geen redenering",
"model.tooltip.context": "Contextlimiet {{limit}}",
"common.search.placeholder": "Zoeken",
"common.goBack": "Terug navigeren",
"common.goForward": "Vooruit navigeren",
"common.loading": "Laden",
"common.loading.ellipsis": "...",
"common.cancel": "Annuleer",
"common.clear": "Wissen",
"common.open": "Openen",
"common.connect": "Verbinden",
"common.disconnect": "Verbinding verbreken",
"common.continue": "Doorgaan",
"common.submit": "Verzenden",
"common.save": "Opslaan",
"common.saving": "Opslaan...",
"common.default": "Standaard",
"common.attachment": "bijlage",
"prompt.placeholder.shell": "Voer de shell-opdracht in... {{example}}",
"prompt.placeholder.normal": 'Vraag wat je wilt... "{{example}}"',
"prompt.placeholder.simple": "Vraag wat je wilt...",
"prompt.placeholder.summarizeComments": "Opmerkingen samenvatten…",
"prompt.placeholder.summarizeComment": "Opmerking samenvatten…",
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "esc om af te sluiten",
"session.child.promptDisabled": "Je kunt geen prompts naar subagentsessies sturen.",
"session.child.backToParent": "Terug naar de hoofdsessie.",
"prompt.example.1": "Repareer een TODO in de codebase",
"prompt.example.2": "Wat is de tech-stack van dit project?",
"prompt.example.3": "Herstel kapotte tests",
"prompt.example.4": "Leg uit hoe authenticatie werkt",
"prompt.example.5": "Vind en repareer beveiligingsproblemen",
"prompt.example.6": "Voeg eenheidstests toe voor de gebruikersservice",
"prompt.example.7": "Refactoreer deze functie om beter leesbaar te zijn",
"prompt.example.8": "Wat betekent deze fout?",
"prompt.example.9": "Help me dit probleem te debuggen",
"prompt.example.10": "Genereer API-documentatie",
"prompt.example.11": "Optimaliseer databasequery's",
"prompt.example.12": "Voeg invoervalidatie toe",
"prompt.example.13": "Maak een nieuwe component voor...",
"prompt.example.14": "Hoe deploy ik dit project?",
"prompt.example.15": "Controleer mijn code op best practices",
"prompt.example.16": "Voeg foutafhandeling toe aan deze functie",
"prompt.example.17": "Leg dit regex-patroon uit",
"prompt.example.18": "Converteer dit naar TypeScript",
"prompt.example.19": "Voeg logboekregistratie toe aan de hele codebase",
"prompt.example.20": "Welke afhankelijkheden zijn verouderd?",
"prompt.example.21": "Help me een migratiescript te schrijven",
"prompt.example.22": "Implementeer caching voor dit eindpunt",
"prompt.example.23": "Voeg paginering toe aan deze lijst",
"prompt.example.24": "Maak een CLI-opdracht voor...",
"prompt.example.25": "Hoe werken omgevingsvariabelen hier?",
"prompt.popover.emptyResults": "Geen overeenkomende resultaten",
"prompt.popover.emptyCommands": "Geen overeenkomende opdrachten",
"prompt.dropzone.label": "Zet hier afbeeldingen, pdf's of tekstbestanden neer",
"prompt.dropzone.file.label": "Zet neer om het bestand met @ te vermelden",
"prompt.slash.badge.custom": "aangepast",
"prompt.slash.badge.skill": "vaardigheid",
"prompt.slash.badge.mcp": "mcp",
"prompt.context.active": "actief",
"prompt.context.includeActiveFile": "Actief bestand opnemen",
"prompt.context.removeActiveFile": "Verwijder actief bestand uit context",
"prompt.context.removeFile": "Bestand uit context verwijderen",
"prompt.action.attachFile": "Bestanden toevoegen",
"prompt.menu.addImagesAndFiles": "Voeg bestanden toe en meer",
"prompt.menu.imagesAndFiles": "Afbeeldingen en bestanden",
"prompt.menu.commands": "Commando's",
"prompt.menu.context": "Context",
"prompt.menu.shellCommand": "Shell-commando",
"prompt.attachment.remove": "Bijlage verwijderen",
"prompt.action.send": "Verzenden",
"prompt.action.stop": "Stop",
"prompt.toast.pasteUnsupported.title": "Niet-ondersteunde bijlage",
"prompt.toast.pasteUnsupported.description":
"Hier kunnen alleen afbeeldingen, pdf's of tekstbestanden worden bijgevoegd.",
"prompt.toast.attachmentDuplicate.title": "Dit bestand is al geüpload",
"prompt.toast.modelAgentRequired.title": "Selecteer een agent en model",
"prompt.toast.modelAgentRequired.description": "Kies een agent en model voordat je een prompt verzendt.",
"prompt.toast.worktreeCreateFailed.title": "Kan worktree niet maken",
"prompt.toast.sessionCreateFailed.title": "Kan sessie niet maken",
"prompt.toast.shellSendFailed.title": "Kan shell-opdracht niet verzenden",
"prompt.toast.commandSendFailed.title": "Kan opdracht niet verzenden",
"prompt.toast.promptSendFailed.title": "Kan de prompt niet verzenden",
"prompt.toast.promptSendFailed.description": "Kan sessie niet ophalen",
"dialog.mcp.title": "MCP's",
"dialog.mcp.description": "{{enabled}} of {{total}} ingeschakeld",
"dialog.mcp.empty": "Geen MCP's geconfigureerd",
"dialog.lsp.empty": "LSP's worden automatisch gedetecteerd uit bestandstypen",
"dialog.plugins.empty": "Plug-ins geconfigureerd in opencode.json",
"mcp.status.connected": "verbonden",
"mcp.status.failed": "mislukt",
"mcp.status.needs_auth": "heeft autorisatie nodig",
"mcp.status.disabled": "uitgeschakeld",
"mcp.auth.clickToAuthenticate": "Klik om te authenticeren",
"dialog.fork.empty": "Geen berichten om van af te splitsen",
"dialog.directory.search.placeholder": "Zoek in mappen",
"dialog.directory.empty": "Geen mappen gevonden",
"dialog.directory.action.selectFile": "Selecteer bestand",
"dialog.directory.action.selectFolder": "Selecteer map",
"dialog.directory.root": "Hoofdmap",
"dialog.directory.parent": "Bovenliggende map",
"dialog.directory.readError": "Kan deze map niet lezen",
"app.server.unreachable": "Kan {{server}} niet bereiken",
"app.server.retrying": "Automatisch opnieuw proberen...",
"app.server.otherServers": "Andere servers",
"dialog.server.title": "Servers",
"dialog.server.description": "Wijzig met welke OpenCode-server deze app verbinding maakt.",
"dialog.server.search.placeholder": "Servers zoeken",
"dialog.server.empty": "Nog geen servers",
"dialog.server.add.title": "Server toevoegen",
"dialog.server.add.url": "Serveradres",
"dialog.server.add.placeholder": "http://localhost:4096",
"dialog.server.add.error": "Kan geen verbinding maken met de server",
"dialog.server.add.checking": "Controleren...",
"dialog.server.add.button": "Server toevoegen",
"dialog.server.add.name": "Servernaam (optioneel)",
"dialog.server.add.namePlaceholder": "Lokale host",
"dialog.server.add.username": "Gebruikersnaam (optioneel)",
"dialog.server.add.usernamePlaceholder": "gebruikersnaam",
"dialog.server.add.password": "Wachtwoord (optioneel)",
"dialog.server.add.passwordPlaceholder": "wachtwoord",
"dialog.server.edit.title": "Server bewerken",
"dialog.server.default.title": "Standaardserver",
"dialog.server.default.description":
"Maak verbinding met deze server bij het starten van de app in plaats van een lokale server te starten. Vereist opnieuw opstarten.",
"dialog.server.default.none": "Geen server geselecteerd",
"dialog.server.default.set": "Stel de huidige server in als standaard",
"dialog.server.default.clear": "Wissen",
"dialog.server.action.remove": "Server verwijderen",
"dialog.server.menu.edit": "Bewerken",
"dialog.server.menu.default": "Als standaard instellen",
"dialog.server.menu.defaultRemove": "Standaard verwijderen",
"dialog.server.menu.delete": "Verwijderen",
"dialog.server.current": "Huidige server",
"dialog.server.status.default": "Standaard",
"wsl.server.add": "WSL-server toevoegen",
"wsl.server.addShort": "WSL toevoegen",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "WSL-server",
"wsl.server.retryStart": "Opnieuw proberen te starten",
"wsl.server.updating": "Updaten...",
"wsl.onboarding.step.distro": "Kies distro",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "WSL controleren...",
"wsl.onboarding.restartRequired": "Windows moet opnieuw worden opgestart om de installatie van WSL te voltooien.",
"wsl.onboarding.ready": "WSL is klaar.",
"wsl.onboarding.required": "WSL is vereist om door te gaan.",
"wsl.onboarding.checkingDistros": "Distributies controleren...",
"wsl.onboarding.installingDistro": "{{distro}} installeren...",
"wsl.onboarding.checkingDistro": "{{distro}} controleren...",
"wsl.onboarding.listingDistros": "Lijst met distributies ophalen...",
"wsl.onboarding.distroReady": "{{distro}} is klaar.",
"wsl.onboarding.distroNotInstalled": "{{distro}} is nog niet geïnstalleerd.",
"wsl.onboarding.openDistroOnce": "Open {{distro}} één keer om de installatie te voltooien.",
"wsl.onboarding.finishingDistro": "Installatie van {{distro}} voltooien.",
"wsl.onboarding.pickDistro": "Kies een distributie of installeer er hieronder een.",
"wsl.onboarding.checkingOpencode": "OpenCode controleren...",
"wsl.onboarding.checkingOpencodeIn": "OpenCode controleren in {{distro}}...",
"wsl.onboarding.updatingOpencode": "OpenCode bijwerken...",
"wsl.onboarding.updatingOpencodeIn": "OpenCode bijwerken in {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "Werk OpenCode bij in {{distro}}.",
"wsl.onboarding.updateOpencode": "OpenCode bijwerken",
"wsl.onboarding.opencodeReadyIn": "OpenCode is gereed in {{distro}}.",
"wsl.onboarding.opencodeReady": "OpenCode is klaar.",
"wsl.onboarding.installOpencodeIn": "Installeer OpenCode in {{distro}}.",
"wsl.onboarding.installOpencode": "Installeer OpenCode",
"wsl.onboarding.chooseDistroFirst": "Kies eerst een distributie.",
"wsl.onboarding.loadFailed": "Kan de WSL-status niet laden.",
"wsl.onboarding.loading": "Laden...",
"wsl.onboarding.installedDistros": "Geïnstalleerde distributies",
"wsl.onboarding.checkAgain": "Controleer opnieuw",
"wsl.onboarding.distroStatus.ready": "Klaar",
"wsl.onboarding.distroStatus.checking": "Controleren...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode niet geïnstalleerd",
"wsl.onboarding.distroStatus.missingTools": "bash en curl ontbreken",
"wsl.onboarding.distroStatus.unsupported": "Niet ondersteund · Gebruik WSL 2",
"wsl.onboarding.needAnotherDistro": "Nog een distro nodig?",
"wsl.onboarding.needAnotherDistroHint": "Installeer een Linux-distributie uit de WSL-catalogus",
"wsl.onboarding.wslNotInstalled.title": "WSL niet geïnstalleerd",
"wsl.onboarding.wslNotInstalled.description":
"WSL (Windows-subsysteem voor Linux) is vereist voordat OpenCode een WSL-server kan toevoegen",
"wsl.onboarding.wslUnavailable.title": "WSL niet beschikbaar",
"wsl.onboarding.wslUnavailable.description": "OpenCode kan WSL niet verifiëren op deze machine.",
"wsl.onboarding.installWsl": "Installeer WSL",
"wsl.onboarding.windowsRestartRequired":
"Start Windows opnieuw om de installatie van WSL te voltooien en open vervolgens OpenCode opnieuw.",
"wsl.onboarding.next": "Volgende",
"wsl.onboarding.refresh": "Vernieuwen",
"wsl.onboarding.allDistrosAdded": "Alle geïnstalleerde distributies zijn al toegevoegd.",
"wsl.onboarding.noDistros": "Nog geen distributies gedetecteerd.",
"wsl.onboarding.install": "Installeren",
"wsl.onboarding.installing": "Installeren...",
"wsl.onboarding.installDistro": "Distro installeren",
"wsl.onboarding.searchDistros": "Zoek distributies",
"wsl.onboarding.wsl2Required": "WSL 2 is vereist.",
"wsl.onboarding.toolsRequired": "Deze distro heeft bash en curl nodig.",
"wsl.onboarding.openTerminal": "Terminal openen",
"wsl.onboarding.path": "Pad: {{path}}",
"wsl.onboarding.notFound": "niet gevonden",
"wsl.onboarding.version": "Versie: {{version}}",
"wsl.onboarding.unknown": "onbekend",
"wsl.onboarding.desktopVersion": "desktop {{version}}",
"wsl.onboarding.versionMismatch": "De geïnstalleerde versie komt niet overeen met de versie van de desktop-app.",
"wsl.onboarding.adding": "Toevoegen...",
"server.row.noUsername": "geen gebruikersnaam",
"dialog.project.edit.title": "Project bewerken",
"dialog.project.edit.name": "Naam",
"dialog.project.edit.icon": "Pictogram",
"dialog.project.edit.icon.alt": "Projectpictogram",
"dialog.project.edit.icon.hint": "Klik of sleep een afbeelding",
"dialog.project.edit.icon.recommended": "Aanbevolen: 128x128px",
"dialog.project.edit.color": "Kleur",
"dialog.project.edit.color.select": "Kleur {{color}} selecteren",
"dialog.project.edit.worktree.startup": "Opstartscript voor werkruimte",
"dialog.project.edit.worktree.startup.description":
"Wordt uitgevoerd nadat een nieuwe werkruimte (worktree) is aangemaakt.",
"dialog.project.edit.worktree.startup.placeholder": "bijv. bun install",
"dialog.releaseNotes.action.getStarted": "Ga aan de slag",
"dialog.releaseNotes.action.next": "Volgende",
"dialog.releaseNotes.action.hideFuture": "Laat deze in de toekomst niet zien",
"dialog.releaseNotes.media.alt": "Releasevoorbeeld",
"context.breakdown.title": "Contextanalyse",
"context.breakdown.note":
'Geschatte uitsplitsing van invoertokens. "Overig" omvat gereedschapsdefinities en overhead.',
"context.breakdown.system": "Systeem",
"context.breakdown.user": "Gebruiker",
"context.breakdown.assistant": "Assistent",
"context.breakdown.tool": "Toolaanroepen",
"context.breakdown.other": "Overig",
"context.systemPrompt.title": "Systeemprompt",
"context.rawMessages.title": "Ruwe berichten",
"context.stats.session": "Sessie",
"context.stats.messages": "Berichten",
"context.stats.provider": "Aanbieder",
"context.stats.model": "Model",
"context.stats.limit": "Contextlimiet",
"context.stats.totalTokens": "Totaal tokens",
"context.stats.usage": "Gebruik",
"context.stats.inputTokens": "Invoertokens",
"context.stats.outputTokens": "Uitvoertokens",
"context.stats.reasoningTokens": "Redeneringstokens",
"context.stats.cacheTokens": "Cachetokens (lezen/schrijven)",
"context.stats.userMessages": "Gebruikersberichten",
"context.stats.assistantMessages": "Assistentberichten",
"context.stats.totalCost": "Totale kosten",
"context.stats.sessionCreated": "Sessie gemaakt",
"context.stats.lastActivity": "Laatste activiteit",
"context.usage.tokens": "Tokens",
"context.usage.usage": "Gebruik",
"context.usage.cost": "Kosten",
"context.usage.clickToView": "Klik om de context te bekijken",
"context.usage.view": "Bekijk contextgebruik",
"language.en": "Engels",
"language.zh": "简体中文",
"language.zht": "繁體中文",
"language.ko": "한국어",
"language.de": "Duits",
"language.es": "Spaans",
"language.fr": "Frans",
"language.da": "Dansk",
"language.ja": "日本語",
"language.pl": "Polski",
"language.ru": "Русский",
"language.ar": "العربية",
"language.no": "Norsk",
"language.br": "Portugees (Brazilië)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
"toast.language.title": "Taal",
"toast.language.description": "Overgeschakeld naar {{language}}",
"toast.theme.title": "Thema gewijzigd",
"toast.scheme.title": "Kleurenschema",
"toast.workspace.enabled.title": "Werkruimten ingeschakeld",
"toast.workspace.enabled.description": "Er worden nu meerdere worktrees weergegeven in de zijbalk",
"toast.workspace.disabled.title": "Werkruimten uitgeschakeld",
"toast.workspace.disabled.description": "Alleen de hoofdworktree wordt weergegeven in de zijbalk",
"toast.permissions.autoaccept.on.title": "Machtigingen automatisch accepteren",
"toast.permissions.autoaccept.on.description": "Toestemmingsverzoeken worden automatisch goedgekeurd",
"toast.permissions.autoaccept.off.title": "Machtigingen niet meer automatisch accepteren",
"toast.permissions.autoaccept.off.description": "Machtigingsverzoeken moeten worden goedgekeurd",
"toast.model.none.title": "Geen model geselecteerd",
"toast.model.none.description": "Maak verbinding met een aanbieder om deze sessie samen te vatten",
"toast.file.loadFailed.title": "Kan bestand niet laden",
"toast.file.listFailed.title": "Kan bestanden niet weergeven",
"toast.context.noLineSelection.title": "Geen regels geselecteerd",
"toast.context.noLineSelection.description": "Selecteer eerst een reeks regels in een bestandstabblad.",
"toast.session.share.copyFailed.title": "Kan de URL niet naar het klembord kopiëren",
"toast.session.share.success.title": "Sessie gedeeld",
"toast.session.share.success.description": "Deel-URL gekopieerd naar klembord!",
"toast.session.share.failed.title": "Kan sessie niet delen",
"toast.session.share.failed.description": "Er is een fout opgetreden tijdens het delen van de sessie",
"toast.session.unshare.success.title": "Sessie niet gedeeld",
"toast.session.unshare.success.description": "Sessie is niet meer gedeeld!",
"toast.session.unshare.failed.title": "Kan het delen van de sessie niet ongedaan maken",
"toast.session.unshare.failed.description":
"Er is een fout opgetreden bij het ongedaan maken van het delen van de sessie",
"toast.session.listFailed.title": "Kan sessies voor {{project}} niet laden",
"toast.project.reloadFailed.title": "Kan {{project}} niet opnieuw laden",
"toast.update.title": "Update beschikbaar",
"toast.update.description": "Er is nu een nieuwe versie van OpenCode ({{version}}) beschikbaar om te installeren.",
"toast.update.action.installRestart": "Installeren en opnieuw opstarten",
"toast.update.action.notYet": "Nog niet",
"error.page.title": "Er is iets misgegaan",
"error.page.description": "Er is een fout opgetreden tijdens het laden van de applicatie.",
"error.page.description.localServerStartup": "Er is een fout opgetreden bij het starten van de lokale server.",
"error.page.details.label": "Foutdetails",
"error.page.action.restart": "Opnieuw opstarten",
"error.page.action.report": "Rapporteer fout",
"error.page.action.reported": "Fout gerapporteerd",
"error.page.action.exportLogs": "Logboeken exporteren",
"error.page.action.checking": "Controleren...",
"error.page.action.checkUpdates": "Controleer op updates",
"error.page.action.updateTo": "Update naar {{version}}",
"error.page.circular": "[Circulair]",
"error.page.report.prefix": "Rapporteer deze fout aan het OpenCode-team",
"error.page.report.discord": "op Discord",
"error.page.version": "Versie: {{version}}",
"error.dev.rootNotFound":
"Root-element niet gevonden. Ben je vergeten het toe te voegen aan je index.html? Of is het id-attribuut misschien verkeerd gespeld?",
"error.serverSync.connectFailed": "Kan geen verbinding maken met de server. Draait er een server op `{{url}}`?",
"error.serverSDK.noServerAvailable": "Geen server beschikbaar",
"error.serverSDK.serverNotAvailable": "Server niet beschikbaar",
"error.childStore.persistedCacheCreateFailed": "Kan persistente cache niet maken",
"error.childStore.persistedProjectMetadataCreateFailed": "Kan de persistente projectmetagegevens niet maken",
"error.childStore.persistedProjectIconCreateFailed": "Kan het opgeslagen projectpictogram niet maken",
"error.childStore.storeCreateFailed": "Kan opslag niet maken",
"directory.error.invalidUrl": "Ongeldige map in URL.",
"error.chain.unknown": "Onbekende fout",
"error.server.invalidConfiguration": "Ongeldige configuratie",
"error.chain.causedBy": "Veroorzaakt door:",
"error.chain.apiError": "API-fout",
"error.chain.status": "Status: {{status}}",
"error.chain.retryable": "Opnieuw proberen mogelijk: {{retryable}}",
"error.chain.responseBody": "Antwoordtekst:\n{{body}}",
"error.chain.didYouMean": "Bedoelde je: {{suggestions}}",
"error.chain.modelNotFound": "Model niet gevonden: {{provider}}/{{model}}",
"error.chain.checkConfig": "Controleer de provider- en modelnamen in je configuratie (opencode.json)",
"error.chain.mcpFailed": 'MCP-server "{{name}}" is mislukt. Let op: OpenCode ondersteunt nog geen MCP-authenticatie.',
"error.chain.providerAuthFailed": "Authenticatie bij aanbieder mislukt ({{provider}}): {{message}}",
"error.chain.providerInitFailed":
'Kan provider "{{provider}}" niet initialiseren. Controleer de inloggegevens en configuratie.',
"error.chain.configJsonInvalid": "Configuratiebestand op {{path}} is niet geldig JSON(C)",
"error.chain.configJsonInvalidWithMessage": "Configuratiebestand op {{path}} is niet geldig JSON(C): {{message}}",
"error.chain.configDirectoryTypo":
'De map "{{dir}}" in {{path}} is ongeldig. Hernoem de map naar "{{suggestion}}" of verwijder deze. Dit is een veelvoorkomende typefout.',
"error.chain.configFrontmatterError": "Kan frontmatter in {{path}} niet parseren:\n{{message}}",
"error.chain.configInvalid": "Configuratiebestand op {{path}} is ongeldig",
"error.chain.configInvalidWithMessage": "Configuratiebestand op {{path}} is ongeldig: {{message}}",
"notification.permission.title": "Toestemming vereist",
"notification.permission.description": "{{sessionTitle}} in {{projectName}} heeft toestemming nodig",
"notification.question.title": "Vraag",
"notification.question.description": "{{sessionTitle}} in {{projectName}} heeft een vraag",
"notification.action.goToSession": "Ga naar sessie",
"notification.session.responseReady.title": "Reactie klaar",
"notification.session.error.title": "Sessiefout",
"notification.session.error.fallbackDescription": "Er is een fout opgetreden",
"home.recentProjects": "Recente projecten",
"home.empty.title": "Geen recente projecten",
"home.empty.description": "Ga aan de slag door een lokaal project te openen",
"home.title": "Start",
"home.projects": "Projecten",
"home.project.add": "Project toevoegen",
"home.recentlyClosed": "Onlangs gesloten",
"home.server.collapse": "Serverprojecten samenvouwen",
"home.server.expand": "Serverprojecten uitvouwen",
"home.sessions.search.placeholder": "Zoek sessies",
"home.sessions.search.placeholder.scoped": "Sessies zoeken in {{scope}}",
"home.sessions.search.sessions": "Sessies",
"home.sessions.search.noResults": "Geen sessies gevonden voor {{query}}",
"home.sessions.empty": "Hier nog niets",
"home.sessions.empty.description": "Maak een sessie aan om aan de slag te gaan",
"home.sessions.group.today": "Vandaag",
"home.sessions.group.yesterday": "Gisteren",
"home.sessions.group.older": "Ouder",
"home.providerTip":
"Maak verbinding met meer dan 75 providers om andere modellen te gebruiken, waaronder Claude, GPT, Gemini, enz.",
"session.tab.session": "Sessie",
"session.tab.review": "Beoordeling",
"session.tab.context": "Context",
"session.tab.unknown": "Onbekende sessie",
"session.panel.reviewAndFiles": "Beoordeling en bestanden",
"session.error.notFound": "Deze sessie kan niet worden gevonden",
"session.error.notFound.description": "Dit tabblad verwijst naar een sessie die niet meer bestaat op deze server.",
"session.error.notFound.closeTab": "Tabblad sluiten",
"session.error.serverConnection": "Kan geen verbinding maken met deze server",
"session.review.filesChanged": "Gewijzigde bestanden: {{count}}",
"session.review.change.one": "Wijziging",
"session.review.change.other": "Wijzigingen",
"session.review.loadingChanges": "Wijzigingen laden...",
"session.review.empty": "Er zijn nog geen wijzigingen in deze sessie",
"session.review.noVcs": "Geen Git-versiecontrolesysteem gedetecteerd, wijzigingen niet weergegeven",
"session.review.noVcs.createGit.title": "Maak een Git-repository",
"session.review.noVcs.createGit.description": "Wijzigingen in dit project bijhouden, beoordelen en ongedaan maken",
"session.review.noVcs.createGit.actionLoading": "Git-repository maken...",
"session.review.noVcs.createGit.action": "Maak een Git-repository",
"session.review.noSnapshot":
"Het bijhouden van momentopnamen is uitgeschakeld in de configuratie, dus sessiewijzigingen zijn niet beschikbaar",
"session.review.noChanges": "Geen wijzigingen",
"session.review.noUncommittedChanges": "Er zijn nog geen niet-gecommitteerde wijzigingen",
"session.review.noBranchChanges": "Er zijn nog geen branchwijzigingen",
"session.files.selectToOpen": "Selecteer een bestand om te openen",
"session.files.all": "Alle bestanden",
"session.files.empty": "Geen bestanden",
"session.files.binaryContent": "Binair bestand (inhoud kan niet worden weergegeven)",
"session.messages.renderEarlier": "Geef eerdere berichten weer",
"session.messages.loadingEarlier": "Eerdere berichten laden...",
"session.messages.loadEarlier": "Laad eerdere berichten",
"session.messages.loading": "Berichten laden...",
"session.messages.jumpToLatest": "Ga naar de laatste",
"session.context.addToContext": "Voeg {{selection}} toe aan de context",
"session.todo.title": "Taken",
"session.todo.collapse": "Samenvouwen",
"session.todo.expand": "Uitvouwen",
"session.todo.progress": "{{done}} van {{total}} taken voltooid",
"session.question.progress": "{{current}} van {{total}} vragen",
"session.question.minimize": "Minimaliseer de vraag",
"session.question.restore": "Vraag herstellen",
"session.question.pending.one": "{{count}} openstaande vraag",
"session.question.pending.other": "{{count}} openstaande vragen",
"session.followupDock.summary.one": "{{count}} bericht in de wachtrij",
"session.followupDock.summary.other": "{{count}} berichten in de wachtrij",
"session.followupDock.sendNow": "Verstuur nu",
"session.followupDock.edit": "Bewerken",
"session.followupDock.collapse": "In de wachtrij geplaatste berichten samenvouwen",
"session.followupDock.expand": "Berichten in de wachtrij uitvouwen",
"session.revertDock.summary.one": "{{count}} teruggedraaid bericht",
"session.revertDock.summary.other": "{{count}} teruggedraaide berichten",
"session.revertDock.collapse": "Teruggedraaide berichten samenvouwen",
"session.revertDock.expand": "Teruggedraaide berichten uitvouwen",
"session.revertDock.restore": "Bericht herstellen",
"session.new.title": "Bouw wat je wilt",
"session.new.project.new": "Nieuw project",
"session.new.project.search": "Zoek projecten",
"session.new.project.add": "Project toevoegen",
"session.new.worktree.main": "Hoofdbranch",
"session.new.worktree.mainWithBranch": "Hoofdbranch ({{branch}})",
"session.new.worktree.create": "Nieuwe worktree maken",
"session.new.workspace.runIn": "Sessie uitvoeren in",
"session.new.workspace.triggerLocal": "Lokaal",
"session.new.workspace.local": "Lokale repository",
"session.new.workspace.existing": "Werkruimte…",
"session.new.git.none": "Geen Git",
"session.new.lastModified": "Laatst gewijzigd",
"session.header.search.placeholder": "Zoek {{project}}",
"session.header.searchFiles": "Zoek bestanden",
"session.header.openIn": "Openen in",
"session.header.open.action": "Open {{app}}",
"session.header.open.ariaLabel": "Openen in {{app}}",
"session.header.open.menu": "Opties openen",
"session.header.open.copyPath": "Kopieer pad",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "Bestandsverkenner",
"session.header.open.fileManager": "Bestandsbeheer",
"session.header.reveal.finder": "Tonen in Finder",
"session.header.reveal.fileExplorer": "Weergeven in Verkenner",
"session.header.reveal.containingFolder": "Bijbehorende map openen",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
"session.header.open.app.zed": "Zed",
"session.header.open.app.textmate": "TextMate",
"session.header.open.app.antigravity": "Antigravity",
"session.header.open.app.terminal": "Terminal",
"session.header.open.app.iterm2": "iTerm2",
"session.header.open.app.ghostty": "Ghostty",
"session.header.open.app.warp": "Warp",
"session.header.open.app.xcode": "Xcode",
"session.header.open.app.androidStudio": "Android Studio",
"session.header.open.app.powershell": "PowerShell",
"session.header.open.app.sublimeText": "Sublime Text",
"status.popover.trigger": "Status",
"status.popover.ariaLabel": "Serverconfiguraties",
"status.popover.tab.servers": "Servers",
"status.popover.tab.mcp": "MCP",
"status.popover.tab.lsp": "LSP",
"status.popover.tab.plugins": "Plug-ins",
"status.popover.action.manageServers": "Beheer servers",
"session.share.popover.title": "Publiceer op internet",
"session.share.popover.description.shared":
"Deze sessie is openbaar op internet. Iedereen met de link heeft toegang.",
"session.share.popover.description.unshared":
"Deel de sessie openbaar op internet. Iedereen met de link krijgt toegang.",
"session.share.action.share": "Deel",
"session.share.action.publish": "Publiceren",
"session.share.action.publishing": "Publiceren...",
"session.share.action.unpublish": "Publicatie ongedaan maken",
"session.share.action.unpublishing": "Publicatie ongedaan maken...",
"session.share.action.view": "Bekijk",
"session.share.copy.copied": "Gekopieerd",
"session.share.copy.copyLink": "Kopieer link",
"lsp.tooltip.none": "Geen LSP-servers",
"lsp.label.connected": "{{count}} LSP",
"prompt.loading": "Prompt laden...",
"terminal.loading": "Terminal laden...",
"terminal.title": "Terminal",
"terminal.title.numbered": "Terminal {{number}}",
"terminal.close": "Terminal sluiten",
"terminal.connectionLost.title": "Verbinding verloren",
"terminal.connectionLost.abnormalClose": "WebSocket abnormaal gesloten: {{code}}",
"terminal.connectionLost.description":
"De terminalverbinding is onderbroken. Dit kan gebeuren wanneer de server opnieuw wordt opgestart.",
"common.closeTab": "Tabblad sluiten",
"common.dismiss": "Negeren",
"common.moreCountSuffix": " (+{{count}} meer)",
"common.requestFailed": "Verzoek mislukt",
"common.moreOptions": "Meer opties",
"common.learnMore": "Meer informatie",
"common.rename": "Hernoemen",
"common.reset": "Opnieuw instellen",
"common.archive": "Archiveren",
"common.delete": "Verwijderen",
"common.close": "Sluiten",
"common.edit": "Bewerken",
"common.loadMore": "Meer laden",
"common.key.esc": "ESC",
"common.key.ctrl": "Ctrl",
"common.key.alt": "Alt",
"common.key.shift": "Shift",
"common.key.meta": "Meta",
"common.key.space": "Spatie",
"common.key.backspace": "Backspace",
"common.key.enter": "Enter",
"common.key.tab": "Tab",
"common.key.delete": "Verwijderen",
"common.key.home": "Home",
"common.key.end": "Einde",
"common.key.pageUp": "Pagina omhoog",
"common.key.pageDown": "Pagina omlaag",
"common.key.insert": "Invoegen",
"common.unknown": "onbekend",
"common.time.justNow": "Zojuist",
"common.time.minutesAgo.short": "{{count}}m geleden",
"common.time.hoursAgo.short": "{{count}}h geleden",
"common.time.daysAgo.short": "{{count}}d geleden",
"sidebar.menu.toggle": "Menu tonen of verbergen",
"sidebar.nav.projectsAndSessions": "Projecten en sessies",
"sidebar.settings": "Instellingen",
"sidebar.help": "Hulp",
"sidebar.workspaces.enable": "Schakel werkruimten in",
"sidebar.workspaces.disable": "Schakel werkruimten uit",
"sidebar.gettingStarted.title": "Aan de slag",
"sidebar.gettingStarted.line1": "OpenCode bevat gratis modellen, zodat je direct aan de slag kunt.",
"sidebar.gettingStarted.line2":
"Maak verbinding met een aanbieder om modellen te gebruiken, waaronder Claude, GPT en Gemini.",
"sidebar.project.recentSessions": "Recente sessies",
"sidebar.project.viewAllSessions": "Bekijk alle sessies",
"sidebar.project.clearNotifications": "Meldingen wissen",
"sidebar.empty.title": "Geen projecten geopend",
"sidebar.empty.description": "Open een project om aan de slag te gaan",
"debugBar.ariaLabel": "Diagnostiek voor ontwikkelprestaties",
"debugBar.na": "n.v.t.",
"debugBar.nav.label": "NAV",
"debugBar.nav.tip":
"Laatst voltooide routenavigatie naar of binnen een sessiepagina, gemeten vanaf het starten van de router tot de eerste render nadat de navigatie is voltooid.",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "Voortschrijdend aantal frames per seconde over de afgelopen 5 seconden.",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "Slechtste frametijd van de afgelopen 5 seconden.",
"debugBar.jank.label": "JANK",
"debugBar.jank.tip": "Frames van meer dan 32 ms in de afgelopen 5 seconden.",
"debugBar.long.label": "LONG",
"debugBar.long.tip": "Geblokkeerde tijd en aantal lange taken in de afgelopen 5 seconden. Maximale taak: {{max}}.",
"debugBar.delay.label": "VERTRAGING",
"debugBar.delay.tip": "Slechtst waargenomen invoervertraging in de afgelopen 5 seconden.",
"debugBar.inp.label": "INP",
"debugBar.inp.tip":
"Geschatte interactieduur gedurende de afgelopen 5 seconden. Dit is INP-achtig, niet de officiële Web Vitals INP.",
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "Cumulatieve lay-outverschuiving sinds de app is gestart.",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "Gebruikte JS-heap versus heap-limiet. Alleen Chromium.",
"debugBar.mem.tip": "Gebruikte JS-heap versus heaplimiet. {{used}} van {{limit}}.",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "Desktop",
"settings.section.server": "Server",
"settings.tab.general": "Algemeen",
"settings.tab.shortcuts": "Snelkoppelingen",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "WSL-integratie",
"settings.desktop.wsl.description": "Voer de OpenCode-server uit in WSL op Windows.",
"settings.general.section.appearance": "Uiterlijk",
"settings.general.section.advanced": "Geavanceerd",
"settings.general.section.notifications": "Systeemmeldingen",
"settings.general.section.updates": "Updates",
"settings.general.section.sounds": "Geluidseffecten",
"settings.general.section.feed": "Feed",
"settings.general.section.display": "Weergave",
"settings.general.row.language.title": "Taal",
"settings.general.row.language.description": "Wijzig de weergavetaal voor OpenCode",
"settings.general.row.shell.title": "Terminalshell",
"settings.general.row.shell.description": "Shell gebruikt door de terminal- en agenttools",
"settings.general.row.shell.autoDefault": "Automatisch (standaard)",
"settings.general.row.shell.terminalOnly": "alleen terminal",
"settings.general.row.appearance.title": "Uiterlijk",
"settings.general.row.appearance.description": "Pas aan hoe OpenCode eruitziet op je apparaat",
"settings.general.row.colorScheme.title": "Kleurenschema",
"settings.general.row.colorScheme.description":
"Kies of OpenCode het systeemthema, het lichte thema of het donkere thema gebruikt",
"settings.general.row.theme.title": "Thema",
"settings.general.row.theme.description": "Pas het thema van OpenCode aan.",
"settings.general.row.font.title": "Codelettertype",
"settings.general.row.font.description": "Pas het lettertype aan dat in codeblokken wordt gebruikt",
"settings.general.row.terminalFont.title": "Terminal-lettertype",
"settings.general.row.terminalFont.description": "Pas het lettertype aan dat in de terminal wordt gebruikt",
"settings.general.row.uiFont.title": "UI-lettertype",
"settings.general.row.uiFont.description": "Pas het lettertype aan dat in de hele interface wordt gebruikt",
"settings.general.row.followup.title": "Vervolggedrag",
"settings.general.row.followup.description":
"Kies of vervolgprompts de sessie direct bijsturen of in een wachtrij wachten",
"settings.general.row.followup.option.queue": "Wachtrij",
"settings.general.row.followup.option.steer": "Sturen",
"settings.general.row.showFileTree.title": "Bestandsstructuur",
"settings.general.row.showFileTree.description": "Toon het paneel met de bestandsstructuur in sessies",
"settings.general.row.showNavigation.title": "Navigatiebediening",
"settings.general.row.showNavigation.description":
"Toon de knoppen Vorige en Volgende in de titelbalk van de desktop-app",
"settings.general.row.showSearch.title": "Commandopalet",
"settings.general.row.showSearch.description": "Toon de knop voor zoeken en het commandopalet in de titelbalk",
"settings.general.row.showTerminal.title": "Terminal",
"settings.general.row.showTerminal.description": "Toon de terminalknop in de titelbalk van de desktop-app",
"settings.general.row.showStatus.title": "Serverstatus",
"settings.general.row.showStatus.description": "Toon de serverstatusknop in de titelbalk",
"settings.general.row.mobileTitlebarBottom.title": "Navigatie onderaan",
"settings.general.row.mobileTitlebarBottom.description":
"Plaats de titelbalk en sessietabbladen onderaan het scherm op mobiel",
"settings.general.row.showCustomAgents.title": "Toon agent",
"settings.general.row.showCustomAgents.description":
"Schakel tussen agenten in het invoerveld. Indien verborgen wordt standaard de Build-agent gebruikt.",
"settings.general.row.reasoningSummaries.title": "Toon redeneeroverzichten",
"settings.general.row.reasoningSummaries.description":
"Geef samenvattingen van modelredeneringen weer in de tijdlijn",
"settings.general.row.shellToolPartsExpanded.title": "Shelltoolonderdelen uitvouwen",
"settings.general.row.shellToolPartsExpanded.description":
"Toon shelltoolonderdelen standaard uitgevouwen in de tijdlijn",
"settings.general.row.editToolPartsExpanded.title": "Bewerkingstoolonderdelen uitvouwen",
"settings.general.row.editToolPartsExpanded.description":
"Toon bewerkings-, schrijf- en patchtoolonderdelen standaard uitgevouwen in de tijdlijn",
"settings.general.row.newInterface.title": "Nieuwe lay-out",
"settings.general.row.newInterface.badge": "Nieuw",
"settings.general.row.newInterface.description":
"Gebruik de nieuwe tabbladen en home-indeling. Wissel gedurende een beperkte tijd tussen lay-outs.",
"settings.general.row.newInterfaceNotice.title": "Je gebruikt nu de nieuwe lay-out",
"settings.general.row.newInterfaceNotice.description": "De vorige lay-out is niet meer beschikbaar",
"settings.general.row.newInterfaceNotice.dismiss": "Negeren",
"settings.general.row.pinchZoom.title": "Knijp om te zoomen",
"settings.general.row.pinchZoom.description":
"Sta knijp- en Ctrl-scroll-bewegingen op het trackpad toe om in te zoomen",
"settings.general.row.wayland.title": "Native Wayland gebruiken",
"settings.general.row.wayland.description": "Schakel X11-fallback uit op Wayland. Vereist opnieuw opstarten.",
"settings.general.row.wayland.tooltip":
"Op Linux met monitoren met verschillende vernieuwingsfrequenties kan native Wayland stabieler zijn.",
"settings.general.row.releaseNotes.title": "Versienotities",
"settings.general.row.releaseNotes.description": "Pop-ups met nieuwe functies na updates tonen",
"settings.updates.row.startup.title": "Controleer op updates bij het opstarten",
"settings.updates.row.startup.description": "Controleer automatisch op updates wanneer OpenCode wordt gestart",
"settings.updates.row.check.title": "Controleer op updates",
"settings.updates.row.check.description": "Controleer handmatig op updates en installeer deze indien beschikbaar",
"settings.updates.action.checkNow": "Controleer nu",
"settings.updates.action.checking": "Controleren...",
"settings.updates.action.downloading": "Downloaden...",
"settings.updates.action.installing": "Installeren...",
"settings.updates.toast.latest.title": "OpenCode is bijgewerkt",
"settings.updates.toast.latest.description": "Je gebruikt de nieuwste versie van OpenCode.",
"sound.option.none": "Geen",
"sound.option.alert01": "Waarschuwing 01",
"sound.option.alert02": "Waarschuwing 02",
"sound.option.alert03": "Waarschuwing 03",
"sound.option.alert04": "Waarschuwing 04",
"sound.option.alert05": "Waarschuwing 05",
"sound.option.alert06": "Waarschuwing 06",
"sound.option.alert07": "Waarschuwing 07",
"sound.option.alert08": "Waarschuwing 08",
"sound.option.alert09": "Waarschuwing 09",
"sound.option.alert10": "Waarschuwing 10",
"sound.option.bipbop01": "Bip-bop 01",
"sound.option.bipbop02": "Bip-bop 02",
"sound.option.bipbop03": "Bip-bop 03",
"sound.option.bipbop04": "Bip-bop 04",
"sound.option.bipbop05": "Bip-bop 05",
"sound.option.bipbop06": "Bip-bop 06",
"sound.option.bipbop07": "Bip-bop 07",
"sound.option.bipbop08": "Bip-bop 08",
"sound.option.bipbop09": "Bip-bop 09",
"sound.option.bipbop10": "Bip-bop 10",
"sound.option.staplebops01": "Staplebops 01",
"sound.option.staplebops02": "Staplebops 02",
"sound.option.staplebops03": "Staplebops 03",
"sound.option.staplebops04": "Staplebops 04",
"sound.option.staplebops05": "Staplebops 05",
"sound.option.staplebops06": "Staplebops 06",
"sound.option.staplebops07": "Staplebops 07",
"sound.option.nope01": "Nee 01",
"sound.option.nope02": "Nee 02",
"sound.option.nope03": "Nee 03",
"sound.option.nope04": "Nee 04",
"sound.option.nope05": "Nee 05",
"sound.option.nope06": "Nee 06",
"sound.option.nope07": "Nee 07",
"sound.option.nope08": "Nee 08",
"sound.option.nope09": "Nee 09",
"sound.option.nope10": "Nee 10",
"sound.option.nope11": "Nee 11",
"sound.option.nope12": "Nee 12",
"sound.option.yup01": "Ja 01",
"sound.option.yup02": "Ja 02",
"sound.option.yup03": "Ja 03",
"sound.option.yup04": "Ja 04",
"sound.option.yup05": "Ja 05",
"sound.option.yup06": "Ja 06",
"settings.general.notifications.agent.title": "Agent",
"settings.general.notifications.agent.description":
"Toon systeemmelding wanneer de agent klaar is of aandacht nodig heeft",
"settings.general.notifications.permissions.title": "Machtigingen",
"settings.general.notifications.permissions.description": "Systeemmelding weergeven wanneer toestemming vereist is",
"settings.general.notifications.errors.title": "Fouten",
"settings.general.notifications.errors.description": "Systeemmelding weergeven wanneer er een fout optreedt",
"settings.general.sounds.agent.title": "Agent",
"settings.general.sounds.agent.description": "Speel geluid af wanneer de agent klaar is of aandacht nodig heeft",
"settings.general.sounds.permissions.title": "Machtigingen",
"settings.general.sounds.permissions.description": "Speel geluid af wanneer toestemming vereist is",
"settings.general.sounds.errors.title": "Fouten",
"settings.general.sounds.errors.description": "Speel geluid af wanneer er een fout optreedt",
"settings.shortcuts.title": "Sneltoetsen",
"settings.shortcuts.reset.button": "Resetten naar standaardwaarden",
"settings.shortcuts.reset.toast.title": "Snelkoppelingen opnieuw ingesteld",
"settings.shortcuts.reset.toast.description": "Sneltoetsen zijn teruggezet naar de standaardwaarden.",
"settings.shortcuts.conflict.title": "Snelkoppeling al in gebruik",
"settings.shortcuts.conflict.description": "{{keybind}} is al toegewezen aan {{titles}}.",
"settings.shortcuts.unassigned": "Niet toegewezen",
"settings.shortcuts.pressKeys": "Druk op toetsen",
"settings.shortcuts.search.placeholder": "Zoek snelkoppelingen",
"settings.shortcuts.search.empty": "Geen snelkoppelingen gevonden",
"settings.shortcuts.group.general": "Algemeen",
"settings.shortcuts.group.session": "Sessie",
"settings.shortcuts.group.navigation": "Navigatie",
"settings.shortcuts.group.modelAndAgent": "Model en agent",
"settings.shortcuts.group.terminal": "Terminal",
"settings.shortcuts.group.prompt": "Prompt",
"settings.providers.title": "Aanbieders",
"settings.providers.description": "Aanbiederinstellingen kunnen hier worden geconfigureerd.",
"settings.providers.section.connected": "Verbonden aanbieders",
"settings.providers.connected.empty": "Geen verbonden aanbieders",
"settings.providers.connected.environmentDescription": "Verbonden via je omgevingsvariabelen",
"settings.providers.section.popular": "Populaire aanbieders",
"settings.providers.custom.description": "Voeg een OpenAI-compatibele aanbieder toe via de basis-URL.",
"settings.providers.tag.environment": "Omgeving",
"settings.providers.tag.config": "Configuratie",
"settings.providers.tag.custom": "Aangepast",
"settings.providers.tag.other": "Anders",
"settings.models.title": "Modellen",
"settings.models.description": "Modelinstellingen kunnen hier worden geconfigureerd.",
"settings.agents.title": "Agenten",
"settings.agents.description": "Agentinstellingen kunnen hier worden geconfigureerd.",
"settings.commands.title": "Commando's",
"settings.commands.description": "Commando-instellingen kunnen hier worden geconfigureerd.",
"settings.mcp.title": "MCP",
"settings.mcp.description": "MCP-instellingen kunnen hier worden geconfigureerd.",
"settings.permissions.title": "Machtigingen",
"settings.permissions.description": "Bepaal welke tools de server standaard kan gebruiken.",
"settings.permissions.section.tools": "Tools",
"settings.permissions.toast.updateFailed.title": "Kan machtigingen niet bijwerken",
"settings.permissions.action.allow": "Toestaan",
"settings.permissions.action.ask": "Vragen",
"settings.permissions.action.deny": "Weigeren",
"settings.permissions.tool.read.title": "Lees",
"settings.permissions.tool.read.description": "Een bestand lezen (komt overeen met het bestandspad)",
"settings.permissions.tool.edit.title": "Bewerken",
"settings.permissions.tool.edit.description":
"Wijzig bestanden, inclusief bewerkingen, schrijfbewerkingen en patches",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "Bestanden zoeken met globpatronen",
"settings.permissions.tool.grep.title": "Grep",
"settings.permissions.tool.grep.description": "Zoek bestandsinhoud met behulp van reguliere expressies",
"settings.permissions.tool.list.title": "Lijst",
"settings.permissions.tool.list.description": "Geef bestanden in een map weer",
"settings.permissions.tool.bash.title": "Bash",
"settings.permissions.tool.bash.description": "Voer shell-opdrachten uit",
"settings.permissions.tool.task.title": "Taak",
"settings.permissions.tool.task.description": "Start subagenten",
"settings.permissions.tool.skill.title": "Vaardigheid",
"settings.permissions.tool.skill.description": "Laad een vaardigheid op naam",
"settings.permissions.tool.lsp.title": "LSP",
"settings.permissions.tool.lsp.description": "Voer taalserverquery's uit",
"settings.permissions.tool.todowrite.title": "Taken schrijven",
"settings.permissions.tool.todowrite.description": "Werk de takenlijst bij",
"settings.permissions.tool.webfetch.title": "Web ophalen",
"settings.permissions.tool.webfetch.description": "Haal inhoud op van een URL",
"settings.permissions.tool.websearch.title": "Zoeken op internet",
"settings.permissions.tool.websearch.description": "Zoek op internet",
"settings.permissions.tool.external_directory.title": "Externe map",
"settings.permissions.tool.external_directory.description": "Toegang tot bestanden buiten de projectmap",
"settings.permissions.tool.doom_loop.title": "Doom-lus",
"settings.permissions.tool.doom_loop.description": "Herhaalde toolaanroepen met identieke invoer detecteren",
"session.delete.failed.title": "Kan sessie niet verwijderen",
"session.delete.title": "Sessie verwijderen",
"session.delete.confirm": 'Sessie "{{name}}" verwijderen?',
"session.delete.button": "Sessie verwijderen",
"workspace.new": "Nieuwe werkruimte",
"workspace.type.local": "lokaal",
"workspace.type.sandbox": "sandbox",
"workspace.create.failed.title": "Kan werkruimte niet maken",
"workspace.delete.failed.title": "Kan werkruimte niet verwijderen",
"workspace.resetting.title": "Werkruimte opnieuw instellen",
"workspace.resetting.description": "Dit kan een minuut duren.",
"workspace.reset.failed.title": "Kan de werkruimte niet opnieuw instellen",
"workspace.reset.success.title": "Werkruimte opnieuw ingesteld",
"workspace.reset.success.description": "De werkruimte komt nu overeen met de standaardbranch.",
"workspace.error.stillPreparing": "Werkruimte is nog in voorbereiding",
"workspace.status.checking": "Controleren op niet-samengevoegde wijzigingen...",
"workspace.status.error": "Kan de git-status niet verifiëren.",
"workspace.status.clean": "Er zijn geen niet-samengevoegde wijzigingen gedetecteerd.",
"workspace.status.dirty": "Niet-samengevoegde wijzigingen gedetecteerd in deze werkruimte.",
"workspace.delete.title": "Werkruimte verwijderen",
"workspace.delete.confirm": 'Werkruimte "{{name}}" verwijderen?',
"workspace.delete.button": "Werkruimte verwijderen",
"workspace.reset.title": "Werkruimte opnieuw instellen",
"workspace.reset.confirm": 'Werkruimte "{{name}}" opnieuw instellen?',
"workspace.reset.button": "Werkruimte opnieuw instellen",
"workspace.reset.archived.none": "Er worden geen actieve sessies gearchiveerd.",
"workspace.reset.archived.one": "Er wordt 1 sessie gearchiveerd.",
"workspace.reset.archived.many": "{{count}} sessies worden gearchiveerd.",
"workspace.reset.note":
"Hierdoor wordt de werkruimte opnieuw ingesteld zodat deze overeenkomt met de standaardbranch.",
}
+55 -65
View File
@@ -31,8 +31,8 @@ export const dict = {
"command.settings.open": "Åpne innstillinger",
"command.session.previous": "Forrige sesjon",
"command.session.next": "Neste sesjon",
"command.session.previous.unseen": "Forrige uleste sesjon",
"command.session.next.unseen": "Neste uleste sesjon",
"command.session.previous.unseen": "Forrige uleste økt",
"command.session.next.unseen": "Neste uleste økt",
"command.session.archive": "Arkiver sesjon",
"command.palette": "Kommandopalett",
@@ -101,7 +101,6 @@ export const dict = {
"dialog.provider.empty": "Ingen leverandører funnet",
"dialog.provider.group.popular": "Populære",
"dialog.provider.group.other": "Andre",
"dialog.provider.custom.label": "Egendefinert OpenAI-kompatibel leverandør",
"dialog.provider.tag.recommended": "Anbefalt",
"dialog.provider.opencode.note": "Utvalgte modeller inkludert Claude, GPT, Gemini og mer",
"dialog.provider.opencode.tagline": "Pålitelige, optimaliserte modeller",
@@ -122,7 +121,6 @@ export const dict = {
"dialog.model.unpaid.freeModels.title": "Gratis modeller levert av OpenCode",
"dialog.model.unpaid.addMore.title": "Legg til flere modeller fra populære leverandører",
"dialog.model.unpaid.viewMoreProviders": "Se over 70 flere leverandører",
"dialog.provider.viewAll": "Vis flere leverandører",
@@ -134,8 +132,8 @@ export const dict = {
"provider.connect.status.waiting": "Venter på autorisering...",
"provider.connect.status.failed": "Autorisering mislyktes: {{error}}",
"provider.connect.apiKey.description":
"Skriv inn API-nøkkelen din for {{provider}} for å koble til kontoen din og bruke {{provider}}-modeller i OpenCode.",
"provider.connect.apiKey.label": "{{provider}}-API-nøkkel",
"Skriv inn din {{provider}} API-nøkkel for å koble til kontoen din og bruke {{provider}}-modeller i OpenCode.",
"provider.connect.apiKey.label": "{{provider}} API-nøkkel",
"provider.connect.apiKey.placeholder": "API-nøkkel",
"provider.connect.apiKey.required": "API-nøkkel er påkrevd",
"provider.connect.opencodeZen.line1":
@@ -149,7 +147,7 @@ export const dict = {
"provider.connect.oauth.code.visit.link": "denne lenken",
"provider.connect.oauth.code.visit.suffix":
" for å hente autorisasjonskoden din for å koble til kontoen din og bruke {{provider}}-modeller i OpenCode.",
"provider.connect.oauth.code.label": "{{method}}-autorisasjonskode",
"provider.connect.oauth.code.label": "{{method}} autorisasjonskode",
"provider.connect.oauth.code.placeholder": "Autorisasjonskode",
"provider.connect.oauth.code.required": "Autorisasjonskode er påkrevd",
"provider.connect.oauth.code.invalid": "Ugyldig autorisasjonskode",
@@ -170,12 +168,11 @@ export const dict = {
"provider.custom.field.providerID.description": "Små bokstaver, tall, bindestreker eller understreker",
"provider.custom.field.name.label": "Visningsnavn",
"provider.custom.field.name.placeholder": "Min AI-leverandør",
"provider.custom.field.baseURL.label": "Basis-URL",
"provider.custom.field.baseURL.label": "Base-URL",
"provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1",
"provider.custom.field.apiKey.label": "API-nøkkel",
"provider.custom.field.apiKey.placeholder": "API-nøkkel",
"provider.custom.field.apiKey.description":
"Valgfritt. La stå tomt hvis du administrerer autentisering via HTTP-hoder.",
"provider.custom.field.apiKey.description": "Valgfritt. La stå tomt hvis du administrerer autentisering via headers.",
"provider.custom.models.label": "Modeller",
"provider.custom.models.id.label": "ID",
"provider.custom.models.id.placeholder": "modell-id",
@@ -183,18 +180,18 @@ export const dict = {
"provider.custom.models.name.placeholder": "Visningsnavn",
"provider.custom.models.remove": "Fjern modell",
"provider.custom.models.add": "Legg til modell",
"provider.custom.headers.label": "HTTP-hoder (valgfritt)",
"provider.custom.headers.key.label": "HTTP-hode",
"provider.custom.headers.key.placeholder": "Navn på HTTP-hode",
"provider.custom.headers.label": "Headers (valgfritt)",
"provider.custom.headers.key.label": "Header",
"provider.custom.headers.key.placeholder": "Header-Navn",
"provider.custom.headers.value.label": "Verdi",
"provider.custom.headers.value.placeholder": "verdi",
"provider.custom.headers.remove": "Fjern HTTP-hode",
"provider.custom.headers.add": "Legg til HTTP-hode",
"provider.custom.headers.remove": "Fjern header",
"provider.custom.headers.add": "Legg til header",
"provider.custom.error.providerID.required": "Leverandør-ID er påkrevd",
"provider.custom.error.providerID.format": "Bruk små bokstaver, tall, bindestreker eller understreker",
"provider.custom.error.providerID.exists": "Denne leverandør-ID-en finnes allerede",
"provider.custom.error.providerID.exists": "Den leverandør-IDen finnes allerede",
"provider.custom.error.name.required": "Visningsnavn er påkrevd",
"provider.custom.error.baseURL.required": "Basis-URL er påkrevd",
"provider.custom.error.baseURL.required": "Base-URL er påkrevd",
"provider.custom.error.baseURL.format": "Må starte med http:// eller https://",
"provider.custom.error.required": "Påkrevd",
"provider.custom.error.duplicate": "Duplikat",
@@ -227,7 +224,7 @@ export const dict = {
"common.cancel": "Avbryt",
"common.connect": "Koble til",
"common.disconnect": "Koble fra",
"common.continue": "Fortsett",
"common.continue": "Send inn",
"common.submit": "Send inn",
"common.save": "Lagre",
"common.saving": "Lagrer...",
@@ -248,13 +245,13 @@ export const dict = {
"prompt.example.3": "Fiks ødelagte tester",
"prompt.example.4": "Forklar hvordan autentisering fungerer",
"prompt.example.5": "Finn og fiks sikkerhetssårbarheter",
"prompt.example.6": "Legg til enhetstester for brukertjenesten",
"prompt.example.6": "Legg til enhetstester for brukerservicen",
"prompt.example.7": "Refaktorer denne funksjonen for bedre lesbarhet",
"prompt.example.8": "Hva betyr denne feilen?",
"prompt.example.9": "Hjelp meg med å feilsøke dette problemet",
"prompt.example.10": "Generer API-dokumentasjon",
"prompt.example.11": "Optimaliser databasespørringer",
"prompt.example.12": "Legg til inndatavalidering",
"prompt.example.12": "Legg til inputvalidering",
"prompt.example.13": "Lag en ny komponent for...",
"prompt.example.14": "Hvordan deployer jeg dette prosjektet?",
"prompt.example.15": "Gjennomgå koden min for beste praksis",
@@ -264,7 +261,7 @@ export const dict = {
"prompt.example.19": "Legg til logging i hele kodebasen",
"prompt.example.20": "Hvilke avhengigheter er utdaterte?",
"prompt.example.21": "Hjelp meg med å skrive et migreringsskript",
"prompt.example.22": "Implementer hurtigbufring for dette endepunktet",
"prompt.example.22": "Implementer caching for dette endepunktet",
"prompt.example.23": "Legg til paginering i denne listen",
"prompt.example.24": "Lag en CLI-kommando for...",
"prompt.example.25": "Hvordan fungerer miljøvariabler her?",
@@ -274,7 +271,7 @@ export const dict = {
"prompt.dropzone.label": "Slipp bilder, PDF-er eller tekstfiler her",
"prompt.dropzone.file.label": "Slipp for å @nevne fil",
"prompt.slash.badge.custom": "egendefinert",
"prompt.slash.badge.skill": "ferdighet",
"prompt.slash.badge.skill": "skill",
"prompt.slash.badge.mcp": "mcp",
"prompt.context.active": "aktiv",
"prompt.context.includeActiveFile": "Inkluder aktiv fil",
@@ -291,7 +288,6 @@ export const dict = {
"prompt.action.stop": "Stopp",
"prompt.toast.pasteUnsupported.title": "Ikke støttet vedlegg",
"prompt.toast.attachmentDuplicate.title": "Denne filen er allerede lastet opp",
"prompt.toast.pasteUnsupported.description": "Kun bilder, PDF-er eller tekstfiler kan legges ved her.",
"prompt.toast.modelAgentRequired.title": "Velg en agent og modell",
"prompt.toast.modelAgentRequired.description": "Velg en agent og modell før du sender en forespørsel.",
@@ -300,14 +296,14 @@ export const dict = {
"prompt.toast.shellSendFailed.title": "Kunne ikke sende shell-kommando",
"prompt.toast.commandSendFailed.title": "Kunne ikke sende kommando",
"prompt.toast.promptSendFailed.title": "Kunne ikke sende forespørsel",
"prompt.toast.promptSendFailed.description": "Kunne ikke hente sesjon",
"prompt.toast.promptSendFailed.description": "Kunne ikke hente økt",
"dialog.mcp.title": "MCP-er",
"dialog.mcp.description": "{{enabled}} av {{total}} aktivert",
"dialog.mcp.empty": "Ingen MCP-er konfigurert",
"dialog.lsp.empty": "LSP-er automatisk oppdaget fra filtyper",
"dialog.plugins.empty": "Programtillegg konfigurert i opencode.json",
"dialog.plugins.empty": "Plugins konfigurert i opencode.json",
"mcp.status.connected": "tilkoblet",
"mcp.status.failed": "mislyktes",
@@ -368,8 +364,7 @@ export const dict = {
"dialog.project.edit.worktree.startup.placeholder": "f.eks. bun install",
"context.breakdown.title": "Kontekstfordeling",
"context.breakdown.note":
'Omtrentlig fordeling av inndatatokener. "Annet" inkluderer verktøydefinisjoner og overhead.',
"context.breakdown.note": 'Omtrentlig fordeling av input-tokens. "Annet" inkluderer verktøydefinisjoner og overhead.',
"context.breakdown.system": "System",
"context.breakdown.user": "Bruker",
"context.breakdown.assistant": "Assistent",
@@ -384,19 +379,19 @@ export const dict = {
"context.stats.provider": "Leverandør",
"context.stats.model": "Modell",
"context.stats.limit": "Kontekstgrense",
"context.stats.totalTokens": "Totalt antall tokener",
"context.stats.totalTokens": "Totalt antall tokens",
"context.stats.usage": "Forbruk",
"context.stats.inputTokens": "Inndatatokener",
"context.stats.outputTokens": "Utdatatokener",
"context.stats.reasoningTokens": "Resonneringstokener",
"context.stats.cacheTokens": "Hurtigbuffertokener (les/skriv)",
"context.stats.inputTokens": "Input-tokens",
"context.stats.outputTokens": "Output-tokens",
"context.stats.reasoningTokens": "Resonnerings-tokens",
"context.stats.cacheTokens": "Cache-tokens (les/skriv)",
"context.stats.userMessages": "Brukermeldinger",
"context.stats.assistantMessages": "Assistentmeldinger",
"context.stats.totalCost": "Total kostnad",
"context.stats.sessionCreated": "Sesjon opprettet",
"context.stats.lastActivity": "Siste aktivitet",
"context.usage.tokens": "Tokener",
"context.usage.tokens": "Tokens",
"context.usage.usage": "Forbruk",
"context.usage.cost": "Kostnad",
"context.usage.clickToView": "Klikk for å se kontekst",
@@ -427,9 +422,9 @@ export const dict = {
"toast.scheme.title": "Fargevalg",
"toast.workspace.enabled.title": "Arbeidsområder aktivert",
"toast.workspace.enabled.description": "Flere arbeidsområder vises nå i sidefeltet",
"toast.workspace.enabled.description": "Flere worktrees vises nå i sidefeltet",
"toast.workspace.disabled.title": "Arbeidsområder deaktivert",
"toast.workspace.disabled.description": "Kun hovedarbeidsområdet vises i sidefeltet",
"toast.workspace.disabled.description": "Kun hoved-worktree vises i sidefeltet",
"toast.permissions.autoaccept.on.title": "Aksepterer tillatelser automatisk",
"toast.permissions.autoaccept.on.description": "Forespørsler om tillatelse vil bli godkjent automatisk",
@@ -477,7 +472,7 @@ export const dict = {
"error.page.version": "Versjon: {{version}}",
"error.dev.rootNotFound":
"Rotelement ikke funnet. Glemte du å legge det til i index.html? Eller kanskje id-attributtet er feilstavet?",
"Rotelement ikke funnet. Glemte du å legge det til i index.html? Eller kanskje id-attributten er feilstavet?",
"error.serverSync.connectFailed": "Kunne ikke koble til server. Kjører det en server på `{{url}}`?",
"directory.error.invalidUrl": "Ugyldig mappe i URL-en.",
@@ -577,7 +572,7 @@ export const dict = {
"status.popover.tab.servers": "Servere",
"status.popover.tab.mcp": "MCP",
"status.popover.tab.lsp": "LSP",
"status.popover.tab.plugins": "Programtillegg",
"status.popover.tab.plugins": "Plugins",
"status.popover.action.manageServers": "Administrer servere",
"session.share.popover.title": "Publiser på nett",
@@ -617,7 +612,7 @@ export const dict = {
"common.delete": "Slett",
"common.close": "Lukk",
"common.edit": "Rediger",
"common.loadMore": "Last inn flere",
"common.loadMore": "Last flere",
"common.key.esc": "ESC",
"sidebar.menu.toggle": "Veksle meny",
@@ -655,17 +650,16 @@ export const dict = {
"settings.general.row.appearance.title": "Utseende",
"settings.general.row.appearance.description": "Tilpass hvordan OpenCode ser ut på enheten din",
"settings.general.row.colorScheme.title": "Fargevalg",
"settings.general.row.colorScheme.description":
"Velg om OpenCode skal følge systeminnstillingen eller bruke lyst eller mørkt tema",
"settings.general.row.colorScheme.description": "Velg om OpenCode skal følge systemets, lyst eller mørkt tema",
"settings.general.row.theme.title": "Tema",
"settings.general.row.theme.description": "Tilpass temaet i OpenCode.",
"settings.general.row.theme.description": "Tilpass hvordan OpenCode er tematisert.",
"settings.general.row.font.title": "Kodefont",
"settings.general.row.font.description": "Tilpass skrifttypen som brukes i kodeblokker",
"settings.general.row.terminalFont.title": "Terminalskrift",
"settings.general.row.terminalFont.description": "Tilpass skrifttypen som brukes i terminalen",
"settings.general.row.uiFont.title": "UI-skrift",
"settings.general.row.uiFont.description": "Tilpass skrifttypen som brukes i hele grensesnittet",
"settings.general.row.followup.title": "Oppfølgingsatferd",
"settings.general.row.followup.title": "Oppfølgingsadferd",
"settings.general.row.followup.description": "Velg om oppfølgingsspørsmål skal kjøres umiddelbart eller vente i kø",
"settings.general.row.followup.option.queue": "Kø",
"settings.general.row.followup.option.steer": "Styr",
@@ -676,10 +670,10 @@ export const dict = {
"settings.general.row.editToolPartsExpanded.title": "Utvid edit-verktøydeler",
"settings.general.row.editToolPartsExpanded.description":
"Vis edit-, write- og patch-verktøydeler utvidet som standard i tidslinjen",
"settings.general.row.wayland.title": "Bruk Wayland direkte",
"settings.general.row.wayland.description": "Deaktiver X11-reserveløsningen på Wayland. Krever omstart.",
"settings.general.row.wayland.title": "Bruk innebygd Wayland",
"settings.general.row.wayland.description": "Deaktiver X11-fallback på Wayland. Krever omstart.",
"settings.general.row.wayland.tooltip":
"På Linux med skjermer med blandet oppdateringsfrekvens kan direkte Wayland-støtte være mer stabilt.",
"På Linux med skjermer med blandet oppdateringsfrekvens kan innebygd Wayland være mer stabilt.",
"settings.general.row.releaseNotes.title": "Utgivelsesnotater",
"settings.general.row.releaseNotes.description": 'Vis "Hva er nytt"-vinduer etter oppdateringer',
@@ -690,7 +684,7 @@ export const dict = {
"settings.updates.row.check.description": "Se etter oppdateringer manuelt og installer hvis tilgjengelig",
"settings.updates.action.checkNow": "Sjekk nå",
"settings.updates.action.checking": "Sjekker...",
"settings.updates.toast.latest.title": "OpenCode er oppdatert",
"settings.updates.toast.latest.title": "Du er oppdatert",
"settings.updates.toast.latest.description": "Du bruker den nyeste versjonen av OpenCode.",
"sound.option.none": "Ingen",
"sound.option.alert01": "Varsel 01",
@@ -759,7 +753,7 @@ export const dict = {
"settings.shortcuts.reset.toast.title": "Snarveier tilbakestilt",
"settings.shortcuts.reset.toast.description": "Tastatursnarveier er tilbakestilt til standard.",
"settings.shortcuts.conflict.title": "Snarvei allerede i bruk",
"settings.shortcuts.conflict.description": "{{keybind}} er allerede tilordnet {{titles}}.",
"settings.shortcuts.conflict.description": "{{keybind}} er allerede tilordnet til {{titles}}.",
"settings.shortcuts.unassigned": "Ikke tilordnet",
"settings.shortcuts.pressKeys": "Trykk taster",
"settings.shortcuts.search.placeholder": "Søk etter snarveier",
@@ -809,7 +803,7 @@ export const dict = {
"settings.permissions.tool.grep.title": "Grep",
"settings.permissions.tool.grep.description": "Søk i filinnhold ved hjelp av regulære uttrykk",
"settings.permissions.tool.list.title": "Liste",
"settings.permissions.tool.list.description": "List opp filer i en mappe",
"settings.permissions.tool.list.description": "List filer i en mappe",
"settings.permissions.tool.bash.title": "Bash",
"settings.permissions.tool.bash.description": "Kjør shell-kommandoer",
"settings.permissions.tool.task.title": "Oppgave",
@@ -827,7 +821,7 @@ export const dict = {
"settings.permissions.tool.external_directory.title": "Ekstern mappe",
"settings.permissions.tool.external_directory.description": "Få tilgang til filer utenfor prosjektmappen",
"settings.permissions.tool.doom_loop.title": "Doom Loop",
"settings.permissions.tool.doom_loop.description": "Oppdager gjentatte verktøykall med identiske inndata",
"settings.permissions.tool.doom_loop.description": "Oppdager gjentatte verktøykall med identisk input",
"session.delete.failed.title": "Kunne ikke slette sesjon",
"session.delete.title": "Slett sesjon",
@@ -872,14 +866,14 @@ export const dict = {
"common.time.hoursAgo.short": "{{count}} t siden",
"common.time.daysAgo.short": "{{count}} d siden",
"settings.providers.connected.environmentDescription": "Koblet til fra miljøvariablene dine",
"settings.providers.custom.description": "Legg til en OpenAI-kompatibel leverandør via en basis-URL.",
"settings.providers.custom.description": "Legg til en OpenAI-kompatibel leverandør via basis-URL.",
"app.server.unreachable": "Kunne ikke nå {{server}}",
"app.server.retrying": "Prøver på nytt automatisk...",
"app.server.otherServers": "Andre servere",
"dialog.server.add.usernamePlaceholder": "brukernavn",
"dialog.server.add.passwordPlaceholder": "passord",
"server.row.noUsername": "ikke noe brukernavn",
"server.row.noUsername": "inget brukernavn",
"session.review.noVcs.createGit.title": "Opprett et Git-depot",
"session.review.noVcs.createGit.description": "Spor, gjennomgå og angre endringer i dette prosjektet",
"session.review.noVcs.createGit.actionLoading": "Oppretter Git-depot...",
@@ -888,9 +882,6 @@ export const dict = {
"session.question.progress": "{{current}} av {{total}} spørsmål",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "Filutforsker",
"session.header.reveal.finder": "Vis i Finder",
"session.header.reveal.fileExplorer": "Vis i Filutforsker",
"session.header.reveal.containingFolder": "Åpne mappen som inneholder dette elementet",
"session.header.open.fileManager": "Filbehandler",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
@@ -909,25 +900,25 @@ export const dict = {
"debugBar.na": "i/t",
"debugBar.nav.label": "NAV",
"debugBar.nav.tip":
"Siste fullførte ruteovergang som berører en sesjonsside, målt fra ruterstart til første gjengivelse etter at den har roet seg.",
"Siste fullførte ruteovergang som berører en sesjonsside, målt fra ruterstart til første opptegning etter at den har roet seg.",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "Rullende bilder per sekund over de siste 5 sekundene.",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "Lengste bildetid over de siste 5 sekundene.",
"debugBar.frame.tip": "Verste bildetid over de siste 5 sekundene.",
"debugBar.jank.label": "JANK",
"debugBar.jank.tip": "Bilder som tar over 32 ms i de siste 5 sekundene.",
"debugBar.jank.tip": "Bilder over 32ms i de siste 5 sekundene.",
"debugBar.long.label": "LONG",
"debugBar.long.tip": "Blokkert tid og antall lange oppgaver i de siste 5 sekundene. Lengste oppgave: {{max}}.",
"debugBar.long.tip": "Blokkert tid og antall lange oppgaver i de siste 5 sekundene. Maks oppgave: {{max}}.",
"debugBar.delay.label": "DELAY",
"debugBar.delay.tip": "Lengste observerte inndataforsinkelse i de siste 5 sekundene.",
"debugBar.delay.tip": "Verste observerte inndataforsinkelse i de siste 5 sekundene.",
"debugBar.inp.label": "INP",
"debugBar.inp.tip":
"Omtrentlig interaksjonsvarighet over de siste 5 sekundene. Dette er INP-lignende, ikke den offisielle Web Vitals INP.",
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "Kumulativ layoutforskyvning for gjeldende app-levetid.",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "Brukt JS-heap kontra heap-grense. Kun Chromium.",
"debugBar.mem.tip": "Brukt JS-heap kontra heap-grense. {{used}} av {{limit}}.",
"debugBar.mem.tipUnavailable": "Brukt JS-heap vs heap-grense. Kun Chromium.",
"debugBar.mem.tip": "Brukt JS-heap vs heap-grense. {{used}} av {{limit}}.",
"common.key.ctrl": "Ctrl",
"common.key.alt": "Alt",
"common.key.shift": "Shift",
@@ -1066,7 +1057,7 @@ export const dict = {
"session.error.notFound.description": "Denne fanen peker til en sesjon som ikke lenger finnes på denne serveren.",
"session.error.notFound.closeTab": "Lukk fane",
"session.error.serverConnection": "Kan ikke koble til denne serveren",
"session.review.noUncommittedChanges": "Ingen endringer som ikke er sjekket inn ennå",
"session.review.noUncommittedChanges": "Ingen ucommittede endringer ennå",
"session.review.noBranchChanges": "Ingen grenendringer ennå",
"session.question.minimize": "Minimer spørsmål",
"session.question.restore": "Gjenopprett spørsmål",
@@ -1104,9 +1095,8 @@ export const dict = {
"settings.general.row.mobileTitlebarBottom.title": "Navigasjon nederst",
"settings.general.row.mobileTitlebarBottom.description":
"Plasser tittellinjen og sesjonsfanene nederst på mobilskjermen",
"settings.general.row.showCustomAgents.title": "Vis agent",
"settings.general.row.showCustomAgents.description":
"Bytt mellom agenter i skrivefeltet. Når velgeren er skjult, brukes Build-agenten som standard.",
"settings.general.row.showCustomAgents.title": "Egendefinerte agenter",
"settings.general.row.showCustomAgents.description": "Vis agentvelgeren i skrivefeltet",
"settings.general.row.newInterface.title": "Nytt oppsett",
"settings.general.row.newInterface.badge": "Ny",
"settings.general.row.newInterface.description":
-1019
View File
@@ -1,1019 +0,0 @@
export const dict = {
"command.category.suggested": "تجویز کیتا گیا",
"command.category.view": "نظارہ",
"command.category.project": "پروجیکٹ",
"command.category.provider": "پرووائیڈر",
"command.category.server": "سرور",
"command.category.session": "سیشن",
"command.category.theme": "تھیم",
"command.category.language": "بولی",
"command.category.file": "فائل",
"command.category.context": "تناظر",
"command.category.terminal": "Terminal",
"command.category.model": "ماڈل",
"command.category.mcp": "MCP",
"command.category.agent": "Agent",
"command.category.permissions": "اجازتاں",
"command.category.workspace": "ورک سپیس",
"command.category.settings": "ترتیبات",
"theme.scheme.system": "نظام",
"theme.scheme.light": "ہلکا",
"theme.scheme.dark": "گہرا",
"command.sidebar.toggle": "سائڈبار نوں ٹوگل کرو",
"command.project.open": "پروجیکٹ کھولو",
"command.project.previous": "پچھلا پروجیکٹ",
"command.project.next": "اگلا پروجیکٹ",
"command.project.index": "پروجیکٹ {{index}} تے سوئچ کرو",
"command.provider.connect": "پرووائیڈر نال جڑو",
"command.server.switch": "سرور سوئچ کرو",
"command.settings.open": "ترتیبات کھولو",
"command.session.previous": "پچھلا سیشن",
"command.session.next": "اگلا سیشن",
"command.session.previous.unseen": "پچھلا ان پڑھیا سیشن",
"command.session.next.unseen": "اگلا ان پڑھیا سیشن",
"command.session.archive": "آرکائیو سیشن",
"command.palette": "کمانڈ پیلیٹ",
"command.theme.cycle": "اگلا تھیم ورتو",
"command.theme.set": "تھیم ورتو: {{theme}}",
"command.theme.scheme.cycle": "اگلی رنگ سکیم ورتو",
"command.theme.scheme.set": "رنگ سکیم ورتو: {{scheme}}",
"command.language.cycle": "اگلی بولی ورتو",
"command.language.set": "بولی ورتو: {{language}}",
"command.session.new": "نواں سیشن",
"command.file.open": "فائل کھولو",
"command.tab.close": "ٹیب بند کرو",
"command.tab.reopenClosed": "بند ٹیب دوبارہ کھولو",
"command.context.addSelection": "سیاق و سباق وچ انتخاب شامل کرو",
"command.context.addSelection.description": "موجودہ فائل چوں منتخب کردہ لائناں شامل کرو",
"command.input.focus": "ان پٹ تے فوکس کرو",
"command.terminal.toggle": "ٹرمینل نوں ٹوگل کرو",
"command.fileTree.toggle": "فائل ٹری نوں ٹوگل کرو",
"command.review.toggle": "جائزہ ٹوگل کرو",
"command.terminal.new": "نواں ٹرمینل",
"command.terminal.new.description": "اک نواں ٹرمینل ٹیب بناؤ",
"command.steps.toggle": "قدم ٹوگل کرو",
"command.steps.toggle.description": "موجودہ پیغام لئی اقدامات وکھاؤ یا لُکا دیو",
"command.message.previous": "پچھلا سنیہا",
"command.message.previous.description": "پچھلے صارف دے سنیہے تے جاؤ",
"command.message.next": "اگلا سنیہا",
"command.message.next.description": "اگلے ورتن آلے دے سنیہے تے جاؤ",
"command.model.choose": "ماڈل دا انتخاب کرو",
"command.model.choose.description": "اک وکھرا ماڈل چنو",
"command.mcp.toggle": "MCPs نوں ٹوگل کرو",
"command.mcp.toggle.description": "MCPs نوں ٹوگل کرو",
"command.agent.cycle": "اگلا ایجنٹ ورتو",
"command.agent.cycle.description": "اگلے ایجنٹ تے سوئچ کرو",
"command.agent.cycle.reverse": "پچھلا ایجنٹ ورتو",
"command.agent.cycle.reverse.description": "پچھلے ایجنٹ تے سوئچ کرو",
"command.model.variant.cycle": "سوچن دی محنت بدلو",
"command.model.variant.cycle.description": "محنت دی اگلی سطح تے جاؤ",
"command.prompt.mode.shell": "Shell",
"command.prompt.mode.normal": "پرامپٹ",
"command.permissions.autoaccept.enable": "خودکار اجازتاں قبول کرو",
"command.permissions.autoaccept.disable": "خودکار اجازتاں قبول کرنا بند کرو",
"command.workspace.toggle": "ورک سپیس ٹوگل کرو",
"command.workspace.toggle.description": "سائڈبار وچ متعدد ورک اسپیسز نو فعال یا غیر فعال کرو",
"command.session.undo": "کالعدم کرو",
"command.session.undo.description": "آخری سنیہا کالعدم کرو",
"command.session.redo": "دوبارہ کرو",
"command.session.redo.description": "آخری انڈون سنیہا دوبارہ کرو",
"command.session.compact": "سیشن مختصر کرو",
"command.session.compact.description": "سیاق و سباق دا سائز گھٹ کرن لئی سیشن دا خلاصہ کرو",
"command.session.fork": "سنیہا توں فورک",
"command.session.fork.description": "پچھلے سنیہے توں اک نواں سیشن بناؤ",
"command.session.share": "سیشن شیئر کرو",
"command.session.share.description": "اس سیشن نو شیئر کرو تے URL نو کلپ بورڈ تے کاپی کرو",
"command.session.unshare": "سیشن شیئر کرنا بند کرو",
"command.session.unshare.description": "اس سیشن نو شیئر کرنا بند کرو",
"palette.search.placeholder": "فائلاں، کمانڈز، تے سیشنز تلاش کرو",
"palette.search.placeholder.home": "سرچ کمانڈز تے سیشنز",
"palette.empty": "کوئی نتیجہ نئیں ملیا",
"palette.group.commands": "کمانڈز",
"palette.group.files": "فائلاں",
"dialog.provider.search.placeholder": "پرووائیڈراں نوں لبھو",
"dialog.provider.empty": "کوئی پرووائیڈر نئیں لبھیا",
"dialog.provider.group.popular": "مشہور",
"dialog.provider.group.other": "ہور",
"dialog.provider.custom.label": "من پسند OpenAI نال رلدا پرووائیڈر",
"dialog.provider.tag.recommended": "سفارش کیتی",
"dialog.provider.opencode.note": "Claude، GPT، Gemini تے ہور سمیت کیوریٹڈ ماڈل",
"dialog.provider.opencode.tagline": "قابل اعتماد اصلاح شدہ ماڈل",
"dialog.provider.opencodeGo.tagline": "ہر اک لئی گھٹ قیمت دی رکنیت",
"dialog.provider.anthropic.note": "پرو تے میکس سمیت Claude ماڈل تک براہ راست رسائی",
"dialog.provider.copilot.note": "GitHub Copilot دے ذریعے کوڈنگ دی مدد لئی اے آئی ماڈل",
"dialog.provider.openai.note": "تیز تے صلاحیت والے عام AI کماں لئی GPT ماڈل",
"dialog.provider.google.note": "تیز تے منظم جواباں لئی Gemini ماڈل",
"dialog.provider.openrouter.note": "اک پرووائیڈر توں سارے سپورٹڈ ماڈلاں تک رسائی لوو",
"dialog.provider.vercel.note": "سمارٹ روٹنگ دے نال اے آئی ماڈل تک متحدہ رسائی",
"dialog.model.select.title": "ماڈل چنو",
"dialog.model.search.placeholder": "ماڈل لبھو",
"dialog.model.empty": "کوئی ماڈل نئیں لبھیا",
"dialog.model.manage": "ماڈل دا انتظام کرو",
"dialog.model.manage.description": "ماڈل سلیکٹر وچ کیہڑے ماڈل دکھائی دیندے نیں، اپنی مرضی دے مطابق بناؤ۔",
"dialog.model.manage.provider.toggle": "{{provider}} دے سارے ماڈل ٹوگل کرو",
"dialog.model.unpaid.freeModels.title": "OpenCode دے ذریعہ فراہم کردہ مفت ماڈل",
"dialog.model.unpaid.addMore.title": "مقبول پرووائیڈراں توں ہور ماڈل شامل کرو",
"dialog.model.unpaid.viewMoreProviders": "70+ ہور پرووائیڈر ویکھو",
"dialog.provider.viewAll": "ہور پرووائیڈر وکھاؤ",
"provider.connect.title": "{{provider}} نال جڑو",
"provider.connect.title.anthropicProMax": "Claude پرو/میکس دے نال لاگ ان کرو",
"provider.connect.selectMethod": "{{provider}} لئی لاگ ان دا طریقہ منتخب کرو۔",
"provider.connect.method.apiKey": "API کلید",
"provider.connect.status.inProgress": "اختیار دیندے پئے آں...",
"provider.connect.status.waiting": "اختیار ملن دی اڈیک اے...",
"provider.connect.status.failed": "اختیار نئیں مل سکیا: {{error}}",
"provider.connect.apiKey.description":
"اپنے اکاؤنٹ نوں جوڑن لئی اپنی {{provider}} API کلید درج کرو تے OpenCode وچ {{provider}} ماڈل ورتو۔",
"provider.connect.apiKey.label": "{{provider}} API کلید",
"provider.connect.apiKey.placeholder": "API کلید",
"provider.connect.apiKey.required": "API کلید دی لوڑ اے",
"provider.connect.opencodeZen.line1":
"زین تہانوں کوڈنگ ایجنٹاں لئی قابل اعتماد مرضی دے ماڈلاں دے اک کیوریٹڈ سیٹ تک رسائی فراہم کردا اے۔",
"provider.connect.opencodeZen.line2":
"اک API کلید دے نال تہانوں Claude، GPT، Gemini، GLM تے ہور ماڈلاں تک رسائی ملے گی۔",
"provider.connect.opencodeZen.visit.prefix": "ویکھو ",
"provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
"provider.connect.opencodeZen.visit.suffix": " اپنی API کلید حاصل کرن لئی۔",
"provider.connect.oauth.code.visit.prefix": "ویکھو ",
"provider.connect.oauth.code.visit.link": "ایہہ لنک",
"provider.connect.oauth.code.visit.suffix":
" اپنے اکاؤنٹ نوں جوڑن تے OpenCode وچ {{provider}} ماڈل ورتن لئی اپنا اجازت کوڈ حاصل کرن لئی۔",
"provider.connect.oauth.code.label": "{{method}} اجازت دا کوڈ",
"provider.connect.oauth.code.placeholder": "اجازتی کوڈ",
"provider.connect.oauth.code.required": "اجازتی کوڈ دی لوڑ اے",
"provider.connect.oauth.code.invalid": "غلط اجازتی کوڈ",
"provider.connect.oauth.auto.visit.prefix": "ویکھو ",
"provider.connect.oauth.auto.visit.link": "ایہہ لنک",
"provider.connect.oauth.auto.visit.suffix":
" تے اپنے اکاؤنٹ نوں جوڑن تے OpenCode وچ {{provider}} ماڈل ورتن لئی تھلے دتا کوڈ درج کرو۔",
"provider.connect.oauth.auto.confirmationCode": "تصدیقی کوڈ",
"provider.connect.toast.connected.title": "{{provider}} جڑیا ہویا",
"provider.connect.toast.connected.description": "{{provider}} ماڈل ہن ورتن لئی دستیاب ہن۔",
"provider.custom.title": "من پسند پرووائیڈر",
"provider.custom.description.prefix": "OpenAI نال رلدا پرووائیڈر سیٹ کرو۔ ویکھو ",
"provider.custom.description.link": "پرووائیڈر کنفگ دے دستاویز",
"provider.custom.description.suffix": ".",
"provider.custom.field.providerID.label": "پرووائیڈر ID",
"provider.custom.field.providerID.placeholder": "میرا پرووائیڈر",
"provider.custom.field.providerID.description": "نکے اکھر، نمبر، ہائفن، یا انڈر سکور",
"provider.custom.field.name.label": "ڈسپلے دا ناں",
"provider.custom.field.name.placeholder": "میرا اے آئی فراہم کرن آلا",
"provider.custom.field.baseURL.label": "بیس URL",
"provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1",
"provider.custom.field.apiKey.label": "API کلید",
"provider.custom.field.apiKey.placeholder": "API کلید",
"provider.custom.field.apiKey.description": "اختیاری۔ جے تسی ہیڈرز دے ذریعے تصدیق دا انتظام کردے او تے خالی چھڈ دیو۔",
"provider.custom.models.label": "ماڈل",
"provider.custom.models.id.label": "آئی ڈی",
"provider.custom.models.id.placeholder": "ماڈل آئی ڈی",
"provider.custom.models.name.label": "ناں",
"provider.custom.models.name.placeholder": "ڈسپلے دا ناں",
"provider.custom.models.remove": "ماڈل ہٹا دیو",
"provider.custom.models.add": "ماڈل شامل کرو",
"provider.custom.headers.label": "ہیڈرز (اختیاری)",
"provider.custom.headers.key.label": "ہیڈر",
"provider.custom.headers.key.placeholder": "ہیڈر دا ناں",
"provider.custom.headers.value.label": "قدر",
"provider.custom.headers.value.placeholder": "قدر",
"provider.custom.headers.remove": "ہیڈر ہٹا دیو",
"provider.custom.headers.add": "ہیڈر شامل کرو",
"provider.custom.error.providerID.required": "پروائیڈر آئی ڈی دی لوڑ اے",
"provider.custom.error.providerID.format": "نکے اکھر، نمبر، ہائفن، یا انڈر سکور ورتو",
"provider.custom.error.providerID.exists": "اوہ پرووائیڈر ID پہلے توں موجود اے",
"provider.custom.error.name.required": "ڈسپلے ناں دی لوڑ اے",
"provider.custom.error.baseURL.required": "بیس URL دی لوڑ اے",
"provider.custom.error.baseURL.format": "http:// یا https:// توں شروع کرنا ضروری اے۔",
"provider.custom.error.required": "لازمی اے",
"provider.custom.error.duplicate": "دُہرا",
"provider.disconnect.toast.disconnected.title": "{{provider}} منقطع",
"provider.disconnect.toast.disconnected.description": "{{provider}} ماڈل ہن دستیاب نئیں ہن۔",
"model.tag.free": "مفت",
"model.tag.latest": "تازہ ترین",
"model.provider.anthropic": "Anthropic",
"model.provider.openai": "OpenAI",
"model.provider.google": "Google",
"model.provider.xai": "xAI",
"model.provider.meta": "Meta",
"model.input.text": "متن",
"model.input.image": "تصویر",
"model.input.audio": "آڈیو",
"model.input.video": "ویڈيو",
"model.input.pdf": "پی ڈی ایف",
"model.tooltip.allows": "اجازت دیندا اے: {{inputs}}",
"model.tooltip.context.label": "تناظر",
"model.tooltip.inputs": "ان پٹ",
"model.tooltip.model": "ماڈل",
"model.tooltip.provider": "پرووائیڈر",
"model.tooltip.reasoning": "استدلال",
"model.tooltip.reasoning.allowed": "استدلال دی اجازت دیندا اے",
"model.tooltip.reasoning.none": "سوچن دی سہولت نئیں",
"model.tooltip.context": "سیاق و سباق دی حد {{limit}}",
"common.search.placeholder": "لبھنا",
"common.goBack": "واپس جاؤ",
"common.goForward": "اگے ودھو",
"common.loading": "لوڈ ہو رہیا اے",
"common.loading.ellipsis": "...",
"common.cancel": "منسوخ کرو",
"common.clear": "صاف",
"common.open": "کھولو",
"common.connect": "منسلک کرو",
"common.disconnect": "منقطع کرو",
"common.continue": "جاری رکھو",
"common.submit": "جمع کراؤ",
"common.save": "محفوظ کرو",
"common.saving": "محفوظ ہو رہیا اے...",
"common.default": "طے شدہ",
"common.attachment": "منسلکہ",
"prompt.placeholder.shell": "شیل کمانڈ درج کرو... {{example}}",
"prompt.placeholder.normal": 'کجھ وی پچھ... "{{example}}"',
"prompt.placeholder.simple": "کجھ وی پچھ...",
"prompt.placeholder.summarizeComments": "تبصریاں دا خلاصہ کرو...",
"prompt.placeholder.summarizeComment": "تبصرے دا خلاصہ...",
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "پرامپٹ",
"prompt.mode.shell.exit": "باہر نکلن لئی ایس سی",
"session.child.promptDisabled": "ذیلی ایجنٹ سیشناں نو اشارہ نئیں کیتا جا سکدا۔",
"session.child.backToParent": "مین سیشن تے واپس جاؤ۔",
"prompt.example.1": "کوڈ بیس چ اک TODO ٹھیک کرو",
"prompt.example.2": "اس پروجیکٹ دا ٹیک سٹیک کی اے؟",
"prompt.example.3": "ٹٹے ہوئے ٹیسٹ ٹھیک کرو",
"prompt.example.4": "وضاحت کرو کہ تصدیق کس طرح کم کردی اے",
"prompt.example.5": "حفاظتی کمزوریاں نوں لبھو تے ٹھیک کرو",
"prompt.example.6": "صارف دی خدمت لئی یونٹ ٹیسٹ شامل کرو",
"prompt.example.7": "اس فنکشن نو زیادہ پڑھن دے قابل بنان دے لی ریفیکٹر کرو",
"prompt.example.8": "ایس غلطی دا کیہ مطلب اے؟",
"prompt.example.9": "اس مسئلے نو ٹھیک کرن چ میری مدد کرو",
"prompt.example.10": "API دستاویزات تیار کرو",
"prompt.example.11": "ڈیٹا بیس دے سوالاں نو بہتر بناؤ",
"prompt.example.12": "ان پٹ دی توثیق شامل کرو",
"prompt.example.13": "...لئی اک نواں کمپونینٹ بناؤ",
"prompt.example.14": "میں اس پروجیکٹ نوں کیویں ڈیپلائے کراں؟",
"prompt.example.15": "بہترین طریقاں لئی میرے کوڈ دا جائزہ لوو",
"prompt.example.16": "اس فنکشن وچ ایرر ہینڈلنگ شامل کرو",
"prompt.example.17": "اس ریجیکس پیٹرن دی وضاحت کرو",
"prompt.example.18": "اس نوں TypeScript وچ بدلو",
"prompt.example.19": "پورے کوڈ بیس چ لاگنگ شامل کرو",
"prompt.example.20": "کیہڑے انحصار پرانے ہو چکے نیں؟",
"prompt.example.21": "ہجرت دی سکرپٹ لکھن چ میری مدد کرو",
"prompt.example.22": "اس اینڈ پوائنٹ لئی کیشنگ لاگو کرو",
"prompt.example.23": "اس فہرست چ صفحات شامل کرو",
"prompt.example.24": "...لئی اک CLI کمانڈ بناؤ",
"prompt.example.25": "ماحولیاتی متغیر ایتھے کیویں کم کردے نیں؟",
"prompt.popover.emptyResults": "کوئی ملاپ دا نتیجہ نئیں نکلیا",
"prompt.popover.emptyCommands": "کوئی مماثل کمانڈ نئیں",
"prompt.dropzone.label": "تصویراں، پی ڈی ایف، یا ٹیکسٹ فائلاں ایتھے چھڈو",
"prompt.dropzone.file.label": "@mention فائل تے ڈراپ کرو",
"prompt.slash.badge.custom": "مخصوص",
"prompt.slash.badge.skill": "مہارت",
"prompt.slash.badge.mcp": "ایم سی پی",
"prompt.context.active": "چالو",
"prompt.context.includeActiveFile": "فعال فائل شامل کرو",
"prompt.context.removeActiveFile": "فعال فائل نو سیاق و سباق توں ہٹا دیو",
"prompt.context.removeFile": "سیاق و سباق توں فائل ہٹا دیو",
"prompt.action.attachFile": "فائلاں شامل کرو",
"prompt.menu.addImagesAndFiles": "فائلاں تے ہور شامل کرو",
"prompt.menu.imagesAndFiles": "تصویراں تے فائلاں",
"prompt.menu.commands": "کمانڈز",
"prompt.menu.context": "تناظر",
"prompt.menu.shellCommand": "Shell کمانڈ",
"prompt.attachment.remove": "منسلکہ ہٹا دیو",
"prompt.action.send": "گھلو",
"prompt.action.stop": "روکو",
"prompt.toast.pasteUnsupported.title": "غیر تعاون یافتہ منسلکہ",
"prompt.toast.pasteUnsupported.description":
"ایتھے صرف تصویراں، پی ڈی ایف، یا ٹیکسٹ فائلاں منسلک کیتیاں جا سکدیاں نیں۔",
"prompt.toast.attachmentDuplicate.title": "ایہہ فائل پہلے ای اپ لوڈ ہو چکی اے",
"prompt.toast.modelAgentRequired.title": "اک ایجنٹ تے ماڈل چنو",
"prompt.toast.modelAgentRequired.description": "پرامپٹ بھیجن توں پہلاں اک ایجنٹ تے ماڈل دا انتخاب کرو۔",
"prompt.toast.worktreeCreateFailed.title": "ورک ٹری بنان چ ناکامی ہوئی",
"prompt.toast.sessionCreateFailed.title": "سیشن بنان چ ناکامی ہوئی",
"prompt.toast.shellSendFailed.title": "شیل کمانڈ بھیجن چ ناکام رہیا",
"prompt.toast.commandSendFailed.title": "کمانڈ بھیجن چ ناکام رہیا",
"prompt.toast.promptSendFailed.title": "پرامپٹ بھیجن چ ناکام رہیا",
"prompt.toast.promptSendFailed.description": "سیشن بازیافت کرن توں قاصر",
"dialog.mcp.title": "MCPs",
"dialog.mcp.description": "{{total}} وچوں {{enabled}} چالو",
"dialog.mcp.empty": "کوئی MCP سیٹ نئیں کیتا گیا",
"dialog.lsp.empty": "LSPs فائل دی اقسام توں خودکار طور تے پتہ چلدا اے",
"dialog.plugins.empty": "opencode.json وچ سیٹ کیتے پلگ اِن",
"mcp.status.connected": "جڑیا ہویا",
"mcp.status.failed": "ناکام ہویا",
"mcp.status.needs_auth": "تصدیق دی لوڑ اے",
"mcp.status.disabled": "بند",
"mcp.auth.clickToAuthenticate": "تصدیق کرن لئی کلک کرو",
"dialog.fork.empty": "فورک کرن لئی کوئی پیغام نئیں",
"dialog.directory.search.placeholder": "فولڈراں نوں لبھو",
"dialog.directory.empty": "کوئی فولڈر نئیں لبیا",
"dialog.directory.action.selectFile": "فائل چنو",
"dialog.directory.action.selectFolder": "فولڈر چنو",
"dialog.directory.root": "Root",
"dialog.directory.parent": "اُتلا فولڈر",
"dialog.directory.readError": "اس فولڈر نوں پڑھن توں قاصر",
"app.server.unreachable": "{{server}} تک نئیں اپڑ سکیا",
"app.server.retrying": "خود بخود دوبارہ کوشش کر رئے آں...",
"app.server.otherServers": "ہور سرور",
"dialog.server.title": "سرورز",
"dialog.server.description": "ایہہ ایپ کس OpenCode سرور نال جڑدی اے، اس نوں سوئچ کرو۔",
"dialog.server.search.placeholder": "سرچ سرورز",
"dialog.server.empty": "ہلے تک کوئی سرور نئیں",
"dialog.server.add.title": "سرور شامل کرو",
"dialog.server.add.url": "سرور دا پتہ",
"dialog.server.add.placeholder": "http://localhost:4096",
"dialog.server.add.error": "سرور نال جڑیا نئیں جا سکیا",
"dialog.server.add.checking": "چیک کر رہیا واں...",
"dialog.server.add.button": "سرور شامل کرو",
"dialog.server.add.name": "سرور دا ناں (اختیاری)",
"dialog.server.add.namePlaceholder": "Localhost",
"dialog.server.add.username": "ورتن آلا ناں (اختیاری)",
"dialog.server.add.usernamePlaceholder": "ورتن آلا ناں",
"dialog.server.add.password": "پاس ورڈ (اختیاری)",
"dialog.server.add.passwordPlaceholder": "پاس ورڈ",
"dialog.server.edit.title": "سرور وچ ترمیم کرو",
"dialog.server.default.title": "ڈیفالٹ سرور",
"dialog.server.default.description":
"مقامی سرور شروع کرن دی بجائے ایپ لانچ تے اس سرور نال جڑو۔ دوبارہ شروع کرن دی لوڑ اے۔",
"dialog.server.default.none": "کوئی سرور نئیں چنیا گیا",
"dialog.server.default.set": "موجودہ سرور نو ڈیفالٹ دے طور تے سیٹ کرو",
"dialog.server.default.clear": "صاف",
"dialog.server.action.remove": "سرور ہٹا دیو",
"dialog.server.menu.edit": "ترمیم کرو",
"dialog.server.menu.default": "ڈیفالٹ دے طور تے سیٹ کرو",
"dialog.server.menu.defaultRemove": "ڈیفالٹ ہٹاؤ",
"dialog.server.menu.delete": "مکاؤ",
"dialog.server.current": "موجودہ سرور",
"dialog.server.status.default": "طے شدہ",
"wsl.server.add": "WSL سرور شامل کرو",
"wsl.server.addShort": "WSL شامل کرو",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "WSL سرور",
"wsl.server.retryStart": "دوبارہ شروع کرن دی کوشش کرو",
"wsl.server.updating": "اپ ڈیٹ...",
"wsl.onboarding.step.distro": "ڈسٹرو دا انتخاب کرو",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "WSL چیک کر رئے آں...",
"wsl.onboarding.restartRequired": "WSL دی تنصیب پوری کرن لئی Windows نوں دوبارہ شروع کرنا پئے گا۔",
"wsl.onboarding.ready": "WSL تیار اے۔",
"wsl.onboarding.required": "جاری رکھن لئی WSL دی لوڑ اے۔",
"wsl.onboarding.checkingDistros": "ڈسٹرو چیک کر ریا واں...",
"wsl.onboarding.installingDistro": "{{distro}} انسٹال کر رئے آں...",
"wsl.onboarding.checkingDistro": "{{distro}} چیک کر رئے آں...",
"wsl.onboarding.listingDistros": "ڈسٹرو دی فہرست...",
"wsl.onboarding.distroReady": "{{distro}} تیار اے۔",
"wsl.onboarding.distroNotInstalled": "{{distro}} اجے تک انسٹال نئیں ہویا۔",
"wsl.onboarding.openDistroOnce": "سیٹ اپ ختم کرن لئی {{distro}} نوں اک واری کھولو۔",
"wsl.onboarding.finishingDistro": "{{distro}} دا سیٹ اپ پورا ہو رہیا اے۔",
"wsl.onboarding.pickDistro": "اک ڈسٹرو چنو یا تھلے دتی گئی اک انسٹال کرو۔",
"wsl.onboarding.checkingOpencode": "OpenCode چیک کر رئے آں...",
"wsl.onboarding.checkingOpencodeIn": "{{distro}} چ OpenCode دی جانچ پڑتال...",
"wsl.onboarding.updatingOpencode": "OpenCode نو اپ ڈیٹ کر رئے آں...",
"wsl.onboarding.updatingOpencodeIn": "{{distro}} وچ OpenCode نو اپ ڈیٹ کر رئے آں...",
"wsl.onboarding.updateOpencodeIn": "{{distro}} وچ OpenCode نو اپ ڈیٹ کرو۔",
"wsl.onboarding.updateOpencode": "OpenCode اپ ڈیٹ کرو",
"wsl.onboarding.opencodeReadyIn": "OpenCode {{distro}} چ تیار اے۔",
"wsl.onboarding.opencodeReady": "OpenCode تیار اے۔",
"wsl.onboarding.installOpencodeIn": "{{distro}} وچ OpenCode انسٹال کرو۔",
"wsl.onboarding.installOpencode": "OpenCode انسٹال کرو",
"wsl.onboarding.chooseDistroFirst": "پہلے اک ڈسٹرو دا انتخاب کرو۔",
"wsl.onboarding.loadFailed": "WSL حالت لوڈ کرن چ ناکام رہیا۔",
"wsl.onboarding.loading": "لوڈ ہو رہیا اے...",
"wsl.onboarding.installedDistros": "ڈسٹرو انسٹال کیتے گئے",
"wsl.onboarding.checkAgain": "دوبارہ چیک کرو",
"wsl.onboarding.distroStatus.ready": "تیار",
"wsl.onboarding.distroStatus.checking": "چیک کر رہیا واں...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode انسٹال نئیں کیتا گیا",
"wsl.onboarding.distroStatus.missingTools": "bash تے curl نئیں ملے",
"wsl.onboarding.distroStatus.unsupported": "غیر تعاون یافتہ · WSL 2 استعمال کرو",
"wsl.onboarding.needAnotherDistro": "تہانوں اک ہور ڈسٹرو دی لوڑ اے؟",
"wsl.onboarding.needAnotherDistroHint": "WSL کیٹلاگ توں Linux ڈسٹری بیوشن انسٹال کرو",
"wsl.onboarding.wslNotInstalled.title": "WSL انسٹال نئیں کیتا گیا",
"wsl.onboarding.wslNotInstalled.description":
"OpenCode دے WSL سرور شامل کرن توں پہلاں WSL (Windows Subsystem for Linux) دی لوڑ اے",
"wsl.onboarding.wslUnavailable.title": "WSL دستیاب نئیں",
"wsl.onboarding.wslUnavailable.description": "OpenCode ایس مشین تے WSL دی تصدیق نئیں کر سکیا۔",
"wsl.onboarding.installWsl": "WSL انسٹال کرو",
"wsl.onboarding.windowsRestartRequired":
"WSL دی تنصیب پوری کرن لئی Windows نوں دوبارہ شروع کرو، فیر OpenCode دوبارہ کھولو۔",
"wsl.onboarding.next": "اگلا",
"wsl.onboarding.refresh": "تازہ کرو",
"wsl.onboarding.allDistrosAdded": "سارے انسٹال شدہ ڈسٹرو پہلے ای شامل کر دتے گئے ہن۔",
"wsl.onboarding.noDistros": "ہلے تیکر کوئی ڈسٹرو نئیں لبھیا۔",
"wsl.onboarding.install": "انسٹال کرو",
"wsl.onboarding.installing": "انسٹال کر رہیا اے...",
"wsl.onboarding.installDistro": "ڈسٹرو انسٹال کرو",
"wsl.onboarding.searchDistros": "ڈسٹرو تلاش کرو",
"wsl.onboarding.wsl2Required": "WSL 2 دی لوڑ اے۔",
"wsl.onboarding.toolsRequired": "اس ڈسٹرو نوں bash تے curl دی لوڑ اے۔",
"wsl.onboarding.openTerminal": "ٹرمینل کھولو",
"wsl.onboarding.path": "راہ: {{path}}",
"wsl.onboarding.notFound": "نئیں لبھا",
"wsl.onboarding.version": "ورژن: {{version}}",
"wsl.onboarding.unknown": "نامعلوم",
"wsl.onboarding.desktopVersion": "ڈیسک ٹاپ {{version}}",
"wsl.onboarding.versionMismatch": "انسٹال کیتا گیا ورژن ڈیسک ٹاپ ایپ ورژن نال میل نئیں کھاندا۔",
"wsl.onboarding.adding": "شامل کر رہیا واں...",
"server.row.noUsername": "کوئی ورتن آلا ناں نئیں",
"dialog.project.edit.title": "پروجیکٹ وچ ترمیم کرو",
"dialog.project.edit.name": "ناں",
"dialog.project.edit.icon": "آئکن",
"dialog.project.edit.icon.alt": "پروجیکٹ آئیکن",
"dialog.project.edit.icon.hint": "تصویر تے کلک کرو یا گھسیٹو",
"dialog.project.edit.icon.recommended": "تجویز کردہ: 128x128px",
"dialog.project.edit.color": "رنگ",
"dialog.project.edit.color.select": "{{color}} رنگ چنو",
"dialog.project.edit.worktree.startup": "ورک اسپیس اسٹارٹ اپ سکرپٹ",
"dialog.project.edit.worktree.startup.description": "اک نویں ورک سپیس (ورک ٹری) بنان دے بعد چلدا اے۔",
"dialog.project.edit.worktree.startup.placeholder": "مثلاً بن انسٹال کرو",
"dialog.releaseNotes.action.getStarted": "شروع کرو",
"dialog.releaseNotes.action.next": "اگلا",
"dialog.releaseNotes.action.hideFuture": "ایہہ اگوں نہ وکھاؤ",
"dialog.releaseNotes.media.alt": "ریلیز پیش نظارہ",
"context.breakdown.title": "کانٹیکسٹ دی ونڈ",
"context.breakdown.note": 'ان پٹ ٹوکناں دی لگ بھگ ونڈ۔ "ہور" وچ ٹول دیاں تعریفاں تے وادھو خرچ شامل نیں۔',
"context.breakdown.system": "نظام",
"context.breakdown.user": "ورتن آلا",
"context.breakdown.assistant": "اسسٹنٹ",
"context.breakdown.tool": "ٹول کالز",
"context.breakdown.other": "ہور",
"context.systemPrompt.title": "سسٹم پرامپٹ",
"context.rawMessages.title": "خام سنیہے",
"context.stats.session": "سیشن",
"context.stats.messages": "سنیہے",
"context.stats.provider": "پرووائیڈر",
"context.stats.model": "ماڈل",
"context.stats.limit": "سیاق و سباق دی حد",
"context.stats.totalTokens": "کل ٹوکن",
"context.stats.usage": "ورتن",
"context.stats.inputTokens": "ان پٹ ٹوکن",
"context.stats.outputTokens": "آؤٹ پٹ ٹوکن",
"context.stats.reasoningTokens": "استدلال ٹوکن",
"context.stats.cacheTokens": "کیش ٹوکن (پڑھنا/لکھنا)",
"context.stats.userMessages": "ورتن آلے دے سنیہے",
"context.stats.assistantMessages": "اسسٹنٹ میسجز",
"context.stats.totalCost": "کل لاگت",
"context.stats.sessionCreated": "سیشن بنن دا ویلا",
"context.stats.lastActivity": "آخری سرگرمی",
"context.usage.tokens": "ٹوکن",
"context.usage.usage": "ورتن",
"context.usage.cost": "لاگت",
"context.usage.clickToView": "سیاق و سباق ویکھن لئی کلک کرو",
"context.usage.view": "سیاق و سباق دا استعمال ویکھو",
"language.en": "انگریجی",
"language.zh": "简体中文",
"language.zht": "繁體中文",
"language.ko": "한국어",
"language.de": "Deutsch",
"language.es": "Español",
"language.fr": "Français",
"language.da": "Dansk",
"language.ja": "日本語",
"language.pl": "Polski",
"language.ru": "Русский",
"language.ar": "العربية",
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
"toast.language.title": "بولی",
"toast.language.description": "{{language}} تے سوئچ کیتا گیا",
"toast.theme.title": "تھیم سوئچ ہو گیا",
"toast.scheme.title": "رنگ سکیم",
"toast.workspace.enabled.title": "ورک اسپیسز اینبلڈ نیں",
"toast.workspace.enabled.description": "اک توں ودھ ورک ٹری ہن سائڈبار وچ دکھائے گئے نیں",
"toast.workspace.disabled.title": "ورک سپیس بند نیں",
"toast.workspace.disabled.description": "سائڈبار چ صرف مین ورک ٹری وکھایا گیا اے۔",
"toast.permissions.autoaccept.on.title": "اجازتاں نوں خودکار قبول کرنا",
"toast.permissions.autoaccept.on.description": "اجازت دی درخواستاں خود بخود منظور ہو جان گیاں",
"toast.permissions.autoaccept.off.title": "اجازتاں نوں خودکار قبول کرنا بند کر دتا گیا",
"toast.permissions.autoaccept.off.description": "اجازت دی درخواستاں لئی منظوری دی لوڑ ہووے گی",
"toast.model.none.title": "کوئی ماڈل نئیں چنیا گیا",
"toast.model.none.description": "اس سیشن دا خلاصہ کرن لئی کسے پرووائیڈر نال جڑو",
"toast.file.loadFailed.title": "فائل لوڈ کرن چ ناکامی ہوئی",
"toast.file.listFailed.title": "فائلاں دی فہرست بنان چ ناکام رہیا",
"toast.context.noLineSelection.title": "کوئی لائن سلیکشن نئیں",
"toast.context.noLineSelection.description": "پہلے فائل ٹیب چ اک لائن رینج منتخب کرو۔",
"toast.session.share.copyFailed.title": "کلپ بورڈ تے URL کاپی کرن چ ناکام رہیا",
"toast.session.share.success.title": "سیشن سانجھا کیتا گیا",
"toast.session.share.success.description": "شیئر URL کلپ بورڈ تے کاپی ہو گیا!",
"toast.session.share.failed.title": "سیشن شیئر کرن چ ناکام رہیا",
"toast.session.share.failed.description": "سیشن شیئر کردے ویلے کوئی غلطی ہو گئی",
"toast.session.unshare.success.title": "سیشن شیئر کرنا بند ہو گیا",
"toast.session.unshare.success.description": "سیشن دا شیئر کامیابی نال بند ہو گیا!",
"toast.session.unshare.failed.title": "سیشن ان شیئر کرن چ ناکام رہیا",
"toast.session.unshare.failed.description": "سیشن ان شیئر کردے ویلے کوئی غلطی ہو گئی",
"toast.session.listFailed.title": "{{project}} لئی سیشن لوڈ کرن چ ناکام رہیا",
"toast.project.reloadFailed.title": "{{project}} دوبارہ لوڈ نئیں ہو سکیا",
"toast.update.title": "اپ ڈیٹ دستیاب اے",
"toast.update.description": "OpenCode ({{version}}) دا اک نواں ورژن ہن انسٹال کرن لئی دستیاب اے۔",
"toast.update.action.installRestart": "انسٹال کرو تے دوبارہ شروع کرو",
"toast.update.action.notYet": "اجے نئیں",
"error.page.title": "کجھ غلط ہو گیا",
"error.page.description": "ایپلیکیشن لوڈ کردے ویلے غلطی ہوئی۔",
"error.page.description.localServerStartup": "لوکل سرور شروع کردے ویلے غلطی ہوئی۔",
"error.page.details.label": "غلطی دی تفصیلات",
"error.page.action.restart": "دوبارہ شروع کرو",
"error.page.action.report": "غلطی دی رپورٹ کرو",
"error.page.action.reported": "غلطی رپورٹ ہو گئی",
"error.page.action.exportLogs": "لاگ برآمد کرو",
"error.page.action.checking": "چیک کر رہیا واں...",
"error.page.action.checkUpdates": "اپ ڈیٹس لئی چیک کرو",
"error.page.action.updateTo": "{{version}} تے اپ ڈیٹ کرو",
"error.page.circular": "[چکری]",
"error.page.report.prefix": "مہربانی کر کے اس غلطی دی اطلاع OpenCode ٹیم نوں دیو",
"error.page.report.discord": "Discord تے",
"error.page.version": "ورژن: {{version}}",
"error.dev.rootNotFound":
"عنصر نئیں لبیا۔ کی تسی ایہنوں اپنے index.html چ شامل کرنا بھل گئے او؟ یا شاید id وصف غلط ہجے ہو گیا اے؟",
"error.serverSync.connectFailed": "سرور نال نئیں جڑ سکیا۔ کی `{{url}}` تے کوئی سرور چل رہیا اے؟",
"error.serverSDK.noServerAvailable": "کوئی سرور دستیاب نئیں",
"error.serverSDK.serverNotAvailable": "سرور دستیاب نئیں",
"error.childStore.persistedCacheCreateFailed": "پکا کیش نئیں بن سکیا",
"error.childStore.persistedProjectMetadataCreateFailed": "مستقل پروجیکٹ میٹا ڈیٹا بنان چ ناکام رہیا",
"error.childStore.persistedProjectIconCreateFailed": "پرسٹڈ پروجیکٹ آئیکن بنان چ ناکام رہیا",
"error.childStore.storeCreateFailed": "سٹور بنان چ ناکامی ہوئی",
"directory.error.invalidUrl": "URL وچ غلط ڈائریکٹری اے۔",
"error.chain.unknown": "نامعلوم غلطی",
"error.server.invalidConfiguration": "غلط ترتیب",
"error.chain.causedBy": "ایس دی وجہ توں:",
"error.chain.apiError": "API غلطی",
"error.chain.status": "حیثیت: {{status}}",
"error.chain.retryable": "دوبارہ آزمان دے قابل: {{retryable}}",
"error.chain.responseBody": "جواب دا متن:\n{{body}}",
"error.chain.didYouMean": "کی تہاڈا مطلب سی: {{suggestions}}",
"error.chain.modelNotFound": "ماڈل نئیں لبیا: {{provider}}/{{model}}",
"error.chain.checkConfig": "اپنی کنفگ (opencode.json) وچ پرووائیڈر/ماڈل دے ناں چیک کرو",
"error.chain.mcpFailed": 'MCP سرور "{{name}}" ناکام ہو گیا۔ نوٹ، OpenCode ہلے تک MCP تصدیق دی حمایت نئیں کردا۔',
"error.chain.providerAuthFailed": "فراہم کرن آلے دی تصدیق ناکام ہو گئی ({{provider}}): {{message}}",
"error.chain.providerInitFailed": 'پرووائیڈر "{{provider}}" شروع نئیں ہو سکیا۔ اسناد تے کنفگ چیک کرو۔',
"error.chain.configJsonInvalid": "{{path}} تے کنفیگ فائل درست نئیں اے JSON(C)",
"error.chain.configJsonInvalidWithMessage": "{{path}} تے کنفیگ فائل درست نئیں اے JSON(C): {{message}}",
"error.chain.configDirectoryTypo":
'{{path}} وچ "{{dir}}" ڈائریکٹری درست نئیں اے۔ ڈائریکٹری دا ناں "{{suggestion}}" رکھو یا اینوں ہٹا دیو۔ ایہہ اک عام ٹائپنگ دی غلطی اے۔',
"error.chain.configFrontmatterError": "{{path}} وچ فرنٹ میٹر دی تجزیہ کرن وچ ناکام رہیا:\n{{message}}",
"error.chain.configInvalid": "{{path}} تے کنفیگ فائل غلط اے",
"error.chain.configInvalidWithMessage": "{{path}} تے کنفیگ فائل غلط اے: {{message}}",
"notification.permission.title": "اجازت دی لوڑ اے",
"notification.permission.description": "{{sessionTitle}} {{projectName}} وچ اجازت دی لوڑ اے",
"notification.question.title": "سوال",
"notification.question.description": "{{sessionTitle}} {{projectName}} وچ اک سوال اے",
"notification.action.goToSession": "سیشن تے جاؤ",
"notification.session.responseReady.title": "جواب تیار اے",
"notification.session.error.title": "سیشن دی غلطی",
"notification.session.error.fallbackDescription": "اک غلطی ہو گئی",
"home.recentProjects": "حال دے پروجیکٹ",
"home.empty.title": "حال دا کوئی پروجیکٹ نئیں",
"home.empty.description": "اک مقامی پروجیکٹ کھول کے شروع کرو",
"home.title": "گھر",
"home.projects": "پروجیکٹ",
"home.project.add": "پروجیکٹ شامل کرو",
"home.recentlyClosed": "حال ای چ بند کیتا گیا",
"home.server.collapse": "سرور دے پروجیکٹ سمیٹو",
"home.server.expand": "سرور دے پروجیکٹ کھولو",
"home.sessions.search.placeholder": "سرچ سیشن",
"home.sessions.search.placeholder.scoped": "{{scope}} وچ سیشناں دی تلاش کرو",
"home.sessions.search.sessions": "سیشن",
"home.sessions.search.noResults": "{{query}} لئی کوئی سیشن نئیں لبھیا",
"home.sessions.empty": "ایتھے ہلے کجھ نئیں",
"home.sessions.empty.description": "شروع کرن لئی اک سیشن بناؤ",
"home.sessions.group.today": "آج",
"home.sessions.group.yesterday": "کل",
"home.sessions.group.older": "پرانا",
"home.providerTip":
"دوجے ماڈل استعمال کرن لئی 75+ فراہم کرن آلیاں نال جڑو، جنہاں چ Claude، GPT، Gemini، وغیرہ شامل نیں",
"session.tab.session": "سیشن",
"session.tab.review": "جائزہ",
"session.tab.context": "تناظر",
"session.tab.unknown": "نامعلوم سیشن",
"session.panel.reviewAndFiles": "جائزہ تے فائلاں",
"session.error.notFound": "ایہہ سیشن نئیں لبیا جا سکدا",
"session.error.notFound.description": "ایہ ٹیب اک سیشن ول اشارہ کردا اے جہڑا ہن اس سرور تے موجود نئیں اے۔",
"session.error.notFound.closeTab": "ٹیب بند کرو",
"session.error.serverConnection": "اس سرور نال جڑ نئیں سکدے",
"session.review.filesChanged": "بدلیاں فائلاں {{count}}",
"session.review.change.one": "تبدیلی",
"session.review.change.other": "تبدیلیاں",
"session.review.loadingChanges": "تبدیلیاں لوڈ ہو رہیاں نیں...",
"session.review.empty": "اس سیشن وچ حالے تک کوئی تبدیلی نئیں",
"session.review.noVcs": "کوئی Git ورژن کنٹرول سسٹم نئیں لبھیا، تبدیلیاں نئیں وکھائیاں گئیاں",
"session.review.noVcs.createGit.title": "اک Git ریپازٹری بناؤ",
"session.review.noVcs.createGit.description": "اس منصوبے چ تبدیلیاں نو ٹریک کرو، جائزہ لوو تے کالعدم کرو",
"session.review.noVcs.createGit.actionLoading": "Git ریپازٹری بنانا...",
"session.review.noVcs.createGit.action": "Git ریپازٹری بناؤ",
"session.review.noSnapshot": "ترتیب وچ سنیپ شاٹ ٹریکنگ غیر فعال اے، اس لیی سیشن تبدیلیاں دستیاب نئیں نیں",
"session.review.noChanges": "کوئی تبدیلی نئیں",
"session.review.noUncommittedChanges": "ہلے کوئی ان کمٹڈ تبدیلی نئیں",
"session.review.noBranchChanges": "ہلے تیکر کوئی برانچ نئیں بدلی",
"session.files.selectToOpen": "کھولن لئی کوئی فائل چنو",
"session.files.all": "ساریاں فائلاں",
"session.files.empty": "کوئی فائل نئیں",
"session.files.binaryContent": "بائنری فائل (مواد وکھایا نئیں جا سکدا)",
"session.messages.renderEarlier": "پہلے سنیہے رینڈر کرو",
"session.messages.loadingEarlier": "پہلے دے سنیہے لوڈ کر رئے آں...",
"session.messages.loadEarlier": "پہلے سنیہے لوڈ کرو",
"session.messages.loading": "سنیہے لوڈ ہو رۓ...",
"session.messages.jumpToLatest": "تازہ ترین تے جاؤ",
"session.context.addToContext": "سیاق و سباق چ {{selection}} شامل کرو",
"session.todo.title": "ٹوڈوس",
"session.todo.collapse": "سمیٹو",
"session.todo.expand": "کھولو",
"session.todo.progress": "{{done}} دے {{total}} کم مکمل ہو گئے",
"session.question.progress": "{{total}} سوالاں وچوں {{current}}",
"session.question.minimize": "سوال نوں چھوٹا کرو",
"session.question.restore": "سوال بحال کرو",
"session.question.pending.one": "{{count}} زیر التوا سوال",
"session.question.pending.other": "{{count}} زیر التوا سوال",
"session.followupDock.summary.one": "{{count}} قطار چ لگیا ہویا پیغام",
"session.followupDock.summary.other": "{{count}} قطار وچ لگے سنیہے",
"session.followupDock.sendNow": "ہن بھیجو",
"session.followupDock.edit": "ترمیم کرو",
"session.followupDock.collapse": "قطار والے سنیہے سمیٹو",
"session.followupDock.expand": "قطار وچ لگے سنیہے ودھاؤ",
"session.revertDock.summary.one": "{{count}} رول بیک میسج",
"session.revertDock.summary.other": "{{count}} رول بیک پیغامات",
"session.revertDock.collapse": "واپس موڑے سنیہے سمیٹو",
"session.revertDock.expand": "رول بیک پیغامات نو ودھاؤ",
"session.revertDock.restore": "سنیہا بحال کرو",
"session.new.title": "کجھ وی بناؤ",
"session.new.project.new": "نواں منصوبہ",
"session.new.project.search": "منصوبیاں دی تلاش کرو",
"session.new.project.add": "پروجیکٹ شامل کرو",
"session.new.worktree.main": "مین برانچ",
"session.new.worktree.mainWithBranch": "مین برانچ ({{branch}})",
"session.new.worktree.create": "نواں ورک ٹری بناؤ",
"session.new.workspace.runIn": "وچ سیشن چلاؤ",
"session.new.workspace.triggerLocal": "مقامی",
"session.new.workspace.local": "مقامی مخزن",
"session.new.workspace.existing": "کم دی تھاں...",
"session.new.git.none": "Git نئیں",
"session.new.lastModified": "آخری ترمیم",
"session.header.search.placeholder": "{{project}} لبھو",
"session.header.searchFiles": "فائلاں لبھو",
"session.header.openIn": "وچ کھولو",
"session.header.open.action": "کھولو {{app}}",
"session.header.open.ariaLabel": "{{app}} وچ کھولو",
"session.header.open.menu": "اختیارات کھولو",
"session.header.open.copyPath": "راہ کاپی کرو",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "File Explorer",
"session.header.open.fileManager": "File Manager",
"session.header.reveal.finder": "Finder وچ ظاہر کرو",
"session.header.reveal.fileExplorer": "File Explorer وچ ظاہر کرو",
"session.header.reveal.containingFolder": "فائل والا فولڈر کھولو",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
"session.header.open.app.zed": "Zed",
"session.header.open.app.textmate": "TextMate",
"session.header.open.app.antigravity": "Antigravity",
"session.header.open.app.terminal": "Terminal",
"session.header.open.app.iterm2": "iTerm2",
"session.header.open.app.ghostty": "Ghostty",
"session.header.open.app.warp": "Warp",
"session.header.open.app.xcode": "Xcode",
"session.header.open.app.androidStudio": "Android Studio",
"session.header.open.app.powershell": "PowerShell",
"session.header.open.app.sublimeText": "Sublime Text",
"status.popover.trigger": "حالت",
"status.popover.ariaLabel": "سرور ترتیبات",
"status.popover.tab.servers": "سرورز",
"status.popover.tab.mcp": "MCP",
"status.popover.tab.lsp": "LSP",
"status.popover.tab.plugins": "پلگ انز",
"status.popover.action.manageServers": "سرورز دا انتظام کرو",
"session.share.popover.title": "ویب تے شائع کرو",
"session.share.popover.description.shared": "ایہ سیشن ویب تے عوامی اے۔ ایہ لنک آلے ہر بندے لئی رسائی حاصل اے۔",
"session.share.popover.description.unshared":
"ویب تے عوامی طور تے سیشن شیئر کرو۔ ایہ لنک آلے ہر بندے لئی رسائی حاصل ہووے گی۔",
"session.share.action.share": "شیئر کرو",
"session.share.action.publish": "شائع کرو",
"session.share.action.publishing": "شائع ہو رہیا اے...",
"session.share.action.unpublish": "شائع نہ کرو",
"session.share.action.unpublishing": "اشاعت ہٹ رہی اے...",
"session.share.action.view": "ویکھو",
"session.share.copy.copied": "کاپی کیتا گیا",
"session.share.copy.copyLink": "لنک کاپی کرو",
"lsp.tooltip.none": "کوئی LSP سرور نئیں",
"lsp.label.connected": "{{count}} LSP",
"prompt.loading": "لوڈنگ پرامپٹ...",
"terminal.loading": "ٹرمینل لوڈ ہو رہیا اے...",
"terminal.title": "Terminal",
"terminal.title.numbered": "Terminal {{number}}",
"terminal.close": "ٹرمینل بند کرو",
"terminal.connectionLost.title": "کنکشن گواچ گیا",
"terminal.connectionLost.abnormalClose": "WebSocket غیر معمولی طور تے بند کیتا گیا: {{code}}",
"terminal.connectionLost.description":
"ٹرمینل کنکشن وچ رکاوٹ پے گئی۔ ایہ اودوں ہو سکدا اے جدوں سرور دوبارہ شروع ہوندا اے۔",
"common.closeTab": "ٹیب بند کرو",
"common.dismiss": "برخاست کرو",
"common.moreCountSuffix": " (+{{count}} ہور)",
"common.requestFailed": "درخواست ناکام ہو گئی",
"common.moreOptions": "ہور اختیارات",
"common.learnMore": "ہور جانو",
"common.rename": "ناں بدلو",
"common.reset": "ری سیٹ کرو",
"common.archive": "آرکائیو کرو",
"common.delete": "مکاؤ",
"common.close": "بند کرو",
"common.edit": "ترمیم کرو",
"common.loadMore": "ہور لوڈ کرو",
"common.key.esc": "ESC",
"common.key.ctrl": "Ctrl",
"common.key.alt": "Alt",
"common.key.shift": "Shift",
"common.key.meta": "Meta",
"common.key.space": "Space",
"common.key.backspace": "Backspace",
"common.key.enter": "Enter",
"common.key.tab": "Tab",
"common.key.delete": "Delete",
"common.key.home": "Home",
"common.key.end": "End",
"common.key.pageUp": "Page Up",
"common.key.pageDown": "Page Down",
"common.key.insert": "Insert",
"common.unknown": "نامعلوم",
"common.time.justNow": "ہنے ہنے",
"common.time.minutesAgo.short": "{{count}}m پہلاں",
"common.time.hoursAgo.short": "{{count}}h پہلاں",
"common.time.daysAgo.short": "{{count}}d پہلاں",
"sidebar.menu.toggle": "مینو ٹوگل کرو",
"sidebar.nav.projectsAndSessions": "پروجیکٹ تے سیشن",
"sidebar.settings": "ترتیبات",
"sidebar.help": "مدد",
"sidebar.workspaces.enable": "ورک سپیس چالو کرو",
"sidebar.workspaces.disable": "ورک اسپیسز نو غیر فعال کرو",
"sidebar.gettingStarted.title": "شروع کرنا",
"sidebar.gettingStarted.line1": "OpenCode چ مفت ماڈل شامل نیں تاکہ تسی فوری طور تے شروع کر سکو۔",
"sidebar.gettingStarted.line2": "Claude، GPT، Gemini وغیرہ ماڈل ورتن لئی کوئی وی پرووائیڈر جوڑو۔",
"sidebar.project.recentSessions": "حالیہ سیشن",
"sidebar.project.viewAllSessions": "سارے سیشن ویکھو",
"sidebar.project.clearNotifications": "نوٹیفکیشن صاف کرو",
"sidebar.empty.title": "کوئی پروجیکٹ نئیں کھلیا",
"sidebar.empty.description": "شروع کرن لئی کوئی پروجیکٹ کھولو",
"debugBar.ariaLabel": "ترقی دی کارکردگی دی تشخیص",
"debugBar.na": "لاگو نئیں",
"debugBar.nav.label": "NAV",
"debugBar.nav.tip":
"سیشن دے صفحے نو چھون آلے آخری مکمل روٹ ٹرانزیشن، روٹر دے آغاز توں لے کے اس دے ٹک جان دے بعد پہلے پینٹ تک ماپیا جاندا اے۔",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "پچھلے 5 سیکنڈاں چ فی سیکنڈ فریم رولنگ۔",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "پچھلے 5 سیکنڈاں چ بدترین فریم ٹائم۔",
"debugBar.jank.label": "JANK",
"debugBar.jank.tip": "پچھلے 5 سیکنڈ چ 32 ایم ایس توں ودھ فریم۔",
"debugBar.long.label": "LONG",
"debugBar.long.tip": "پچھلے 5 سیکنڈاں چ بلاک کیتا گیا ویلہ تے لمے کماں دی گنتی۔ زیادہ توں زیادہ کم: {{max}}۔",
"debugBar.delay.label": "DELAY",
"debugBar.delay.tip": "پچھلے 5 سیکنڈاں چ بدترین ان پٹ دی تاخیر ویکھی گئی۔",
"debugBar.inp.label": "INP",
"debugBar.inp.tip": "پچھلے 5 سیکنڈاں چ تقریباً تعامل دی مدت۔ ایہ INP ورگا اے، سرکاری Web Vitals INP نئیں۔",
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "موجودہ ایپ دی زندگی لئی مجموعی ترتیب دی تبدیلی۔",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "جے ایس ہیپ بمقابلہ ہیپ لیمٹ استعمال کیتا گیا۔ صرف Chromium۔",
"debugBar.mem.tip": "ورتیا JS ہیپ تے ہیپ دی حد۔ {{limit}} وچوں {{used}}۔",
"app.name.desktop": "OpenCode ڈیسک ٹاپ",
"settings.section.desktop": "ڈیسک ٹاپ",
"settings.section.server": "سرور",
"settings.tab.general": "عمومی",
"settings.tab.shortcuts": "شارٹ کٹ",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "WSL نال جوڑ",
"settings.desktop.wsl.description": "Windows تے WSL دے اندر OpenCode سرور چلاؤ۔",
"settings.general.section.appearance": "دِکھ",
"settings.general.section.advanced": "اَڈوانسڈ",
"settings.general.section.notifications": "سسٹم نوٹیفکیشنز",
"settings.general.section.updates": "اپ ڈیٹس",
"settings.general.section.sounds": "آواز دے اثرات",
"settings.general.section.feed": "فیڈ",
"settings.general.section.display": "ڈسپلے",
"settings.general.row.language.title": "بولی",
"settings.general.row.language.description": "OpenCode لئی ڈسپلے دی بولی بدلو",
"settings.general.row.shell.title": "شیل",
"settings.general.row.shell.description": "Shell ٹرمینل تے ایجنٹ ٹولز دے ذریعہ استعمال کیتا جاندا اے",
"settings.general.row.shell.autoDefault": "آٹو (پہلے توں طے شدہ)",
"settings.general.row.shell.terminalOnly": "صرف ٹرمینل",
"settings.general.row.appearance.title": "دِکھ",
"settings.general.row.appearance.description": "اپنے آلے تے OpenCode کیویں لگدا اے، اپنی مرضی دے مطابق بناؤ",
"settings.general.row.colorScheme.title": "رنگ سکیم",
"settings.general.row.colorScheme.description": "چنو کہ آیا OpenCode سسٹم، لائٹ، یا ڈارک تھیم دی پیروی کردا اے",
"settings.general.row.theme.title": "تھیم",
"settings.general.row.theme.description": "OpenCode نوں کس طرح تھیم کیتا گیا اے، اپنی مرضی دے مطابق بناؤ۔",
"settings.general.row.font.title": "کوڈ فونٹ",
"settings.general.row.font.description": "کوڈ بلاکس وچ استعمال ہون آلے فونٹ نو اپنی مرضی دے مطابق بناؤ",
"settings.general.row.terminalFont.title": "Terminal فونٹ",
"settings.general.row.terminalFont.description": "ٹرمینل وچ استعمال ہون آلے فونٹ نو اپنی مرضی دے مطابق بناؤ",
"settings.general.row.uiFont.title": "یو آئی فونٹ",
"settings.general.row.uiFont.description": "پورے انٹرفیس تے استعمال ہون آلے فونٹ نو اپنی مرضی دے مطابق بناؤ",
"settings.general.row.followup.title": "فالو اپ رویہ",
"settings.general.row.followup.description": "چنو کہ فالو اپ اشارے فوری طور تے چلدے نیں یا قطار چ انتظار کردے نیں",
"settings.general.row.followup.option.queue": "قطار",
"settings.general.row.followup.option.steer": "سٹیئر",
"settings.general.row.showFileTree.title": "فائل ٹری",
"settings.general.row.showFileTree.description": "سیشنز چ فائل ٹری پینل وکھاؤ",
"settings.general.row.showNavigation.title": "نیوی گیشن کنٹرولز",
"settings.general.row.showNavigation.description": "ڈیسک ٹاپ ٹائٹل بار وچ پچھے تے اگے دے بٹن وکھاؤ",
"settings.general.row.showSearch.title": "کمانڈ پیلیٹ",
"settings.general.row.showSearch.description": "ٹائٹل بار وچ سرچ تے کمانڈ پیلیٹ بٹن وکھاؤ",
"settings.general.row.showTerminal.title": "Terminal",
"settings.general.row.showTerminal.description": "ڈیسک ٹاپ ٹائٹل بار وچ ٹرمینل بٹن وکھاؤ",
"settings.general.row.showStatus.title": "سرور دی حیثیت",
"settings.general.row.showStatus.description": "ٹائٹل بار وچ سرور دی حیثیت دا بٹن وکھاؤ",
"settings.general.row.mobileTitlebarBottom.title": "تھلویں نیوی گیشن",
"settings.general.row.mobileTitlebarBottom.description": "موبائل تے سکرین دے تھلے ٹائٹل بار تے سیشن ٹیب رکھو",
"settings.general.row.showCustomAgents.title": "ایجنٹ وکھاؤ",
"settings.general.row.showCustomAgents.description":
"کمپوزر چ ایجنٹاں دے وچکار سوئچ کرو۔ جدوں لُکیا ہوندا اے، تے بلڈ ایجنٹ تے ڈیفالٹ ہوندا اے۔",
"settings.general.row.reasoningSummaries.title": "استدلال دے خلاصے وکھاؤ",
"settings.general.row.reasoningSummaries.description": "ٹائم لائن وچ ماڈل دی استدلال دے خلاصے وکھاؤ",
"settings.general.row.shellToolPartsExpanded.title": "شیل ٹول دے حصیاں نو ودھاؤ",
"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": "ٹریک پیڈ پنچ تے کنٹرول سکرول اشارے نو زوم کرن دی اجازت دیو",
"settings.general.row.wayland.title": "مقامی Wayland ورتو",
"settings.general.row.wayland.description": "Wayland تے X11 فال بیک نو غیر فعال کرو۔ دوبارہ شروع کرن دی لوڑ اے۔",
"settings.general.row.wayland.tooltip":
"مخلوط ریفریش ریٹ مانیٹراں دے نال Linux تے، مقامی Wayland زیادہ مستحکم ہو سکدا اے۔",
"settings.general.row.releaseNotes.title": "ریلیز نوٹ",
"settings.general.row.releaseNotes.description": "اپ ڈیٹ پچھوں 'نواں کی اے' پاپ اپ وکھاؤ",
"settings.updates.row.startup.title": "شروع ہون تے اپ ڈیٹاں دی پڑتال کرو",
"settings.updates.row.startup.description": "جدوں OpenCode لانچ ہوندا اے تے خودبخود اپ ڈیٹس چیک کرو",
"settings.updates.row.check.title": "اپ ڈیٹس لئی چیک کرو",
"settings.updates.row.check.description": "اپ ڈیٹس لئی دستی طور تے چیک کرو تے جے دستیاب ہووے تے انسٹال کرو",
"settings.updates.action.checkNow": "ہن چیک کرو",
"settings.updates.action.checking": "چیک کر رہیا واں...",
"settings.updates.action.downloading": "ڈاؤن لوڈ کر رہیا اے...",
"settings.updates.action.installing": "انسٹال کر رہیا اے...",
"settings.updates.toast.latest.title": "تسی تازہ ترین او",
"settings.updates.toast.latest.description": "تسی OpenCode دا تازہ ترین ورژن چلا رئے او۔",
"sound.option.none": "کوئی نئیں",
"sound.option.alert01": "Alert 01",
"sound.option.alert02": "Alert 02",
"sound.option.alert03": "Alert 03",
"sound.option.alert04": "Alert 04",
"sound.option.alert05": "Alert 05",
"sound.option.alert06": "Alert 06",
"sound.option.alert07": "Alert 07",
"sound.option.alert08": "Alert 08",
"sound.option.alert09": "Alert 09",
"sound.option.alert10": "Alert 10",
"sound.option.bipbop01": "Bip-bop 01",
"sound.option.bipbop02": "Bip-bop 02",
"sound.option.bipbop03": "Bip-bop 03",
"sound.option.bipbop04": "Bip-bop 04",
"sound.option.bipbop05": "Bip-bop 05",
"sound.option.bipbop06": "Bip-bop 06",
"sound.option.bipbop07": "Bip-bop 07",
"sound.option.bipbop08": "Bip-bop 08",
"sound.option.bipbop09": "Bip-bop 09",
"sound.option.bipbop10": "Bip-bop 10",
"sound.option.staplebops01": "Staplebops 01",
"sound.option.staplebops02": "Staplebops 02",
"sound.option.staplebops03": "Staplebops 03",
"sound.option.staplebops04": "Staplebops 04",
"sound.option.staplebops05": "Staplebops 05",
"sound.option.staplebops06": "Staplebops 06",
"sound.option.staplebops07": "Staplebops 07",
"sound.option.nope01": "Nope 01",
"sound.option.nope02": "Nope 02",
"sound.option.nope03": "Nope 03",
"sound.option.nope04": "Nope 04",
"sound.option.nope05": "Nope 05",
"sound.option.nope06": "Nope 06",
"sound.option.nope07": "Nope 07",
"sound.option.nope08": "Nope 08",
"sound.option.nope09": "Nope 09",
"sound.option.nope10": "Nope 10",
"sound.option.nope11": "Nope 11",
"sound.option.nope12": "Nope 12",
"sound.option.yup01": "Yup 01",
"sound.option.yup02": "Yup 02",
"sound.option.yup03": "Yup 03",
"sound.option.yup04": "Yup 04",
"sound.option.yup05": "Yup 05",
"sound.option.yup06": "Yup 06",
"settings.general.notifications.agent.title": "Agent",
"settings.general.notifications.agent.description":
"جدوں ایجنٹ مکمل ہو جائے یا توجہ دی لوڑ ہووے تے سسٹم نوٹیفکیشن وکھاؤ",
"settings.general.notifications.permissions.title": "اجازتاں",
"settings.general.notifications.permissions.description": "جدوں اجازت دی لوڑ ہووے تے سسٹم نوٹیفکیشن وکھاؤ",
"settings.general.notifications.errors.title": "غلطیاں",
"settings.general.notifications.errors.description": "جدوں کوئی غلطی ہوندی اے تے سسٹم نوٹیفکیشن وکھاؤ",
"settings.general.sounds.agent.title": "Agent",
"settings.general.sounds.agent.description": "جدوں ایجنٹ مکمل ہو جائے یا توجہ دی لوڑ ہووے تے آواز چلاؤ",
"settings.general.sounds.permissions.title": "اجازتاں",
"settings.general.sounds.permissions.description": "جدوں اجازت دی لوڑ ہووے تے آواز چلاؤ",
"settings.general.sounds.errors.title": "غلطیاں",
"settings.general.sounds.errors.description": "جدوں کوئی غلطی ہوندی اے تے آواز چلاؤ",
"settings.shortcuts.title": "کی بورڈ شارٹ کٹ",
"settings.shortcuts.reset.button": "ڈیفالٹ تے ری سیٹ کرو",
"settings.shortcuts.reset.toast.title": "شارٹ کٹس ری سیٹ ہو گئے",
"settings.shortcuts.reset.toast.description": "کی بورڈ دے شارٹ کٹس نو ڈیفالٹ تے ری سیٹ کر دتا گیا اے۔",
"settings.shortcuts.conflict.title": "شارٹ کٹ پہلے ای استعمال چ اے",
"settings.shortcuts.conflict.description": "{{keybind}} پہلے ای {{titles}} نوں تفویض کیتا گیا اے۔",
"settings.shortcuts.unassigned": "غیر تفویض شدہ",
"settings.shortcuts.pressKeys": "کنجیاں دباؤ",
"settings.shortcuts.search.placeholder": "شارٹ کٹ لبھو",
"settings.shortcuts.search.empty": "کوئی شارٹ کٹ نئیں ملیا",
"settings.shortcuts.group.general": "عمومی",
"settings.shortcuts.group.session": "سیشن",
"settings.shortcuts.group.navigation": "نیوی گیشن",
"settings.shortcuts.group.modelAndAgent": "ماڈل تے ایجنٹ",
"settings.shortcuts.group.terminal": "Terminal",
"settings.shortcuts.group.prompt": "پرامپٹ",
"settings.providers.title": "پرووائیڈر",
"settings.providers.description": "پرووائیڈر دیاں سیٹنگاں ایتھے بدلیاں جا سکدیاں نیں۔",
"settings.providers.section.connected": "جڑے ہوئے پرووائیڈر",
"settings.providers.connected.empty": "کوئی پرووائیڈر نئیں جڑیا",
"settings.providers.connected.environmentDescription": "تہاڈے ماحول دے متغیراں توں جڑیا ہویا اے",
"settings.providers.section.popular": "مقبول پرووائیڈر",
"settings.providers.custom.description": "بیس URL نال OpenAI دے نال رلدا پرووائیڈر شامل کرو۔",
"settings.providers.tag.environment": "ماحول",
"settings.providers.tag.config": "ترتیب",
"settings.providers.tag.custom": "مخصوص",
"settings.providers.tag.other": "ہور",
"settings.models.title": "ماڈل",
"settings.models.description": "ماڈل دی ترتیبات ایتھے ترتیب دے قابل ہون گیاں۔",
"settings.agents.title": "ایجنٹاں",
"settings.agents.description": "Agent ترتیبات ایتھے ترتیب دے قابل ہون گیاں۔",
"settings.commands.title": "کمانڈز",
"settings.commands.description": "کمانڈ دی ترتیبات ایتھے ترتیب دے قابل ہون گیاں۔",
"settings.mcp.title": "MCP",
"settings.mcp.description": "MCP ترتیبات ایتھے ترتیب دے قابل ہون گیاں۔",
"settings.permissions.title": "اجازتاں",
"settings.permissions.description": "کنٹرول کرو کہ سرور پہلے توں طے شدہ طور تے کیہڑے اوزار استعمال کر سکدا اے۔",
"settings.permissions.section.tools": "ٹول",
"settings.permissions.toast.updateFailed.title": "اجازتاں نو اپ ڈیٹ کرن اچ ناکام رہیا",
"settings.permissions.action.allow": "اجازت دیو",
"settings.permissions.action.ask": "پُچھو",
"settings.permissions.action.deny": "منع کرو",
"settings.permissions.tool.read.title": "پڑھو",
"settings.permissions.tool.read.description": "فائل پڑھنا (فائل دے راہ نال میل کھاندا اے)",
"settings.permissions.tool.edit.title": "ترمیم",
"settings.permissions.tool.edit.description": "فائلاں وچ ترمیم کرو، بشمول ترمیماں، لکھتاں تے پیچاں",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "glob پیٹرناں نال فائلاں دا میل کرو",
"settings.permissions.tool.grep.title": "Grep",
"settings.permissions.tool.grep.description": "ریگولر ایکسپریشنز دا استعمال کردے ہوئے فائل دے مواد نو تلاش کرو",
"settings.permissions.tool.list.title": "فہرست",
"settings.permissions.tool.list.description": "ڈائریکٹری دے اندر فائلاں دی فہرست بناؤ",
"settings.permissions.tool.bash.title": "Bash",
"settings.permissions.tool.bash.description": "شیل کمانڈز چلاؤ",
"settings.permissions.tool.task.title": "کم",
"settings.permissions.tool.task.description": "ذیلی ایجنٹ شروع کرو",
"settings.permissions.tool.skill.title": "Skill",
"settings.permissions.tool.skill.description": "ناں نال اک مہارت لوڈ کرو",
"settings.permissions.tool.lsp.title": "LSP",
"settings.permissions.tool.lsp.description": "بولی دے سرور دے سوالاں نوں چلاؤ",
"settings.permissions.tool.todowrite.title": "ٹوڈو لکھنا",
"settings.permissions.tool.todowrite.description": "ٹوڈو لسٹ نوں اپ ڈیٹ کرو",
"settings.permissions.tool.webfetch.title": "ویب فیچ",
"settings.permissions.tool.webfetch.description": "URL توں مواد لیاو",
"settings.permissions.tool.websearch.title": "Web Search",
"settings.permissions.tool.websearch.description": "ویب تے سرچ کرو",
"settings.permissions.tool.external_directory.title": "باہرلی ڈائریکٹری",
"settings.permissions.tool.external_directory.description":
"پروجیکٹ ڈائریکٹری توں باہر دیاں فائلاں تک رسائی حاصل کرو",
"settings.permissions.tool.doom_loop.title": "ڈوم لوپ",
"settings.permissions.tool.doom_loop.description": "اکو جئے ان پٹ دے نال بار بار ٹول کالاں دا پتہ لاو",
"session.delete.failed.title": "سیشن نو مٹان اچ ناکام رہیا",
"session.delete.title": "سیشن مٹاؤ",
"session.delete.confirm": 'سیشن "{{name}}" نوں مٹا دیو؟',
"session.delete.button": "سیشن مٹاؤ",
"workspace.new": "نویں ورک سپیس",
"workspace.type.local": "مقامی",
"workspace.type.sandbox": "سینڈ باکس",
"workspace.create.failed.title": "ورک سپیس بنان چ ناکامی ہوئی",
"workspace.delete.failed.title": "ورک اسپیس نو مٹان اچ ناکام رہیا",
"workspace.resetting.title": "ورک اسپیس نوں ری سیٹ کرنا",
"workspace.resetting.description": "اس چ اک منٹ لگ سکدا اے۔",
"workspace.reset.failed.title": "ورک سپیس نوں ری سیٹ کرن چ ناکامی ہوئی",
"workspace.reset.success.title": "ورک اسپیس ری سیٹ",
"workspace.reset.success.description": "ورک سپیس ہن ڈیفالٹ برانچ نال میل کھاندا اے۔",
"workspace.error.stillPreparing": "ورک اسپیس ہلے وی تیاری کر رئی اے",
"workspace.status.checking": "غیر ضم شدہ تبدیلیاں دی جانچ پڑتال...",
"workspace.status.error": "Git دی حالت دی پڑتال نئیں ہو سکی۔",
"workspace.status.clean": "کوئی غیر ضم شدہ تبدیلی نئیں لبھی۔",
"workspace.status.dirty": "اس ورک اسپیس وچ غیر ضم شدہ تبدیلیاں دا پتہ چلیا اے۔",
"workspace.delete.title": "ورک اسپیس نو مٹا دیو",
"workspace.delete.confirm": 'ورک اسپیس "{{name}}" نو مٹا دیو؟',
"workspace.delete.button": "ورک اسپیس نو مٹا دیو",
"workspace.reset.title": "ورک اسپیس ری سیٹ کرو",
"workspace.reset.confirm": 'ورک اسپیس "{{name}}" نوں ری سیٹ کرو؟',
"workspace.reset.button": "ورک اسپیس ری سیٹ کرو",
"workspace.reset.archived.none": "کوئی فعال سیشن آرکائیو نئیں کیتا جائے گا۔",
"workspace.reset.archived.one": "1 سیشن آرکائیو کیتا جائے گا۔",
"workspace.reset.archived.many": "{{count}} سیشن آرکائیو کیتے جان گے۔",
"workspace.reset.note": "ایہ ورک اسپیس نو ڈیفالٹ برانچ نال ملاون لئی ری سیٹ کرے گا۔",
}
+5 -84
View File
@@ -18,29 +18,8 @@ const appLocales = [
"tr",
"zh",
"zht",
"hi",
"nl",
"id",
"vi",
"it",
"ur",
"pa",
"az",
"fi",
"sv",
] as const
const desktopLocales = appLocales
const pluralCategories: Partial<Record<(typeof appLocales)[number], readonly string[]>> = {
ar: ["zero", "two", "few", "many"],
br: ["many"],
bs: ["few"],
es: ["many"],
fr: ["many"],
it: ["many"],
pl: ["few", "many"],
ru: ["few", "many"],
uk: ["few", "many"],
}
const desktopLocales = appLocales.filter((locale) => locale !== "th" && locale !== "tr")
const domains = [
{
@@ -64,23 +43,18 @@ const domains = [
] as const
describe.skipIf(!!process.env.CI)("i18n parity", () => {
test("non-English locales have every English key and required plural variants", async () => {
test("non-English locales have every English key", async () => {
for (const domain of domains) {
const source = await dictionary(domain.source)
for (const locale of domain.locales) {
const target = await dictionary(domain.target(locale))
const missing = Object.keys(source).filter((key) => !Object.hasOwn(target, key))
const extra = Object.keys(target)
.filter((key) => !Object.hasOwn(source, key))
.sort()
const expected = pluralFamilies(source)
.flatMap((key) => (pluralCategories[locale] ?? []).map((category) => `${key}.${category}`))
.sort()
const extra = Object.keys(target).filter((key) => !Object.hasOwn(source, key))
expect({ domain: domain.name, locale, missing, extra }).toEqual({
domain: domain.name,
locale,
missing: [],
extra: expected,
extra: [],
})
}
}
@@ -94,17 +68,7 @@ describe.skipIf(!!process.env.CI)("i18n parity", () => {
const mismatched = Object.keys(source).filter(
(key) => Object.hasOwn(target, key) && placeholders(source[key]).join() !== placeholders(target[key]).join(),
)
const pluralMismatched = pluralFamilies(source).flatMap((key) =>
(pluralCategories[locale] ?? [])
.map((category) => `${key}.${category}`)
.filter((variant) => placeholders(source[`${key}.other`]).join() !== placeholders(target[variant]).join()),
)
expect({ domain: domain.name, locale, mismatched, pluralMismatched }).toEqual({
domain: domain.name,
locale,
mismatched: [],
pluralMismatched: [],
})
expect({ domain: domain.name, locale, mismatched }).toEqual({ domain: domain.name, locale, mismatched: [] })
}
}
})
@@ -136,38 +100,6 @@ describe.skipIf(!!process.env.CI)("i18n parity", () => {
})
})
describe("i18n plural parity", () => {
test("locale-specific categories exist and preserve count placeholders", async () => {
for (const domain of domains.slice(0, 2)) {
const source = await dictionary(domain.source)
const families = pluralFamilies(source)
for (const locale of domain.locales) {
const target = await dictionary(domain.target(locale))
const missing = families.flatMap((key) =>
(pluralCategories[locale] ?? [])
.map((category) => `${key}.${category}`)
.filter((variant) => !Object.hasOwn(target, variant)),
)
const mismatched = families.flatMap((key) =>
(pluralCategories[locale] ?? [])
.map((category) => `${key}.${category}`)
.filter(
(variant) =>
Object.hasOwn(target, variant) &&
placeholders(source[`${key}.other`]).join() !== placeholders(target[variant]).join(),
),
)
expect({ domain: domain.name, locale, missing, mismatched }).toEqual({
domain: domain.name,
locale,
missing: [],
mismatched: [],
})
}
}
})
})
async function dictionary(file: string) {
const module: unknown = await import(file)
if (typeof module !== "object" || module === null || !("dict" in module) || !isDictionary(module.dict)) {
@@ -184,14 +116,3 @@ function isDictionary(value: unknown): value is Record<string, string> {
function placeholders(value: string) {
return Array.from(value.matchAll(/{{\s*([^}]+?)\s*}}/g), (match) => match[1]).sort()
}
function pluralFamilies(dictionary: Record<string, string>) {
return Object.keys(dictionary)
.filter(
(key) =>
key.endsWith(".one") &&
dictionary[key].includes("{{count}}") &&
dictionary[`${key.slice(0, -4)}.other`]?.includes("{{count}}"),
)
.map((key) => key.slice(0, -4))
}
+60 -75
View File
@@ -45,7 +45,7 @@ export const dict = {
"command.tab.reopenClosed": "Otwórz ponownie zamkniętą kartę",
"command.context.addSelection": "Dodaj zaznaczenie do kontekstu",
"command.context.addSelection.description": "Dodaj zaznaczone linie z bieżącego pliku",
"command.input.focus": "Przejdź do pola wprowadzania",
"command.input.focus": "Fokus na pole wejściowe",
"command.terminal.toggle": "Przełącz terminal",
"command.fileTree.toggle": "Przełącz drzewo plików",
"command.review.toggle": "Przełącz przegląd",
@@ -82,7 +82,7 @@ export const dict = {
"command.session.fork": "Rozwidlij od wiadomości",
"command.session.fork.description": "Utwórz nową sesję od poprzedniej wiadomości",
"command.session.share": "Udostępnij sesję",
"command.session.share.description": "Udostępnij tę sesję i skopiuj adres URL do schowka",
"command.session.share.description": "Udostępnij tę sesję i skopiuj URL do schowka",
"command.session.unshare": "Przestań udostępniać sesję",
"command.session.unshare.description": "Zatrzymaj udostępnianie tej sesji",
"palette.search.placeholder": "Szukaj plików, poleceń i sesji",
@@ -94,11 +94,10 @@ export const dict = {
"dialog.provider.empty": "Nie znaleziono dostawców",
"dialog.provider.group.popular": "Popularne",
"dialog.provider.group.other": "Inne",
"dialog.provider.custom.label": "Niestandardowy dostawca zgodny z OpenAI",
"dialog.provider.tag.recommended": "Zalecane",
"dialog.provider.opencode.note": "Starannie dobrane modele, w tym Claude, GPT, Gemini i inne",
"dialog.provider.opencode.note": "Wyselekcjonowane modele, w tym Claude, GPT, Gemini i inne",
"dialog.provider.opencode.tagline": "Niezawodne, zoptymalizowane modele",
"dialog.provider.opencodeGo.tagline": "Niedroga subskrypcja dla każdego",
"dialog.provider.opencodeGo.tagline": "Tania subskrypcja dla każdego",
"dialog.provider.anthropic.note": "Bezpośredni dostęp do modeli Claude, w tym Pro i Max",
"dialog.provider.copilot.note": "Modele AI do pomocy w kodowaniu przez GitHub Copilot",
"dialog.provider.openai.note": "Modele GPT do szybkich i wszechstronnych zadań AI",
@@ -107,16 +106,15 @@ export const dict = {
"dialog.provider.vercel.note": "Ujednolicony dostęp do modeli AI z inteligentnym routingiem",
"dialog.model.select.title": "Wybierz model",
"dialog.model.search.placeholder": "Szukaj modeli",
"dialog.model.empty": "Nie znaleziono modeli",
"dialog.model.empty": "Brak wyników modelu",
"dialog.model.manage": "Zarządzaj modelami",
"dialog.model.manage.description": "Dostosuj, które modele pojawiają się w wyborze modelu.",
"dialog.model.manage.provider.toggle": "Przełącz wszystkie modele {{provider}}",
"dialog.model.unpaid.freeModels.title": "Darmowe modele dostarczane przez OpenCode",
"dialog.model.unpaid.addMore.title": "Dodaj więcej modeli od popularnych dostawców",
"dialog.model.unpaid.viewMoreProviders": "Zobacz ponad 70 innych dostawców",
"dialog.provider.viewAll": "Zobacz więcej dostawców",
"provider.connect.title": "Połącz {{provider}}",
"provider.connect.title.anthropicProMax": "Zaloguj się za pomocą konta Claude Pro/Max",
"provider.connect.title.anthropicProMax": "Zaloguj się z Claude Pro/Max",
"provider.connect.selectMethod": "Wybierz metodę logowania dla {{provider}}.",
"provider.connect.method.apiKey": "Klucz API",
"provider.connect.status.inProgress": "Autoryzacja w toku...",
@@ -128,9 +126,9 @@ export const dict = {
"provider.connect.apiKey.placeholder": "Klucz API",
"provider.connect.apiKey.required": "Klucz API jest wymagany",
"provider.connect.opencodeZen.line1":
"OpenCode Zen daje dostęp do wybranego zestawu niezawodnych, zoptymalizowanych modeli dla agentów programistycznych.",
"OpenCode Zen daje dostęp do wybranego zestawu niezawodnych, zoptymalizowanych modeli dla agentów kodujących.",
"provider.connect.opencodeZen.line2":
"Za pomocą jednego klucza API uzyskasz dostęp do modeli takich jak Claude, GPT, Gemini i GLM, a także wielu innych.",
"Z jednym kluczem API uzyskasz dostęp do modeli takich jak Claude, GPT, Gemini, GLM i więcej.",
"provider.connect.opencodeZen.visit.prefix": "Odwiedź ",
"provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
"provider.connect.opencodeZen.visit.suffix": ", aby odebrać swój klucz API.",
@@ -158,7 +156,7 @@ export const dict = {
"provider.custom.field.providerID.description": "Małe litery, cyfry, łączniki lub podkreślenia",
"provider.custom.field.name.label": "Nazwa wyświetlana",
"provider.custom.field.name.placeholder": "Mój Dostawca AI",
"provider.custom.field.baseURL.label": "Bazowy adres URL",
"provider.custom.field.baseURL.label": "Bazowy URL",
"provider.custom.field.baseURL.placeholder": "https://api.mojdostawca.com/v1",
"provider.custom.field.apiKey.label": "Klucz API",
"provider.custom.field.apiKey.placeholder": "Klucz API",
@@ -182,7 +180,7 @@ export const dict = {
"provider.custom.error.providerID.format": "Używaj małych liter, cyfr, łączników lub podkreśleń",
"provider.custom.error.providerID.exists": "To ID dostawcy już istnieje",
"provider.custom.error.name.required": "Nazwa wyświetlana jest wymagana",
"provider.custom.error.baseURL.required": "Bazowy adres URL jest wymagany",
"provider.custom.error.baseURL.required": "Bazowy URL jest wymagany",
"provider.custom.error.baseURL.format": "Musi zaczynać się od http:// lub https://",
"provider.custom.error.required": "Wymagane",
"provider.custom.error.duplicate": "Duplikat",
@@ -218,7 +216,7 @@ export const dict = {
"common.clear": "Wyczyść",
"common.connect": "Połącz",
"common.disconnect": "Rozłącz",
"common.continue": "Kontynuuj",
"common.continue": "Prześlij",
"common.submit": "Prześlij",
"common.save": "Zapisz",
"common.saving": "Zapisywanie...",
@@ -231,46 +229,46 @@ export const dict = {
"prompt.placeholder.summarizeComment": "Podsumuj komentarz…",
"prompt.mode.shell": "Terminal",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "Naciśnij Esc, aby wyjść",
"prompt.mode.shell.exit": "esc aby wyjść",
"session.child.promptDisabled": "Nie można wysyłać promptów w sesjach podagentów.",
"session.child.backToParent": "Wróć do głównej sesji.",
"prompt.example.1": "Napraw TODO w bazie kodu",
"prompt.example.2": "Jaki jest stos technologiczny tego projektu?",
"prompt.example.3": "Napraw zepsute testy",
"prompt.example.4": "Wyjaśnij, jak działa uwierzytelnianie",
"prompt.example.4": "Wyjaśnij jak działa uwierzytelnianie",
"prompt.example.5": "Znajdź i napraw luki w zabezpieczeniach",
"prompt.example.6": "Dodaj testy jednostkowe dla serwisu użytkownika",
"prompt.example.7": "Zrefaktoryzuj tę funkcję, aby była bardziej czytelna",
"prompt.example.8": "Co oznacza ten błąd?",
"prompt.example.9": "Pomóż mi zdiagnozować ten problem",
"prompt.example.9": "Pomóż mi zdebugować ten problem",
"prompt.example.10": "Wygeneruj dokumentację API",
"prompt.example.11": "Zoptymalizuj zapytania do bazy danych",
"prompt.example.12": "Dodaj walidację danych wejściowych",
"prompt.example.13": "Utwórz nowy komponent dla...",
"prompt.example.14": "Jak wdrożyć ten projekt?",
"prompt.example.15": "Sprawdź mój kod pod kątem najlepszych praktyk",
"prompt.example.16": "Dodaj obsługę błędów do tej funkcji",
"prompt.example.16": "Dodaj obsługę błędów do tej funkcję",
"prompt.example.17": "Wyjaśnij ten wzorzec regex",
"prompt.example.18": "Przekonwertuj to na TypeScript",
"prompt.example.19": "Dodaj logowanie w całej bazie kodu",
"prompt.example.20": "Które zależności są przestarzałe?",
"prompt.example.21": "Pomóż mi napisać skrypt migracyjny",
"prompt.example.22": "Zaimplementuj buforowanie dla tego punktu końcowego",
"prompt.example.22": "Zaimplementuj cachowanie dla tego punktu końcowego",
"prompt.example.23": "Dodaj stronicowanie do tej listy",
"prompt.example.24": "Utwórz polecenie CLI dla...",
"prompt.example.25": "Jak działają tutaj zmienne środowiskowe?",
"prompt.popover.emptyResults": "Brak pasujących wyników",
"prompt.popover.emptyCommands": "Brak pasujących poleceń",
"prompt.dropzone.label": "Upuść tutaj obrazy, pliki PDF lub pliki tekstowe",
"prompt.dropzone.file.label": "Upuść, aby oznaczyć plik za pomocą @",
"prompt.dropzone.file.label": "Upuść, aby @wspomnieć plik",
"prompt.slash.badge.custom": "własne",
"prompt.slash.badge.skill": "umiejętność",
"prompt.slash.badge.skill": "skill",
"prompt.slash.badge.mcp": "mcp",
"prompt.context.active": "aktywny",
"prompt.context.includeActiveFile": "Dołącz aktywny plik",
"prompt.context.removeActiveFile": "Usuń aktywny plik z kontekstu",
"prompt.context.removeFile": "Usuń plik z kontekstu",
"prompt.action.attachFile": "Dodaj pliki",
"prompt.action.attachFile": "Załącz plik",
"prompt.menu.addImagesAndFiles": "Dodaj pliki i inne elementy",
"prompt.menu.imagesAndFiles": "Obrazy i pliki",
"prompt.menu.commands": "Polecenia",
@@ -280,7 +278,6 @@ export const dict = {
"prompt.action.send": "Wyślij",
"prompt.action.stop": "Zatrzymaj",
"prompt.toast.pasteUnsupported.title": "Nieobsługiwany załącznik",
"prompt.toast.attachmentDuplicate.title": "Ten plik został już przesłany",
"prompt.toast.pasteUnsupported.description": "Można tutaj załączać tylko obrazy, pliki PDF lub pliki tekstowe.",
"prompt.toast.modelAgentRequired.title": "Wybierz agenta i model",
"prompt.toast.modelAgentRequired.description": "Wybierz agenta i model przed wysłaniem zapytania.",
@@ -291,12 +288,12 @@ export const dict = {
"prompt.toast.promptSendFailed.title": "Nie udało się wysłać zapytania",
"prompt.toast.promptSendFailed.description": "Nie udało się pobrać sesji",
"dialog.mcp.title": "MCP",
"dialog.mcp.description": "Włączone: {{enabled}} z {{total}}",
"dialog.mcp.description": "{{enabled}} z {{total}} włączone",
"dialog.mcp.empty": "Brak skonfigurowanych MCP",
"dialog.lsp.empty": "Serwery LSP wykrywane automatycznie na podstawie typów plików",
"dialog.plugins.empty": "Wtyczki skonfigurowane w pliku opencode.json",
"dialog.lsp.empty": "LSP wykryte automatycznie na podstawie typów plików",
"dialog.plugins.empty": "Wtyczki skonfigurowane w opencode.json",
"mcp.status.connected": "połączono",
"mcp.status.failed": "błąd",
"mcp.status.failed": "niepowodzenie",
"mcp.status.needs_auth": "wymaga autoryzacji",
"mcp.auth.clickToAuthenticate": "Kliknij, aby się uwierzytelnić",
"mcp.status.disabled": "wyłączone",
@@ -306,14 +303,14 @@ export const dict = {
"dialog.directory.action.selectFile": "Wybierz plik",
"dialog.directory.action.selectFolder": "Wybierz folder",
"dialog.directory.root": "Katalog główny",
"dialog.directory.parent": "Folder nadrzędny",
"dialog.directory.parent": "Nadrzędny",
"dialog.directory.readError": "Nie można odczytać tego folderu",
"dialog.server.title": "Serwery",
"dialog.server.description": "Przełącz serwer OpenCode, z którym łączy się ta aplikacja.",
"dialog.server.search.placeholder": "Szukaj serwerów",
"dialog.server.empty": "Brak serwerów",
"dialog.server.add.title": "Dodaj serwer",
"dialog.server.add.url": "Adres URL serwera",
"dialog.server.add.url": "URL serwera",
"dialog.server.add.placeholder": "http://localhost:4096",
"dialog.server.add.error": "Nie można połączyć się z serwerem",
"dialog.server.add.checking": "Sprawdzanie...",
@@ -325,7 +322,7 @@ export const dict = {
"dialog.server.edit.title": "Edytuj serwer",
"dialog.server.default.title": "Domyślny serwer",
"dialog.server.default.description":
"Łącz się z tym serwerem przy uruchamianiu aplikacji zamiast uruchamiać serwer lokalny. Wymaga ponownego uruchomienia.",
"Połącz z tym serwerem przy uruchomieniu aplikacji zamiast uruchamiać lokalny serwer. Wymaga restartu.",
"dialog.server.default.none": "Nie wybrano serwera",
"dialog.server.default.set": "Ustaw bieżący serwer jako domyślny",
"dialog.server.default.clear": "Wyczyść",
@@ -334,7 +331,7 @@ export const dict = {
"dialog.server.menu.default": "Ustaw jako domyślny",
"dialog.server.menu.defaultRemove": "Usuń domyślny",
"dialog.server.menu.delete": "Usuń",
"dialog.server.current": "Bieżący serwer",
"dialog.server.current": "Obecny serwer",
"dialog.server.status.default": "Domyślny",
"wsl.server.add": "Dodaj serwer WSL",
"wsl.server.addShort": "Dodaj WSL",
@@ -375,7 +372,7 @@ export const dict = {
"wsl.onboarding.distroStatus.ready": "Gotowa",
"wsl.onboarding.distroStatus.checking": "Sprawdzanie...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode nie jest zainstalowany",
"wsl.onboarding.distroStatus.missingTools": "Brak narzędzi bash i curl",
"wsl.onboarding.distroStatus.missingTools": "Brak bash i curl",
"wsl.onboarding.distroStatus.unsupported": "Nieobsługiwana · Użyj WSL 2",
"wsl.onboarding.needAnotherDistro": "Potrzebujesz innej dystrybucji?",
"wsl.onboarding.needAnotherDistroHint": "Zainstaluj dystrybucję systemu Linux z katalogu WSL",
@@ -396,7 +393,7 @@ export const dict = {
"wsl.onboarding.installDistro": "Zainstaluj dystrybucję",
"wsl.onboarding.searchDistros": "Szukaj dystrybucji",
"wsl.onboarding.wsl2Required": "Wymagany jest WSL 2.",
"wsl.onboarding.toolsRequired": "Ta dystrybucja wymaga narzędzi bash i curl.",
"wsl.onboarding.toolsRequired": "Ta dystrybucja wymaga bash i curl.",
"wsl.onboarding.openTerminal": "Otwórz terminal",
"wsl.onboarding.path": "Ścieżka: {{path}}",
"wsl.onboarding.notFound": "nie znaleziono",
@@ -409,8 +406,8 @@ export const dict = {
"dialog.project.edit.name": "Nazwa",
"dialog.project.edit.icon": "Ikona",
"dialog.project.edit.icon.alt": "Ikona projektu",
"dialog.project.edit.icon.hint": "Kliknij, aby wybrać obraz, lub przeciągnij go tutaj",
"dialog.project.edit.icon.recommended": "Zalecane: 128 × 128 px",
"dialog.project.edit.icon.hint": "Kliknij lub przeciągnij obraz",
"dialog.project.edit.icon.recommended": "Zalecane: 128x128px",
"dialog.project.edit.color": "Kolor",
"dialog.project.edit.color.select": "Wybierz kolor {{color}}",
"dialog.project.edit.worktree.startup": "Skrypt uruchamiania przestrzeni roboczej",
@@ -470,9 +467,9 @@ export const dict = {
"toast.theme.title": "Przełączono motyw",
"toast.scheme.title": "Schemat kolorów",
"toast.workspace.enabled.title": "Przestrzenie robocze włączone",
"toast.workspace.enabled.description": "Kilka drzew roboczych jest teraz wyświetlanych na pasku bocznym",
"toast.workspace.enabled.description": "Kilka worktree jest teraz wyświetlanych na pasku bocznym",
"toast.workspace.disabled.title": "Przestrzenie robocze wyłączone",
"toast.workspace.disabled.description": "Tylko główne drzewo robocze jest wyświetlane na pasku bocznym",
"toast.workspace.disabled.description": "Tylko główny worktree jest wyświetlany na pasku bocznym",
"toast.permissions.autoaccept.on.title": "Automatyczne akceptowanie uprawnień",
"toast.permissions.autoaccept.on.description": "Żądania uprawnień będą automatycznie zatwierdzane",
"toast.permissions.autoaccept.off.title": "Zatrzymano automatyczne akceptowanie uprawnień",
@@ -483,9 +480,9 @@ export const dict = {
"toast.file.listFailed.title": "Nie udało się wyświetlić listy plików",
"toast.context.noLineSelection.title": "Brak zaznaczenia linii",
"toast.context.noLineSelection.description": "Najpierw wybierz zakres linii w zakładce pliku.",
"toast.session.share.copyFailed.title": "Nie udało się skopiować adresu URL do schowka",
"toast.session.share.copyFailed.title": "Nie udało się skopiować URL do schowka",
"toast.session.share.success.title": "Sesja udostępniona",
"toast.session.share.success.description": "Adres URL udostępnionej sesji skopiowano do schowka!",
"toast.session.share.success.description": "Link udostępniania skopiowany do schowka!",
"toast.session.share.failed.title": "Nie udało się udostępnić sesji",
"toast.session.share.failed.description": "Wystąpił błąd podczas udostępniania sesji",
"toast.session.unshare.success.title": "Zatrzymano udostępnianie sesji",
@@ -495,13 +492,13 @@ export const dict = {
"toast.session.listFailed.title": "Nie udało się załadować sesji dla {{project}}",
"toast.update.title": "Dostępna aktualizacja",
"toast.update.description": "Nowa wersja OpenCode ({{version}}) jest teraz dostępna do instalacji.",
"toast.update.action.installRestart": "Zainstaluj i uruchom ponownie",
"toast.update.action.installRestart": "Zainstaluj i zrestartuj",
"toast.update.action.notYet": "Jeszcze nie",
"error.page.title": "Coś poszło nie tak",
"error.page.description": "Wystąpił błąd podczas ładowania aplikacji.",
"error.page.description.localServerStartup": "Wystąpił błąd podczas uruchamiania serwera lokalnego.",
"error.page.details.label": "Szczegóły błędu",
"error.page.action.restart": "Uruchom ponownie",
"error.page.action.restart": "Restartuj",
"error.page.action.report": "Zgłoś błąd",
"error.page.action.reported": "Błąd zgłoszony",
"error.page.action.exportLogs": "Eksportuj dzienniki",
@@ -514,7 +511,7 @@ export const dict = {
"error.dev.rootNotFound":
"Nie znaleziono elementu głównego. Czy zapomniałeś dodać go do swojego index.html? A może atrybut id został błędnie wpisany?",
"error.serverSync.connectFailed": "Nie można połączyć się z serwerem. Czy serwer działa pod adresem `{{url}}`?",
"directory.error.invalidUrl": "Nieprawidłowy katalog w adresie URL.",
"directory.error.invalidUrl": "Nieprawidłowy katalog w URL.",
"error.chain.unknown": "Nieznany błąd",
"error.chain.causedBy": "Spowodowany przez:",
"error.chain.apiError": "Błąd API",
@@ -523,7 +520,7 @@ export const dict = {
"error.chain.responseBody": "Treść odpowiedzi:\n{{body}}",
"error.chain.didYouMean": "Czy miałeś na myśli: {{suggestions}}",
"error.chain.modelNotFound": "Model nie znaleziony: {{provider}}/{{model}}",
"error.chain.checkConfig": "Sprawdź nazwy dostawców i modeli w konfiguracji (opencode.json)",
"error.chain.checkConfig": "Sprawdź swoją konfigurację (opencode.json) nazwy dostawców/modeli",
"error.chain.mcpFailed":
"Serwer MCP „{{name}}” nie uruchomił się. Uwaga: OpenCode nie obsługuje jeszcze uwierzytelniania MCP.",
"error.chain.providerAuthFailed": "Uwierzytelnianie dostawcy nie powiodło się ({{provider}}): {{message}}",
@@ -578,7 +575,7 @@ export const dict = {
"session.review.change.other": "Zmiany",
"session.review.loadingChanges": "Ładowanie zmian...",
"session.review.empty": "Brak zmian w tej sesji",
"session.review.noVcs": "Nie wykryto systemu kontroli wersji Git, dlatego zmiany nie są wyświetlane",
"session.review.noVcs": "Nie wykryto systemu kontroli wersji Git, zmiany nie są wyświetlane",
"session.review.noSnapshot": "Śledzenie migawek jest wyłączone w konfiguracji, więc zmiany w sesji są niedostępne",
"session.review.noChanges": "Brak zmian",
"session.review.noUncommittedChanges": "Brak jeszcze niezatwierdzonych zmian",
@@ -599,20 +596,14 @@ export const dict = {
"session.question.minimize": "Zminimalizuj pytanie",
"session.question.restore": "Przywróć pytanie",
"session.question.pending.one": "{{count}} oczekujące pytanie",
"session.question.pending.few": "{{count}} oczekujące pytania",
"session.question.pending.many": "{{count}} oczekujących pytań",
"session.question.pending.other": "Pytania oczekujące: {{count}}",
"session.followupDock.summary.one": "{{count}} wiadomość w kolejce",
"session.followupDock.summary.few": "{{count}} wiadomości w kolejce",
"session.followupDock.summary.many": "{{count}} wiadomości w kolejce",
"session.followupDock.summary.other": "{{count}} wiadomości w kolejce",
"session.followupDock.sendNow": "Wyślij teraz",
"session.followupDock.edit": "Edytuj",
"session.followupDock.collapse": "Zwiń wiadomości w kolejce",
"session.followupDock.expand": "Rozwiń wiadomości w kolejce",
"session.revertDock.summary.one": "{{count}} cofnięta wiadomość",
"session.revertDock.summary.few": "{{count}} cofnięte wiadomości",
"session.revertDock.summary.many": "{{count}} cofniętych wiadomości",
"session.revertDock.summary.other": "{{count}} cofnięte wiadomości",
"session.revertDock.collapse": "Zwiń cofnięte wiadomości",
"session.revertDock.expand": "Rozwiń cofnięte wiadomości",
@@ -654,7 +645,7 @@ export const dict = {
"session.share.action.publishing": "Publikowanie...",
"session.share.action.unpublish": "Cofnij publikację",
"session.share.action.unpublishing": "Cofanie publikacji...",
"session.share.action.view": "Wyświetl",
"session.share.action.view": "Widok",
"session.share.copy.copied": "Skopiowano",
"session.share.copy.copyLink": "Kopiuj link",
"lsp.tooltip.none": "Brak serwerów LSP",
@@ -666,7 +657,7 @@ export const dict = {
"terminal.close": "Zamknij terminal",
"terminal.connectionLost.title": "Utracono połączenie",
"terminal.connectionLost.description":
"Połączenie z terminalem zostało przerwane. Może się to zdarzyć podczas ponownego uruchamiania serwera.",
"Połączenie z terminalem zostało przerwane. Może się to zdarzyć przy restarcie serwera.",
"common.closeTab": "Zamknij kartę",
"common.dismiss": "Odrzuć",
"common.requestFailed": "Żądanie nie powiodło się",
@@ -695,7 +686,7 @@ export const dict = {
"sidebar.empty.title": "Brak otwartych projektów",
"sidebar.empty.description": "Otwórz projekt, aby rozpocząć",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "Aplikacja komputerowa",
"settings.section.desktop": "Pulpit",
"settings.section.server": "Serwer",
"settings.tab.general": "Ogólne",
"settings.tab.shortcuts": "Skróty",
@@ -747,9 +738,8 @@ export const dict = {
"settings.general.row.mobileTitlebarBottom.title": "Dolna nawigacja",
"settings.general.row.mobileTitlebarBottom.description":
"Umieść pasek tytułu i karty sesji u dołu ekranu na urządzeniach mobilnych",
"settings.general.row.showCustomAgents.title": "Wybór agenta",
"settings.general.row.showCustomAgents.description":
"Umożliwiaj przełączanie agentów w edytorze wiadomości. Po ukryciu domyślnie używany jest agent Build.",
"settings.general.row.showCustomAgents.title": "Agenci niestandardowi",
"settings.general.row.showCustomAgents.description": "Pokaż wybór agenta w edytorze wiadomości",
"settings.general.row.reasoningSummaries.title": "Pokaż podsumowania wnioskowania",
"settings.general.row.reasoningSummaries.description": "Wyświetlaj podsumowania wnioskowania modelu na osi czasu",
"settings.general.row.shellToolPartsExpanded.title": "Rozwijaj elementy narzędzia shell",
@@ -767,14 +757,13 @@ export const dict = {
"settings.general.row.newInterfaceNotice.dismiss": "Odrzuć",
"settings.general.row.pinchZoom.title": "Powiększanie gestem szczypania",
"settings.general.row.pinchZoom.description":
"Zezwalaj na powiększanie gestem szczypania na gładziku lub przez przewijanie z wciśniętym klawiszem Ctrl",
"settings.general.row.wayland.title": "Użyj natywnego protokołu Wayland",
"settings.general.row.wayland.description":
"Wyłącz awaryjne korzystanie z X11 w środowisku Wayland. Wymaga ponownego uruchomienia.",
"Zezwalaj na powiększanie gestem szczypania na gładziku i przewijaniem z klawiszem Ctrl",
"settings.general.row.wayland.title": "Użyj natywnego Wayland",
"settings.general.row.wayland.description": "Wyłącz fallback X11 na Wayland. Wymaga restartu.",
"settings.general.row.wayland.tooltip":
"W systemie Linux z monitorami o różnej częstotliwości odświeżania natywny protokół Wayland może być stabilniejszy.",
"Na Linuxie z monitorami o różnym odświeżaniu, natywny Wayland może być bardziej stabilny.",
"settings.general.row.releaseNotes.title": "Informacje o wydaniu",
"settings.general.row.releaseNotes.description": "Pokazuj wyskakujące okna Co nowego po aktualizacjach",
"settings.general.row.releaseNotes.description": 'Pokazuj wyskakujące okna "Co nowego" po aktualizacjach',
"settings.updates.row.startup.title": "Sprawdzaj aktualizacje przy uruchomieniu",
"settings.updates.row.startup.description": "Automatycznie sprawdzaj aktualizacje podczas uruchamiania OpenCode",
"settings.updates.row.check.title": "Sprawdź aktualizacje",
@@ -888,8 +877,7 @@ export const dict = {
"settings.permissions.tool.read.title": "Odczyt",
"settings.permissions.tool.read.description": "Odczyt pliku (pasuje do ścieżki pliku)",
"settings.permissions.tool.edit.title": "Edycja",
"settings.permissions.tool.edit.description":
"Modyfikowanie plików, w tym edytowanie, zapisywanie, stosowanie łatek i edytowanie wielu plików",
"settings.permissions.tool.edit.description": "Modyfikacja plików, w tym edycje, zapisy, łatki i multi-edycje",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "Dopasowywanie plików za pomocą wzorców glob",
"settings.permissions.tool.grep.title": "Grep",
@@ -899,7 +887,7 @@ export const dict = {
"settings.permissions.tool.bash.title": "Bash",
"settings.permissions.tool.bash.description": "Uruchamianie poleceń powłoki",
"settings.permissions.tool.task.title": "Zadanie",
"settings.permissions.tool.task.description": "Uruchamianie podagentów",
"settings.permissions.tool.task.description": "Uruchamianie pod-agentów",
"settings.permissions.tool.skill.title": "Umiejętność",
"settings.permissions.tool.skill.description": "Ładowanie umiejętności według nazwy",
"settings.permissions.tool.lsp.title": "LSP",
@@ -930,7 +918,7 @@ export const dict = {
"workspace.reset.success.description": "Przestrzeń robocza odpowiada teraz domyślnej gałęzi.",
"workspace.error.stillPreparing": "Przestrzeń robocza jest wciąż przygotowywana",
"workspace.status.checking": "Sprawdzanie niezscalonych zmian...",
"workspace.status.error": "Nie można zweryfikować statusu Git.",
"workspace.status.error": "Nie można zweryfikować statusu git.",
"workspace.status.clean": "Nie wykryto niezscalonych zmian.",
"workspace.status.dirty": "Wykryto niezscalone zmiany w tej przestrzeni roboczej.",
"workspace.delete.title": "Usuń przestrzeń roboczą",
@@ -956,7 +944,7 @@ export const dict = {
"common.time.hoursAgo.short": "{{count}} godz. temu",
"common.time.daysAgo.short": "{{count}} dni temu",
"settings.providers.connected.environmentDescription": "Połączono ze zmiennymi środowiskowymi",
"settings.providers.custom.description": "Dodaj dostawcę zgodnego z OpenAI za pomocą bazowego adresu URL.",
"settings.providers.custom.description": "Dodaj dostawcę zgodnego z OpenAI poprzez podstawowy URL.",
"app.server.unreachable": "Nie można połączyć z {{server}}",
"app.server.retrying": "Ponawianie automatycznie...",
@@ -972,9 +960,6 @@ export const dict = {
"session.question.progress": "{{current}} z {{total}} pytań",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "Eksplorator plików",
"session.header.reveal.finder": "Pokaż w Finderze",
"session.header.reveal.fileExplorer": "Pokaż w Eksploratorze plików",
"session.header.reveal.containingFolder": "Otwórz folder zawierający",
"session.header.open.fileManager": "Menedżer plików",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
@@ -989,17 +974,17 @@ export const dict = {
"session.header.open.app.androidStudio": "Android Studio",
"session.header.open.app.powershell": "PowerShell",
"session.header.open.app.sublimeText": "Sublime Text",
"debugBar.ariaLabel": "Diagnostyka wydajności w środowisku deweloperskim",
"debugBar.ariaLabel": "Diagnostyka wydajności deweloperskiej",
"debugBar.na": "n.d.",
"debugBar.nav.label": "NAV",
"debugBar.nav.tip":
"Ostatnie zakończone przejście między trasami obejmujące stronę sesji, mierzone od uruchomienia routera do pierwszego odrysowania po ustabilizowaniu widoku.",
"Ostatnie zakończone przejście trasy dotykające strony sesji, mierzone od startu routera do pierwszego odrysowania po ustaleniu.",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "Średnia liczba klatek na sekundę w ciągu ostatnich 5 sekund.",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "Najgorszy czas klatki w ciągu ostatnich 5 sekund.",
"debugBar.jank.label": "JANK",
"debugBar.jank.tip": "Klatki powyżej 32 ms w ciągu ostatnich 5 sekund.",
"debugBar.jank.tip": "Klatki powyżej 32ms w ciągu ostatnich 5 sekund.",
"debugBar.long.label": "LONG",
"debugBar.long.tip":
"Zablokowany czas i liczba długich zadań w ciągu ostatnich 5 sekund. Maksymalne zadanie: {{max}}.",
@@ -1009,10 +994,10 @@ export const dict = {
"debugBar.inp.tip":
"Przybliżony czas trwania interakcji w ciągu ostatnich 5 sekund. Jest to podobne do INP, a nie oficjalne Web Vitals INP.",
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "Skumulowane przesunięcie układu od bieżącego uruchomienia aplikacji.",
"debugBar.cls.tip": "Skumulowane przesunięcie układu dla bieżącego czasu życia aplikacji.",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "Wykorzystana pamięć sterty JS względem jej limitu. Tylko Chromium.",
"debugBar.mem.tip": "Wykorzystana pamięć sterty JS względem jej limitu: {{used}} z {{limit}}.",
"debugBar.mem.tipUnavailable": "Użyta sterta JS vs limit sterty. Tylko Chromium.",
"debugBar.mem.tip": "Użyta sterta JS vs limit sterty. {{used}} z {{limit}}.",
"common.key.ctrl": "Ctrl",
"common.key.alt": "Alt",
"common.key.shift": "Shift",
+81 -94
View File
@@ -37,12 +37,12 @@ export const dict = {
"command.palette": "Палитра команд",
"command.theme.cycle": "Переключить тему",
"command.theme.cycle": "Цикл тем",
"command.theme.set": "Использовать тему: {{theme}}",
"command.theme.scheme.cycle": "Переключить цветовую схему",
"command.theme.scheme.cycle": "Цикл цветовой схемы",
"command.theme.scheme.set": "Использовать цветовую схему: {{scheme}}",
"command.language.cycle": "Переключить язык",
"command.language.cycle": "Цикл языков",
"command.language.set": "Использовать язык: {{language}}",
"command.session.new": "Новая сессия",
@@ -51,7 +51,7 @@ export const dict = {
"command.tab.reopenClosed": "Повторно открыть закрытую вкладку",
"command.context.addSelection": "Добавить выделение в контекст",
"command.context.addSelection.description": "Добавить выбранные строки из текущего файла",
"command.input.focus": "Перейти к полю ввода",
"command.input.focus": "Фокус на поле ввода",
"command.terminal.toggle": "Переключить терминал",
"command.fileTree.toggle": "Переключить дерево файлов",
"command.review.toggle": "Переключить обзор",
@@ -67,11 +67,11 @@ export const dict = {
"command.model.choose.description": "Выбрать другую модель",
"command.mcp.toggle": "Переключить MCP",
"command.mcp.toggle.description": "Переключить MCP",
"command.agent.cycle": "Следующий агент",
"command.agent.cycle": "Цикл агентов",
"command.agent.cycle.description": "Переключиться к следующему агенту",
"command.agent.cycle.reverse": "Предыдущий агент",
"command.agent.cycle.reverse": "Цикл агентов назад",
"command.agent.cycle.reverse.description": "Переключиться к предыдущему агенту",
"command.model.variant.cycle": "Переключить уровень усилий",
"command.model.variant.cycle": "Цикл режимов мышления",
"command.model.variant.cycle.description": "Переключиться к следующему уровню усилий",
"command.prompt.mode.shell": "Оболочка",
"command.prompt.mode.normal": "Промпт",
@@ -102,10 +102,9 @@ export const dict = {
"dialog.provider.empty": "Провайдеры не найдены",
"dialog.provider.group.popular": "Популярные",
"dialog.provider.group.other": "Другие",
"dialog.provider.custom.label": "Пользовательский провайдер, совместимый с OpenAI",
"dialog.provider.tag.recommended": "Рекомендуемые",
"dialog.provider.opencode.note": "Отобранные модели, включая Claude, GPT, Gemini и другие",
"dialog.provider.opencode.tagline": "Надёжные оптимизированные модели",
"dialog.provider.opencode.tagline": "Надежные оптимизированные модели",
"dialog.provider.opencodeGo.tagline": "Доступная подписка для всех",
"dialog.provider.anthropic.note": "Прямой доступ к моделям Claude, включая Pro и Max",
"dialog.provider.copilot.note": "ИИ-модели для помощи в кодировании через GitHub Copilot",
@@ -118,34 +117,33 @@ export const dict = {
"dialog.model.search.placeholder": "Поиск моделей",
"dialog.model.empty": "Модели не найдены",
"dialog.model.manage": "Управление моделями",
"dialog.model.manage.description": "Настройте, какие модели отображаются при выборе модели",
"dialog.model.manage.description": "Настройте какие модели появляются в выборе модели",
"dialog.model.manage.provider.toggle": "Переключить все модели {{provider}}",
"dialog.model.unpaid.freeModels.title": "Бесплатные модели от OpenCode",
"dialog.model.unpaid.addMore.title": "Добавьте больше моделей от популярных провайдеров",
"dialog.model.unpaid.viewMoreProviders": "Посмотреть ещё более 70 провайдеров",
"dialog.provider.viewAll": "Показать больше провайдеров",
"provider.connect.title": "Подключить {{provider}}",
"provider.connect.title.anthropicProMax": "Войти с помощью Claude Pro/Max",
"provider.connect.selectMethod": "Выберите способ входа для {{provider}}.",
"provider.connect.method.apiKey": "Ключ API",
"provider.connect.method.apiKey": "API ключ",
"provider.connect.status.inProgress": "Авторизация...",
"provider.connect.status.waiting": "Ожидание авторизации...",
"provider.connect.status.failed": "Ошибка авторизации: {{error}}",
"provider.connect.apiKey.description":
"Введите ключ API {{provider}}, чтобы подключить аккаунт и использовать модели {{provider}} в OpenCode.",
"provider.connect.apiKey.label": "Ключ API {{provider}}",
"provider.connect.apiKey.placeholder": "Ключ API",
"provider.connect.apiKey.required": "Требуется ключ API",
"Введите ваш API ключ {{provider}} для подключения аккаунта и использования моделей {{provider}} в OpenCode.",
"provider.connect.apiKey.label": "{{provider}} API ключ",
"provider.connect.apiKey.placeholder": "API ключ",
"provider.connect.apiKey.required": "API ключ обязателен",
"provider.connect.opencodeZen.line1":
"OpenCode Zen даёт вам доступ к отобранным надёжным оптимизированным моделям для агентов программирования.",
"provider.connect.opencodeZen.line2":
"С одним ключом API вы получите доступ к таким моделям, как Claude, GPT, Gemini, GLM и другие.",
"С одним API ключом вы получите доступ к таким моделям как Claude, GPT, Gemini, GLM и другим.",
"provider.connect.opencodeZen.visit.prefix": "Посетите ",
"provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
"provider.connect.opencodeZen.visit.suffix": ", чтобы получить ключ API.",
"provider.connect.opencodeZen.visit.suffix": " чтобы получить ваш API ключ.",
"provider.connect.oauth.code.visit.prefix": "Посетите ",
"provider.connect.oauth.code.visit.link": "эту ссылку",
"provider.connect.oauth.code.visit.suffix":
@@ -163,18 +161,18 @@ export const dict = {
"provider.connect.toast.connected.description": "Модели {{provider}} теперь доступны.",
"provider.custom.title": "Пользовательский провайдер",
"provider.custom.description.prefix": "Настройте провайдера, совместимого с OpenAI. См. ",
"provider.custom.description.prefix": "Настройте OpenAI-совместимого провайдера. См. ",
"provider.custom.description.link": "документацию по настройке провайдера",
"provider.custom.description.suffix": ".",
"provider.custom.field.providerID.label": "ID провайдера",
"provider.custom.field.providerID.placeholder": "myprovider",
"provider.custom.field.providerID.description": "Строчные буквы, цифры, дефисы или подчёркивания",
"provider.custom.field.name.label": "Отображаемое имя",
"provider.custom.field.name.placeholder": "Мой ИИ-провайдер",
"provider.custom.field.name.placeholder": "Мой AI провайдер",
"provider.custom.field.baseURL.label": "Базовый URL",
"provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1",
"provider.custom.field.apiKey.label": "Ключ API",
"provider.custom.field.apiKey.placeholder": "Ключ API",
"provider.custom.field.apiKey.label": "API ключ",
"provider.custom.field.apiKey.placeholder": "API ключ",
"provider.custom.field.apiKey.description":
"Необязательно. Оставьте пустым, если управляете авторизацией через заголовки.",
"provider.custom.models.label": "Модели",
@@ -213,15 +211,15 @@ export const dict = {
"model.input.image": "изображение",
"model.input.audio": "аудио",
"model.input.video": "видео",
"model.input.pdf": "PDF",
"model.tooltip.allows": "Поддерживает: {{inputs}}",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Разрешено: {{inputs}}",
"model.tooltip.context.label": "Контекст",
"model.tooltip.inputs": "Входные данные",
"model.tooltip.model": "Модель",
"model.tooltip.provider": "Провайдер",
"model.tooltip.reasoning": "Рассуждение",
"model.tooltip.reasoning.allowed": "Поддерживает рассуждения",
"model.tooltip.reasoning.none": "Без рассуждений",
"model.tooltip.reasoning.allowed": "Разрешает рассуждение",
"model.tooltip.reasoning.none": "Без рассуждения",
"model.tooltip.context": "Лимит контекста {{limit}}",
"common.search.placeholder": "Поиск",
@@ -233,7 +231,7 @@ export const dict = {
"common.clear": "Очистить",
"common.connect": "Подключить",
"common.disconnect": "Отключить",
"common.continue": "Продолжить",
"common.continue": "Отправить",
"common.submit": "Отправить",
"common.save": "Сохранить",
"common.saving": "Сохранение...",
@@ -243,8 +241,8 @@ export const dict = {
"prompt.placeholder.shell": "Введите команду оболочки... {{example}}",
"prompt.placeholder.normal": 'Спросите что угодно... "{{example}}"',
"prompt.placeholder.simple": "Спросите что угодно...",
"prompt.placeholder.summarizeComments": "Обобщить комментарии…",
"prompt.placeholder.summarizeComment": "Обобщить комментарий…",
"prompt.placeholder.summarizeComments": "Суммировать комментарии…",
"prompt.placeholder.summarizeComment": "Суммировать комментарий…",
"prompt.mode.shell": "Оболочка",
"prompt.mode.normal": "Промпт",
"prompt.mode.shell.exit": "esc для выхода",
@@ -254,33 +252,33 @@ export const dict = {
"prompt.example.1": "Исправить TODO в коде",
"prompt.example.2": "Какой технологический стек этого проекта?",
"prompt.example.3": "Исправить сломанные тесты",
"prompt.example.4": "Объясни, как работает аутентификация",
"prompt.example.4": "Объясни как работает аутентификация",
"prompt.example.5": "Найти и исправить уязвимости безопасности",
"prompt.example.6": "Добавить модульные тесты для службы пользователей",
"prompt.example.6": "Добавить юнит-тесты для сервиса пользователя",
"prompt.example.7": "Рефакторить эту функцию для лучшей читаемости",
"prompt.example.8": "Что означает эта ошибка?",
"prompt.example.9": "Помоги мне отладить эту проблему",
"prompt.example.10": "Сгенерировать документацию API",
"prompt.example.11": "Оптимизировать запросы к базе данных",
"prompt.example.12": "Добавить проверку входных данных",
"prompt.example.12": "Добавить валидацию ввода",
"prompt.example.13": "Создать новый компонент для...",
"prompt.example.14": "Как развернуть этот проект?",
"prompt.example.15": "Проверь, соответствует ли мой код рекомендациям",
"prompt.example.15": "Проверь мой код на лучшие практики",
"prompt.example.16": "Добавить обработку ошибок в эту функцию",
"prompt.example.17": "Объясни это регулярное выражение",
"prompt.example.18": "Преобразовать это в TypeScript",
"prompt.example.17": "Объясни этот паттерн regex",
"prompt.example.18": "Конвертировать это в TypeScript",
"prompt.example.19": "Добавить логирование по всему проекту",
"prompt.example.20": "Какие зависимости устарели?",
"prompt.example.21": "Помоги написать скрипт миграции",
"prompt.example.22": "Реализовать кеширование для этой конечной точки",
"prompt.example.22": "Реализовать кэширование для этой конечной точки",
"prompt.example.23": "Добавить пагинацию в этот список",
"prompt.example.24": "Создать CLI-команду для...",
"prompt.example.25": "Как здесь работают переменные окружения?",
"prompt.example.24": "Создать CLI команду для...",
"prompt.example.25": "Как работают переменные окружения здесь?",
"prompt.popover.emptyResults": "Нет совпадений",
"prompt.popover.emptyCommands": "Нет совпадающих команд",
"prompt.dropzone.label": "Перетащите сюда изображения, PDF или текстовые файлы",
"prompt.dropzone.file.label": "Отпустите, чтобы упомянуть файл через @",
"prompt.dropzone.file.label": "Отпустите для @упоминания файла",
"prompt.slash.badge.custom": "своё",
"prompt.slash.badge.skill": "навык",
"prompt.slash.badge.mcp": "mcp",
@@ -299,7 +297,6 @@ export const dict = {
"prompt.action.stop": "Остановить",
"prompt.toast.pasteUnsupported.title": "Неподдерживаемое вложение",
"prompt.toast.attachmentDuplicate.title": "Этот файл уже загружен",
"prompt.toast.pasteUnsupported.description": "Здесь можно прикрепить только изображения, PDF или текстовые файлы.",
"prompt.toast.modelAgentRequired.title": "Выберите агента и модель",
"prompt.toast.modelAgentRequired.description": "Выберите агента и модель перед отправкой запроса.",
@@ -334,7 +331,7 @@ export const dict = {
"dialog.directory.readError": "Не удалось прочитать эту папку",
"dialog.server.title": "Серверы",
"dialog.server.description": "Выберите сервер OpenCode, к которому подключается приложение.",
"dialog.server.description": "Переключите сервер OpenCode к которому подключается приложение.",
"dialog.server.search.placeholder": "Поиск серверов",
"dialog.server.empty": "Серверов пока нет",
"dialog.server.add.title": "Добавить сервер",
@@ -358,7 +355,7 @@ export const dict = {
"dialog.server.menu.edit": "Редактировать",
"dialog.server.menu.default": "Сделать по умолчанию",
"dialog.server.menu.defaultRemove": "Отменить выбор по умолчанию",
"dialog.server.menu.defaultRemove": "Удалить по умолчанию",
"dialog.server.menu.delete": "Удалить",
"dialog.server.current": "Текущий сервер",
"dialog.server.status.default": "По умолч.",
@@ -407,7 +404,7 @@ export const dict = {
"wsl.onboarding.needAnotherDistroHint": "Установите дистрибутив Linux из каталога WSL",
"wsl.onboarding.wslNotInstalled.title": "WSL не установлена",
"wsl.onboarding.wslNotInstalled.description":
"Для добавления сервера WSL в OpenCode требуется WSL (Подсистема Windows для Linux)",
"Для добавления сервера WSL в OpenCode требуется WSL (Windows Subsystem for Linux)",
"wsl.onboarding.wslUnavailable.title": "WSL недоступна",
"wsl.onboarding.wslUnavailable.description": "OpenCode не смог проверить WSL на этом компьютере.",
"wsl.onboarding.installWsl": "Установить WSL",
@@ -434,10 +431,10 @@ export const dict = {
"dialog.project.edit.title": "Редактировать проект",
"dialog.project.edit.name": "Название",
"dialog.project.edit.icon": "Значок",
"dialog.project.edit.icon.alt": "Значок проекта",
"dialog.project.edit.icon": "Иконка",
"dialog.project.edit.icon.alt": "Иконка проекта",
"dialog.project.edit.icon.hint": "Нажмите или перетащите изображение",
"dialog.project.edit.icon.recommended": "Рекомендуется: 128 x 128 пикселей",
"dialog.project.edit.icon.recommended": "Рекомендуется: 128x128px",
"dialog.project.edit.color": "Цвет",
"dialog.project.edit.color.select": "Выбрать цвет {{color}}",
@@ -467,7 +464,7 @@ export const dict = {
"context.stats.inputTokens": "Входные токены",
"context.stats.outputTokens": "Выходные токены",
"context.stats.reasoningTokens": "Токены рассуждения",
"context.stats.cacheTokens": "Токены кеша (чтение/запись)",
"context.stats.cacheTokens": "Токены кэша (чтение/запись)",
"context.stats.userMessages": "Сообщения пользователя",
"context.stats.assistantMessages": "Сообщения ассистента",
"context.stats.totalCost": "Общая стоимость",
@@ -566,27 +563,27 @@ export const dict = {
"error.chain.causedBy": "Причина:",
"error.chain.apiError": "Ошибка API",
"error.chain.status": "Статус: {{status}}",
"error.chain.retryable": "Можно повторить: {{retryable}}",
"error.chain.retryable": "Повторная попытка: {{retryable}}",
"error.chain.responseBody": "Тело ответа:\n{{body}}",
"error.chain.didYouMean": "Возможно, вы имели в виду: {{suggestions}}",
"error.chain.modelNotFound": "Модель не найдена: {{provider}}/{{model}}",
"error.chain.checkConfig": "Проверьте названия провайдера и модели в конфигурации (opencode.json)",
"error.chain.checkConfig": "Проверьте названия провайдера/модели в конфиге (opencode.json)",
"error.chain.mcpFailed":
'MCP-сервер "{{name}}" завершился с ошибкой. Обратите внимание: OpenCode пока не поддерживает MCP-авторизацию.',
'MCP сервер "{{name}}" завершился с ошибкой. Обратите внимание, что OpenCode пока не поддерживает MCP авторизацию.',
"error.chain.providerAuthFailed": "Ошибка аутентификации провайдера ({{provider}}): {{message}}",
"error.chain.providerInitFailed":
'Не удалось инициализировать провайдера "{{provider}}". Проверьте учётные данные и конфигурацию.',
"error.chain.configJsonInvalid": "Конфигурационный файл по адресу {{path}} содержит некорректный JSON(C)",
"error.chain.configJsonInvalid": "Конфигурационный файл по адресу {{path}} не является валидным JSON(C)",
"error.chain.configJsonInvalidWithMessage":
"Конфигурационный файл по адресу {{path}} содержит некорректный JSON(C): {{message}}",
"Конфигурационный файл по адресу {{path}} не является валидным JSON(C): {{message}}",
"error.chain.configDirectoryTypo":
'Папка "{{dir}}" в {{path}} недопустима. Переименуйте папку в "{{suggestion}}" или удалите её. Это распространённая опечатка.',
'Папка "{{dir}}" в {{path}} невалидна. Переименуйте папку в "{{suggestion}}" или удалите её. Это распространённая опечатка.',
"error.chain.configFrontmatterError": "Не удалось разобрать frontmatter в {{path}}:\n{{message}}",
"error.chain.configInvalid": "Недопустимый конфигурационный файл по адресу {{path}}",
"error.chain.configInvalidWithMessage": "Недопустимый конфигурационный файл по адресу {{path}}: {{message}}",
"error.chain.configInvalid": "Конфигурационный файл по адресу {{path}} невалиден",
"error.chain.configInvalidWithMessage": "Конфигурационный файл по адресу {{path}} невалиден: {{message}}",
"notification.permission.title": "Требуется разрешение",
"notification.permission.description": "Для {{sessionTitle}} в {{projectName}} требуется разрешение",
"notification.permission.description": "{{sessionTitle}} в {{projectName}} требуется разрешение",
"notification.question.title": "Вопрос",
"notification.question.description": "У {{sessionTitle}} в {{projectName}} есть вопрос",
"notification.action.goToSession": "Перейти к сессии",
@@ -625,7 +622,7 @@ export const dict = {
"session.error.notFound.description": "Эта вкладка указывает на сессию, которой больше нет на этом сервере.",
"session.error.notFound.closeTab": "Закрыть вкладку",
"session.error.serverConnection": "Не удаётся подключиться к этому серверу",
"session.review.filesChanged": "Изменено файлов: {{count}}",
"session.review.filesChanged": "{{count}} файлов изменено",
"session.review.change.one": "Изменение",
"session.review.change.other": "Изменения",
"session.review.loadingChanges": "Загрузка изменений...",
@@ -652,21 +649,15 @@ export const dict = {
"session.question.minimize": "Свернуть вопрос",
"session.question.restore": "Восстановить вопрос",
"session.question.pending.one": "{{count}} вопрос без ответа",
"session.question.pending.few": "{{count}} вопроса без ответа",
"session.question.pending.many": "{{count}} вопросов без ответа",
"session.question.pending.other": "Вопросы без ответа: {{count}}",
"session.followupDock.summary.one": "{{count}} сообщение в очереди",
"session.followupDock.summary.few": "{{count}} сообщения в очереди",
"session.followupDock.summary.many": "{{count}} сообщений в очереди",
"session.followupDock.summary.other": "Сообщений в очереди: {{count}}",
"session.followupDock.summary.other": "{{count}} сообщений в очереди",
"session.followupDock.sendNow": "Отправить сейчас",
"session.followupDock.edit": "Редактировать",
"session.followupDock.collapse": "Свернуть сообщения в очереди",
"session.followupDock.expand": "Развернуть сообщения в очереди",
"session.revertDock.summary.one": "{{count}} сообщение возвращено",
"session.revertDock.summary.few": "{{count}} сообщения возвращены",
"session.revertDock.summary.many": "{{count}} сообщений возвращено",
"session.revertDock.summary.other": "Возвращено сообщений: {{count}}",
"session.revertDock.summary.other": "{{count}} сообщений возвращено",
"session.revertDock.collapse": "Свернуть возвращённые сообщения",
"session.revertDock.expand": "Развернуть возвращённые сообщения",
"session.revertDock.restore": "Восстановить сообщение",
@@ -715,7 +706,7 @@ export const dict = {
"session.share.copy.copied": "Скопировано",
"session.share.copy.copyLink": "Копировать ссылку",
"lsp.tooltip.none": "Нет LSP-серверов",
"lsp.tooltip.none": "Нет LSP серверов",
"lsp.label.connected": "{{count}} LSP",
"prompt.loading": "Загрузка запроса...",
@@ -772,7 +763,7 @@ export const dict = {
"settings.general.section.updates": "Обновления",
"settings.general.section.sounds": "Звуковые эффекты",
"settings.general.section.feed": "Лента",
"settings.general.section.display": "Экран",
"settings.general.section.display": "Дисплей",
"settings.general.row.language.title": "Язык",
"settings.general.row.language.description": "Изменить язык отображения OpenCode",
@@ -782,7 +773,7 @@ export const dict = {
"settings.general.row.shell.autoDefault": "Авто (по умолчанию)",
"settings.general.row.shell.terminalOnly": "только терминал",
"settings.general.row.appearance.title": "Внешний вид",
"settings.general.row.appearance.description": "Настройте внешний вид OpenCode на вашем устройстве",
"settings.general.row.appearance.description": "Настройте как OpenCode выглядит на вашем устройстве",
"settings.general.row.colorScheme.title": "Цветовая схема",
"settings.general.row.colorScheme.description": "Выберите, следует ли OpenCode системной, светлой или тёмной теме",
"settings.general.row.theme.title": "Тема",
@@ -792,7 +783,7 @@ export const dict = {
"settings.general.row.terminalFont.title": "Шрифт терминала",
"settings.general.row.terminalFont.description": "Настройте шрифт, используемый в терминале",
"settings.general.row.uiFont.title": "Шрифт интерфейса",
"settings.general.row.uiFont.description": "Настройте шрифт, используемый во всём интерфейсе",
"settings.general.row.uiFont.description": "Настройте шрифт, используемый во всем интерфейсе",
"settings.general.row.followup.title": "Поведение уточняющих вопросов",
"settings.general.row.followup.description":
"Выберите, отправлять ли уточняющие вопросы сразу или помещать их в очередь",
@@ -812,9 +803,8 @@ export const dict = {
"settings.general.row.mobileTitlebarBottom.title": "Нижняя навигация",
"settings.general.row.mobileTitlebarBottom.description":
"На мобильных устройствах размещать строку заголовка и вкладки сессии внизу экрана",
"settings.general.row.showCustomAgents.title": "Выбор агента",
"settings.general.row.showCustomAgents.description":
"Показывать переключатель агентов в редакторе запросов. Если он скрыт, по умолчанию используется агент Build.",
"settings.general.row.showCustomAgents.title": "Пользовательские агенты",
"settings.general.row.showCustomAgents.description": "Показывать выбор агента в редакторе запросов",
"settings.general.row.reasoningSummaries.title": "Показывать сводки рассуждений",
"settings.general.row.reasoningSummaries.description": "Отображать сводки рассуждений модели в ленте",
@@ -831,11 +821,11 @@ export const dict = {
"settings.general.row.newInterfaceNotice.title": "Теперь вы используете новую компоновку",
"settings.general.row.newInterfaceNotice.description": "Прежняя компоновка больше недоступна",
"settings.general.row.newInterfaceNotice.dismiss": "Закрыть",
"settings.general.row.pinchZoom.title": "Масштабирование сведением пальцев",
"settings.general.row.pinchZoom.title": "Масштабирование щипком",
"settings.general.row.pinchZoom.description":
"Разрешить масштабирование сведением пальцев на трекпаде и прокруткой с нажатой клавишей Ctrl",
"Разрешить масштабирование жестом щипка на трекпаде и прокруткой с Ctrl",
"settings.general.row.wayland.title": "Использовать нативный Wayland",
"settings.general.row.wayland.description": "Отключить резервный режим X11 в Wayland. Требуется перезапуск.",
"settings.general.row.wayland.description": "Отключить X11 fallback на Wayland. Требуется перезапуск.",
"settings.general.row.wayland.tooltip":
"На Linux с мониторами разной частоты обновления нативный Wayland может быть стабильнее.",
@@ -901,22 +891,22 @@ export const dict = {
"settings.general.notifications.agent.title": "Агент",
"settings.general.notifications.agent.description":
"Показывать системное уведомление, когда агент завершил работу или требует внимания",
"Показывать системное уведомление когда агент завершён или требует внимания",
"settings.general.notifications.permissions.title": "Разрешения",
"settings.general.notifications.permissions.description":
"Показывать системное уведомление, когда требуется разрешение",
"Показывать системное уведомление когда требуется разрешение",
"settings.general.notifications.errors.title": "Ошибки",
"settings.general.notifications.errors.description": "Показывать системное уведомление, когда происходит ошибка",
"settings.general.notifications.errors.description": "Показывать системное уведомление когда происходит ошибка",
"settings.general.sounds.agent.title": "Агент",
"settings.general.sounds.agent.description": "Воспроизводить звук, когда агент завершил работу или требует внимания",
"settings.general.sounds.agent.description": "Воспроизводить звук когда агент завершён или требует внимания",
"settings.general.sounds.permissions.title": "Разрешения",
"settings.general.sounds.permissions.description": "Воспроизводить звук, когда требуется разрешение",
"settings.general.sounds.permissions.description": "Воспроизводить звук когда требуется разрешение",
"settings.general.sounds.errors.title": "Ошибки",
"settings.general.sounds.errors.description": "Воспроизводить звук, когда происходит ошибка",
"settings.general.sounds.errors.description": "Воспроизводить звук когда происходит ошибка",
"settings.shortcuts.title": "Горячие клавиши",
"settings.shortcuts.reset.button": "Восстановить настройки по умолчанию",
"settings.shortcuts.reset.button": "Сбросить к умолчаниям",
"settings.shortcuts.reset.toast.title": "Горячие клавиши сброшены",
"settings.shortcuts.reset.toast.description": "Горячие клавиши были сброшены к значениям по умолчанию.",
"settings.shortcuts.conflict.title": "Сочетание уже используется",
@@ -952,7 +942,7 @@ export const dict = {
"settings.mcp.description": "Настройки MCP будут доступны здесь.",
"settings.permissions.title": "Разрешения",
"settings.permissions.description": "Укажите, какие инструменты сервер может использовать по умолчанию.",
"settings.permissions.description": "Контролируйте какие инструменты сервер может использовать по умолчанию.",
"settings.permissions.section.tools": "Инструменты",
"settings.permissions.toast.updateFailed.title": "Не удалось обновить разрешения",
@@ -964,7 +954,7 @@ export const dict = {
"settings.permissions.tool.read.description": "Чтение файла (по совпадению пути)",
"settings.permissions.tool.edit.title": "Редактирование",
"settings.permissions.tool.edit.description":
"Изменение файлов, включая редактирование, запись, патчи и множественное редактирование",
"Изменение файлов, включая редактирование, запись, патчи и мульти-редактирование",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "Сопоставление файлов по паттернам glob",
"settings.permissions.tool.grep.title": "Grep",
@@ -974,7 +964,7 @@ export const dict = {
"settings.permissions.tool.bash.title": "Bash",
"settings.permissions.tool.bash.description": "Запуск команд оболочки",
"settings.permissions.tool.task.title": "Task",
"settings.permissions.tool.task.description": "Запуск субагентов",
"settings.permissions.tool.task.description": "Запуск подагентов",
"settings.permissions.tool.skill.title": "Skill",
"settings.permissions.tool.skill.description": "Загрузка навыка по имени",
"settings.permissions.tool.lsp.title": "LSP",
@@ -1008,7 +998,7 @@ export const dict = {
"workspace.reset.success.description": "Рабочее пространство теперь соответствует ветке по умолчанию.",
"workspace.error.stillPreparing": "Рабочее пространство всё ещё подготавливается",
"workspace.status.checking": "Проверка незафиксированных изменений...",
"workspace.status.error": "Не удалось проверить состояние Git.",
"workspace.status.error": "Не удалось проверить статус git.",
"workspace.status.clean": "Незафиксированных изменений не обнаружено.",
"workspace.status.dirty": "В этом рабочем пространстве обнаружены незафиксированные изменения.",
"workspace.delete.title": "Удалить рабочее пространство",
@@ -1019,13 +1009,13 @@ export const dict = {
"workspace.reset.button": "Сбросить рабочее пространство",
"workspace.reset.archived.none": "Активные сессии не будут архивированы.",
"workspace.reset.archived.one": "1 сессия будет архивирована.",
"workspace.reset.archived.many": "Будут архивированы сессии: {{count}}.",
"workspace.reset.archived.many": "{{count}} сессий будет архивировано.",
"workspace.reset.note": "Это сбросит рабочее пространство до соответствия ветке по умолчанию.",
"common.open": "Открыть",
"dialog.releaseNotes.action.getStarted": "Начать",
"dialog.releaseNotes.action.next": "Далее",
"dialog.releaseNotes.action.hideFuture": "Больше не показывать",
"dialog.releaseNotes.media.alt": "Предварительный просмотр выпуска",
"dialog.releaseNotes.media.alt": "Превью релиза",
"toast.project.reloadFailed.title": "Не удалось перезагрузить {{project}}",
"error.server.invalidConfiguration": "Недопустимая конфигурация",
"common.moreCountSuffix": " (ещё {{count}})",
@@ -1050,9 +1040,6 @@ export const dict = {
"session.question.progress": "{{current}} из {{total}} вопросов",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "Проводник",
"session.header.reveal.finder": "Показать в Finder",
"session.header.reveal.fileExplorer": "Показать в Проводнике",
"session.header.reveal.containingFolder": "Открыть папку расположения",
"session.header.open.fileManager": "Файловый менеджер",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
@@ -1071,7 +1058,7 @@ export const dict = {
"debugBar.na": "н/д",
"debugBar.nav.label": "NAV",
"debugBar.nav.tip":
"Последний завершённый переход по маршруту, затрагивающий страницу сессии: от запуска маршрутизатора до первой отрисовки после стабилизации.",
"Последний завершенный переход маршрута, затрагивающий страницу сеанса, измеренный от запуска маршрутизатора до первой отрисовки после стабилизации.",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "Скользящая частота кадров в секунду за последние 5 секунд.",
"debugBar.frame.label": "FRAME",
@@ -1086,7 +1073,7 @@ export const dict = {
"debugBar.inp.tip":
"Приблизительная продолжительность взаимодействия за последние 5 секунд. Это похоже на INP, а не официальный Web Vitals INP.",
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "Совокупное смещение макета за время работы приложения.",
"debugBar.cls.tip": "Кумулятивный сдвиг макета за текущее время жизни приложения.",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "Используемая куча JS по сравнению с лимитом кучи. Только Chromium.",
"debugBar.mem.tip": "Используемая куча JS по сравнению с лимитом кучи. {{used}} из {{limit}}.",
@@ -1108,7 +1095,7 @@ export const dict = {
"error.page.circular": "[Циклично]",
"error.serverSDK.noServerAvailable": "Нет доступного сервера",
"error.serverSDK.serverNotAvailable": "Сервер недоступен",
"error.childStore.persistedCacheCreateFailed": "Не удалось создать постоянный кеш",
"error.childStore.persistedCacheCreateFailed": "Не удалось создать постоянный кэш",
"error.childStore.persistedProjectMetadataCreateFailed": "Не удалось создать постоянные метаданные проекта",
"error.childStore.persistedProjectIconCreateFailed": "Не удалось создать постоянный значок проекта",
"error.childStore.storeCreateFailed": "Не удалось создать хранилище",
-1022
View File
@@ -1,1022 +0,0 @@
export const dict = {
"command.category.suggested": "Föreslagna",
"command.category.view": "Visa",
"command.category.project": "Projekt",
"command.category.provider": "Leverantör",
"command.category.server": "Server",
"command.category.session": "Session",
"command.category.theme": "Tema",
"command.category.language": "Språk",
"command.category.file": "Fil",
"command.category.context": "Kontext",
"command.category.terminal": "Terminal",
"command.category.model": "Modell",
"command.category.mcp": "MCP",
"command.category.agent": "Agent",
"command.category.permissions": "Behörigheter",
"command.category.workspace": "Arbetsyta",
"command.category.settings": "Inställningar",
"theme.scheme.system": "System",
"theme.scheme.light": "Ljus",
"theme.scheme.dark": "Mörk",
"command.sidebar.toggle": "Växla sidofältet",
"command.project.open": "Öppna projekt",
"command.project.previous": "Föregående projekt",
"command.project.next": "Nästa projekt",
"command.project.index": "Byt till projekt {{index}}",
"command.provider.connect": "Anslut leverantör",
"command.server.switch": "Byt server",
"command.settings.open": "Öppna inställningar",
"command.session.previous": "Föregående session",
"command.session.next": "Nästa session",
"command.session.previous.unseen": "Föregående oläst session",
"command.session.next.unseen": "Nästa olästa session",
"command.session.archive": "Arkivera session",
"command.palette": "Kommandopalett",
"command.theme.cycle": "Växla tema",
"command.theme.set": "Använd tema: {{theme}}",
"command.theme.scheme.cycle": "Växla färgschema",
"command.theme.scheme.set": "Använd färgschema: {{scheme}}",
"command.language.cycle": "Växla språk",
"command.language.set": "Använd språk: {{language}}",
"command.session.new": "Ny session",
"command.file.open": "Öppna filen",
"command.tab.close": "Stäng fliken",
"command.tab.reopenClosed": "Öppna stängd flik igen",
"command.context.addSelection": "Lägg till markering i kontexten",
"command.context.addSelection.description": "Lägg till markerade rader från den aktuella filen",
"command.input.focus": "Fokusera inmatningsfältet",
"command.terminal.toggle": "Växla terminal",
"command.fileTree.toggle": "Växla filträdet",
"command.review.toggle": "Växla granskning",
"command.terminal.new": "Ny terminal",
"command.terminal.new.description": "Skapa en ny terminalflik",
"command.steps.toggle": "Växla steg",
"command.steps.toggle.description": "Visa eller dölj steg för det aktuella meddelandet",
"command.message.previous": "Föregående meddelande",
"command.message.previous.description": "Gå till föregående användarmeddelande",
"command.message.next": "Nästa meddelande",
"command.message.next.description": "Gå till nästa användarmeddelande",
"command.model.choose": "Välj modell",
"command.model.choose.description": "Välj en annan modell",
"command.mcp.toggle": "Växla MCP:er",
"command.mcp.toggle.description": "Växla MCP:er",
"command.agent.cycle": "Växla agent",
"command.agent.cycle.description": "Byt till nästa agent",
"command.agent.cycle.reverse": "Växla agent bakåt",
"command.agent.cycle.reverse.description": "Byt till föregående agent",
"command.model.variant.cycle": "Växla resonemangsnivå",
"command.model.variant.cycle.description": "Växla till nästa resonemangsnivå",
"command.prompt.mode.shell": "Shell",
"command.prompt.mode.normal": "Prompt",
"command.permissions.autoaccept.enable": "Autoacceptera behörigheter",
"command.permissions.autoaccept.disable": "Sluta att automatiskt acceptera behörigheter",
"command.workspace.toggle": "Växla arbetsytor",
"command.workspace.toggle.description": "Aktivera eller inaktivera flera arbetsytor i sidofältet",
"command.session.undo": "Ångra",
"command.session.undo.description": "Ångra det senaste meddelandet",
"command.session.redo": "Gör om",
"command.session.redo.description": "Gör om det senaste ångrade meddelandet",
"command.session.compact": "Komprimera session",
"command.session.compact.description": "Sammanfatta sessionen för att minska kontextstorleken",
"command.session.fork": "Förgrena från meddelande",
"command.session.fork.description": "Skapa en ny session från ett tidigare meddelande",
"command.session.share": "Dela session",
"command.session.share.description": "Dela den här sessionen och kopiera URL:en till urklipp",
"command.session.unshare": "Sluta dela session",
"command.session.unshare.description": "Sluta dela den här sessionen",
"palette.search.placeholder": "Sök efter filer, kommandon och sessioner",
"palette.search.placeholder.home": "Sök bland kommandon och sessioner",
"palette.empty": "Inga resultat hittades",
"palette.group.commands": "Kommandon",
"palette.group.files": "Filer",
"dialog.provider.search.placeholder": "Sök leverantörer",
"dialog.provider.empty": "Inga leverantörer hittades",
"dialog.provider.group.popular": "Populära",
"dialog.provider.group.other": "Andra",
"dialog.provider.custom.label": "Anpassad OpenAI-kompatibel leverantör",
"dialog.provider.tag.recommended": "Rekommenderad",
"dialog.provider.opencode.note": "Kurerade modeller inklusive Claude, GPT, Gemini och mer",
"dialog.provider.opencode.tagline": "Pålitliga optimerade modeller",
"dialog.provider.opencodeGo.tagline": "Lågprisprenumeration för alla",
"dialog.provider.anthropic.note": "Direkt tillgång till Claude-modeller, inklusive Pro och Max",
"dialog.provider.copilot.note": "AI-modeller för kodningshjälp via GitHub Copilot",
"dialog.provider.openai.note": "GPT-modeller för snabba, kapabla allmänna AI-uppgifter",
"dialog.provider.google.note": "Gemini-modeller för snabba, strukturerade svar",
"dialog.provider.openrouter.note": "Få tillgång till alla modeller som stöds från en leverantör",
"dialog.provider.vercel.note": "Enhetlig tillgång till AI-modeller med smart routing",
"dialog.model.select.title": "Välj modell",
"dialog.model.search.placeholder": "Sök efter modeller",
"dialog.model.empty": "Inga modellresultat",
"dialog.model.manage": "Hantera modeller",
"dialog.model.manage.description": "Anpassa vilka modeller som visas i modellväljaren.",
"dialog.model.manage.provider.toggle": "Växla alla {{provider}}-modeller",
"dialog.model.unpaid.freeModels.title": "Gratis modeller tillhandahålls av OpenCode",
"dialog.model.unpaid.addMore.title": "Lägg till fler modeller från populära leverantörer",
"dialog.model.unpaid.viewMoreProviders": "Se fler än 70 leverantörer",
"dialog.provider.viewAll": "Visa fler leverantörer",
"provider.connect.title": "Anslut {{provider}}",
"provider.connect.title.anthropicProMax": "Logga in med Claude Pro/Max",
"provider.connect.selectMethod": "Välj inloggningsmetod för {{provider}}.",
"provider.connect.method.apiKey": "API-nyckel",
"provider.connect.status.inProgress": "Auktorisering pågår...",
"provider.connect.status.waiting": "Väntar på auktorisering...",
"provider.connect.status.failed": "Auktorisering misslyckades: {{error}}",
"provider.connect.apiKey.description":
"Ange din {{provider}}-API-nyckel för att ansluta ditt konto och använda {{provider}}-modeller i OpenCode.",
"provider.connect.apiKey.label": "{{provider}}-API-nyckel",
"provider.connect.apiKey.placeholder": "API-nyckel",
"provider.connect.apiKey.required": "API-nyckel krävs",
"provider.connect.opencodeZen.line1":
"OpenCode Zen ger dig tillgång till en utvald uppsättning pålitliga optimerade modeller för kodningsagenter.",
"provider.connect.opencodeZen.line2":
"Med en enda API-nyckel får du tillgång till modeller som Claude, GPT, Gemini, GLM och mer.",
"provider.connect.opencodeZen.visit.prefix": "Besök ",
"provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
"provider.connect.opencodeZen.visit.suffix": " för att hämta din API-nyckel.",
"provider.connect.oauth.code.visit.prefix": "Besök ",
"provider.connect.oauth.code.visit.link": "denna länk",
"provider.connect.oauth.code.visit.suffix":
" för att hämta auktoriseringskoden som ansluter ditt konto och låter dig använda {{provider}}-modeller i OpenCode.",
"provider.connect.oauth.code.label": "Auktoriseringskod för {{method}}",
"provider.connect.oauth.code.placeholder": "Auktoriseringskod",
"provider.connect.oauth.code.required": "Auktoriseringskod krävs",
"provider.connect.oauth.code.invalid": "Ogiltig auktoriseringskod",
"provider.connect.oauth.auto.visit.prefix": "Besök ",
"provider.connect.oauth.auto.visit.link": "denna länk",
"provider.connect.oauth.auto.visit.suffix":
" och ange koden nedan för att ansluta ditt konto och använda {{provider}}-modeller i OpenCode.",
"provider.connect.oauth.auto.confirmationCode": "Bekräftelsekod",
"provider.connect.toast.connected.title": "{{provider}} ansluten",
"provider.connect.toast.connected.description": "{{provider}}-modeller är nu tillgängliga.",
"provider.custom.title": "Anpassad leverantör",
"provider.custom.description.prefix": "Konfigurera en OpenAI-kompatibel leverantör. Se ",
"provider.custom.description.link": "dokumentationen om leverantörskonfiguration",
"provider.custom.description.suffix": ".",
"provider.custom.field.providerID.label": "Leverantörs-ID",
"provider.custom.field.providerID.placeholder": "minleverantor",
"provider.custom.field.providerID.description": "Små bokstäver, siffror, bindestreck eller understreck",
"provider.custom.field.name.label": "Visningsnamn",
"provider.custom.field.name.placeholder": "Min AI-leverantör",
"provider.custom.field.baseURL.label": "Bas-URL",
"provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1",
"provider.custom.field.apiKey.label": "API-nyckel",
"provider.custom.field.apiKey.placeholder": "API-nyckel",
"provider.custom.field.apiKey.description": "Valfritt. Lämna tomt om du hanterar autentisering via HTTP-huvuden.",
"provider.custom.models.label": "Modeller",
"provider.custom.models.id.label": "ID",
"provider.custom.models.id.placeholder": "modell-id",
"provider.custom.models.name.label": "Namn",
"provider.custom.models.name.placeholder": "Visningsnamn",
"provider.custom.models.remove": "Ta bort modellen",
"provider.custom.models.add": "Lägg till modell",
"provider.custom.headers.label": "HTTP-huvuden (valfritt)",
"provider.custom.headers.key.label": "HTTP-huvud",
"provider.custom.headers.key.placeholder": "Namn på HTTP-huvud",
"provider.custom.headers.value.label": "Värde",
"provider.custom.headers.value.placeholder": "värde",
"provider.custom.headers.remove": "Ta bort HTTP-huvud",
"provider.custom.headers.add": "Lägg till HTTP-huvud",
"provider.custom.error.providerID.required": "Leverantörs-ID krävs",
"provider.custom.error.providerID.format": "Använd små bokstäver, siffror, bindestreck eller understreck",
"provider.custom.error.providerID.exists": "Det leverantörs-ID:t finns redan",
"provider.custom.error.name.required": "Visningsnamn krävs",
"provider.custom.error.baseURL.required": "Bas-URL krävs",
"provider.custom.error.baseURL.format": "Måste börja med http:// eller https://",
"provider.custom.error.required": "Obligatoriskt",
"provider.custom.error.duplicate": "Dubblett",
"provider.disconnect.toast.disconnected.title": "{{provider}} frånkopplad",
"provider.disconnect.toast.disconnected.description": "{{provider}}-modeller är inte längre tillgängliga.",
"model.tag.free": "Gratis",
"model.tag.latest": "Senaste",
"model.provider.anthropic": "Anthropic",
"model.provider.openai": "OpenAI",
"model.provider.google": "Google",
"model.provider.xai": "xAI",
"model.provider.meta": "Meta",
"model.input.text": "text",
"model.input.image": "bild",
"model.input.audio": "ljud",
"model.input.video": "video",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Tillåter: {{inputs}}",
"model.tooltip.context.label": "Kontext",
"model.tooltip.inputs": "Indata",
"model.tooltip.model": "Modell",
"model.tooltip.provider": "Leverantör",
"model.tooltip.reasoning": "Resonemang",
"model.tooltip.reasoning.allowed": "Tillåter resonemang",
"model.tooltip.reasoning.none": "Inget resonemang",
"model.tooltip.context": "Kontextgräns {{limit}}",
"common.search.placeholder": "Sök",
"common.goBack": "Navigera tillbaka",
"common.goForward": "Navigera framåt",
"common.loading": "Laddar",
"common.loading.ellipsis": "...",
"common.cancel": "Avbryt",
"common.clear": "Rensa",
"common.open": "Öppna",
"common.connect": "Anslut",
"common.disconnect": "Koppla från",
"common.continue": "Fortsätt",
"common.submit": "Skicka",
"common.save": "Spara",
"common.saving": "Sparar...",
"common.default": "Standard",
"common.attachment": "bilaga",
"prompt.placeholder.shell": "Ange skalkommando... {{example}}",
"prompt.placeholder.normal": 'Fråga vad som helst... "{{example}}"',
"prompt.placeholder.simple": "Fråga vad som helst...",
"prompt.placeholder.summarizeComments": "Sammanfatta kommentarer...",
"prompt.placeholder.summarizeComment": "Sammanfatta kommentar...",
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "esc för att avsluta",
"session.child.promptDisabled": "Det går inte att skicka promptar till underagentsessioner.",
"session.child.backToParent": "Tillbaka till huvudsessionen.",
"prompt.example.1": "Fixa en TODO i kodbasen",
"prompt.example.2": "Vad är den tekniska stacken i det här projektet?",
"prompt.example.3": "Åtgärda trasiga tester",
"prompt.example.4": "Förklara hur autentisering fungerar",
"prompt.example.5": "Hitta och åtgärda säkerhetsbrister",
"prompt.example.6": "Lägg till enhetstester för användartjänsten",
"prompt.example.7": "Refaktorera denna funktion för att bli mer läsbar",
"prompt.example.8": "Vad betyder detta fel?",
"prompt.example.9": "Hjälp mig att felsöka det här problemet",
"prompt.example.10": "Skapa API-dokumentation",
"prompt.example.11": "Optimera databasfrågor",
"prompt.example.12": "Lägg till indatavalidering",
"prompt.example.13": "Skapa en ny komponent för...",
"prompt.example.14": "Hur distribuerar jag det här projektet?",
"prompt.example.15": "Granska min kod för bästa praxis",
"prompt.example.16": "Lägg till felhantering till denna funktion",
"prompt.example.17": "Förklara detta regexmönster",
"prompt.example.18": "Konvertera detta till TypeScript",
"prompt.example.19": "Lägg till loggning i hela kodbasen",
"prompt.example.20": "Vilka beroenden är föråldrade?",
"prompt.example.21": "Hjälp mig att skriva ett migreringsskript",
"prompt.example.22": "Implementera cachning för denna slutpunkt",
"prompt.example.23": "Lägg till paginering till den här listan",
"prompt.example.24": "Skapa ett CLI-kommando för...",
"prompt.example.25": "Hur fungerar miljövariabler här?",
"prompt.popover.emptyResults": "Inga matchande resultat",
"prompt.popover.emptyCommands": "Inga matchande kommandon",
"prompt.dropzone.label": "Släpp bilder, PDF-filer eller textfiler här",
"prompt.dropzone.file.label": "Släpp för att @-omnämna filen",
"prompt.slash.badge.custom": "anpassad",
"prompt.slash.badge.skill": "färdighet",
"prompt.slash.badge.mcp": "mcp",
"prompt.context.active": "aktiv",
"prompt.context.includeActiveFile": "Inkludera aktiv fil",
"prompt.context.removeActiveFile": "Ta bort aktiv fil från kontexten",
"prompt.context.removeFile": "Ta bort filen från kontexten",
"prompt.action.attachFile": "Lägg till filer",
"prompt.menu.addImagesAndFiles": "Lägg till filer och mer",
"prompt.menu.imagesAndFiles": "Bilder och filer",
"prompt.menu.commands": "Kommandon",
"prompt.menu.context": "Kontext",
"prompt.menu.shellCommand": "Skalkommando",
"prompt.attachment.remove": "Ta bort bilagan",
"prompt.action.send": "Skicka",
"prompt.action.stop": "Stoppa",
"prompt.toast.pasteUnsupported.title": "Bilaga som inte stöds",
"prompt.toast.pasteUnsupported.description": "Endast bilder, PDF-filer eller textfiler kan bifogas här.",
"prompt.toast.attachmentDuplicate.title": "Den här filen har redan laddats upp",
"prompt.toast.modelAgentRequired.title": "Välj en agent och modell",
"prompt.toast.modelAgentRequired.description": "Välj en agent och modell innan du skickar en prompt.",
"prompt.toast.worktreeCreateFailed.title": "Det gick inte att skapa worktree",
"prompt.toast.sessionCreateFailed.title": "Det gick inte att skapa session",
"prompt.toast.shellSendFailed.title": "Det gick inte att skicka skalkommandot",
"prompt.toast.commandSendFailed.title": "Det gick inte att skicka kommandot",
"prompt.toast.promptSendFailed.title": "Det gick inte att skicka meddelandet",
"prompt.toast.promptSendFailed.description": "Det gick inte att hämta sessionen",
"dialog.mcp.title": "MCP:er",
"dialog.mcp.description": "{{enabled}} av {{total}} aktiverade",
"dialog.mcp.empty": "Inga MCP:er konfigurerade",
"dialog.lsp.empty": "LSP:er detekteras automatiskt från filtyper",
"dialog.plugins.empty": "Insticksprogram konfigurerade i opencode.json",
"mcp.status.connected": "ansluten",
"mcp.status.failed": "misslyckades",
"mcp.status.needs_auth": "behöver autentisering",
"mcp.status.disabled": "inaktiverad",
"mcp.auth.clickToAuthenticate": "Klicka för att autentisera",
"dialog.fork.empty": "Inga meddelanden att förgrena från",
"dialog.directory.search.placeholder": "Sök i mappar",
"dialog.directory.empty": "Inga mappar hittades",
"dialog.directory.action.selectFile": "Välj fil",
"dialog.directory.action.selectFolder": "Välj mapp",
"dialog.directory.root": "Rotmapp",
"dialog.directory.parent": "Överordnad mapp",
"dialog.directory.readError": "Det går inte att läsa den här mappen",
"app.server.unreachable": "Kunde inte nå {{server}}",
"app.server.retrying": "Försöker igen automatiskt...",
"app.server.otherServers": "Andra servrar",
"dialog.server.title": "Servrar",
"dialog.server.description": "Växla vilken OpenCode-server som denna app ansluter till.",
"dialog.server.search.placeholder": "Sök servrar",
"dialog.server.empty": "Inga servrar ännu",
"dialog.server.add.title": "Lägg till server",
"dialog.server.add.url": "Serveradress",
"dialog.server.add.placeholder": "http://localhost:4096",
"dialog.server.add.error": "Kunde inte ansluta till servern",
"dialog.server.add.checking": "Kontrollerar...",
"dialog.server.add.button": "Lägg till server",
"dialog.server.add.name": "Servernamn (valfritt)",
"dialog.server.add.namePlaceholder": "Localhost",
"dialog.server.add.username": "Användarnamn (valfritt)",
"dialog.server.add.usernamePlaceholder": "användarnamn",
"dialog.server.add.password": "Lösenord (valfritt)",
"dialog.server.add.passwordPlaceholder": "lösenord",
"dialog.server.edit.title": "Redigera server",
"dialog.server.default.title": "Standardserver",
"dialog.server.default.description":
"Anslut till den här servern vid appstart istället för att starta en lokal server. Kräver omstart.",
"dialog.server.default.none": "Ingen server vald",
"dialog.server.default.set": "Ställ in aktuell server som standard",
"dialog.server.default.clear": "Rensa",
"dialog.server.action.remove": "Ta bort servern",
"dialog.server.menu.edit": "Redigera",
"dialog.server.menu.default": "Ställ in som standard",
"dialog.server.menu.defaultRemove": "Ta bort standard",
"dialog.server.menu.delete": "Radera",
"dialog.server.current": "Aktuell server",
"dialog.server.status.default": "Standard",
"wsl.server.add": "Lägg till WSL-server",
"wsl.server.addShort": "Lägg till WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "WSL-server",
"wsl.server.retryStart": "Försök att starta igen",
"wsl.server.updating": "Uppdaterar...",
"wsl.onboarding.step.distro": "Välj distro",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "Kontrollerar WSL...",
"wsl.onboarding.restartRequired": "Windows behöver en omstart för att slutföra installationen av WSL.",
"wsl.onboarding.ready": "WSL är redo.",
"wsl.onboarding.required": "WSL krävs för att fortsätta.",
"wsl.onboarding.checkingDistros": "Kontrollerar distributioner...",
"wsl.onboarding.installingDistro": "Installerar {{distro}}...",
"wsl.onboarding.checkingDistro": "Kontrollerar {{distro}}...",
"wsl.onboarding.listingDistros": "Listar distributioner...",
"wsl.onboarding.distroReady": "{{distro}} är klar.",
"wsl.onboarding.distroNotInstalled": "{{distro}} är inte installerad än.",
"wsl.onboarding.openDistroOnce": "Öppna {{distro}} en gång för att avsluta installationen.",
"wsl.onboarding.finishingDistro": "Slutför installationen för {{distro}}.",
"wsl.onboarding.pickDistro": "Välj en distro eller installera en nedan.",
"wsl.onboarding.checkingOpencode": "Kontrollerar OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "Kontrollerar OpenCode i {{distro}}...",
"wsl.onboarding.updatingOpencode": "Uppdaterar OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "Uppdaterar OpenCode i {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "Uppdatera OpenCode i {{distro}}.",
"wsl.onboarding.updateOpencode": "Uppdatera OpenCode",
"wsl.onboarding.opencodeReadyIn": "OpenCode är redo i {{distro}}.",
"wsl.onboarding.opencodeReady": "OpenCode är redo.",
"wsl.onboarding.installOpencodeIn": "Installera OpenCode i {{distro}}.",
"wsl.onboarding.installOpencode": "Installera OpenCode",
"wsl.onboarding.chooseDistroFirst": "Välj en distro först.",
"wsl.onboarding.loadFailed": "Det gick inte att ladda WSL-tillståndet.",
"wsl.onboarding.loading": "Laddar...",
"wsl.onboarding.installedDistros": "Installerade distros",
"wsl.onboarding.checkAgain": "Kontrollera igen",
"wsl.onboarding.distroStatus.ready": "Redo",
"wsl.onboarding.distroStatus.checking": "Kontrollerar...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode är inte installerat",
"wsl.onboarding.distroStatus.missingTools": "Saknar bash, curl",
"wsl.onboarding.distroStatus.unsupported": "Stöds inte · Använd WSL 2",
"wsl.onboarding.needAnotherDistro": "Behöver du en annan distro?",
"wsl.onboarding.needAnotherDistroHint": "Installera en Linux-distribution från WSL-katalogen",
"wsl.onboarding.wslNotInstalled.title": "WSL är inte installerat",
"wsl.onboarding.wslNotInstalled.description":
"WSL (Windows Subsystem for Linux) krävs innan OpenCode kan lägga till en WSL-server",
"wsl.onboarding.wslUnavailable.title": "WSL är inte tillgängligt",
"wsl.onboarding.wslUnavailable.description": "OpenCode kunde inte verifiera WSL på den här maskinen.",
"wsl.onboarding.installWsl": "Installera WSL",
"wsl.onboarding.windowsRestartRequired":
"Starta om Windows för att slutföra installationen av WSL och öppna sedan OpenCode igen.",
"wsl.onboarding.next": "Nästa",
"wsl.onboarding.refresh": "Uppdatera",
"wsl.onboarding.allDistrosAdded": "Alla installerade distros har redan lagts till.",
"wsl.onboarding.noDistros": "Inga distros har upptäckts ännu.",
"wsl.onboarding.install": "Installera",
"wsl.onboarding.installing": "Installerar...",
"wsl.onboarding.installDistro": "Installera distro",
"wsl.onboarding.searchDistros": "Sök efter distributioner",
"wsl.onboarding.wsl2Required": "WSL 2 krävs.",
"wsl.onboarding.toolsRequired": "Denna distro behöver bash och curl.",
"wsl.onboarding.openTerminal": "Öppna terminalen",
"wsl.onboarding.path": "Sökväg: {{path}}",
"wsl.onboarding.notFound": "hittades inte",
"wsl.onboarding.version": "Version: {{version}}",
"wsl.onboarding.unknown": "okänd",
"wsl.onboarding.desktopVersion": "desktop {{version}}",
"wsl.onboarding.versionMismatch": "Den installerade versionen matchar inte versionen av skrivbordsappen.",
"wsl.onboarding.adding": "Lägger till...",
"server.row.noUsername": "inget användarnamn",
"dialog.project.edit.title": "Redigera projekt",
"dialog.project.edit.name": "Namn",
"dialog.project.edit.icon": "Ikon",
"dialog.project.edit.icon.alt": "Projektikonen",
"dialog.project.edit.icon.hint": "Klicka eller dra en bild",
"dialog.project.edit.icon.recommended": "Rekommenderat: 128x128px",
"dialog.project.edit.color": "Färg",
"dialog.project.edit.color.select": "Välj färgen {{color}}",
"dialog.project.edit.worktree.startup": "Startskript för arbetsyta",
"dialog.project.edit.worktree.startup.description": "Körs efter att en ny arbetsyta (worktree) har skapats.",
"dialog.project.edit.worktree.startup.placeholder": "t.ex. bun install",
"dialog.releaseNotes.action.getStarted": "Kom igång",
"dialog.releaseNotes.action.next": "Nästa",
"dialog.releaseNotes.action.hideFuture": "Visa inte dessa i framtiden",
"dialog.releaseNotes.media.alt": "Förhandsvisning av version",
"context.breakdown.title": "Kontextfördelning",
"context.breakdown.note":
'Ungefärlig uppdelning av inmatningstokens. "Övrigt" inkluderar verktygsdefinitioner och overhead.',
"context.breakdown.system": "System",
"context.breakdown.user": "Användare",
"context.breakdown.assistant": "Assistent",
"context.breakdown.tool": "Verktygsanrop",
"context.breakdown.other": "Övrigt",
"context.systemPrompt.title": "Systemprompt",
"context.rawMessages.title": "Råmeddelanden",
"context.stats.session": "Session",
"context.stats.messages": "Meddelanden",
"context.stats.provider": "Leverantör",
"context.stats.model": "Modell",
"context.stats.limit": "Kontextgräns",
"context.stats.totalTokens": "Totala tokens",
"context.stats.usage": "Användning",
"context.stats.inputTokens": "Indatatokens",
"context.stats.outputTokens": "Utdatatokens",
"context.stats.reasoningTokens": "Resonemangstokens",
"context.stats.cacheTokens": "Cache-tokens (läs/skriv)",
"context.stats.userMessages": "Användarmeddelanden",
"context.stats.assistantMessages": "Assistentmeddelanden",
"context.stats.totalCost": "Total kostnad",
"context.stats.sessionCreated": "Session skapades",
"context.stats.lastActivity": "Senaste aktivitet",
"context.usage.tokens": "Tokens",
"context.usage.usage": "Användning",
"context.usage.cost": "Kostnad",
"context.usage.clickToView": "Klicka för att visa kontexten",
"context.usage.view": "Visa kontextanvändning",
"language.en": "English",
"language.zh": "简体中文",
"language.zht": "繁體中文",
"language.ko": "한국어",
"language.de": "Deutsch",
"language.es": "Español",
"language.fr": "Français",
"language.da": "Dansk",
"language.ja": "日本語",
"language.pl": "Polski",
"language.ru": "Русский",
"language.ar": "العربية",
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
"toast.language.title": "Språk",
"toast.language.description": "Bytte språk till {{language}}",
"toast.theme.title": "Tema har bytts",
"toast.scheme.title": "Färgschema",
"toast.workspace.enabled.title": "Arbetsytor aktiverade",
"toast.workspace.enabled.description": "Flera worktrees visas nu i sidofältet",
"toast.workspace.disabled.title": "Arbetsytor inaktiverade",
"toast.workspace.disabled.description": "Endast huvudworktreen visas i sidofältet",
"toast.permissions.autoaccept.on.title": "Autoaccepterar behörigheter",
"toast.permissions.autoaccept.on.description": "Behörighetsförfrågningar kommer att godkännas automatiskt",
"toast.permissions.autoaccept.off.title": "Slutade att automatiskt acceptera behörigheter",
"toast.permissions.autoaccept.off.description": "Behörighetsförfrågningar kommer att kräva godkännande",
"toast.model.none.title": "Ingen modell har valts",
"toast.model.none.description": "Anslut en leverantör för att sammanfatta denna session",
"toast.file.loadFailed.title": "Det gick inte att ladda filen",
"toast.file.listFailed.title": "Det gick inte att lista filer",
"toast.context.noLineSelection.title": "Inget radval",
"toast.context.noLineSelection.description": "Välj ett radintervall på en filflik först.",
"toast.session.share.copyFailed.title": "Det gick inte att kopiera URL till urklipp",
"toast.session.share.success.title": "Sessionen har delats",
"toast.session.share.success.description": "Delningsadressen har kopierats till urklipp!",
"toast.session.share.failed.title": "Det gick inte att dela sessionen",
"toast.session.share.failed.description": "Ett fel uppstod när sessionen delades",
"toast.session.unshare.success.title": "Sessionen delas inte längre",
"toast.session.unshare.success.description": "Delningen av sessionen har avslutats!",
"toast.session.unshare.failed.title": "Det gick inte att avsluta delningen",
"toast.session.unshare.failed.description": "Ett fel uppstod när delningen skulle avslutas",
"toast.session.listFailed.title": "Det gick inte att läsa in sessioner för {{project}}",
"toast.project.reloadFailed.title": "Det gick inte att ladda om {{project}}",
"toast.update.title": "Uppdatering tillgänglig",
"toast.update.description": "En ny version av OpenCode ({{version}}) är nu tillgänglig att installera.",
"toast.update.action.installRestart": "Installera och starta om",
"toast.update.action.notYet": "Inte än",
"error.page.title": "Något gick fel",
"error.page.description": "Ett fel uppstod när programmet laddades.",
"error.page.description.localServerStartup": "Ett fel uppstod vid start av den lokala servern.",
"error.page.details.label": "Feldetaljer",
"error.page.action.restart": "Starta om",
"error.page.action.report": "Rapportera fel",
"error.page.action.reported": "Fel rapporterat",
"error.page.action.exportLogs": "Exportera loggar",
"error.page.action.checking": "Kontrollerar...",
"error.page.action.checkUpdates": "Sök efter uppdateringar",
"error.page.action.updateTo": "Uppdatera till {{version}}",
"error.page.circular": "[Circular]",
"error.page.report.prefix": "Rapportera det här felet till OpenCode-teamet",
"error.page.report.discord": "på Discord",
"error.page.version": "Version: {{version}}",
"error.dev.rootNotFound":
"Rotelementet hittades inte. Har du glömt att lägga till det i din index.html? Eller kanske id-attributet är felstavat?",
"error.serverSync.connectFailed": "Kunde inte ansluta till servern. Körs det en server på `{{url}}`?",
"error.serverSDK.noServerAvailable": "Ingen server tillgänglig",
"error.serverSDK.serverNotAvailable": "Servern är inte tillgänglig",
"error.childStore.persistedCacheCreateFailed": "Det gick inte att skapa beständig cache",
"error.childStore.persistedProjectMetadataCreateFailed": "Det gick inte att skapa beständig projektmetadata",
"error.childStore.persistedProjectIconCreateFailed": "Det gick inte att skapa en beständig projektikon",
"error.childStore.storeCreateFailed": "Det gick inte att skapa lagring",
"directory.error.invalidUrl": "Ogiltig katalog i URL.",
"error.chain.unknown": "Okänt fel",
"error.server.invalidConfiguration": "Ogiltig konfiguration",
"error.chain.causedBy": "Orsakas av:",
"error.chain.apiError": "API-fel",
"error.chain.status": "Status: {{status}}",
"error.chain.retryable": "Kan försökas igen: {{retryable}}",
"error.chain.responseBody": "Svarstext:\n{{body}}",
"error.chain.didYouMean": "Menade du: {{suggestions}}",
"error.chain.modelNotFound": "Modellen hittades inte: {{provider}}/{{model}}",
"error.chain.checkConfig": "Kontrollera leverantörs- och modellnamnen i konfigurationen (opencode.json)",
"error.chain.mcpFailed": 'MCP-servern "{{name}}" misslyckades. Obs, OpenCode stöder inte MCP-autentisering ännu.',
"error.chain.providerAuthFailed": "Leverantörsautentisering misslyckades ({{provider}}): {{message}}",
"error.chain.providerInitFailed":
'Det gick inte att initiera leverantören "{{provider}}". Kontrollera autentiseringsuppgifter och konfiguration.',
"error.chain.configJsonInvalid": "Konfigurationsfilen på {{path}} är inte giltig JSON(C)",
"error.chain.configJsonInvalidWithMessage": "Konfigurationsfilen på {{path}} är inte giltig JSON(C): {{message}}",
"error.chain.configDirectoryTypo":
'Katalogen "{{dir}}" i {{path}} är inte giltig. Byt namn på katalogen till "{{suggestion}}" eller ta bort den. Detta är ett vanligt stavfel.',
"error.chain.configFrontmatterError": "Det gick inte att analysera frontmatter i {{path}}:\n{{message}}",
"error.chain.configInvalid": "Konfigurationsfilen på {{path}} är ogiltig",
"error.chain.configInvalidWithMessage": "Konfigurationsfilen på {{path}} är ogiltig: {{message}}",
"notification.permission.title": "Behörighet krävs",
"notification.permission.description": "{{sessionTitle}} i {{projectName}} behöver behörighet",
"notification.question.title": "Fråga",
"notification.question.description": "{{sessionTitle}} i {{projectName}} har en fråga",
"notification.action.goToSession": "Gå till session",
"notification.session.responseReady.title": "Svar redo",
"notification.session.error.title": "Sessionsfel",
"notification.session.error.fallbackDescription": "Ett fel uppstod",
"home.recentProjects": "Senaste projekten",
"home.empty.title": "Inga senaste projekt",
"home.empty.description": "Kom igång genom att öppna ett lokalt projekt",
"home.title": "Hem",
"home.projects": "Projekt",
"home.project.add": "Lägg till projekt",
"home.recentlyClosed": "Nyligen stängda",
"home.server.collapse": "Fäll ihop serverprojekt",
"home.server.expand": "Fäll ut serverprojekt",
"home.sessions.search.placeholder": "Sök sessioner",
"home.sessions.search.placeholder.scoped": "Sök sessioner i {{scope}}",
"home.sessions.search.sessions": "Sessioner",
"home.sessions.search.noResults": "Inga sessioner hittades för {{query}}",
"home.sessions.empty": "Inget här ännu",
"home.sessions.empty.description": "Skapa en session för att komma igång",
"home.sessions.group.today": "I dag",
"home.sessions.group.yesterday": "I går",
"home.sessions.group.older": "Äldre",
"home.providerTip": "Anslut till 75+ leverantörer för att använda andra modeller, inklusive Claude, GPT, Gemini, etc",
"session.tab.session": "Session",
"session.tab.review": "Granskning",
"session.tab.context": "Kontext",
"session.tab.unknown": "Okänd session",
"session.panel.reviewAndFiles": "Granskning och filer",
"session.error.notFound": "Denna session kan inte hittas",
"session.error.notFound.description": "Den här fliken pekar på en session som inte längre finns på den här servern.",
"session.error.notFound.closeTab": "Stäng flik",
"session.error.serverConnection": "Det går inte att ansluta till den här servern",
"session.review.filesChanged": "Ändrade filer: {{count}}",
"session.review.change.one": "Ändring",
"session.review.change.other": "Ändringar",
"session.review.loadingChanges": "Läser in ändringar...",
"session.review.empty": "Inga ändringar i denna session ännu",
"session.review.noVcs": "Inget Git-versionskontrollsystem upptäcktes, ändringar visas inte",
"session.review.noVcs.createGit.title": "Skapa ett Git-arkiv",
"session.review.noVcs.createGit.description": "Spåra, granska och ångra ändringar i det här projektet",
"session.review.noVcs.createGit.actionLoading": "Skapar Git-arkiv...",
"session.review.noVcs.createGit.action": "Skapa Git-arkiv",
"session.review.noSnapshot":
"Spårning av ögonblicksbilder är inaktiverad i konfigurationen, så sessionsändringar är inte tillgängliga",
"session.review.noChanges": "Inga ändringar",
"session.review.noUncommittedChanges": "Inga ändringar som inte har checkats in ännu",
"session.review.noBranchChanges": "Inga grenändringar ännu",
"session.files.selectToOpen": "Välj en fil att öppna",
"session.files.all": "Alla filer",
"session.files.empty": "Inga filer",
"session.files.binaryContent": "Binär fil (innehåll kan inte visas)",
"session.messages.renderEarlier": "Återge tidigare meddelanden",
"session.messages.loadingEarlier": "Läser in tidigare meddelanden...",
"session.messages.loadEarlier": "Ladda tidigare meddelanden",
"session.messages.loading": "Läser in meddelanden...",
"session.messages.jumpToLatest": "Hoppa till senaste",
"session.context.addToContext": "Lägg till {{selection}} i kontexten",
"session.todo.title": "Att göra",
"session.todo.collapse": "Fäll ihop",
"session.todo.expand": "Fäll ut",
"session.todo.progress": "{{done}} av {{total}} uppgifter slutförda",
"session.question.progress": "{{current}} av {{total}} frågor",
"session.question.minimize": "Minimera frågan",
"session.question.restore": "Återställ fråga",
"session.question.pending.one": "{{count}} väntande fråga",
"session.question.pending.other": "{{count}} väntande frågor",
"session.followupDock.summary.one": "{{count}} meddelande i kö",
"session.followupDock.summary.other": "{{count}} meddelanden i kö",
"session.followupDock.sendNow": "Skicka nu",
"session.followupDock.edit": "Redigera",
"session.followupDock.collapse": "Fäll ihop köade meddelanden",
"session.followupDock.expand": "Fäll ut köade meddelanden",
"session.revertDock.summary.one": "{{count}} återställt meddelande",
"session.revertDock.summary.other": "{{count}} återställda meddelanden",
"session.revertDock.collapse": "Fäll ihop återställda meddelanden",
"session.revertDock.expand": "Fäll ut återställda meddelanden",
"session.revertDock.restore": "Återställ meddelande",
"session.new.title": "Bygg vad som helst",
"session.new.project.new": "Nytt projekt",
"session.new.project.search": "Sök efter projekt",
"session.new.project.add": "Lägg till projekt",
"session.new.worktree.main": "Huvudgren",
"session.new.worktree.mainWithBranch": "Huvudgren ({{branch}})",
"session.new.worktree.create": "Skapa ny worktree",
"session.new.workspace.runIn": "Kör sessionen i",
"session.new.workspace.triggerLocal": "Lokal",
"session.new.workspace.local": "Lokalt arkiv",
"session.new.workspace.existing": "Arbetsyta...",
"session.new.git.none": "Ingen Git",
"session.new.lastModified": "Senast ändrad",
"session.header.search.placeholder": "Sök {{project}}",
"session.header.searchFiles": "Sök filer",
"session.header.openIn": "Öppna i",
"session.header.open.action": "Öppna {{app}}",
"session.header.open.ariaLabel": "Öppna i {{app}}",
"session.header.open.menu": "Öppna alternativ",
"session.header.open.copyPath": "Kopiera sökväg",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "Filutforskaren",
"session.header.open.fileManager": "Filhanteraren",
"session.header.reveal.finder": "Visa i Finder",
"session.header.reveal.fileExplorer": "Visa i Utforskaren",
"session.header.reveal.containingFolder": "Öppna överordnad mapp",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
"session.header.open.app.zed": "Zed",
"session.header.open.app.textmate": "TextMate",
"session.header.open.app.antigravity": "Antigravity",
"session.header.open.app.terminal": "Terminal",
"session.header.open.app.iterm2": "iTerm2",
"session.header.open.app.ghostty": "Ghostty",
"session.header.open.app.warp": "Warp",
"session.header.open.app.xcode": "Xcode",
"session.header.open.app.androidStudio": "Android Studio",
"session.header.open.app.powershell": "PowerShell",
"session.header.open.app.sublimeText": "Sublime Text",
"status.popover.trigger": "Status",
"status.popover.ariaLabel": "Serverkonfigurationer",
"status.popover.tab.servers": "Servrar",
"status.popover.tab.mcp": "MCP",
"status.popover.tab.lsp": "LSP",
"status.popover.tab.plugins": "Insticksprogram",
"status.popover.action.manageServers": "Hantera servrar",
"session.share.popover.title": "Publicera på webben",
"session.share.popover.description.shared":
"Denna session är offentlig på webben. Den är tillgänglig för alla med länken.",
"session.share.popover.description.unshared":
"Dela sessionen offentligt på webben. Den kommer att vara tillgänglig för alla med länken.",
"session.share.action.share": "Dela",
"session.share.action.publish": "Publicera",
"session.share.action.publishing": "Publicerar...",
"session.share.action.unpublish": "Avpublicera",
"session.share.action.unpublishing": "Avpublicerar...",
"session.share.action.view": "Visa",
"session.share.copy.copied": "Kopierad",
"session.share.copy.copyLink": "Kopiera länk",
"lsp.tooltip.none": "Inga LSP-servrar",
"lsp.label.connected": "{{count}} LSP",
"prompt.loading": "Laddar prompt...",
"terminal.loading": "Laddar terminal...",
"terminal.title": "Terminal",
"terminal.title.numbered": "Terminal {{number}}",
"terminal.close": "Stäng terminalen",
"terminal.connectionLost.title": "Anslutning förlorad",
"terminal.connectionLost.abnormalClose": "WebSocket stängdes onormalt: {{code}}",
"terminal.connectionLost.description": "Terminalanslutningen avbröts. Detta kan hända när servern startar om.",
"common.closeTab": "Stäng fliken",
"common.dismiss": "Avfärda",
"common.moreCountSuffix": " (+{{count}} till)",
"common.requestFailed": "Begäran misslyckades",
"common.moreOptions": "Fler alternativ",
"common.learnMore": "Läs mer",
"common.rename": "Byt namn",
"common.reset": "Återställ",
"common.archive": "Arkivera",
"common.delete": "Radera",
"common.close": "Stäng",
"common.edit": "Redigera",
"common.loadMore": "Ladda mer",
"common.key.esc": "ESC",
"common.key.ctrl": "Ctrl",
"common.key.alt": "Alt",
"common.key.shift": "Shift",
"common.key.meta": "Meta",
"common.key.space": "Mellanslag",
"common.key.backspace": "Backsteg",
"common.key.enter": "Enter",
"common.key.tab": "Tab",
"common.key.delete": "Delete",
"common.key.home": "Home",
"common.key.end": "End",
"common.key.pageUp": "Page Up",
"common.key.pageDown": "Page Down",
"common.key.insert": "Insert",
"common.unknown": "okänd",
"common.time.justNow": "Just nu",
"common.time.minutesAgo.short": "{{count}}m sedan",
"common.time.hoursAgo.short": "{{count}}h sedan",
"common.time.daysAgo.short": "{{count}}d sedan",
"sidebar.menu.toggle": "Växla meny",
"sidebar.nav.projectsAndSessions": "Projekt och sessioner",
"sidebar.settings": "Inställningar",
"sidebar.help": "Hjälp",
"sidebar.workspaces.enable": "Aktivera arbetsytor",
"sidebar.workspaces.disable": "Inaktivera arbetsytor",
"sidebar.gettingStarted.title": "Kom igång",
"sidebar.gettingStarted.line1": "OpenCode innehåller gratis modeller så att du kan börja direkt.",
"sidebar.gettingStarted.line2": "Anslut valfri leverantör för att använda modeller, inkl. Claude, GPT, Gemini etc.",
"sidebar.project.recentSessions": "Senaste sessioner",
"sidebar.project.viewAllSessions": "Se alla sessioner",
"sidebar.project.clearNotifications": "Rensa aviseringar",
"sidebar.empty.title": "Inga projekt öppna",
"sidebar.empty.description": "Öppna ett projekt för att komma igång",
"debugBar.ariaLabel": "Utvecklingsprestandadiagnostik",
"debugBar.na": "n/a",
"debugBar.nav.label": "NAV",
"debugBar.nav.tip":
"Senast slutförda ruttövergång som berör en sessionssida, mätt från routerns start till första bildrutans rendering efter att övergången har slutförts.",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "Rullande bilder per sekund under de senaste 5 sekunderna.",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "Sämsta bildtid under de senaste 5 sekunderna.",
"debugBar.jank.label": "JANK",
"debugBar.jank.tip": "Bildrutor över 32 ms under de senaste 5 sekunderna.",
"debugBar.long.label": "LONG",
"debugBar.long.tip":
"Blockerad tid och antal långa uppgifter under de senaste 5 sekunderna. Längsta uppgift: {{max}}.",
"debugBar.delay.label": "DELAY",
"debugBar.delay.tip": "Längsta observerade inmatningsfördröjning under de senaste 5 sekunderna.",
"debugBar.inp.label": "INP",
"debugBar.inp.tip":
"Ungefärlig interaktionslängd under de senaste 5 sekunderna. Detta är INP-liknande, inte den officiella Web Vitals INP.",
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "Kumulativ layoutförskjutning för den aktuella appens livslängd.",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "Använd JS-heap jämfört med heapgränsen. Endast Chromium.",
"debugBar.mem.tip": "Använd JS-heap jämfört med heapgränsen. {{used}} av {{limit}}.",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "Skrivbord",
"settings.section.server": "Server",
"settings.tab.general": "Allmänt",
"settings.tab.shortcuts": "Kortkommandon",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "WSL-integration",
"settings.desktop.wsl.description": "Kör OpenCode-servern inuti WSL på Windows.",
"settings.general.section.appearance": "Utseende",
"settings.general.section.advanced": "Avancerat",
"settings.general.section.notifications": "Systemaviseringar",
"settings.general.section.updates": "Uppdateringar",
"settings.general.section.sounds": "Ljudeffekter",
"settings.general.section.feed": "Flöde",
"settings.general.section.display": "Visning",
"settings.general.row.language.title": "Språk",
"settings.general.row.language.description": "Ändra visningsspråket för OpenCode",
"settings.general.row.shell.title": "Terminalskal",
"settings.general.row.shell.description": "Skal som används av terminalen och agentverktygen",
"settings.general.row.shell.autoDefault": "Auto (standard)",
"settings.general.row.shell.terminalOnly": "endast terminal",
"settings.general.row.appearance.title": "Utseende",
"settings.general.row.appearance.description": "Anpassa hur OpenCode ser ut på din enhet",
"settings.general.row.colorScheme.title": "Färgschema",
"settings.general.row.colorScheme.description": "Välj om OpenCode följer system-, ljus- eller mörktemat",
"settings.general.row.theme.title": "Tema",
"settings.general.row.theme.description": "Anpassa OpenCodes tema.",
"settings.general.row.font.title": "Kodtypsnitt",
"settings.general.row.font.description": "Anpassa teckensnittet som används i kodblock",
"settings.general.row.terminalFont.title": "Terminaltypsnitt",
"settings.general.row.terminalFont.description": "Anpassa teckensnittet som används i terminalen",
"settings.general.row.uiFont.title": "UI-teckensnitt",
"settings.general.row.uiFont.description": "Anpassa typsnittet som används i hela gränssnittet",
"settings.general.row.followup.title": "Uppföljningsbeteende",
"settings.general.row.followup.description": "Välj om uppföljningsmeddelanden ska styra direkt eller vänta i kö",
"settings.general.row.followup.option.queue": "Kö",
"settings.general.row.followup.option.steer": "Styr",
"settings.general.row.showFileTree.title": "Filträd",
"settings.general.row.showFileTree.description": "Visa filträdspanelen i sessioner",
"settings.general.row.showNavigation.title": "Navigationskontroller",
"settings.general.row.showNavigation.description": "Visa bakåt- och framåtknapparna i skrivbordets namnlist",
"settings.general.row.showSearch.title": "Kommandopalett",
"settings.general.row.showSearch.description": "Visa sök- och kommandopalettens knapp i namnlisten",
"settings.general.row.showTerminal.title": "Terminal",
"settings.general.row.showTerminal.description": "Visa terminalknappen i skrivbordets namnlist",
"settings.general.row.showStatus.title": "Serverstatus",
"settings.general.row.showStatus.description": "Visa serverstatusknappen i namnlisten",
"settings.general.row.mobileTitlebarBottom.title": "Bottennavigering",
"settings.general.row.mobileTitlebarBottom.description":
"Placera titelfältet och sessionsflikarna längst ned på skärmen på mobilen",
"settings.general.row.showCustomAgents.title": "Visa agent",
"settings.general.row.showCustomAgents.description":
"Växla mellan agenter i inmatningsfältet. När alternativet är dolt används agenten Bygg som standard.",
"settings.general.row.reasoningSummaries.title": "Visa resonemangssammanfattningar",
"settings.general.row.reasoningSummaries.description": "Visa modellresonemangssammanfattningar i tidslinjen",
"settings.general.row.shellToolPartsExpanded.title": "Expandera skalverktygsdelar",
"settings.general.row.shellToolPartsExpanded.description":
"Visa skalverktygsdelar expanderade som standard på tidslinjen",
"settings.general.row.editToolPartsExpanded.title": "Fäll ut delar för redigeringsverktyg",
"settings.general.row.editToolPartsExpanded.description":
"Visa delar för redigerings-, skriv- och patchverktyg utfällda som standard i tidslinjen",
"settings.general.row.newInterface.title": "Ny layout",
"settings.general.row.newInterface.badge": "Ny",
"settings.general.row.newInterface.description":
"Använd de nya flikarna och hemlayouten. Växla mellan layouter under en begränsad tid.",
"settings.general.row.newInterfaceNotice.title": "Du använder nu ny layout",
"settings.general.row.newInterfaceNotice.description": "Den tidigare layouten är inte längre tillgänglig",
"settings.general.row.newInterfaceNotice.dismiss": "Avfärda",
"settings.general.row.pinchZoom.title": "Nyp för att zooma",
"settings.general.row.pinchZoom.description": "Tillåt nypgester på styrplattan och Ctrl-rullning för att zooma",
"settings.general.row.wayland.title": "Använd inbyggt Wayland-stöd",
"settings.general.row.wayland.description": "Inaktivera X11-reservläget på Wayland. Kräver omstart.",
"settings.general.row.wayland.tooltip":
"På Linux med skärmar som har olika uppdateringsfrekvens kan inbyggt Wayland-stöd vara stabilare.",
"settings.general.row.releaseNotes.title": "Versionsinformation",
"settings.general.row.releaseNotes.description": "Visa popup-fönster för vad som är nytt efter uppdateringar",
"settings.updates.row.startup.title": "Sök efter uppdateringar vid start",
"settings.updates.row.startup.description": "Sök automatiskt efter uppdateringar när OpenCode startas",
"settings.updates.row.check.title": "Sök efter uppdateringar",
"settings.updates.row.check.description": "Sök manuellt efter uppdateringar och installera dem om de är tillgängliga",
"settings.updates.action.checkNow": "Kontrollera nu",
"settings.updates.action.checking": "Kontrollerar...",
"settings.updates.action.downloading": "Laddar ned...",
"settings.updates.action.installing": "Installerar...",
"settings.updates.toast.latest.title": "Du är uppdaterad",
"settings.updates.toast.latest.description": "Du kör den senaste versionen av OpenCode.",
"sound.option.none": "Inget",
"sound.option.alert01": "Varning 01",
"sound.option.alert02": "Varning 02",
"sound.option.alert03": "Varning 03",
"sound.option.alert04": "Varning 04",
"sound.option.alert05": "Varning 05",
"sound.option.alert06": "Varning 06",
"sound.option.alert07": "Alarm 07",
"sound.option.alert08": "Alarm 08",
"sound.option.alert09": "Alarm 09",
"sound.option.alert10": "Varning 10",
"sound.option.bipbop01": "Bip-bop 01",
"sound.option.bipbop02": "Bip-bop 02",
"sound.option.bipbop03": "Bip-bop 03",
"sound.option.bipbop04": "Bip-bop 04",
"sound.option.bipbop05": "Bip-bop 05",
"sound.option.bipbop06": "Bip-bop 06",
"sound.option.bipbop07": "Bip-bop 07",
"sound.option.bipbop08": "Bip-bop 08",
"sound.option.bipbop09": "Bip-bop 09",
"sound.option.bipbop10": "Bip-bop 10",
"sound.option.staplebops01": "Staplebops 01",
"sound.option.staplebops02": "Staplebops 02",
"sound.option.staplebops03": "Staplebops 03",
"sound.option.staplebops04": "Staplebops 04",
"sound.option.staplebops05": "Staplebops 05",
"sound.option.staplebops06": "Staplebops 06",
"sound.option.staplebops07": "Staplebops 07",
"sound.option.nope01": "Nej 01",
"sound.option.nope02": "Nej 02",
"sound.option.nope03": "Nej 03",
"sound.option.nope04": "Nej 04",
"sound.option.nope05": "Nej 05",
"sound.option.nope06": "Nej 06",
"sound.option.nope07": "Nej 07",
"sound.option.nope08": "Nej 08",
"sound.option.nope09": "Nej 09",
"sound.option.nope10": "Nej 10",
"sound.option.nope11": "Nej 11",
"sound.option.nope12": "Nej 12",
"sound.option.yup01": "Japp 01",
"sound.option.yup02": "Japp 02",
"sound.option.yup03": "Japp 03",
"sound.option.yup04": "Japp 04",
"sound.option.yup05": "Japp 05",
"sound.option.yup06": "Japp 06",
"settings.general.notifications.agent.title": "Agent",
"settings.general.notifications.agent.description":
"Visa en systemavisering när agenten är klar eller behöver uppmärksamhet",
"settings.general.notifications.permissions.title": "Behörigheter",
"settings.general.notifications.permissions.description": "Visa systemavisering när en behörighet krävs",
"settings.general.notifications.errors.title": "Fel",
"settings.general.notifications.errors.description": "Visa systemavisering när ett fel uppstår",
"settings.general.sounds.agent.title": "Agent",
"settings.general.sounds.agent.description": "Spela upp ett ljud när agenten är klar eller behöver uppmärksamhet",
"settings.general.sounds.permissions.title": "Behörigheter",
"settings.general.sounds.permissions.description": "Spela upp ett ljud när en behörighet krävs",
"settings.general.sounds.errors.title": "Fel",
"settings.general.sounds.errors.description": "Spela upp ljud när ett fel uppstår",
"settings.shortcuts.title": "Kortkommandon",
"settings.shortcuts.reset.button": "Återställ till standardinställningar",
"settings.shortcuts.reset.toast.title": "Kortkommandon återställda",
"settings.shortcuts.reset.toast.description": "Kortkommandon har återställts till standardinställningarna.",
"settings.shortcuts.conflict.title": "Kortkommandot används redan",
"settings.shortcuts.conflict.description": "{{keybind}} är redan tilldelat till {{titles}}.",
"settings.shortcuts.unassigned": "Otilldelad",
"settings.shortcuts.pressKeys": "Tryck på tangenter",
"settings.shortcuts.search.placeholder": "Sök kortkommandon",
"settings.shortcuts.search.empty": "Inga kortkommandon hittades",
"settings.shortcuts.group.general": "Allmänt",
"settings.shortcuts.group.session": "Session",
"settings.shortcuts.group.navigation": "Navigering",
"settings.shortcuts.group.modelAndAgent": "Modell och agent",
"settings.shortcuts.group.terminal": "Terminal",
"settings.shortcuts.group.prompt": "Prompt",
"settings.providers.title": "Leverantörer",
"settings.providers.description": "Leverantörsinställningar kommer att kunna konfigureras här.",
"settings.providers.section.connected": "Anslutna leverantörer",
"settings.providers.connected.empty": "Inga anslutna leverantörer",
"settings.providers.connected.environmentDescription": "Anslutna via dina miljövariabler",
"settings.providers.section.popular": "Populära leverantörer",
"settings.providers.custom.description": "Lägg till en OpenAI-kompatibel leverantör genom bas-URL.",
"settings.providers.tag.environment": "Miljö",
"settings.providers.tag.config": "Konfiguration",
"settings.providers.tag.custom": "Anpassad",
"settings.providers.tag.other": "Övrigt",
"settings.models.title": "Modeller",
"settings.models.description": "Modellinställningar kommer att kunna konfigureras här.",
"settings.agents.title": "Agenter",
"settings.agents.description": "Agentinställningar kommer att kunna konfigureras här.",
"settings.commands.title": "Kommandon",
"settings.commands.description": "Kommandoinställningarna kommer att kunna konfigureras här.",
"settings.mcp.title": "MCP",
"settings.mcp.description": "MCP-inställningar kommer att kunna konfigureras här.",
"settings.permissions.title": "Behörigheter",
"settings.permissions.description": "Kontrollera vilka verktyg servern kan använda som standard.",
"settings.permissions.section.tools": "Verktyg",
"settings.permissions.toast.updateFailed.title": "Det gick inte att uppdatera behörigheter",
"settings.permissions.action.allow": "Tillåt",
"settings.permissions.action.ask": "Fråga",
"settings.permissions.action.deny": "Neka",
"settings.permissions.tool.read.title": "Läs",
"settings.permissions.tool.read.description": "Läsa en fil (matchar filsökvägen)",
"settings.permissions.tool.edit.title": "Redigera",
"settings.permissions.tool.edit.description": "Ändra filer, inklusive redigeringar, skrivningar och patchar",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "Matcha filer med globmönster",
"settings.permissions.tool.grep.title": "Grep",
"settings.permissions.tool.grep.description": "Sök filinnehåll med hjälp av reguljära uttryck",
"settings.permissions.tool.list.title": "Lista",
"settings.permissions.tool.list.description": "Lista filer i en katalog",
"settings.permissions.tool.bash.title": "Bash",
"settings.permissions.tool.bash.description": "Kör skalkommandon",
"settings.permissions.tool.task.title": "Uppgift",
"settings.permissions.tool.task.description": "Starta underagenter",
"settings.permissions.tool.skill.title": "Färdighet",
"settings.permissions.tool.skill.description": "Ladda en färdighet efter namn",
"settings.permissions.tool.lsp.title": "LSP",
"settings.permissions.tool.lsp.description": "Kör språkserverfrågor",
"settings.permissions.tool.todowrite.title": "Skriv att göra-lista",
"settings.permissions.tool.todowrite.description": "Uppdatera att göra-listan",
"settings.permissions.tool.webfetch.title": "Webbhämtning",
"settings.permissions.tool.webfetch.description": "Hämta innehåll från en URL",
"settings.permissions.tool.websearch.title": "Webbsökning",
"settings.permissions.tool.websearch.description": "Sök på webben",
"settings.permissions.tool.external_directory.title": "Extern katalog",
"settings.permissions.tool.external_directory.description": "Få åtkomst till filer utanför projektkatalogen",
"settings.permissions.tool.doom_loop.title": "Doom Loop",
"settings.permissions.tool.doom_loop.description": "Upptäck upprepade verktygsanrop med identiska indata",
"session.delete.failed.title": "Det gick inte att ta bort sessionen",
"session.delete.title": "Ta bort session",
"session.delete.confirm": 'Ta bort session "{{name}}"?',
"session.delete.button": "Ta bort session",
"workspace.new": "Ny arbetsyta",
"workspace.type.local": "lokal",
"workspace.type.sandbox": "sandlåda",
"workspace.create.failed.title": "Det gick inte att skapa arbetsyta",
"workspace.delete.failed.title": "Det gick inte att ta bort arbetsytan",
"workspace.resetting.title": "Återställer arbetsytan",
"workspace.resetting.description": "Detta kan ta en minut.",
"workspace.reset.failed.title": "Det gick inte att återställa arbetsytan",
"workspace.reset.success.title": "Arbetsytan har återställts",
"workspace.reset.success.description": "Arbetsytan matchar nu standardgrenen.",
"workspace.error.stillPreparing": "Arbetsytan förbereds fortfarande",
"workspace.status.checking": "Söker efter osammanslagna ändringar...",
"workspace.status.error": "Det gick inte att verifiera git-status.",
"workspace.status.clean": "Inga osammanslagna ändringar upptäcktes.",
"workspace.status.dirty": "Osammanslagna ändringar upptäcktes i den här arbetsytan.",
"workspace.delete.title": "Ta bort arbetsyta",
"workspace.delete.confirm": 'Ta bort arbetsytan "{{name}}"?',
"workspace.delete.button": "Ta bort arbetsyta",
"workspace.reset.title": "Återställ arbetsytan",
"workspace.reset.confirm": 'Återställa arbetsytan "{{name}}"?',
"workspace.reset.button": "Återställ arbetsytan",
"workspace.reset.archived.none": "Inga aktiva sessioner kommer att arkiveras.",
"workspace.reset.archived.one": "1 session kommer att arkiveras.",
"workspace.reset.archived.many": "{{count}} sessioner kommer att arkiveras.",
"workspace.reset.note": "Detta kommer att återställa arbetsytan så att den matchar standardgrenen.",
}
+65 -72
View File
@@ -53,7 +53,7 @@ export const dict = {
"command.context.addSelection.description": "เพิ่มบรรทัดที่เลือกจากไฟล์ปัจจุบัน",
"command.input.focus": "โฟกัสช่องป้อนข้อมูล",
"command.terminal.toggle": "สลับเทอร์มินัล",
"command.fileTree.toggle": "สลับแผนผังไฟล์",
"command.fileTree.toggle": "สลับต้นไม้ไฟล์",
"command.review.toggle": "สลับการตรวจสอบ",
"command.terminal.new": "เทอร์มินัลใหม่",
"command.terminal.new.description": "สร้างแท็บเทอร์มินัลใหม่",
@@ -79,8 +79,8 @@ export const dict = {
"command.permissions.autoaccept.disable": "หยุดยอมรับสิทธิ์โดยอัตโนมัติ",
"command.workspace.toggle": "สลับพื้นที่ทำงาน",
"command.workspace.toggle.description": "เปิดหรือปิดใช้งานพื้นที่ทำงานหลายรายการในแถบด้านข้าง",
"command.session.undo": "เลิกทำ",
"command.session.undo.description": "เลิกทำข้อความล่าสุด",
"command.session.undo": "ยกเลิก",
"command.session.undo.description": "ยกเลิกข้อความล่าสุด",
"command.session.redo": "ทำซ้ำ",
"command.session.redo.description": "ทำซ้ำข้อความที่ถูกยกเลิกล่าสุด",
"command.session.compact": "บีบอัดเซสชัน",
@@ -102,7 +102,6 @@ export const dict = {
"dialog.provider.empty": "ไม่พบผู้ให้บริการ",
"dialog.provider.group.popular": "ยอดนิยม",
"dialog.provider.group.other": "อื่น ๆ",
"dialog.provider.custom.label": "ผู้ให้บริการแบบกำหนดเองที่เข้ากันได้กับ OpenAI",
"dialog.provider.tag.recommended": "แนะนำ",
"dialog.provider.opencode.note": "โมเดลที่คัดสรร รวมถึง Claude, GPT, Gemini และอื่น ๆ",
"dialog.provider.opencode.tagline": "โมเดลที่เชื่อถือได้และปรับให้เหมาะสม",
@@ -123,7 +122,6 @@ export const dict = {
"dialog.model.unpaid.freeModels.title": "โมเดลฟรีที่จัดหาให้โดย OpenCode",
"dialog.model.unpaid.addMore.title": "เพิ่มโมเดลเพิ่มเติมจากผู้ให้บริการยอดนิยม",
"dialog.model.unpaid.viewMoreProviders": "ดูผู้ให้บริการเพิ่มเติมกว่า 70 ราย",
"dialog.provider.viewAll": "แสดงผู้ให้บริการเพิ่มเติม",
@@ -145,11 +143,11 @@ export const dict = {
"ด้วยคีย์ API เดียวคุณจะได้รับการเข้าถึงโมเดล เช่น Claude, GPT, Gemini, GLM และอื่น ๆ",
"provider.connect.opencodeZen.visit.prefix": "เยี่ยมชม ",
"provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
"provider.connect.opencodeZen.visit.suffix": " เพื่อรับคีย์ API ของคุณ",
"provider.connect.opencodeZen.visit.suffix": " เพื่อรวบรวมคีย์ API ของคุณ",
"provider.connect.oauth.code.visit.prefix": "เยี่ยมชม ",
"provider.connect.oauth.code.visit.link": "ลิงก์นี้",
"provider.connect.oauth.code.visit.suffix":
" เพื่อรับรหัสการอนุญาตสำหรับเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน OpenCode",
" เพื่อรวบรวมรหัสการอนุญาตของคุณเพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน OpenCode",
"provider.connect.oauth.code.label": "รหัสการอนุญาต {{method}}",
"provider.connect.oauth.code.placeholder": "รหัสการอนุญาต",
"provider.connect.oauth.code.required": "ต้องใช้รหัสการอนุญาต",
@@ -159,13 +157,13 @@ export const dict = {
"provider.connect.oauth.auto.visit.suffix":
" และป้อนรหัสด้านล่างเพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน OpenCode",
"provider.connect.oauth.auto.confirmationCode": "รหัสยืนยัน",
"provider.connect.toast.connected.title": "เชื่อมต่อ {{provider}} แล้ว",
"provider.connect.toast.connected.title": "{{provider}} ที่เชื่อมต่อแล้ว",
"provider.connect.toast.connected.description": "โมเดล {{provider}} พร้อมใช้งานแล้ว",
"provider.custom.title": "ผู้ให้บริการที่กำหนดเอง",
"provider.custom.description.prefix": "กำหนดค่าผู้ให้บริการที่เข้ากันได้กับ OpenAI ดู ",
"provider.custom.description.link": "เอกสารการกำหนดค่าผู้ให้บริการ",
"provider.custom.description.suffix": "",
"provider.custom.description.suffix": ".",
"provider.custom.field.providerID.label": "รหัสผู้ให้บริการ",
"provider.custom.field.providerID.placeholder": "myprovider",
"provider.custom.field.providerID.description": "ตัวอักษรพิมพ์เล็ก ตัวเลข ยัติภังค์ หรือขีดล่าง",
@@ -199,7 +197,7 @@ export const dict = {
"provider.custom.error.required": "จำเป็น",
"provider.custom.error.duplicate": "ซ้ำ",
"provider.disconnect.toast.disconnected.title": "ยกเลิกการเชื่อมต่อ {{provider}} แล้ว",
"provider.disconnect.toast.disconnected.title": "{{provider}} ที่ยกเลิกการเชื่อมต่อแล้ว",
"provider.disconnect.toast.disconnected.description": "โมเดล {{provider}} ไม่พร้อมใช้งานอีกต่อไป",
"model.tag.free": "ฟรี",
@@ -214,7 +212,7 @@ export const dict = {
"model.input.audio": "เสียง",
"model.input.video": "วิดีโอ",
"model.input.pdf": "PDF",
"model.tooltip.allows": "รองรับ: {{inputs}}",
"model.tooltip.allows": "อนุญาต: {{inputs}}",
"model.tooltip.context.label": "บริบท",
"model.tooltip.inputs": "ข้อมูลนำเข้า",
"model.tooltip.model": "โมเดล",
@@ -226,14 +224,14 @@ export const dict = {
"common.search.placeholder": "ค้นหา",
"common.goBack": "ย้อนกลับ",
"common.goForward": "ไปข้างหน้า",
"common.goForward": "นำทางไปข้างหน้า",
"common.loading": "กำลังโหลด",
"common.loading.ellipsis": "...",
"common.cancel": "ยกเลิก",
"common.clear": "ล้าง",
"common.connect": "เชื่อมต่อ",
"common.disconnect": "ยกเลิกการเชื่อมต่อ",
"common.continue": "ดำเนินการต่อ",
"common.continue": "ส่ง",
"common.submit": "ส่ง",
"common.save": "บันทึก",
"common.saving": "กำลังบันทึก...",
@@ -248,8 +246,8 @@ export const dict = {
"prompt.mode.shell": "เชลล์",
"prompt.mode.normal": "พรอมต์",
"prompt.mode.shell.exit": "กด esc เพื่อออก",
"session.child.promptDisabled": "ไม่สามารถส่งพรอมต์ในเซสชันเอเจนต์ย่อยได้",
"session.child.backToParent": "กลับไปยังเซสชันหลัก",
"session.child.promptDisabled": "ไม่สามารถส่งพรอมต์ในเซสชันเอเจนต์ย่อยได้.",
"session.child.backToParent": "กลับไปยังเซสชันหลัก.",
"prompt.example.1": "แก้ไข TODO ในโค้ดเบส",
"prompt.example.2": "เทคโนโลยีของโปรเจกต์นี้คืออะไร?",
@@ -264,7 +262,7 @@ export const dict = {
"prompt.example.11": "ปรับปรุงการสืบค้นฐานข้อมูล",
"prompt.example.12": "เพิ่มการตรวจสอบข้อมูลนำเข้า",
"prompt.example.13": "สร้างคอมโพเนนต์ใหม่สำหรับ...",
"prompt.example.14": "ฉันจะนำโปรเจกต์นี้ไปใช้งานได้อย่างไร?",
"prompt.example.14": "ฉันจะทำให้โปรเจกต์นี้ทำงานได้อย่างไร?",
"prompt.example.15": "ตรวจสอบโค้ดของฉันเพื่อแนวทางปฏิบัติที่ดีที่สุด",
"prompt.example.16": "เพิ่มการจัดการข้อผิดพลาดในฟังก์ชันนี้",
"prompt.example.17": "อธิบายรูปแบบ regex นี้",
@@ -272,15 +270,15 @@ export const dict = {
"prompt.example.19": "เพิ่มการบันทึกทั่วทั้งโค้ดเบส",
"prompt.example.20": "มีการพึ่งพาอะไรที่ล้าสมัยอยู่?",
"prompt.example.21": "ช่วยฉันเขียนสคริปต์การย้ายข้อมูล",
"prompt.example.22": "ใช้แคชสำหรับเอนด์พอยต์นี้",
"prompt.example.22": "ใช้งานแคชสำหรับจุดสิ้นสุดนี้",
"prompt.example.23": "เพิ่มการแบ่งหน้าในรายการนี้",
"prompt.example.24": "สร้างคำสั่ง CLI สำหรับ...",
"prompt.example.25": "ตัวแปรสภาพแวดล้อมทำงานอย่างไรที่นี่?",
"prompt.popover.emptyResults": "ไม่พบผลลัพธ์ที่ตรงกัน",
"prompt.popover.emptyCommands": "ไม่พบคำสั่งที่ตรงกัน",
"prompt.dropzone.label": "ลากรูปภาพ PDF หรือไฟล์ข้อความมาวางที่นี่",
"prompt.dropzone.file.label": "วางเพื่ออ้างถึงไฟล์ด้วย @",
"prompt.dropzone.label": "ลากรูปภาพ, PDF หรือไฟล์ข้อความมาวางที่นี่",
"prompt.dropzone.file.label": "วางเพื่อ @กล่าวถึงไฟล์",
"prompt.slash.badge.custom": "กำหนดเอง",
"prompt.slash.badge.skill": "ทักษะ",
"prompt.slash.badge.mcp": "MCP",
@@ -299,15 +297,14 @@ export const dict = {
"prompt.action.stop": "หยุด",
"prompt.toast.pasteUnsupported.title": "ไฟล์แนบที่ไม่รองรับ",
"prompt.toast.attachmentDuplicate.title": "ไฟล์นี้ถูกอัปโหลดแล้ว",
"prompt.toast.pasteUnsupported.description": "แนบได้เฉพาะรูปภาพ PDF หรือไฟล์ข้อความเท่านั้น",
"prompt.toast.pasteUnsupported.description": "แนบได้เฉพาะรูปภาพ, PDF หรือไฟล์ข้อความเท่านั้น",
"prompt.toast.modelAgentRequired.title": "เลือกเอเจนต์และโมเดล",
"prompt.toast.modelAgentRequired.description": "เลือกเอเจนต์และโมเดลก่อนส่งพรอม์",
"prompt.toast.modelAgentRequired.description": "เลือกเอเจนต์และโมเดลก่อนส่งพรอม์",
"prompt.toast.worktreeCreateFailed.title": "ไม่สามารถสร้าง worktree",
"prompt.toast.sessionCreateFailed.title": "ไม่สามารถสร้างเซสชัน",
"prompt.toast.shellSendFailed.title": "ไม่สามารถส่งคำสั่งเชลล์",
"prompt.toast.commandSendFailed.title": "ไม่สามารถส่งคำสั่ง",
"prompt.toast.promptSendFailed.title": "ไม่สามารถส่งพรอม์",
"prompt.toast.promptSendFailed.title": "ไม่สามารถส่งพรอม์",
"prompt.toast.promptSendFailed.description": "ไม่สามารถดึงเซสชันได้",
"dialog.mcp.title": "MCPs",
@@ -319,7 +316,7 @@ export const dict = {
"mcp.status.connected": "เชื่อมต่อแล้ว",
"mcp.status.failed": "ล้มเหลว",
"mcp.status.needs_auth": "ต้องยืนยันตัวตน",
"mcp.status.needs_auth": "ต้องการการตรวจสอบสิทธิ์",
"mcp.auth.clickToAuthenticate": "คลิกเพื่อยืนยันตัวตน",
"mcp.status.disabled": "ปิดใช้งาน",
@@ -329,7 +326,7 @@ export const dict = {
"dialog.directory.empty": "ไม่พบโฟลเดอร์",
"dialog.directory.action.selectFile": "เลือกไฟล์",
"dialog.directory.action.selectFolder": "เลือกโฟลเดอร์",
"dialog.directory.root": "โฟลเดอร์ราก",
"dialog.directory.root": "ราก",
"dialog.directory.parent": "โฟลเดอร์หลัก",
"dialog.directory.readError": "ไม่สามารถอ่านโฟลเดอร์นี้ได้",
@@ -371,30 +368,30 @@ export const dict = {
"wsl.onboarding.step.distro": "เลือกดิสโทร",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "กำลังตรวจสอบ WSL...",
"wsl.onboarding.restartRequired": "ต้องรีสตาร์ท Windows เพื่อให้การติดตั้ง WSL เสร็จสมบูรณ์",
"wsl.onboarding.ready": "WSL พร้อมใช้งานแล้ว",
"wsl.onboarding.required": "ต้องมี WSL เพื่อดำเนินการต่อ",
"wsl.onboarding.restartRequired": "ต้องรีสตาร์ท Windows เพื่อให้การติดตั้ง WSL เสร็จสมบูรณ์.",
"wsl.onboarding.ready": "WSL พร้อมใช้งานแล้ว.",
"wsl.onboarding.required": "ต้องมี WSL เพื่อดำเนินการต่อ.",
"wsl.onboarding.checkingDistros": "กำลังตรวจสอบดิสโทร...",
"wsl.onboarding.installingDistro": "กำลังติดตั้ง {{distro}}...",
"wsl.onboarding.checkingDistro": "กำลังตรวจสอบ {{distro}}...",
"wsl.onboarding.listingDistros": "กำลังแสดงรายการดิสโทร...",
"wsl.onboarding.distroReady": "{{distro}} พร้อมใช้งานแล้ว",
"wsl.onboarding.distroNotInstalled": "ยังไม่ได้ติดตั้ง {{distro}}",
"wsl.onboarding.openDistroOnce": "เปิด {{distro}} หนึ่งครั้งเพื่อให้การตั้งค่าเสร็จสมบูรณ์",
"wsl.onboarding.finishingDistro": "กำลังตั้งค่า {{distro}} ให้เสร็จสมบูรณ์",
"wsl.onboarding.pickDistro": "เลือกดิสโทรหรือติดตั้งจากรายการด้านล่าง",
"wsl.onboarding.distroReady": "{{distro}} พร้อมใช้งานแล้ว.",
"wsl.onboarding.distroNotInstalled": "ยังไม่ได้ติดตั้ง {{distro}}.",
"wsl.onboarding.openDistroOnce": "เปิด {{distro}} หนึ่งครั้งเพื่อให้การตั้งค่าเสร็จสมบูรณ์.",
"wsl.onboarding.finishingDistro": "กำลังตั้งค่า {{distro}} ให้เสร็จสมบูรณ์.",
"wsl.onboarding.pickDistro": "เลือกดิสโทรหรือติดตั้งจากรายการด้านล่าง.",
"wsl.onboarding.checkingOpencode": "กำลังตรวจสอบ OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "กำลังตรวจสอบ OpenCode ใน {{distro}}...",
"wsl.onboarding.updatingOpencode": "กำลังอัปเดต OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "กำลังอัปเดต OpenCode ใน {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "อัปเดต OpenCode ใน {{distro}}",
"wsl.onboarding.updateOpencodeIn": "อัปเดต OpenCode ใน {{distro}}.",
"wsl.onboarding.updateOpencode": "อัปเดต OpenCode",
"wsl.onboarding.opencodeReadyIn": "OpenCode พร้อมใช้งานใน {{distro}} แล้ว",
"wsl.onboarding.opencodeReady": "OpenCode พร้อมใช้งานแล้ว",
"wsl.onboarding.installOpencodeIn": "ติดตั้ง OpenCode ใน {{distro}}",
"wsl.onboarding.opencodeReadyIn": "OpenCode พร้อมใช้งานใน {{distro}} แล้ว.",
"wsl.onboarding.opencodeReady": "OpenCode พร้อมใช้งานแล้ว.",
"wsl.onboarding.installOpencodeIn": "ติดตั้ง OpenCode ใน {{distro}}.",
"wsl.onboarding.installOpencode": "ติดตั้ง OpenCode",
"wsl.onboarding.chooseDistroFirst": "เลือกดิสโทรก่อน",
"wsl.onboarding.loadFailed": "ไม่สามารถโหลดสถานะ WSL ได้",
"wsl.onboarding.chooseDistroFirst": "เลือกดิสโทรก่อน.",
"wsl.onboarding.loadFailed": "ไม่สามารถโหลดสถานะ WSL ได้.",
"wsl.onboarding.loading": "กำลังโหลด...",
"wsl.onboarding.installedDistros": "ดิสโทรที่ติดตั้งแล้ว",
"wsl.onboarding.checkAgain": "ตรวจสอบอีกครั้ง",
@@ -409,27 +406,27 @@ export const dict = {
"wsl.onboarding.wslNotInstalled.description":
"ต้องมี WSL (Windows Subsystem for Linux) ก่อนที่ OpenCode จะเพิ่มเซิร์ฟเวอร์ WSL ได้",
"wsl.onboarding.wslUnavailable.title": "WSL ไม่พร้อมใช้งาน",
"wsl.onboarding.wslUnavailable.description": "OpenCode ไม่สามารถตรวจสอบ WSL บนเครื่องนี้ได้",
"wsl.onboarding.wslUnavailable.description": "OpenCode ไม่สามารถตรวจสอบ WSL บนเครื่องนี้ได้.",
"wsl.onboarding.installWsl": "ติดตั้ง WSL",
"wsl.onboarding.windowsRestartRequired":
"รีสตาร์ท Windows เพื่อให้การติดตั้ง WSL เสร็จสมบูรณ์ แล้วเปิด OpenCode อีกครั้ง",
"รีสตาร์ท Windows เพื่อให้การติดตั้ง WSL เสร็จสมบูรณ์ แล้วเปิด OpenCode อีกครั้ง.",
"wsl.onboarding.next": "ถัดไป",
"wsl.onboarding.refresh": "รีเฟรช",
"wsl.onboarding.allDistrosAdded": "เพิ่มดิสโทรที่ติดตั้งไว้ทั้งหมดแล้ว",
"wsl.onboarding.noDistros": "ยังไม่พบดิสโทร",
"wsl.onboarding.allDistrosAdded": "เพิ่มดิสโทรที่ติดตั้งไว้ทั้งหมดแล้ว.",
"wsl.onboarding.noDistros": "ยังไม่พบดิสโทร.",
"wsl.onboarding.install": "ติดตั้ง",
"wsl.onboarding.installing": "กำลังติดตั้ง...",
"wsl.onboarding.installDistro": "ติดตั้งดิสโทร",
"wsl.onboarding.searchDistros": "ค้นหาดิสโทร",
"wsl.onboarding.wsl2Required": "ต้องใช้ WSL 2",
"wsl.onboarding.toolsRequired": "ดิสโทรนี้ต้องมี bash และ curl",
"wsl.onboarding.wsl2Required": "ต้องใช้ WSL 2.",
"wsl.onboarding.toolsRequired": "ดิสโทรนี้ต้องมี bash และ curl.",
"wsl.onboarding.openTerminal": "เปิดเทอร์มินัล",
"wsl.onboarding.path": "เส้นทาง: {{path}}",
"wsl.onboarding.notFound": "ไม่พบ",
"wsl.onboarding.version": "เวอร์ชัน: {{version}}",
"wsl.onboarding.unknown": "ไม่ทราบ",
"wsl.onboarding.desktopVersion": "เดสก์ท็อป {{version}}",
"wsl.onboarding.versionMismatch": "เวอร์ชันที่ติดตั้งไม่ตรงกับเวอร์ชันของแอปเดสก์ท็อป",
"wsl.onboarding.versionMismatch": "เวอร์ชันที่ติดตั้งไม่ตรงกับเวอร์ชันของแอปเดสก์ท็อป.",
"wsl.onboarding.adding": "กำลังเพิ่ม...",
"dialog.project.edit.title": "แก้ไขโปรเจกต์",
@@ -452,7 +449,7 @@ export const dict = {
"context.breakdown.tool": "การเรียกเครื่องมือ",
"context.breakdown.other": "อื่น ๆ",
"context.systemPrompt.title": "พรอม์ระบบ",
"context.systemPrompt.title": "พรอม์ระบบ",
"context.rawMessages.title": "ข้อความดิบ",
"context.stats.session": "เซสชัน",
@@ -542,7 +539,7 @@ export const dict = {
"error.page.title": "เกิดข้อผิดพลาด",
"error.page.description": "เกิดข้อผิดพลาดระหว่างการโหลดแอปพลิเคชัน",
"error.page.description.localServerStartup": "เกิดข้อผิดพลาดขณะเริ่มเซิร์ฟเวอร์ในเครื่อง",
"error.page.description.localServerStartup": "เกิดข้อผิดพลาดขณะเริ่มเซิร์ฟเวอร์ในเครื่อง.",
"error.page.details.label": "รายละเอียดข้อผิดพลาด",
"error.page.action.restart": "รีสตาร์ท",
"error.page.action.report": "รายงานข้อผิดพลาด",
@@ -586,7 +583,7 @@ export const dict = {
"notification.question.description": "{{sessionTitle}} ใน {{projectName}} มีคำถาม",
"notification.action.goToSession": "ไปที่เซสชัน",
"notification.session.responseReady.title": "คำตอบพร้อมแล้ว",
"notification.session.responseReady.title": "การตอบสนองพร้อม",
"notification.session.error.title": "ข้อผิดพลาดเซสชัน",
"notification.session.error.fallbackDescription": "เกิดข้อผิดพลาด",
@@ -608,7 +605,7 @@ export const dict = {
"home.sessions.group.today": "วันนี้",
"home.sessions.group.yesterday": "เมื่อวาน",
"home.sessions.group.older": "ก่อนหน้านี้",
"home.providerTip": "เชื่อมต่อกับผู้ให้บริการกว่า 75 รายเพื่อใช้โมเดลอื่น ๆ รวมถึง Claude, GPT, Gemini และอีกมากมาย",
"home.providerTip": "เชื่อมต่อกับผู้ให้บริการกว่า 75 รายเพื่อใช้โมเดลอื่นๆ รวมถึง Claude, GPT, Gemini และอีกมากมาย",
"session.tab.session": "เซสชัน",
"session.tab.review": "ตรวจสอบ",
@@ -616,7 +613,7 @@ export const dict = {
"session.tab.unknown": "เซสชันที่ไม่รู้จัก",
"session.panel.reviewAndFiles": "ตรวจสอบและไฟล์",
"session.error.notFound": "ไม่พบเซสชันนี้",
"session.error.notFound.description": "แท็บนี้อ้างถึงเซสชันที่ไม่มีอยู่บนเซิร์ฟเวอร์นี้แล้ว",
"session.error.notFound.description": "แท็บนี้อ้างถึงเซสชันที่ไม่มีอยู่บนเซิร์ฟเวอร์นี้แล้ว.",
"session.error.notFound.closeTab": "ปิดแท็บ",
"session.error.serverConnection": "ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์นี้",
"session.review.filesChanged": "{{count}} ไฟล์ที่เปลี่ยนแปลง",
@@ -706,7 +703,7 @@ export const dict = {
"lsp.tooltip.none": "ไม่มีเซิร์ฟเวอร์ LSP",
"lsp.label.connected": "{{count}} LSP",
"prompt.loading": "กำลังโหลดพรอม์...",
"prompt.loading": "กำลังโหลดพรอม์...",
"terminal.loading": "กำลังโหลดเทอร์มินัล...",
"terminal.title": "เทอร์มินัล",
"terminal.title.numbered": "เทอร์มินัล {{number}}",
@@ -769,23 +766,23 @@ export const dict = {
"settings.general.row.shell.autoDefault": "อัตโนมัติ (ค่าเริ่มต้น)",
"settings.general.row.shell.terminalOnly": "เทอร์มินัลเท่านั้น",
"settings.general.row.appearance.title": "รูปลักษณ์",
"settings.general.row.appearance.description": "ปรับแต่งรูปลักษณ์ของ OpenCode บนอุปกรณ์ของคุณ",
"settings.general.row.appearance.description": "ปรับแต่งวิธีการที่ OpenCode มีลักษณะบนอุปกรณ์ของคุณ",
"settings.general.row.colorScheme.title": "โทนสี",
"settings.general.row.colorScheme.description": "เลือกว่าจะให้ OpenCode ใช้ธีมตามระบบ สว่าง หรือมืด",
"settings.general.row.theme.title": "ธีม",
"settings.general.row.theme.description": "ปรับแต่งธีมของ OpenCode",
"settings.general.row.font.title": "แบบอักษรโค้ด",
"settings.general.row.font.description": "ปรับแต่งแบบอักษรที่ใช้ในบล็อกโค้ด",
"settings.general.row.terminalFont.title": "แบบอักษรเทอร์มินัล",
"settings.general.row.terminalFont.description": "ปรับแต่งแบบอักษรที่ใช้ในเทอร์มินัล",
"settings.general.row.uiFont.title": "แบบอักษร UI",
"settings.general.row.uiFont.description": "ปรับแต่งแบบอักษรที่ใช้ทั่วทั้งอินเทอร์เฟซ",
"settings.general.row.theme.description": "ปรับแต่งวิธีการที่ OpenCode มีธีม",
"settings.general.row.font.title": "ฟอนต์โค้ด",
"settings.general.row.font.description": "ปรับแต่งฟอนต์ที่ใช้ในบล็อกโค้ด",
"settings.general.row.terminalFont.title": "ฟอนต์เทอร์มินัล",
"settings.general.row.terminalFont.description": "ปรับแต่งฟอนต์ที่ใช้ในเทอร์มินัล",
"settings.general.row.uiFont.title": "ฟอนต์ UI",
"settings.general.row.uiFont.description": "ปรับแต่งฟอนต์ที่ใช้ทั่วทั้งอินเทอร์เฟซ",
"settings.general.row.followup.title": "พฤติกรรมการติดตามผล",
"settings.general.row.followup.description": "เลือกว่าจะให้พรอม์ติดตามผลทำงานทันทีหรือรอในคิว",
"settings.general.row.followup.description": "เลือกว่าจะให้พรอม์ติดตามผลทำงานทันทีหรือรอในคิว",
"settings.general.row.followup.option.queue": "คิว",
"settings.general.row.followup.option.steer": "นำทาง",
"settings.general.row.showFileTree.title": "แผนผังไฟล์",
"settings.general.row.showFileTree.description": "แสดงแผงแผนผังไฟล์ในเซสชัน",
"settings.general.row.showFileTree.title": "ต้นไม้ไฟล์",
"settings.general.row.showFileTree.description": "แสดงแผงต้นไม้ไฟล์ในเซสชัน",
"settings.general.row.showNavigation.title": "ตัวควบคุมการนำทาง",
"settings.general.row.showNavigation.description": "แสดงปุ่มย้อนกลับและไปข้างหน้าในแถบชื่อเรื่องเดสก์ท็อป",
"settings.general.row.showSearch.title": "ชุดคำสั่ง",
@@ -797,9 +794,8 @@ export const dict = {
"settings.general.row.mobileTitlebarBottom.title": "การนำทางด้านล่าง",
"settings.general.row.mobileTitlebarBottom.description":
"วางแถบชื่อเรื่องและแท็บเซสชันไว้ด้านล่างของหน้าจอบนอุปกรณ์เคลื่อนที่",
"settings.general.row.showCustomAgents.title": "แสดงเอเจนต์",
"settings.general.row.showCustomAgents.description":
"สลับระหว่างเอเจนต์ในช่องเขียนข้อความ เมื่อซ่อน ระบบจะใช้เอเจนต์ Build เป็นค่าเริ่มต้น",
"settings.general.row.showCustomAgents.title": "เอเจนต์ที่กำหนดเอง",
"settings.general.row.showCustomAgents.description": "แสดงตัวเลือกเอเจนต์ในช่องเขียนข้อความ",
"settings.general.row.reasoningSummaries.title": "แสดงสรุปการใช้เหตุผล",
"settings.general.row.reasoningSummaries.description": "แสดงสรุปการใช้เหตุผลของโมเดลในไทม์ไลน์",
"settings.general.row.shellToolPartsExpanded.title": "ขยายส่วนเครื่องมือ shell",
@@ -911,7 +907,7 @@ export const dict = {
"settings.shortcuts.group.navigation": "การนำทาง",
"settings.shortcuts.group.modelAndAgent": "โมเดลและเอเจนต์",
"settings.shortcuts.group.terminal": "เทอร์มินัล",
"settings.shortcuts.group.prompt": "พรอม์",
"settings.shortcuts.group.prompt": "พรอม์",
"settings.providers.title": "ผู้ให้บริการ",
"settings.providers.description": "การตั้งค่าผู้ให้บริการจะสามารถกำหนดค่าได้ที่นี่",
@@ -948,7 +944,7 @@ export const dict = {
"settings.permissions.tool.glob.description": "จับคู่ไฟล์โดยใช้รูปแบบ glob",
"settings.permissions.tool.grep.title": "Grep",
"settings.permissions.tool.grep.description": "ค้นหาเนื้อหาไฟล์โดยใช้นิพจน์ทั่วไป",
"settings.permissions.tool.list.title": "แสดงรายการ",
"settings.permissions.tool.list.title": "รายการ",
"settings.permissions.tool.list.description": "แสดงรายการไฟล์ภายในไดเรกทอรี",
"settings.permissions.tool.bash.title": "Bash",
"settings.permissions.tool.bash.description": "เรียกใช้คำสั่งเชลล์",
@@ -1021,16 +1017,13 @@ export const dict = {
"dialog.server.add.passwordPlaceholder": "รหัสผ่าน",
"server.row.noUsername": "ไม่มีชื่อผู้ใช้",
"session.review.noVcs.createGit.title": "สร้าง Git รีโพซิทอรี",
"session.review.noVcs.createGit.description": "ติดตาม ตรวจสอบ และเลิกทำการเปลี่ยนแปลงในโปรเจกต์นี้",
"session.review.noVcs.createGit.description": "ติดตาม ตรวจสอบ และเลิกทำสิ่งเปลี่ยนแปลงในโปรเจกต์นี้",
"session.review.noVcs.createGit.actionLoading": "กำลังสร้าง Git รีโพซิทอรี...",
"session.review.noVcs.createGit.action": "สร้าง Git รีโพซิทอรี",
"session.todo.progress": "เสร็จสิ้น {{done}} จาก {{total}} รายการ",
"session.question.progress": "{{current}} จาก {{total}} คำถาม",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "File Explorer",
"session.header.reveal.finder": "แสดงใน Finder",
"session.header.reveal.fileExplorer": "แสดงใน File Explorer",
"session.header.reveal.containingFolder": "เปิดโฟลเดอร์ที่มีรายการนี้",
"session.header.open.fileManager": "File Manager",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
+61 -68
View File
@@ -78,9 +78,9 @@ export const dict = {
"command.model.variant.cycle": "Düşünme eforu değiştir",
"command.model.variant.cycle.description": "Sonraki efor seviyesine geç",
"command.prompt.mode.shell": "Kabuk",
"command.prompt.mode.normal": "İstem",
"command.permissions.autoaccept.enable": "İzinleri otomatik kabul et",
"command.permissions.autoaccept.disable": "İzinleri otomatik kabul etmeyi durdur",
"command.prompt.mode.normal": "Komut",
"command.permissions.autoaccept.enable": "Düzenlemeleri otomatik kabul et",
"command.permissions.autoaccept.disable": "Otomatik kabulü durdur",
"command.workspace.toggle": "Çalışma alanlarını aç/kapat",
"command.workspace.toggle.description": "Kenar çubuğunda birden fazla çalışma alanını göster veya gizle",
"command.session.undo": "Geri al",
@@ -106,10 +106,9 @@ export const dict = {
"dialog.provider.empty": "Sağlayıcı bulunamadı",
"dialog.provider.group.popular": "Popüler",
"dialog.provider.group.other": "Diğer",
"dialog.provider.custom.label": "Özel OpenAI uyumlu sağlayıcı",
"dialog.provider.tag.recommended": "Önerilen",
"dialog.provider.opencode.note": "Claude, GPT, Gemini ve daha fazlasını içeren seçilmiş modeller",
"dialog.provider.opencode.tagline": "Güvenilir, optimize edilmiş modeller",
"dialog.provider.opencode.tagline": "Güvenilir optimize edilmiş modeller",
"dialog.provider.opencodeGo.tagline": "Herkes için düşük maliyetli abonelik",
"dialog.provider.anthropic.note": "Pro ve Max dahil Claude modellerine doğrudan erişim",
"dialog.provider.copilot.note": "GitHub Copilot üzerinden kodlama yardımı için yapay zekâ modelleri",
@@ -127,7 +126,6 @@ export const dict = {
"dialog.model.unpaid.freeModels.title": "OpenCode tarafından sunulan ücretsiz modeller",
"dialog.model.unpaid.addMore.title": "Popüler sağlayıcılardan daha fazla model ekleyin",
"dialog.model.unpaid.viewMoreProviders": "70'ten fazla sağlayıcı daha görüntüle",
"dialog.provider.viewAll": "Daha fazla sağlayıcı göster",
@@ -168,9 +166,9 @@ export const dict = {
"provider.custom.title": "Özel sağlayıcı",
"provider.custom.description.prefix": "OpenAI uyumlu bir sağlayıcı yapılandırın. ",
"provider.custom.description.link": "sağlayıcı yapılandırma dokümanları",
"provider.custom.description.link": "Sağlayıcı yapılandırma dökümanları",
"provider.custom.description.suffix": " sayfasına bakın.",
"provider.custom.field.providerID.label": "Sağlayıcı kimliği",
"provider.custom.field.providerID.label": "Sağlayıcı kimlik",
"provider.custom.field.providerID.placeholder": "saglayicim",
"provider.custom.field.providerID.description": "Küçük harfler, rakamlar, tire veya alt çizgi",
"provider.custom.field.name.label": "Görünen ad",
@@ -180,7 +178,7 @@ export const dict = {
"provider.custom.field.apiKey.label": "API anahtarı",
"provider.custom.field.apiKey.placeholder": "API anahtarı",
"provider.custom.field.apiKey.description":
"İsteğe bağlı. Kimlik doğrulamayı başlıklarla yönetiyorsanız boş bırakın.",
"İsteğe bağlı. Kimlik doğrulamayı başlıklar ile yönetiyorsanız boş bırakın.",
"provider.custom.models.label": "Modeller",
"provider.custom.models.id.label": "Kimlik",
"provider.custom.models.id.placeholder": "model-kimlik",
@@ -195,9 +193,9 @@ export const dict = {
"provider.custom.headers.value.placeholder": "değer",
"provider.custom.headers.remove": "Başlığı kaldır",
"provider.custom.headers.add": "Başlık ekle",
"provider.custom.error.providerID.required": "Sağlayıcı kimliği gerekli",
"provider.custom.error.providerID.required": "Sağlayıcı kimlik gerekli",
"provider.custom.error.providerID.format": "Küçük harf, rakam, tire veya alt çizgi kullanın",
"provider.custom.error.providerID.exists": "Bu sağlayıcı kimliği zaten mevcut",
"provider.custom.error.providerID.exists": "Bu sağlayıcı kimlik zaten mevcut",
"provider.custom.error.name.required": "Görünen ad gerekli",
"provider.custom.error.baseURL.required": "Temel URL gerekli",
"provider.custom.error.baseURL.format": "http:// veya https:// ile başlamalı",
@@ -205,7 +203,7 @@ export const dict = {
"provider.custom.error.duplicate": "Tekrar",
"provider.disconnect.toast.disconnected.title": "{{provider}} bağlantısı kesildi",
"provider.disconnect.toast.disconnected.description": "{{provider}} modelleri artık kullanılamıyor.",
"provider.disconnect.toast.disconnected.description": "{{provider}} modelleri artık kullanılabilir değil.",
"model.tag.free": "Ücretsiz",
"model.tag.latest": "En yeni",
@@ -225,9 +223,9 @@ export const dict = {
"model.tooltip.model": "Model",
"model.tooltip.provider": "Sağlayıcı",
"model.tooltip.reasoning": "Akıl yürütme",
"model.tooltip.reasoning.allowed": "Akıl yürütmeyi destekler",
"model.tooltip.reasoning.allowed": "Akıl yürütme destekler",
"model.tooltip.reasoning.none": "Akıl yürütme yok",
"model.tooltip.context": "Bağlam sınırı {{limit}}",
"model.tooltip.context": "Bağlam limiti {{limit}}",
"common.search.placeholder": "Ara",
"common.goBack": "Geri git",
@@ -237,8 +235,8 @@ export const dict = {
"common.cancel": "İptal",
"common.clear": "Temizle",
"common.connect": "Bağlan",
"common.disconnect": "Bağlantıyı kes",
"common.continue": "Devam et",
"common.disconnect": "Bağlantı Kes",
"common.continue": "Gönder",
"common.submit": "Gönder",
"common.save": "Kaydet",
"common.saving": "Kaydediliyor...",
@@ -251,7 +249,7 @@ export const dict = {
"prompt.placeholder.summarizeComments": "Yorumları özetle…",
"prompt.placeholder.summarizeComment": "Yorumu özetle…",
"prompt.mode.shell": "Kabuk",
"prompt.mode.normal": "İstem",
"prompt.mode.normal": "Komut",
"prompt.mode.shell.exit": "çıkmak için esc",
"session.child.promptDisabled": "Alt ajan oturumlarına istem gönderilemez.",
"session.child.backToParent": "Ana oturuma dön.",
@@ -268,30 +266,30 @@ export const dict = {
"prompt.example.10": "API dokümantasyonu oluştur",
"prompt.example.11": "Veritabanı sorgularını optimize et",
"prompt.example.12": "Girdi doğrulama ekle",
"prompt.example.13": "... için yeni bir bileşen oluştur",
"prompt.example.13": "İçin yeni bir bileşen oluştur...",
"prompt.example.14": "Bu projeyi nasıl dağıtabilirim?",
"prompt.example.15": "Kodumu en iyi uygulamalar için incele",
"prompt.example.16": "Bu fonksiyona hata yönetimi ekle",
"prompt.example.17": "Bu regex kalıbını açıkla",
"prompt.example.18": "Bunu TypeScript'e dönüştür",
"prompt.example.19": "Kod tabanının tamamına günlük kaydı ekle",
"prompt.example.19": "Kod tabanı boyunca loglama ekle",
"prompt.example.20": "Hangi bağımlılıklar güncellenmemiş?",
"prompt.example.21": "Bir geçiş betiği yazmama yardım et",
"prompt.example.21": "Bir göç betiği yazmama yardım et",
"prompt.example.22": "Bu uç nokta için önbellekleme uygula",
"prompt.example.23": "Bu listeye sayfalama ekle",
"prompt.example.24": "... için bir CLI komutu oluştur",
"prompt.example.24": "İçin bir CLI komutu oluştur...",
"prompt.example.25": "Ortam değişkenleri burada nasıl çalışıyor?",
"prompt.popover.emptyResults": "Eşleşen sonuç yok",
"prompt.popover.emptyCommands": "Eşleşen komut yok",
"prompt.dropzone.label": "Resimleri, PDF'leri veya metin dosyalarını buraya bırakın",
"prompt.dropzone.file.label": "Dosyayı @ ile belirtmek için buraya bırakın",
"prompt.dropzone.file.label": "@bahsetmek için dosyayı bırakın",
"prompt.slash.badge.custom": "özel",
"prompt.slash.badge.skill": "beceri",
"prompt.slash.badge.mcp": "mcp",
"prompt.context.active": "etkin",
"prompt.context.includeActiveFile": "Etkin dosyayı dahil et",
"prompt.context.removeActiveFile": "Etkin dosyayı bağlamdan çıkar",
"prompt.context.active": "aktif",
"prompt.context.includeActiveFile": "Aktif dosyayı dahil et",
"prompt.context.removeActiveFile": "Aktif dosyayı bağlamdan çıkar",
"prompt.context.removeFile": "Dosyayı bağlamdan çıkar",
"prompt.action.attachFile": "Dosya ekle",
"prompt.menu.addImagesAndFiles": "Dosya ve daha fazlasını ekle",
@@ -304,19 +302,18 @@ export const dict = {
"prompt.action.stop": "Durdur",
"prompt.toast.pasteUnsupported.title": "Desteklenmeyen ek",
"prompt.toast.attachmentDuplicate.title": "Bu dosya zaten yüklendi",
"prompt.toast.pasteUnsupported.description": "Buraya yalnızca resimler, PDF'ler veya metin dosyaları eklenebilir.",
"prompt.toast.modelAgentRequired.title": "Bir ajan ve model seçin",
"prompt.toast.modelAgentRequired.description": "İstem göndermeden önce bir ajan ve model seçin.",
"prompt.toast.modelAgentRequired.description": "Komut göndermeden önce bir ajan ve model seçin.",
"prompt.toast.worktreeCreateFailed.title": "Çalışma ağacı oluşturulamadı",
"prompt.toast.sessionCreateFailed.title": "Oturum oluşturulamadı",
"prompt.toast.shellSendFailed.title": "Kabuk komutu gönderilemedi",
"prompt.toast.commandSendFailed.title": "Komut gönderilemedi",
"prompt.toast.promptSendFailed.title": "İstem gönderilemedi",
"prompt.toast.promptSendFailed.title": "Komut gönderilemedi",
"prompt.toast.promptSendFailed.description": "Oturum alınamadı",
"dialog.mcp.title": "MCP'ler",
"dialog.mcp.description": "Toplam {{total}} öğeden {{enabled}} tanesi etkin",
"dialog.mcp.description": "{{total}} içerisinden {{enabled}} etkin",
"dialog.mcp.empty": "Yapılandırılmış MCP yok",
"dialog.lsp.empty": "LSP'ler dosya türlerinden otomatik algılanır",
@@ -351,7 +348,7 @@ export const dict = {
"dialog.server.add.name": "Sunucu adı (isteğe bağlı)",
"dialog.server.add.namePlaceholder": "Localhost",
"dialog.server.add.username": "Kullanıcı adı (isteğe bağlı)",
"dialog.server.add.password": "Parola (isteğe bağlı)",
"dialog.server.add.password": "Şifre (isteğe bağlı)",
"dialog.server.edit.title": "Sunucuyu düzenle",
"dialog.server.default.title": "Varsayılan sunucu",
"dialog.server.default.description":
@@ -457,14 +454,14 @@ export const dict = {
"context.breakdown.tool": "Araç Çağrıları",
"context.breakdown.other": "Diğer",
"context.systemPrompt.title": "Sistem İstemi",
"context.systemPrompt.title": "Sistem Komutu",
"context.rawMessages.title": "Ham mesajlar",
"context.stats.session": "Oturum",
"context.stats.messages": "Mesajlar",
"context.stats.provider": "Sağlayıcı",
"context.stats.model": "Model",
"context.stats.limit": "Bağlam Sınırı",
"context.stats.limit": "Bağlam Limiti",
"context.stats.totalTokens": "Toplam Token",
"context.stats.usage": "Kullanım",
"context.stats.inputTokens": "Girdi Tokenleri",
@@ -474,7 +471,7 @@ export const dict = {
"context.stats.userMessages": "Kullanıcı Mesajları",
"context.stats.assistantMessages": "Asistan Mesajları",
"context.stats.totalCost": "Toplam Maliyet",
"context.stats.sessionCreated": "Oturum Oluşturma",
"context.stats.sessionCreated": "Oturum Oluşturulma",
"context.stats.lastActivity": "Son Etkinlik",
"context.usage.tokens": "Tokenler",
@@ -513,10 +510,10 @@ export const dict = {
"toast.workspace.disabled.title": "Çalışma alanları devre dışı bırakıldı",
"toast.workspace.disabled.description": "Kenar çubuğunda yalnızca ana çalışma ağacı gösterilecek",
"toast.permissions.autoaccept.on.title": "İzinler otomatik kabul ediliyor",
"toast.permissions.autoaccept.on.description": "İzin istekleri otomatik olarak onaylanacak",
"toast.permissions.autoaccept.off.title": "İzinleri otomatik kabul etme durduruldu",
"toast.permissions.autoaccept.off.description": "İzin istekleri onay gerektirecek",
"toast.permissions.autoaccept.on.title": "Düzenlemeler otomatik kabul ediliyor",
"toast.permissions.autoaccept.on.description": "Düzenleme ve yazma izinleri otomatik olarak onaylanacak",
"toast.permissions.autoaccept.off.title": "Otomatik kabul durduruldu",
"toast.permissions.autoaccept.off.description": "Düzenleme ve yazma izinleri onay gerektirecek",
"toast.model.none.title": "Model seçilmedi",
"toast.model.none.description": "Bu oturumu özetlemek için bir sağlayıcı bağlayın",
@@ -556,8 +553,8 @@ export const dict = {
"error.page.action.checking": "Kontrol ediliyor...",
"error.page.action.checkUpdates": "Güncellemeleri kontrol et",
"error.page.action.updateTo": "{{version}} sürümüne güncelle",
"error.page.report.prefix": "Lütfen bu hatayı OpenCode ekibine",
"error.page.report.discord": "Discord üzerinden bildirin",
"error.page.report.prefix": "Lütfen bu hatayı OpenCode ekibine bildirin",
"error.page.report.discord": "Discord üzerinden",
"error.page.version": "Sürüm: {{version}}",
"error.dev.rootNotFound":
@@ -574,9 +571,9 @@ export const dict = {
"error.chain.responseBody": "Yanıt gövdesi:\n{{body}}",
"error.chain.didYouMean": "Bunu mu demek istediniz: {{suggestions}}",
"error.chain.modelNotFound": "Model bulunamadı: {{provider}}/{{model}}",
"error.chain.checkConfig": "Yapılandırma dosyanızdaki (opencode.json) sağlayıcı/model adlarını kontrol edin",
"error.chain.checkConfig": "Yapılandırma dosyanızı (opencode.json) sağlayıcı/model adlarını kontrol edin",
"error.chain.mcpFailed":
'MCP sunucusu "{{name}}" çalıştırılamadı. Not: OpenCode henüz MCP kimlik doğrulamasını desteklemiyor.',
'MCP sunucusu "{{name}}" başarısız oldu. Not: OpenCode henüz MCP kimlik doğrulamasını desteklemiyor.',
"error.chain.providerAuthFailed": "Sağlayıcı kimlik doğrulaması başarısız ({{provider}}): {{message}}",
"error.chain.providerInitFailed":
'"{{provider}}" sağlayıcısı başlatılamadı. Kimlik bilgilerini ve yapılandırmayı kontrol edin.',
@@ -626,9 +623,9 @@ export const dict = {
"session.panel.reviewAndFiles": "İnceleme ve dosyalar",
"session.error.notFound": "Bu oturum bulunamıyor",
"session.error.notFound.description": "Bu sekme, artık bu sunucuda bulunmayan bir oturuma yönlendiriyor.",
"session.error.notFound.closeTab": "Sekmeyi kapat",
"session.error.notFound.closeTab": "Sekmeyi Kapat",
"session.error.serverConnection": "Bu sunucuya bağlanılamıyor",
"session.review.filesChanged": "{{count}} dosya değişti",
"session.review.filesChanged": "{{count}} Dosya Değişti",
"session.review.change.one": "Değişiklik",
"session.review.change.other": "Değişiklik",
"session.review.loadingChanges": "Değişiklikler yükleniyor...",
@@ -637,7 +634,7 @@ export const dict = {
"session.review.noSnapshot":
"Yapılandırmada anlık görüntü takibi devre dışı bırakıldı, bu nedenle oturum değişiklikleri kullanılamıyor",
"session.review.noChanges": "Değişiklik yok",
"session.review.noUncommittedChanges": "Henüz işlenmemiş değişiklik yok",
"session.review.noUncommittedChanges": "Henüz commit edilmemiş değişiklik yok",
"session.review.noBranchChanges": "Henüz dal değişikliği yok",
"session.files.selectToOpen": "Açmak için bir dosya seçin",
@@ -671,7 +668,7 @@ export const dict = {
"session.revertDock.expand": "Geri alınan mesajları genişlet",
"session.revertDock.restore": "Mesajı geri yükle",
"session.new.title": "Her şeyi geliştirin",
"session.new.title": "İstediğini yap",
"session.new.project.new": "Yeni proje",
"session.new.project.search": "Proje ara",
"session.new.project.add": "Proje ekle",
@@ -692,9 +689,6 @@ export const dict = {
"session.header.open.ariaLabel": "{{app}} ile aç",
"session.header.open.menu": "Açma seçenekleri",
"session.header.open.copyPath": "Yolu kopyala",
"session.header.reveal.finder": "Finder'da göster",
"session.header.reveal.fileExplorer": "Dosya Gezgini'nde göster",
"session.header.reveal.containingFolder": "İçeren klasörü aç",
"status.popover.trigger": "Durum",
"status.popover.ariaLabel": "Sunucu yapılandırmaları",
@@ -715,17 +709,17 @@ export const dict = {
"session.share.action.unpublishing": "Yayından kaldırılıyor...",
"session.share.action.view": "Görüntüle",
"session.share.copy.copied": "Kopyalandı",
"session.share.copy.copyLink": "Bağlantıyı kopyala",
"session.share.copy.copyLink": "Bağlantı kopyala",
"lsp.tooltip.none": "LSP sunucusu yok",
"lsp.label.connected": "{{count}} LSP",
"prompt.loading": "İstem yükleniyor...",
"prompt.loading": "Komut yükleniyor...",
"terminal.loading": "Terminal yükleniyor...",
"terminal.title": "Terminal",
"terminal.title.numbered": "Terminal {{number}}",
"terminal.close": "Terminali kapat",
"terminal.connectionLost.title": "Bağlantı kesildi",
"terminal.connectionLost.title": "Bağlantı Kesildi",
"terminal.connectionLost.description":
"Terminal bağlantısı kesildi. Bu durum sunucu yeniden başladığında oluşabilir.",
@@ -790,15 +784,15 @@ export const dict = {
"OpenCode'un sistem, açık veya koyu temayı takip etip etmeyeceğini seçin",
"settings.general.row.theme.title": "Tema",
"settings.general.row.theme.description": "OpenCode'un temasını özelleştirin.",
"settings.general.row.font.title": "Kod yazı tipi",
"settings.general.row.font.title": "Kod Yazı Tipi",
"settings.general.row.font.description": "Kod bloklarında kullanılan yazı tipini özelleştirin",
"settings.general.row.terminalFont.title": "Terminal yazı tipi",
"settings.general.row.terminalFont.description": "Terminalde kullanılan yazı tipini özelleştirin",
"settings.general.row.uiFont.title": "Arayüz yazı tipi",
"settings.general.row.uiFont.title": "Arayüz Yazı Tipi",
"settings.general.row.uiFont.description": "Arayüz genelinde kullanılan yazı tipini özelleştirin",
"settings.general.row.followup.title": "Takip davranışı",
"settings.general.row.followup.description":
"Takip istemlerinin hemen yönlendirilmesini mi yoksa sırada beklemesini mi istediğinizi seçin",
"Takip komutlarının hemen yönlendirilmesini mi yoksa sırada beklemesini mi istediğinizi seçin",
"settings.general.row.followup.option.queue": "Sıra",
"settings.general.row.followup.option.steer": "Yönlendir",
"settings.general.row.showFileTree.title": "Dosya ağacı",
@@ -814,9 +808,8 @@ export const dict = {
"settings.general.row.mobileTitlebarBottom.title": "Alt gezinme",
"settings.general.row.mobileTitlebarBottom.description":
"Mobil cihazlarda başlık çubuğunu ve oturum sekmelerini ekranın altına yerleştir",
"settings.general.row.showCustomAgents.title": "Ajanı göster",
"settings.general.row.showCustomAgents.description":
"Düzenleyicide ajanlar arasında geçiş yapın. Gizlendiğinde varsayılan olarak Build ajanı kullanılır.",
"settings.general.row.showCustomAgents.title": "Özel ajanlar",
"settings.general.row.showCustomAgents.description": "Yazma alanında ajan seçiciyi göster",
"settings.general.row.reasoningSummaries.title": "Akıl yürütme özetlerini göster",
"settings.general.row.reasoningSummaries.description": "Zaman çizelgesinde model akıl yürütme özetlerini görüntüle",
"settings.general.row.shellToolPartsExpanded.title": "Kabuk araç bileşenlerini genişlet",
@@ -840,7 +833,7 @@ export const dict = {
"settings.general.row.wayland.description":
"Wayland'da X11 geri dönüşünü devre dışı bırak. Yeniden başlatma gerektirir.",
"settings.general.row.wayland.tooltip":
"Farklı yenileme hızlarına sahip monitörlerin kullanıldığı Linux sistemlerinde yerel Wayland daha kararlı olabilir.",
"Karışık yenileme hızlı monitörlere sahip Linux'ta yerel Wayland daha kararlı olabilir.",
"settings.general.row.releaseNotes.title": "Sürüm notları",
"settings.general.row.releaseNotes.description": "Güncellemelerden sonra Yenilikler bildirimlerini göster",
@@ -934,7 +927,7 @@ export const dict = {
"settings.shortcuts.group.navigation": "Gezinme",
"settings.shortcuts.group.modelAndAgent": "Model ve ajan",
"settings.shortcuts.group.terminal": "Terminal",
"settings.shortcuts.group.prompt": "İstem",
"settings.shortcuts.group.prompt": "Komut",
"settings.providers.title": "Sağlayıcılar",
"settings.providers.description": "Sağlayıcı ayarları burada yapılandırılabilecek.",
@@ -959,7 +952,7 @@ export const dict = {
"settings.permissions.section.tools": "Araçlar",
"settings.permissions.toast.updateFailed.title": "İzinler güncellenemedi",
"settings.permissions.action.allow": "İzin ver",
"settings.permissions.action.allow": "İzin Ver",
"settings.permissions.action.ask": "Sor",
"settings.permissions.action.deny": "Reddet",
@@ -999,7 +992,7 @@ export const dict = {
"workspace.new": "Yeni çalışma alanı",
"workspace.type.local": "yerel",
"workspace.type.sandbox": "korumalı alan",
"workspace.type.sandbox": "sandbox",
"workspace.create.failed.title": "Çalışma alanı oluşturulamadı",
"workspace.delete.failed.title": "Çalışma alanı silinemedi",
"workspace.resetting.title": "Çalışma alanı sıfırlanıyor",
@@ -1031,9 +1024,9 @@ export const dict = {
"error.server.invalidConfiguration": "Geçersiz yapılandırma",
"common.moreCountSuffix": " (+{{count}} daha)",
"common.time.justNow": "Şimdi",
"common.time.minutesAgo.short": "{{count}} dk önce",
"common.time.hoursAgo.short": "{{count}} sa önce",
"common.time.daysAgo.short": "{{count}} gün önce",
"common.time.minutesAgo.short": "{{count}}dk önce",
"common.time.hoursAgo.short": "{{count}}sa önce",
"common.time.daysAgo.short": "{{count}}g önce",
"settings.providers.connected.environmentDescription": "Ortam değişkenlerinizden bağlandı",
"settings.providers.custom.description": "Temel URL üzerinden OpenAI uyumlu bir sağlayıcı ekleyin.",
@@ -1071,7 +1064,7 @@ export const dict = {
"debugBar.nav.tip":
"Yönlendirici başlangıcından yerleşme sonrası ilk boyamaya kadar ölçülen, bir oturum sayfasına dokunan son tamamlanmış rota geçişi.",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "Son 5 saniyedeki hareketli saniye başına kare ortalaması.",
"debugBar.fps.tip": "Son 5 saniyedeki kayan saniye başına kare sayısı.",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "Son 5 saniyedeki en kötü kare süresi.",
"debugBar.jank.label": "JANK",
@@ -1085,14 +1078,14 @@ export const dict = {
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "Mevcut uygulama ömrü için kümülatif düzen kayması.",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "Kullanılan JS yığınının yığın sınırına oranı. Yalnızca Chromium.",
"debugBar.mem.tip": "Kullanılan JS yığınının yığın sınırına oranı: {{used}} / {{limit}}.",
"debugBar.mem.tipUnavailable": "Kullanılan JS yığını vs yığın sınırı. Yalnızca Chromium.",
"debugBar.mem.tip": "Kullanılan JS yığını vs yığın sınırı. {{limit}} içinde {{used}}.",
"common.key.ctrl": "Ctrl",
"common.key.alt": "Alt",
"common.key.shift": "Shift",
"common.key.meta": "Meta",
"common.key.space": "Boşluk",
"common.key.backspace": "Geri Al",
"common.key.backspace": "Geri",
"common.key.enter": "Enter",
"common.key.tab": "Tab",
"common.key.delete": "Delete",
+34 -49
View File
@@ -102,28 +102,26 @@ export const dict = {
"dialog.provider.empty": "Провайдерів не знайдено",
"dialog.provider.group.popular": "Популярні",
"dialog.provider.group.other": "Інші",
"dialog.provider.custom.label": "Користувацький провайдер, сумісний з OpenAI",
"dialog.provider.tag.recommended": "Рекомендовані",
"dialog.provider.opencode.note": "Відібрані моделі, включаючи Claude, GPT, Gemini та інші",
"dialog.provider.opencode.tagline": "Надійні оптимізовані моделі",
"dialog.provider.opencodeGo.tagline": "Недорога підписка для всіх",
"dialog.provider.anthropic.note": "Прямий доступ до моделей Claude, включаючи Pro та Max",
"dialog.provider.copilot.note": "Моделі ШІ для допомоги в кодуванні через GitHub Copilot",
"dialog.provider.openai.note": "Моделі GPT для швидких і універсальних завдань ШІ",
"dialog.provider.copilot.note": "Моделі AI для допомоги в кодуванні через GitHub Copilot",
"dialog.provider.openai.note": "Моделі GPT для швидких і універсальних завдань AI",
"dialog.provider.google.note": "Моделі Gemini для швидких структурованих відповідей",
"dialog.provider.openrouter.note": "Доступ до всіх підтримуваних моделей від одного провайдера",
"dialog.provider.vercel.note": "Уніфікований доступ до моделей ШІ з інтелектуальною маршрутизацією",
"dialog.provider.vercel.note": "Уніфікований доступ до моделей AI з інтелектуальною маршрутизацією",
"dialog.model.select.title": "Вибрати модель",
"dialog.model.search.placeholder": "Пошук моделей",
"dialog.model.empty": "Моделей не знайдено",
"dialog.model.empty": "Немає результатів моделей",
"dialog.model.manage": "Керувати моделями",
"dialog.model.manage.description": "Налаштуйте, які моделі відображатимуться у виборі моделей.",
"dialog.model.manage.provider.toggle": "Перемкнути всі моделі {{provider}}",
"dialog.model.unpaid.freeModels.title": "Безкоштовні моделі від OpenCode",
"dialog.model.unpaid.addMore.title": "Додати більше моделей від популярних провайдерів",
"dialog.model.unpaid.viewMoreProviders": "Переглянути ще понад 70 провайдерів",
"dialog.provider.viewAll": "Показати більше провайдерів",
@@ -170,7 +168,7 @@ export const dict = {
"provider.custom.field.providerID.placeholder": "myprovider",
"provider.custom.field.providerID.description": "Малі літери, цифри, дефіси або підкреслення",
"provider.custom.field.name.label": "Відображувана назва",
"provider.custom.field.name.placeholder": "Мій провайдер ШІ",
"provider.custom.field.name.placeholder": "Мій AI Провайдер",
"provider.custom.field.baseURL.label": "Базовий URL",
"provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1",
"provider.custom.field.apiKey.label": "Ключ API",
@@ -191,7 +189,7 @@ export const dict = {
"provider.custom.headers.value.placeholder": "значення",
"provider.custom.headers.remove": "Видалити заголовок",
"provider.custom.headers.add": "Додати заголовок",
"provider.custom.error.providerID.required": "ID провайдера обов'язковий",
"provider.custom.error.providerID.required": "ID провайдера обов'язкове",
"provider.custom.error.providerID.format": "Використовуйте малі літери, цифри, дефіси або підкреслення",
"provider.custom.error.providerID.exists": "ID провайдера вже існує",
"provider.custom.error.name.required": "Відображувана назва обов'язкова",
@@ -301,7 +299,6 @@ export const dict = {
"prompt.action.stop": "Зупинити",
"prompt.toast.pasteUnsupported.title": "Непідтримуване вкладення",
"prompt.toast.attachmentDuplicate.title": "Цей файл уже завантажено",
"prompt.toast.pasteUnsupported.description": "Сюди можна прикріплювати лише зображення, PDF або текстові файли.",
"prompt.toast.modelAgentRequired.title": "Виберіть агента та модель",
"prompt.toast.modelAgentRequired.description": "Виберіть агента та модель перед надсиланням запиту.",
@@ -316,7 +313,7 @@ export const dict = {
"dialog.mcp.description": "{{enabled}} з {{total}} увімкнено",
"dialog.mcp.empty": "MCP не налаштовано",
"dialog.lsp.empty": "Сервери LSP автоматично виявляються за типами файлів",
"dialog.lsp.empty": "LSP автоматично виявлені за типами файлів",
"dialog.plugins.empty": "Плагіни налаштовані в opencode.json",
"mcp.status.connected": "підключено",
@@ -335,8 +332,8 @@ export const dict = {
"dialog.directory.parent": "Батьківська папка",
"dialog.directory.readError": "Не вдалося прочитати цю папку",
"app.server.unreachable": "Не вдалося зв'язатися із {{server}}",
"app.server.retrying": "Автоматична повторна спроба...",
"app.server.unreachable": "Не вдалося досягти {{server}}",
"app.server.retrying": "Автоматичне повторення...",
"app.server.otherServers": "Інші сервери",
"dialog.server.title": "Сервери",
@@ -366,7 +363,7 @@ export const dict = {
"dialog.server.menu.edit": "Редагувати",
"dialog.server.menu.default": "Встановити за замовчуванням",
"dialog.server.menu.defaultRemove": "Скасувати використання за замовчуванням",
"dialog.server.menu.defaultRemove": "Видалити за замовчуванням",
"dialog.server.menu.delete": "Видалити",
"dialog.server.current": "Поточний сервер",
"dialog.server.status.default": "За замовчуванням",
@@ -468,7 +465,7 @@ export const dict = {
"context.breakdown.other": "Інше",
"context.systemPrompt.title": "Системний запит",
"context.rawMessages.title": "Необроблені повідомлення",
"context.rawMessages.title": "Сировинні повідомлення",
"context.stats.session": "Сесія",
"context.stats.messages": "Повідомлення",
@@ -562,14 +559,14 @@ export const dict = {
"error.page.details.label": "Деталі помилки",
"error.page.action.restart": "Перезапустити",
"error.page.action.report": "Повідомити про помилку",
"error.page.action.reported": ро помилку повідомлено",
"error.page.action.reported": "Помилку повідомлено",
"error.page.action.exportLogs": "Експортувати журнали",
"error.page.action.checking": "Перевірка...",
"error.page.action.checkUpdates": "Перевірити оновлення",
"error.page.action.updateTo": "Оновити до {{version}}",
"error.page.circular": "[Циклічне]",
"error.page.report.prefix": "Будь ласка, повідомте про цю помилку команді OpenCode",
"error.page.report.discord": "у Discord",
"error.page.report.discord": "на Discord",
"error.page.version": "Версія: {{version}}",
"error.dev.rootNotFound":
@@ -589,7 +586,7 @@ export const dict = {
"error.chain.causedBy": "Причина:",
"error.chain.apiError": "Помилка API",
"error.chain.status": "Статус: {{status}}",
"error.chain.retryable": "Можна повторити: {{retryable}}",
"error.chain.retryable": "Повторювано: {{retryable}}",
"error.chain.responseBody": "Тіло відповіді:\n{{body}}",
"error.chain.didYouMean": "Можливо, ви мали на увазі: {{suggestions}}",
"error.chain.modelNotFound": "Модель не знайдено: {{provider}}/{{model}}",
@@ -665,7 +662,7 @@ export const dict = {
"session.files.selectToOpen": "Виберіть файл для відкриття",
"session.files.all": "Усі файли",
"session.files.empty": "Немає файлів",
"session.files.binaryContent": "Двійковий файл (вміст неможливо відобразити)",
"session.files.binaryContent": "Бінарний файл (вміст не може бути відображено)",
"session.messages.renderEarlier": "Відобразити раніші повідомлення",
"session.messages.loadingEarlier": "Завантаження раніших повідомлень...",
@@ -682,20 +679,14 @@ export const dict = {
"session.question.minimize": "Згорнути запитання",
"session.question.restore": "Відновити запитання",
"session.question.pending.one": "{{count}} запитання очікує відповіді",
"session.question.pending.few": "{{count}} запитання очікують відповіді",
"session.question.pending.many": "{{count}} запитань очікують відповіді",
"session.question.pending.other": "Запитання, що очікують відповіді: {{count}}",
"session.followupDock.summary.one": "{{count}} повідомлення в черзі",
"session.followupDock.summary.few": "{{count}} повідомлення в черзі",
"session.followupDock.summary.many": "{{count}} повідомлень у черзі",
"session.followupDock.summary.other": "{{count}} повідомлень у черзі",
"session.followupDock.sendNow": "Надіслати зараз",
"session.followupDock.edit": "Редагувати",
"session.followupDock.collapse": "Згорнути повідомлення в черзі",
"session.followupDock.expand": "Розгорнути повідомлення в черзі",
"session.revertDock.summary.one": "{{count}} скасоване повідомлення",
"session.revertDock.summary.few": "{{count}} скасовані повідомлення",
"session.revertDock.summary.many": "{{count}} скасованих повідомлень",
"session.revertDock.summary.other": "{{count}} скасованих повідомлень",
"session.revertDock.collapse": "Згорнути скасовані повідомлення",
"session.revertDock.expand": "Розгорнути скасовані повідомлення",
@@ -723,10 +714,7 @@ export const dict = {
"session.header.open.menu": "Параметри відкриття",
"session.header.open.copyPath": "Копіювати шлях",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "Файловий провідник",
"session.header.reveal.finder": "Показати у Finder",
"session.header.reveal.fileExplorer": "Показати у Файловому провіднику",
"session.header.reveal.containingFolder": "Відкрити папку розташування",
"session.header.open.fileExplorer": "Провідник файлів",
"session.header.open.fileManager": "Файловий менеджер",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
@@ -781,7 +769,7 @@ export const dict = {
"common.dismiss": "Відхилити",
"common.moreCountSuffix": " (ще {{count}})",
"common.requestFailed": "Запит не виконано",
"common.moreOptions": "Більше параметрів",
"common.moreOptions": "Більше опцій",
"common.learnMore": "Дізнатися більше",
"common.rename": "Перейменувати",
"common.reset": "Скинути",
@@ -854,10 +842,10 @@ export const dict = {
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "Десктопний застосунок",
"settings.section.desktop": "Робочий стіл",
"settings.section.server": "Сервер",
"settings.tab.general": "Загальні",
"settings.tab.shortcuts": "Клавіатурні скорочення",
"settings.tab.shortcuts": "Скорочення",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "Інтеграція WSL",
"settings.desktop.wsl.description": "Запускати сервер OpenCode всередині WSL на Windows.",
@@ -875,7 +863,7 @@ export const dict = {
"settings.general.row.shell.title": "Командна оболонка термінала",
"settings.general.row.shell.description":
"Виберіть оболонку для термінала. Сумісні оболонки також використовуються для викликів інструментів агента.",
"settings.general.row.shell.autoDefault": "Автоматично (за замовчуванням)",
"settings.general.row.shell.autoDefault": "Авто (за замовчуванням)",
"settings.general.row.shell.terminalOnly": "тільки термінал",
"settings.general.row.appearance.title": "Зовнішній вигляд",
"settings.general.row.appearance.description": "Налаштуйте вигляд OpenCode на вашому пристрої",
@@ -896,21 +884,18 @@ export const dict = {
"settings.general.row.showFileTree.title": "Дерево файлів",
"settings.general.row.showFileTree.description": "Показувати панель дерева файлів у сесіях",
"settings.general.row.showNavigation.title": "Елементи навігації",
"settings.general.row.showNavigation.description":
"Показувати кнопки назад і вперед на панелі заголовка десктопного застосунку",
"settings.general.row.showNavigation.description": "Показувати кнопки назад і вперед у заголовку робочого столу",
"settings.general.row.showSearch.title": "Палітра команд",
"settings.general.row.showSearch.description": "Показувати кнопку пошуку та палітри команд на панелі заголовка",
"settings.general.row.showSearch.description": "Показувати кнопку пошуку та палітри команд у заголовку",
"settings.general.row.showTerminal.title": "Термінал",
"settings.general.row.showTerminal.description":
"Показувати кнопку термінала на панелі заголовка десктопного застосунку",
"settings.general.row.showTerminal.description": "Показувати кнопку термінала в заголовку робочого столу",
"settings.general.row.showStatus.title": "Статус сервера",
"settings.general.row.showStatus.description": "Показувати кнопку стану сервера на панелі заголовка",
"settings.general.row.showStatus.description": "Показувати кнопку статусу сервера в заголовку",
"settings.general.row.mobileTitlebarBottom.title": "Нижня навігація",
"settings.general.row.mobileTitlebarBottom.description":
"Розмістити панель заголовка та вкладки сесії внизу екрана на мобільних пристроях",
"settings.general.row.showCustomAgents.title": "Показувати агента",
"settings.general.row.showCustomAgents.description":
"Перемикатися між агентами в редакторі запиту. Якщо приховано, типовим є агент Build.",
"Розмістити заголовок і вкладки сесії внизу екрана на мобільних пристроях",
"settings.general.row.showCustomAgents.title": "Користувацькі агенти",
"settings.general.row.showCustomAgents.description": "Показувати вибір агента в редакторі запиту",
"settings.general.row.reasoningSummaries.title": "Показувати підсумки мислення",
"settings.general.row.reasoningSummaries.description": "Відображати підсумки мислення моделі на часовій шкалі",
"settings.general.row.shellToolPartsExpanded.title": "Розгортати частини інструменту оболонки",
@@ -1010,16 +995,16 @@ export const dict = {
"settings.general.sounds.errors.title": "Помилки",
"settings.general.sounds.errors.description": "Відтворювати звук, коли виникає помилка",
"settings.shortcuts.title": "Клавіатурні скорочення",
"settings.shortcuts.reset.button": "Відновити стандартні",
"settings.shortcuts.reset.toast.title": "Клавіатурні скорочення відновлено",
"settings.shortcuts.reset.toast.description": "Стандартні клавіатурні скорочення відновлено.",
"settings.shortcuts.conflict.title": "Клавіатурне скорочення вже використовується",
"settings.shortcuts.title": "Скорочення клавіш",
"settings.shortcuts.reset.button": "Скинути до стандартних",
"settings.shortcuts.reset.toast.title": "Скорочення скинуто",
"settings.shortcuts.reset.toast.description": "Скорочення клавіш були скинуті до стандартних.",
"settings.shortcuts.conflict.title": "Скорочення вже використовується",
"settings.shortcuts.conflict.description": "{{keybind}} вже призначено для {{titles}}.",
"settings.shortcuts.unassigned": "Не призначено",
"settings.shortcuts.pressKeys": "Натисніть клавіші",
"settings.shortcuts.search.placeholder": "Пошук клавіатурних скорочень",
"settings.shortcuts.search.empty": "Клавіатурних скорочень не знайдено",
"settings.shortcuts.search.placeholder": "Пошук скорочень",
"settings.shortcuts.search.empty": "Скорочень не знайдено",
"settings.shortcuts.group.general": "Загальні",
"settings.shortcuts.group.session": "Сесія",
-1019
View File
@@ -1,1019 +0,0 @@
export const dict = {
"command.category.suggested": "تجویز کردہ",
"command.category.view": "دیکھیں",
"command.category.project": "پروجیکٹ",
"command.category.provider": "فراہم کنندہ",
"command.category.server": "سرور",
"command.category.session": "سیشن",
"command.category.theme": "تھیم",
"command.category.language": "زبان",
"command.category.file": "فائل",
"command.category.context": "سیاق و سباق",
"command.category.terminal": "ٹرمینل",
"command.category.model": "ماڈل",
"command.category.mcp": "MCP",
"command.category.agent": "ایجنٹ",
"command.category.permissions": "اجازتیں",
"command.category.workspace": "کام کی جگہ",
"command.category.settings": "ترتیبات",
"theme.scheme.system": "سسٹم",
"theme.scheme.light": "روشن",
"theme.scheme.dark": "تاریک",
"command.sidebar.toggle": "سائیڈ بار دکھائیں یا چھپائیں",
"command.project.open": "پروجیکٹ کھولیں۔",
"command.project.previous": "پچھلا پروجیکٹ",
"command.project.next": "اگلا پروجیکٹ",
"command.project.index": "پروجیکٹ {{index}} پر سوئچ کریں۔",
"command.provider.connect": "فراہم کنندہ منسلک کریں",
"command.server.switch": "سرور تبدیل کریں",
"command.settings.open": "ترتیبات کھولیں۔",
"command.session.previous": "پچھلا سیشن",
"command.session.next": "اگلا سیشن",
"command.session.previous.unseen": "پچھلا بغیر پڑھا ہوا سیشن",
"command.session.next.unseen": "اگلا بغیر پڑھا ہوا سیشن",
"command.session.archive": "سیشن آرکائیو کریں",
"command.palette": "کمانڈ پیلیٹ",
"command.theme.cycle": "اگلی تھیم منتخب کریں",
"command.theme.set": "تھیم استعمال کریں: {{theme}}",
"command.theme.scheme.cycle": "اگلی رنگ سکیم منتخب کریں",
"command.theme.scheme.set": "رنگ سکیم استعمال کریں: {{scheme}}",
"command.language.cycle": "اگلی زبان منتخب کریں",
"command.language.set": "زبان استعمال کریں: {{language}}",
"command.session.new": "نیا سیشن",
"command.file.open": "فائل کھولیں۔",
"command.tab.close": "ٹیب بند کریں۔",
"command.tab.reopenClosed": "بند ٹیب کو دوبارہ کھولیں۔",
"command.context.addSelection": "سیاق و سباق میں انتخاب شامل کریں۔",
"command.context.addSelection.description": "موجودہ فائل سے منتخب لائنیں شامل کریں۔",
"command.input.focus": "ان پٹ پر توجہ دیں",
"command.terminal.toggle": "ٹرمینل دکھائیں یا چھپائیں",
"command.fileTree.toggle": "فائل ٹری دکھائیں یا چھپائیں",
"command.review.toggle": "جائزہ دکھائیں یا چھپائیں",
"command.terminal.new": "نیا ٹرمینل",
"command.terminal.new.description": "ایک نیا ٹرمینل ٹیب بنائیں",
"command.steps.toggle": "اقدامات دکھائیں یا چھپائیں",
"command.steps.toggle.description": "موجودہ پیغام کے لیے اقدامات دکھائیں یا چھپائیں۔",
"command.message.previous": "پچھلا پیغام",
"command.message.previous.description": "صارف کے پچھلے پیغام پر جائیں",
"command.message.next": "اگلا پیغام",
"command.message.next.description": "صارف کے اگلے پیغام پر جائیں",
"command.model.choose": "ماڈل منتخب کریں۔",
"command.model.choose.description": "ایک مختلف ماڈل منتخب کریں۔",
"command.mcp.toggle": "MCPs فعال یا غیر فعال کریں",
"command.mcp.toggle.description": "MCPs فعال یا غیر فعال کریں",
"command.agent.cycle": "اگلا ایجنٹ منتخب کریں",
"command.agent.cycle.description": "اگلے ایجنٹ پر جائیں۔",
"command.agent.cycle.reverse": "پچھلا ایجنٹ منتخب کریں",
"command.agent.cycle.reverse.description": "پچھلے ایجنٹ پر جائیں۔",
"command.model.variant.cycle": "سوچنے کی محنت کی سطح تبدیل کریں",
"command.model.variant.cycle.description": "محنت کی اگلی سطح پر جائیں۔",
"command.prompt.mode.shell": "شیل",
"command.prompt.mode.normal": "پرامپٹ",
"command.permissions.autoaccept.enable": "اجازتیں خود بخود قبول کریں۔",
"command.permissions.autoaccept.disable": "اجازتوں کو خودکار طور پر قبول کرنا بند کریں۔",
"command.workspace.toggle": "ورک اسپیسز فعال یا غیر فعال کریں",
"command.workspace.toggle.description": "سائڈبار میں متعدد ورک اسپیس کو فعال یا غیر فعال کریں۔",
"command.session.undo": "کالعدم",
"command.session.undo.description": "آخری پیغام کو کالعدم کریں۔",
"command.session.redo": "دوبارہ کریں۔",
"command.session.redo.description": "آخری کالعدم پیغام کو دوبارہ کریں۔",
"command.session.compact": "سیشن مختصر کریں",
"command.session.compact.description": "سیاق و سباق کے سائز کو کم کرنے کے لیے سیشن کا خلاصہ کریں۔",
"command.session.fork": "پیغام سے نئی شاخ بنائیں",
"command.session.fork.description": "پچھلے پیغام سے ایک نیا سیشن بنائیں",
"command.session.share": "سیشن شیئر کریں۔",
"command.session.share.description": "اس سیشن کا اشتراک کریں اور URL کو کلپ بورڈ میں کاپی کریں۔",
"command.session.unshare": "سیشن کا اشتراک ختم کریں۔",
"command.session.unshare.description": "اس سیشن کا اشتراک کرنا بند کریں۔",
"palette.search.placeholder": "فائلیں، کمانڈز اور سیشنز تلاش کریں۔",
"palette.search.placeholder.home": "کمانڈز اور سیشن تلاش کریں۔",
"palette.empty": "کوئی نتیجہ نہیں ملا",
"palette.group.commands": "کمانڈز",
"palette.group.files": "فائلیں",
"dialog.provider.search.placeholder": "فراہم کنندگان کو تلاش کریں۔",
"dialog.provider.empty": "کوئی فراہم کنندہ نہیں ملا",
"dialog.provider.group.popular": "مقبول",
"dialog.provider.group.other": "دیگر",
"dialog.provider.custom.label": "حسب ضرورت OpenAI سے ہم آہنگ فراہم کنندہ",
"dialog.provider.tag.recommended": "تجویز کردہ",
"dialog.provider.opencode.note": "کیوریٹ شدہ ماڈلز بشمول Claude، GPT، Gemini اور مزید",
"dialog.provider.opencode.tagline": "قابل اعتماد آپٹمائزڈ ماڈلز",
"dialog.provider.opencodeGo.tagline": "سب کے لیے کم لاگت کی رکنیت",
"dialog.provider.anthropic.note": "پرو اور میکس سمیت Claude ماڈلز تک براہ راست رسائی",
"dialog.provider.copilot.note": "GitHub Copilot کے ذریعے کوڈنگ امداد کے لیے AI ماڈلز",
"dialog.provider.openai.note": "تیز رفتار اور مؤثر عمومی AI کاموں کے لیے GPT ماڈلز",
"dialog.provider.google.note": "تیز، منظم جوابات کے لیے Gemini ماڈل",
"dialog.provider.openrouter.note": "ایک فراہم کنندہ سے تمام تعاون یافتہ ماڈلز تک رسائی حاصل کریں۔",
"dialog.provider.vercel.note": "سمارٹ روٹنگ کے ساتھ AI ماڈلز تک متحد رسائی",
"dialog.model.select.title": "ماڈل منتخب کریں۔",
"dialog.model.search.placeholder": "ماڈلز تلاش کریں۔",
"dialog.model.empty": "کوئی ماڈل نہیں ملا",
"dialog.model.manage": "ماڈلز کا نظم کریں۔",
"dialog.model.manage.description": "اپنی مرضی کے مطابق بنائیں کہ کون سے ماڈل ماڈل سلیکٹر میں نظر آتے ہیں۔",
"dialog.model.manage.provider.toggle": "تمام {{provider}} ماڈلز کو ٹوگل کریں۔",
"dialog.model.unpaid.freeModels.title": "OpenCode کے ذریعہ فراہم کردہ مفت ماڈلز",
"dialog.model.unpaid.addMore.title": "مشہور فراہم کنندگان سے مزید ماڈلز شامل کریں۔",
"dialog.model.unpaid.viewMoreProviders": "مزید 70 فراہم کنندگان دیکھیں",
"dialog.provider.viewAll": "مزید فراہم کنندگان دکھائیں۔",
"provider.connect.title": "{{provider}} سے منسلک ہوں",
"provider.connect.title.anthropicProMax": "Claude Pro/Max کے ساتھ لاگ ان کریں۔",
"provider.connect.selectMethod": "{{provider}} کے لیے لاگ ان کا طریقہ منتخب کریں۔",
"provider.connect.method.apiKey": "API کلید",
"provider.connect.status.inProgress": "اجازت حاصل کی جا رہی ہے...",
"provider.connect.status.waiting": "اجازت کا انتظار ہے...",
"provider.connect.status.failed": "اجازت حاصل نہیں ہو سکی: {{error}}",
"provider.connect.apiKey.description":
"اپنا اکاؤنٹ منسلک کرنے اور OpenCode میں {{provider}} ماڈلز استعمال کرنے کے لیے اپنی {{provider}} API کلید درج کریں۔",
"provider.connect.apiKey.label": "{{provider}} API کلید",
"provider.connect.apiKey.placeholder": "API کلید",
"provider.connect.apiKey.required": "API کلید درکار ہے۔",
"provider.connect.opencodeZen.line1":
"OpenCode Zen آپ کو کوڈنگ ایجنٹوں کے لیے قابل اعتماد اصلاح شدہ ماڈلز کے کیوریٹڈ سیٹ تک رسائی فراہم کرتا ہے۔",
"provider.connect.opencodeZen.line2":
"ایک واحد API کلید کے ساتھ آپ Claude، GPT، Gemini، GLM اور مزید ماڈلز تک رسائی حاصل کریں گے۔",
"provider.connect.opencodeZen.visit.prefix": "ملاحظہ کریں ",
"provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
"provider.connect.opencodeZen.visit.suffix": " اور اپنی API کلید حاصل کریں۔",
"provider.connect.oauth.code.visit.prefix": "ملاحظہ کریں ",
"provider.connect.oauth.code.visit.link": "یہ لنک",
"provider.connect.oauth.code.visit.suffix":
"، اپنا اجازت نامہ حاصل کریں، اکاؤنٹ منسلک کریں اور OpenCode میں {{provider}} ماڈلز استعمال کریں۔",
"provider.connect.oauth.code.label": "{{method}} اجازت کا کوڈ",
"provider.connect.oauth.code.placeholder": "اجازت کا کوڈ",
"provider.connect.oauth.code.required": "اجازت کا کوڈ درکار ہے۔",
"provider.connect.oauth.code.invalid": "غلط اجازت کا کوڈ",
"provider.connect.oauth.auto.visit.prefix": "ملاحظہ کریں ",
"provider.connect.oauth.auto.visit.link": "یہ لنک",
"provider.connect.oauth.auto.visit.suffix":
" اور نیچے دیا گیا کوڈ درج کرکے اپنا اکاؤنٹ منسلک کریں اور OpenCode میں {{provider}} ماڈلز استعمال کریں۔",
"provider.connect.oauth.auto.confirmationCode": "تصدیقی کوڈ",
"provider.connect.toast.connected.title": "{{provider}} منسلک ہے۔",
"provider.connect.toast.connected.description": "{{provider}} ماڈل اب استعمال کے لیے دستیاب ہیں۔",
"provider.custom.title": "اپنی مرضی کے مطابق فراہم کنندہ",
"provider.custom.description.prefix": "OpenAI سے ہم آہنگ فراہم کنندہ ترتیب دیں۔ دیکھیے ",
"provider.custom.description.link": "فراہم کنندہ کی تشکیل کی دستاویزات",
"provider.custom.description.suffix": ".",
"provider.custom.field.providerID.label": "فراہم کنندہ کی شناخت",
"provider.custom.field.providerID.placeholder": "myprovider",
"provider.custom.field.providerID.description": "چھوٹے حروف، نمبر، ہائفن، یا انڈر سکور",
"provider.custom.field.name.label": "ڈسپلے کا نام",
"provider.custom.field.name.placeholder": "میرا AI فراہم کنندہ",
"provider.custom.field.baseURL.label": "بیس URL",
"provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1",
"provider.custom.field.apiKey.label": "API کلید",
"provider.custom.field.apiKey.placeholder": "API کلید",
"provider.custom.field.apiKey.description":
"اختیاری۔ اگر آپ ہیڈرز کے ذریعے توثیق کا انتظام کرتے ہیں تو اسے خالی چھوڑ دیں۔",
"provider.custom.models.label": "ماڈلز",
"provider.custom.models.id.label": "ID",
"provider.custom.models.id.placeholder": "model-id",
"provider.custom.models.name.label": "نام",
"provider.custom.models.name.placeholder": "ڈسپلے کا نام",
"provider.custom.models.remove": "ماڈل کو ہٹا دیں۔",
"provider.custom.models.add": "ماڈل شامل کریں۔",
"provider.custom.headers.label": "ہیڈرز (اختیاری)",
"provider.custom.headers.key.label": "ہیڈر",
"provider.custom.headers.key.placeholder": "Header-Name",
"provider.custom.headers.value.label": "قدر",
"provider.custom.headers.value.placeholder": "قدر",
"provider.custom.headers.remove": "ہیڈر کو ہٹا دیں۔",
"provider.custom.headers.add": "ہیڈر شامل کریں۔",
"provider.custom.error.providerID.required": "فراہم کنندہ کی شناخت درکار ہے۔",
"provider.custom.error.providerID.format": "چھوٹے حروف، اعداد، ہائفنز، یا انڈر سکور استعمال کریں۔",
"provider.custom.error.providerID.exists": "وہ فراہم کنندہ ID پہلے سے موجود ہے۔",
"provider.custom.error.name.required": "ڈسپلے نام درکار ہے۔",
"provider.custom.error.baseURL.required": "بیس URL درکار ہے۔",
"provider.custom.error.baseURL.format": "http:// یا https:// سے شروع ہونا چاہیے",
"provider.custom.error.required": "درکار ہے۔",
"provider.custom.error.duplicate": "مکرر",
"provider.disconnect.toast.disconnected.title": "{{provider}} منقطع ہو گیا۔",
"provider.disconnect.toast.disconnected.description": "{{provider}} ماڈلز اب دستیاب نہیں ہیں۔",
"model.tag.free": "مفت",
"model.tag.latest": "تازہ ترین",
"model.provider.anthropic": "Anthropic",
"model.provider.openai": "OpenAI",
"model.provider.google": "Google",
"model.provider.xai": "xAI",
"model.provider.meta": "Meta",
"model.input.text": "متن",
"model.input.image": "تصویر",
"model.input.audio": "آڈیو",
"model.input.video": "ویڈیو",
"model.input.pdf": "پی ڈی ایف",
"model.tooltip.allows": "اجازت دیتا ہے: {{inputs}}",
"model.tooltip.context.label": "سیاق و سباق",
"model.tooltip.inputs": "ان پٹ",
"model.tooltip.model": "ماڈل",
"model.tooltip.provider": "فراہم کنندہ",
"model.tooltip.reasoning": "استدلال",
"model.tooltip.reasoning.allowed": "استدلال کی اجازت دیتا ہے۔",
"model.tooltip.reasoning.none": "کوئی استدلال نہیں۔",
"model.tooltip.context": "سیاق و سباق کی حد {{limit}}",
"common.search.placeholder": "تلاش کریں۔",
"common.goBack": "پیچھے جائیں",
"common.goForward": "آگے جائیں",
"common.loading": "لوڈ ہو رہا ہے۔",
"common.loading.ellipsis": "...",
"common.cancel": "منسوخ کریں۔",
"common.clear": "صاف",
"common.open": "کھولیں۔",
"common.connect": "جڑیں۔",
"common.disconnect": "منقطع کریں",
"common.continue": "جاری رکھیں",
"common.submit": "جمع کروائیں۔",
"common.save": "محفوظ کریں۔",
"common.saving": "محفوظ کر رہا ہے...",
"common.default": "طے شدہ",
"common.attachment": "منسلکہ",
"prompt.placeholder.shell": "شیل کمانڈ درج کریں... {{example}}",
"prompt.placeholder.normal": 'کچھ بھی پوچھیں... "{{example}}"',
"prompt.placeholder.simple": "کچھ بھی پوچھیں...",
"prompt.placeholder.summarizeComments": "تبصروں کا خلاصہ کریں…",
"prompt.placeholder.summarizeComment": "تبصرہ کا خلاصہ کریں…",
"prompt.mode.shell": "شیل",
"prompt.mode.normal": "پرامپٹ",
"prompt.mode.shell.exit": "باہر نکلنے کے لیے esc",
"session.child.promptDisabled": "ذیلی ایجنٹ کے سیشنز میں پرامپٹ نہیں دیا جا سکتا۔",
"session.child.backToParent": "مرکزی سیشن پر واپس جائیں۔",
"prompt.example.1": "کوڈ بیس میں TODO کو درست کریں۔",
"prompt.example.2": "اس پروجیکٹ کا ٹیک اسٹیک کیا ہے؟",
"prompt.example.3": "ٹوٹے ہوئے ٹیسٹوں کو درست کریں۔",
"prompt.example.4": "وضاحت کریں کہ تصدیق کیسے کام کرتی ہے۔",
"prompt.example.5": "سیکیورٹی کی کمزوریوں کو تلاش کریں اور ٹھیک کریں۔",
"prompt.example.6": "صارف کی خدمت کے لیے یونٹ ٹیسٹ شامل کریں۔",
"prompt.example.7": "مزید پڑھنے کے قابل ہونے کے لیے اس فنکشن کو ریفیکٹر کریں۔",
"prompt.example.8": "اس غلطی کا کیا مطلب ہے؟",
"prompt.example.9": "اس مسئلے کو ٹھیک کرنے میں میری مدد کریں۔",
"prompt.example.10": "API دستاویزات بنائیں",
"prompt.example.11": "ڈیٹا بیس کے سوالات کو بہتر بنائیں",
"prompt.example.12": "ان پٹ کی توثیق شامل کریں۔",
"prompt.example.13": "اس کے لیے ایک نیا جزو بنائیں...",
"prompt.example.14": "میں اس پروجیکٹ کو کیسے تعینات کروں؟",
"prompt.example.15": "بہترین طریقوں کے لیے میرے کوڈ کا جائزہ لیں۔",
"prompt.example.16": "اس فنکشن میں ایرر ہینڈلنگ شامل کریں۔",
"prompt.example.17": "اس ریجیکس پیٹرن کی وضاحت کریں۔",
"prompt.example.18": "اسے TypeScript میں تبدیل کریں۔",
"prompt.example.19": "پورے کوڈ بیس میں لاگنگ شامل کریں۔",
"prompt.example.20": "کون سے انحصار پرانے ہیں؟",
"prompt.example.21": "مائیگریشن اسکرپٹ لکھنے میں میری مدد کریں۔",
"prompt.example.22": "اس اینڈ پوائنٹ کے لیے کیشنگ نافذ کریں۔",
"prompt.example.23": "اس فہرست میں صفحہ بندی شامل کریں۔",
"prompt.example.24": "اس کے لیے CLI کمانڈ بنائیں...",
"prompt.example.25": "ماحولیاتی متغیرات یہاں کیسے کام کرتے ہیں؟",
"prompt.popover.emptyResults": "کوئی مماثل نتائج نہیں ہیں۔",
"prompt.popover.emptyCommands": "کوئی مماثل حکم نہیں ہے۔",
"prompt.dropzone.label": "تصاویر، PDFs، یا ٹیکسٹ فائلیں یہاں ڈراپ کریں۔",
"prompt.dropzone.file.label": "فائل کو @mention کرنے کے لیے یہاں ڈراپ کریں",
"prompt.slash.badge.custom": "اپنی مرضی کے مطابق",
"prompt.slash.badge.skill": "مہارت",
"prompt.slash.badge.mcp": "ایم سی پی",
"prompt.context.active": "فعال",
"prompt.context.includeActiveFile": "فعال فائل شامل کریں۔",
"prompt.context.removeActiveFile": "سیاق و سباق سے فعال فائل کو ہٹا دیں۔",
"prompt.context.removeFile": "سیاق و سباق سے فائل کو ہٹا دیں۔",
"prompt.action.attachFile": "فائلیں شامل کریں۔",
"prompt.menu.addImagesAndFiles": "فائلیں اور مزید شامل کریں۔",
"prompt.menu.imagesAndFiles": "تصاویر اور فائلیں۔",
"prompt.menu.commands": "کمانڈز",
"prompt.menu.context": "سیاق و سباق",
"prompt.menu.shellCommand": "شیل کمانڈ",
"prompt.attachment.remove": "منسلکہ کو ہٹا دیں۔",
"prompt.action.send": "بھیجیں۔",
"prompt.action.stop": "روکیں",
"prompt.toast.pasteUnsupported.title": "غیر تعاون یافتہ منسلکہ",
"prompt.toast.pasteUnsupported.description": "یہاں صرف تصاویر، PDFs، یا ٹیکسٹ فائلیں منسلک کی جا سکتی ہیں۔",
"prompt.toast.attachmentDuplicate.title": "یہ فائل پہلے ہی اپ لوڈ ہو چکی ہے",
"prompt.toast.modelAgentRequired.title": "ایک ایجنٹ اور ماڈل منتخب کریں۔",
"prompt.toast.modelAgentRequired.description": "پرامپٹ بھیجنے سے پہلے ایک ایجنٹ اور ماڈل کا انتخاب کریں۔",
"prompt.toast.worktreeCreateFailed.title": "ورک ٹری بنانے میں ناکام",
"prompt.toast.sessionCreateFailed.title": "سیشن بنانے میں ناکام",
"prompt.toast.shellSendFailed.title": "شیل کمانڈ بھیجنے میں ناکام",
"prompt.toast.commandSendFailed.title": "کمانڈ بھیجنے میں ناکام",
"prompt.toast.promptSendFailed.title": "پرامپٹ بھیجنے میں ناکام",
"prompt.toast.promptSendFailed.description": "سیشن بازیافت کرنے سے قاصر",
"dialog.mcp.title": "MCPs",
"dialog.mcp.description": "{{total}} میں سے {{enabled}} فعال",
"dialog.mcp.empty": "کوئی MCPs کنفیگر نہیں ہے۔",
"dialog.lsp.empty": "فائل کی اقسام سے خودکار طور پر شناخت کیے گئے LSPs",
"dialog.plugins.empty": "opencode.json میں کنفیگر کردہ پلگ انز",
"mcp.status.connected": "منسلک",
"mcp.status.failed": "ناکام",
"mcp.status.needs_auth": "توثیق درکار ہے",
"mcp.status.disabled": "غیر فعال",
"mcp.auth.clickToAuthenticate": "تصدیق کرنے کے لیے کلک کریں۔",
"dialog.fork.empty": "کوئی پیغامات نہیں ہیں جن سے فورک کیا جائے۔",
"dialog.directory.search.placeholder": "فولڈرز تلاش کریں۔",
"dialog.directory.empty": "کوئی فولڈر نہیں ملا",
"dialog.directory.action.selectFile": "فائل منتخب کریں۔",
"dialog.directory.action.selectFolder": "فولڈر منتخب کریں۔",
"dialog.directory.root": "بنیادی فولڈر",
"dialog.directory.parent": "بالائی فولڈر",
"dialog.directory.readError": "یہ فولڈر پڑھا نہیں جا سکا",
"app.server.unreachable": "{{server}} تک نہیں پہنچ سکا",
"app.server.retrying": "خودکار طور پر دوبارہ کوشش کر رہا ہے...",
"app.server.otherServers": "دوسرے سرورز",
"dialog.server.title": "سرورز",
"dialog.server.description": "سوئچ کریں کہ یہ ایپ کس OpenCode سرور سے منسلک ہے۔",
"dialog.server.search.placeholder": "سرورز تلاش کریں۔",
"dialog.server.empty": "ابھی تک کوئی سرور نہیں ہے۔",
"dialog.server.add.title": "سرور شامل کریں۔",
"dialog.server.add.url": "سرور کا پتہ",
"dialog.server.add.placeholder": "http://localhost:4096",
"dialog.server.add.error": "سرور سے منسلک نہیں ہو سکا",
"dialog.server.add.checking": "چیک کر رہا ہے...",
"dialog.server.add.button": "سرور شامل کریں۔",
"dialog.server.add.name": "سرور کا نام (اختیاری)",
"dialog.server.add.namePlaceholder": "Localhost",
"dialog.server.add.username": "صارف نام (اختیاری)",
"dialog.server.add.usernamePlaceholder": "صارف نام",
"dialog.server.add.password": "پاس ورڈ (اختیاری)",
"dialog.server.add.passwordPlaceholder": "پاس ورڈ",
"dialog.server.edit.title": "سرور میں ترمیم کریں۔",
"dialog.server.default.title": "ڈیفالٹ سرور",
"dialog.server.default.description":
"مقامی سرور شروع کرنے کے بجائے ایپ لانچ پر اس سرور سے جڑیں۔ دوبارہ شروع کرنے کی ضرورت ہے۔",
"dialog.server.default.none": "کوئی سرور منتخب نہیں کیا گیا۔",
"dialog.server.default.set": "موجودہ سرور کو بطور ڈیفالٹ سیٹ کریں۔",
"dialog.server.default.clear": "صاف کریں",
"dialog.server.action.remove": "سرور کو ہٹا دیں۔",
"dialog.server.menu.edit": "ترمیم کریں۔",
"dialog.server.menu.default": "بطور ڈیفالٹ سیٹ کریں۔",
"dialog.server.menu.defaultRemove": "ڈیفالٹ کو ہٹا دیں۔",
"dialog.server.menu.delete": "حذف کریں۔",
"dialog.server.current": "موجودہ سرور",
"dialog.server.status.default": "طے شدہ",
"wsl.server.add": "WSL سرور شامل کریں۔",
"wsl.server.addShort": "WSL شامل کریں۔",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "WSL سرور",
"wsl.server.retryStart": "دوبارہ شروع کرنے کی کوشش کریں۔",
"wsl.server.updating": "اپ ڈیٹ ہو رہا ہے...",
"wsl.onboarding.step.distro": "ڈسٹرو کا انتخاب کریں۔",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "WSL چیک کیا جا رہا ہے...",
"wsl.onboarding.restartRequired": "Windows کو WSL انسٹال کرنا مکمل کرنے کے لیے دوبارہ شروع کرنے کی ضرورت ہے۔",
"wsl.onboarding.ready": "WSL تیار ہے۔",
"wsl.onboarding.required": "جاری رکھنے کے لیے WSL درکار ہے۔",
"wsl.onboarding.checkingDistros": "ڈسٹری بیوشنز کی جانچ ہو رہی ہے...",
"wsl.onboarding.installingDistro": "{{distro}} انسٹال ہو رہا ہے...",
"wsl.onboarding.checkingDistro": "{{distro}} چیک کیا جا رہا ہے...",
"wsl.onboarding.listingDistros": "ڈسٹری بیوشنز کی فہرست بن رہی ہے...",
"wsl.onboarding.distroReady": "{{distro}} تیار ہے۔",
"wsl.onboarding.distroNotInstalled": "{{distro}} ابھی تک انسٹال نہیں ہوا ہے۔",
"wsl.onboarding.openDistroOnce": "سیٹ اپ مکمل کرنے کے لیے ایک بار {{distro}} کھولیں۔",
"wsl.onboarding.finishingDistro": "{{distro}} کے لیے سیٹ اپ مکمل ہو رہا ہے۔",
"wsl.onboarding.pickDistro": "ایک ڈسٹرو چنیں یا نیچے انسٹال کریں۔",
"wsl.onboarding.checkingOpencode": "OpenCode چیک کیا جا رہا ہے...",
"wsl.onboarding.checkingOpencodeIn": "{{distro}} میں OpenCode چیک کیا جا رہا ہے...",
"wsl.onboarding.updatingOpencode": "OpenCode کو اپ ڈیٹ کیا جا رہا ہے...",
"wsl.onboarding.updatingOpencodeIn": "{{distro}} میں OpenCode کو اپ ڈیٹ کیا جا رہا ہے...",
"wsl.onboarding.updateOpencodeIn": "{{distro}} میں OpenCode کو اپ ڈیٹ کریں۔",
"wsl.onboarding.updateOpencode": "OpenCode کو اپ ڈیٹ کریں۔",
"wsl.onboarding.opencodeReadyIn": "OpenCode {{distro}} میں تیار ہے۔",
"wsl.onboarding.opencodeReady": "OpenCode تیار ہے۔",
"wsl.onboarding.installOpencodeIn": "{{distro}} میں OpenCode انسٹال کریں۔",
"wsl.onboarding.installOpencode": "OpenCode انسٹال کریں۔",
"wsl.onboarding.chooseDistroFirst": "پہلے ایک ڈسٹرو کا انتخاب کریں۔",
"wsl.onboarding.loadFailed": "WSL حالت لوڈ کرنے میں ناکام۔",
"wsl.onboarding.loading": "لوڈ ہو رہا ہے...",
"wsl.onboarding.installedDistros": "انسٹال شدہ ڈسٹرو",
"wsl.onboarding.checkAgain": "دوبارہ چیک کریں۔",
"wsl.onboarding.distroStatus.ready": "تیار",
"wsl.onboarding.distroStatus.checking": "چیک کر رہا ہے...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode انسٹال نہیں ہے۔",
"wsl.onboarding.distroStatus.missingTools": "غائب bash, curl",
"wsl.onboarding.distroStatus.unsupported": "غیر تعاون یافتہ · WSL 2 استعمال کریں۔",
"wsl.onboarding.needAnotherDistro": "ایک اور ڈسٹرو کی ضرورت ہے؟",
"wsl.onboarding.needAnotherDistroHint": "WSL کیٹلاگ سے Linux ڈسٹری بیوشن انسٹال کریں۔",
"wsl.onboarding.wslNotInstalled.title": "WSL انسٹال نہیں ہے۔",
"wsl.onboarding.wslNotInstalled.description":
"WSL (Windows سب سسٹم برائے Linux) کی ضرورت ہے اس سے پہلے کہ OpenCode WSL سرور شامل کر سکے۔",
"wsl.onboarding.wslUnavailable.title": "WSL دستیاب نہیں ہے۔",
"wsl.onboarding.wslUnavailable.description": "OpenCode اس مشین پر WSL کی تصدیق نہیں کر سکا۔",
"wsl.onboarding.installWsl": "WSL انسٹال کریں۔",
"wsl.onboarding.windowsRestartRequired":
"WSL انسٹال کرنے کے لیے Windows کو دوبارہ شروع کریں، پھر OpenCode کو دوبارہ کھولیں۔",
"wsl.onboarding.next": "اگلا",
"wsl.onboarding.refresh": "ریفریش کریں۔",
"wsl.onboarding.allDistrosAdded": "تمام انسٹال شدہ ڈسٹرو پہلے ہی شامل کر دیے گئے ہیں۔",
"wsl.onboarding.noDistros": "ابھی تک کسی ڈسٹرو کا پتہ نہیں چلا۔",
"wsl.onboarding.install": "انسٹال کریں۔",
"wsl.onboarding.installing": "انسٹال ہو رہا ہے...",
"wsl.onboarding.installDistro": "ڈسٹرو انسٹال کریں۔",
"wsl.onboarding.searchDistros": "ڈسٹری بیوشنز تلاش کریں",
"wsl.onboarding.wsl2Required": "WSL 2 درکار ہے۔",
"wsl.onboarding.toolsRequired": "اس ڈسٹرو کو bash اور curl کی ضرورت ہے۔",
"wsl.onboarding.openTerminal": "ٹرمینل کھولیں۔",
"wsl.onboarding.path": "راستہ: {{path}}",
"wsl.onboarding.notFound": "نہیں ملا",
"wsl.onboarding.version": "ورژن: {{version}}",
"wsl.onboarding.unknown": "نامعلوم",
"wsl.onboarding.desktopVersion": "ڈیسک ٹاپ {{version}}",
"wsl.onboarding.versionMismatch": "انسٹال کردہ ورژن ڈیسک ٹاپ ایپ ورژن سے مماثل نہیں ہے۔",
"wsl.onboarding.adding": "شامل کیا جا رہا ہے...",
"server.row.noUsername": "کوئی صارف نام نہیں",
"dialog.project.edit.title": "پروجیکٹ میں ترمیم کریں۔",
"dialog.project.edit.name": "نام",
"dialog.project.edit.icon": "آئیکن",
"dialog.project.edit.icon.alt": "پروجیکٹ کا آئیکن",
"dialog.project.edit.icon.hint": "تصویر پر کلک کریں یا گھسیٹیں۔",
"dialog.project.edit.icon.recommended": "تجویز کردہ: 128x128px",
"dialog.project.edit.color": "رنگ",
"dialog.project.edit.color.select": "{{color}} رنگ منتخب کریں۔",
"dialog.project.edit.worktree.startup": "ورک اسپیس اسٹارٹ اپ اسکرپٹ",
"dialog.project.edit.worktree.startup.description": "ایک نئی ورک اسپیس (ورکٹری) بنانے کے بعد چلتا ہے۔",
"dialog.project.edit.worktree.startup.placeholder": "جیسے bun install",
"dialog.releaseNotes.action.getStarted": "شروع کرو",
"dialog.releaseNotes.action.next": "اگلا",
"dialog.releaseNotes.action.hideFuture": "مستقبل میں یہ نہ دکھائیں۔",
"dialog.releaseNotes.media.alt": "ریلیز کا پیش منظر",
"context.breakdown.title": "سیاق و سباق کی تفصیل",
"context.breakdown.note": 'ان پٹ ٹوکنز کی تخمینی تقسیم۔ "دیگر" میں ٹول کی تعریفیں اور اضافی بوجھ شامل ہیں۔',
"context.breakdown.system": "سسٹم",
"context.breakdown.user": "صارف",
"context.breakdown.assistant": "اسسٹنٹ",
"context.breakdown.tool": "ٹول کالز",
"context.breakdown.other": "دیگر",
"context.systemPrompt.title": "سسٹم پرامپٹ",
"context.rawMessages.title": "خام پیغامات",
"context.stats.session": "سیشن",
"context.stats.messages": "پیغامات",
"context.stats.provider": "فراہم کنندہ",
"context.stats.model": "ماڈل",
"context.stats.limit": "سیاق و سباق کی حد",
"context.stats.totalTokens": "کل ٹوکن",
"context.stats.usage": "استعمال",
"context.stats.inputTokens": "ان پٹ ٹوکنز",
"context.stats.outputTokens": "آؤٹ پٹ ٹوکنز",
"context.stats.reasoningTokens": "ریزننگ ٹوکنز",
"context.stats.cacheTokens": "کیشے ٹوکنز (پڑھنا/لکھنا)",
"context.stats.userMessages": "صارف کے پیغامات",
"context.stats.assistantMessages": "معاون پیغامات",
"context.stats.totalCost": "کل لاگت",
"context.stats.sessionCreated": "سیشن بنایا گیا۔",
"context.stats.lastActivity": "آخری سرگرمی",
"context.usage.tokens": "ٹوکنز",
"context.usage.usage": "استعمال",
"context.usage.cost": "لاگت",
"context.usage.clickToView": "سیاق و سباق دیکھنے کے لیے کلک کریں۔",
"context.usage.view": "سیاق و سباق کا استعمال دیکھیں",
"language.en": "English",
"language.zh": "简体中文",
"language.zht": "繁體中文",
"language.ko": "한국어",
"language.de": "Deutsch",
"language.es": "Español",
"language.fr": "Français",
"language.da": "Dansk",
"language.ja": "日本語",
"language.pl": "Polski",
"language.ru": "Русский",
"language.ar": "العربية",
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
"toast.language.title": "زبان",
"toast.language.description": "{{language}} پر تبدیل ہو گیا۔",
"toast.theme.title": "تھیم تبدیل ہو گئی۔",
"toast.scheme.title": "رنگ سکیم",
"toast.workspace.enabled.title": "ورک اسپیسز فعال ہیں۔",
"toast.workspace.enabled.description": "متعدد ورک ٹری اب سائڈبار میں دکھائے گئے ہیں۔",
"toast.workspace.disabled.title": "کام کی جگہیں غیر فعال ہیں۔",
"toast.workspace.disabled.description": "سائڈبار میں صرف مین ورک ٹری کو دکھایا گیا ہے۔",
"toast.permissions.autoaccept.on.title": "خودکار طور پر قبول کرنے کی اجازتیں۔",
"toast.permissions.autoaccept.on.description": "اجازت کی درخواستیں خود بخود منظور ہو جائیں گی۔",
"toast.permissions.autoaccept.off.title": "اجازتوں کو خودکار طور پر قبول کرنا بند کر دیا گیا۔",
"toast.permissions.autoaccept.off.description": "اجازت کی درخواستوں کو منظوری درکار ہوگی۔",
"toast.model.none.title": "کوئی ماڈل منتخب نہیں کیا گیا۔",
"toast.model.none.description": "اس سیشن کا خلاصہ کرنے کے لیے فراہم کنندہ سے رابطہ کریں۔",
"toast.file.loadFailed.title": "فائل لوڈ کرنے میں ناکام",
"toast.file.listFailed.title": "فائلوں کی فہرست بنانے میں ناکام",
"toast.context.noLineSelection.title": "لائن کا کوئی انتخاب نہیں۔",
"toast.context.noLineSelection.description": "پہلے فائل ٹیب میں لائن رینج منتخب کریں۔",
"toast.session.share.copyFailed.title": "URL کو کلپ بورڈ پر کاپی کرنے میں ناکام",
"toast.session.share.success.title": "سیشن کا اشتراک کیا گیا۔",
"toast.session.share.success.description": "اشتراک کا URL کلپ بورڈ پر کاپی ہو گیا!",
"toast.session.share.failed.title": "سیشن کا اشتراک کرنے میں ناکام",
"toast.session.share.failed.description": "سیشن کا اشتراک کرتے وقت ایک خرابی پیش آگئی",
"toast.session.unshare.success.title": "سیشن کا اشتراک ختم کر دیا گیا۔",
"toast.session.unshare.success.description": "سیشن کا اشتراک کامیابی سے ختم ہو گیا!",
"toast.session.unshare.failed.title": "سیشن کا اشتراک ختم کرنے میں ناکام",
"toast.session.unshare.failed.description": "سیشن کا اشتراک ختم کرتے وقت ایک خرابی پیش آگئی",
"toast.session.listFailed.title": "{{project}} کے لیے سیشن لوڈ کرنے میں ناکام",
"toast.project.reloadFailed.title": "{{project}} کو دوبارہ لوڈ کرنے میں ناکام",
"toast.update.title": "اپ ڈیٹ دستیاب ہے۔",
"toast.update.description": "OpenCode ({{version}}) کا ایک نیا ورژن اب انسٹال کرنے کے لیے دستیاب ہے۔",
"toast.update.action.installRestart": "انسٹال کریں اور دوبارہ شروع کریں۔",
"toast.update.action.notYet": "ابھی تک نہیں۔",
"error.page.title": "کچھ غلط ہو گیا۔",
"error.page.description": "ایپلیکیشن لوڈ کرتے وقت ایک خرابی پیش آگئی۔",
"error.page.description.localServerStartup": "مقامی سرور شروع کرتے وقت ایک خرابی پیش آگئی۔",
"error.page.details.label": "خرابی کی تفصیلات",
"error.page.action.restart": "دوبارہ شروع کریں۔",
"error.page.action.report": "خرابی کی اطلاع دیں",
"error.page.action.reported": "خرابی کی اطلاع دی گئی۔",
"error.page.action.exportLogs": "لاگز برآمد کریں۔",
"error.page.action.checking": "چیک کر رہا ہے...",
"error.page.action.checkUpdates": "اپ ڈیٹس کے لیے چیک کریں۔",
"error.page.action.updateTo": "{{version}} میں اپ ڈیٹ کریں۔",
"error.page.circular": "[سرکلر]",
"error.page.report.prefix": "براہ کرم OpenCode ٹیم کو اس غلطی کی اطلاع دیں۔",
"error.page.report.discord": "Discord پر",
"error.page.version": "ورژن: {{version}}",
"error.dev.rootNotFound":
"روٹ عنصر نہیں ملا۔ کیا آپ اسے اپنے index.html میں شامل کرنا بھول گئے؟ یا ہو سکتا ہے کہ آئی ڈی وصف کی ہجے غلط ہو گئی ہو؟",
"error.serverSync.connectFailed": "سرور سے منسلک نہیں ہو سکا۔ کیا `{{url}}` پر کوئی سرور چل رہا ہے؟",
"error.serverSDK.noServerAvailable": "کوئی سرور دستیاب نہیں ہے۔",
"error.serverSDK.serverNotAvailable": "سرور دستیاب نہیں ہے۔",
"error.childStore.persistedCacheCreateFailed": "مستقل کیشے بنانے میں ناکام",
"error.childStore.persistedProjectMetadataCreateFailed": "مستقل پروجیکٹ میٹا ڈیٹا بنانے میں ناکام",
"error.childStore.persistedProjectIconCreateFailed": "مستقل پروجیکٹ آئیکن بنانے میں ناکام",
"error.childStore.storeCreateFailed": "اسٹور بنانے میں ناکام",
"directory.error.invalidUrl": "URL میں غلط ڈائریکٹری۔",
"error.chain.unknown": "نامعلوم خرابی۔",
"error.server.invalidConfiguration": "غلط کنفیگریشن",
"error.chain.causedBy": "کی وجہ سے:",
"error.chain.apiError": "API غلطی",
"error.chain.status": "حیثیت: {{status}}",
"error.chain.retryable": "دوبارہ کوشش کے قابل: {{retryable}}",
"error.chain.responseBody": "جواب کا متن:\n{{body}}",
"error.chain.didYouMean": "کیا آپ کا مطلب ہے: {{suggestions}}؟",
"error.chain.modelNotFound": "ماڈل نہیں ملا: {{provider}}/{{model}}",
"error.chain.checkConfig": "اپنی تشکیل (opencode.json) فراہم کنندہ/ماڈل کے نام چیک کریں۔",
"error.chain.mcpFailed": 'MCP سرور "{{name}}" ناکام ہو گیا۔ نوٹ، OpenCode ابھی تک MCP تصدیق کو سپورٹ نہیں کرتا ہے۔',
"error.chain.providerAuthFailed": "فراہم کنندہ کی توثیق ناکام ہوگئی ({{provider}}): {{message}}",
"error.chain.providerInitFailed": 'فراہم کنندہ "{{provider}}" کو شروع کرنے میں ناکام۔ اسناد اور کنفیگریشن چیک کریں۔',
"error.chain.configJsonInvalid": "{{path}} پر کنفگ فائل درست نہیں ہے JSON(C)",
"error.chain.configJsonInvalidWithMessage": "{{path}} پر کنفگ فائل درست نہیں ہے JSON(C): {{message}}",
"error.chain.configDirectoryTypo":
'{{path}} میں ڈائریکٹری "{{dir}}" درست نہیں ہے۔ ڈائریکٹری کا نام "{{suggestion}}" رکھیں یا اسے ہٹا دیں۔ یہ املا کی ایک عام غلطی ہے۔',
"error.chain.configFrontmatterError": "{{path}} میں فرنٹ میٹر کو پارس کرنے میں ناکام:\n{{message}}",
"error.chain.configInvalid": "{{path}} پر کنفگ فائل غلط ہے۔",
"error.chain.configInvalidWithMessage": "{{path}} پر کنفگ فائل غلط ہے: {{message}}",
"notification.permission.title": "اجازت درکار ہے۔",
"notification.permission.description": "{{projectName}} میں {{sessionTitle}} کو اجازت درکار ہے۔",
"notification.question.title": "سوال",
"notification.question.description": "{{projectName}} میں {{sessionTitle}} کی جانب سے ایک سوال ہے۔",
"notification.action.goToSession": "سیشن پر جائیں",
"notification.session.responseReady.title": "جواب تیار ہے۔",
"notification.session.error.title": "سیشن کی خرابی",
"notification.session.error.fallbackDescription": "ایک خرابی پیش آ گئی۔",
"home.recentProjects": "حالیہ منصوبے",
"home.empty.title": "کوئی حالیہ پروجیکٹ نہیں۔",
"home.empty.description": "ایک مقامی پروجیکٹ کھول کر شروع کریں۔",
"home.title": "ہوم",
"home.projects": "پروجیکٹس",
"home.project.add": "پروجیکٹ شامل کریں۔",
"home.recentlyClosed": "حال ہی میں بند",
"home.server.collapse": "سرور کے پروجیکٹس سمیٹیں",
"home.server.expand": "سرور پروجیکٹس کو وسعت دیں۔",
"home.sessions.search.placeholder": "سیشن تلاش کریں۔",
"home.sessions.search.placeholder.scoped": "{{scope}} میں سیشن تلاش کریں۔",
"home.sessions.search.sessions": "سیشنز",
"home.sessions.search.noResults": "{{query}} کے لیے کوئی سیشن نہیں ملا",
"home.sessions.empty": "ابھی تک یہاں کچھ نہیں ہے۔",
"home.sessions.empty.description": "شروع کرنے کے لیے ایک سیشن بنائیں",
"home.sessions.group.today": "آج",
"home.sessions.group.yesterday": "کل",
"home.sessions.group.older": "پرانا",
"home.providerTip": "Claude، GPT، Gemini، وغیرہ سمیت دیگر ماڈلز استعمال کرنے کے لیے 75+ فراہم کنندگان سے جڑیں",
"session.tab.session": "سیشن",
"session.tab.review": "جائزہ لیں",
"session.tab.context": "سیاق و سباق",
"session.tab.unknown": "نامعلوم سیشن",
"session.panel.reviewAndFiles": "جائزہ اور فائلیں۔",
"session.error.notFound": "یہ سیشن نہیں مل سکتا",
"session.error.notFound.description": "یہ ٹیب ایک سیشن کی طرف اشارہ کرتا ہے جو اس سرور پر اب موجود نہیں ہے۔",
"session.error.notFound.closeTab": "ٹیب بند کریں",
"session.error.serverConnection": "اس سرور سے منسلک نہیں ہو سکتا",
"session.review.filesChanged": "تبدیل شدہ فائلیں: {{count}}",
"session.review.change.one": "تبدیلی",
"session.review.change.other": "تبدیلیاں",
"session.review.loadingChanges": "تبدیلیاں لوڈ ہو رہی ہیں...",
"session.review.empty": "اس سیشن میں ابھی تک کوئی تبدیلی نہیں آئی",
"session.review.noVcs": "Git ورژن کنٹرول سسٹم کا پتہ نہیں چلا، تبدیلیاں ظاہر نہیں کی گئیں۔",
"session.review.noVcs.createGit.title": "ایک Git ذخیرہ بنائیں",
"session.review.noVcs.createGit.description":
"اس پروجیکٹ میں تبدیلیوں کو ٹریک کریں، ان کا جائزہ لیں اور ان کو کالعدم کریں۔",
"session.review.noVcs.createGit.actionLoading": "Git ذخیرہ تخلیق کیا جا رہا ہے...",
"session.review.noVcs.createGit.action": "Git ذخیرہ تخلیق کریں۔",
"session.review.noSnapshot":
"اسنیپ شاٹ سے باخبر رہنے کی ترتیب کو غیر فعال کر دیا گیا ہے، لہذا سیشن کی تبدیلیاں دستیاب نہیں ہیں۔",
"session.review.noChanges": "کوئی تبدیلی نہیں۔",
"session.review.noUncommittedChanges": "ابھی تک کوئی غیر ارتکاب تبدیلیاں نہیں ہیں۔",
"session.review.noBranchChanges": "ابھی تک برانچ میں کوئی تبدیلی نہیں ہے۔",
"session.files.selectToOpen": "کھولنے کے لیے ایک فائل منتخب کریں۔",
"session.files.all": "تمام فائلیں۔",
"session.files.empty": "کوئی فائل نہیں ہے۔",
"session.files.binaryContent": "بائنری فائل (مواد ظاہر نہیں کیا جا سکتا)",
"session.messages.renderEarlier": "پرانے پیغامات دکھائیں",
"session.messages.loadingEarlier": "پہلے کے پیغامات لوڈ ہو رہے ہیں...",
"session.messages.loadEarlier": "پہلے کے پیغامات لوڈ کریں۔",
"session.messages.loading": "پیغامات لوڈ ہو رہے ہیں...",
"session.messages.jumpToLatest": "تازہ ترین پر جائیں",
"session.context.addToContext": "{{selection}} کو سیاق و سباق میں شامل کریں۔",
"session.todo.title": "زیر التوا کام",
"session.todo.collapse": "سمیٹیں",
"session.todo.expand": "پھیلائیں۔",
"session.todo.progress": "{{total}} میں سے {{done}} کام مکمل ہو گئے",
"session.question.progress": "{{total}} میں سے سوال {{current}}",
"session.question.minimize": "سوال کو کم سے کم کریں۔",
"session.question.restore": "سوال بحال کریں۔",
"session.question.pending.one": "{{count}} زیر التواء سوال",
"session.question.pending.other": "{{count}} زیر التواء سوالات",
"session.followupDock.summary.one": "{{count}} قطار میں شامل پیغام",
"session.followupDock.summary.other": "{{count}} قطار میں لگے پیغامات",
"session.followupDock.sendNow": "ابھی بھیجیں۔",
"session.followupDock.edit": "ترمیم کریں۔",
"session.followupDock.collapse": "قطار میں لگے پیغامات کو سکیڑیں۔",
"session.followupDock.expand": "قطار میں لگے پیغامات کو پھیلائیں۔",
"session.revertDock.summary.one": "{{count}} واپس لیا گیا پیغام",
"session.revertDock.summary.other": "{{count}} واپس لیے گئے پیغامات",
"session.revertDock.collapse": "واپس لیے گئے پیغامات سمیٹیں",
"session.revertDock.expand": "واپس لیے گئے پیغامات پھیلائیں",
"session.revertDock.restore": "پیغام کو بحال کریں۔",
"session.new.title": "کچھ بھی بنائیں",
"session.new.project.new": "نیا پروجیکٹ",
"session.new.project.search": "پروجیکٹس تلاش کریں۔",
"session.new.project.add": "پروجیکٹ شامل کریں۔",
"session.new.worktree.main": "مین برانچ",
"session.new.worktree.mainWithBranch": "مین برانچ ({{branch}})",
"session.new.worktree.create": "نئی ورک ٹری بنائیں",
"session.new.workspace.runIn": "سیشن یہاں چلائیں",
"session.new.workspace.triggerLocal": "مقامی",
"session.new.workspace.local": "مقامی ذخیرہ",
"session.new.workspace.existing": "ورک اسپیس…",
"session.new.git.none": "کوئی Git نہیں۔",
"session.new.lastModified": "آخری بار ترمیم کی گئی۔",
"session.header.search.placeholder": "{{project}} تلاش کریں۔",
"session.header.searchFiles": "فائلیں تلاش کریں۔",
"session.header.openIn": "اس میں کھولیں",
"session.header.open.action": "{{app}} کھولیں۔",
"session.header.open.ariaLabel": "{{app}} میں کھولیں۔",
"session.header.open.menu": "اختیارات کھولیں۔",
"session.header.open.copyPath": "راستہ کاپی کریں۔",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "File Explorer",
"session.header.open.fileManager": "File Manager",
"session.header.reveal.finder": "Finder میں ظاہر کریں۔",
"session.header.reveal.fileExplorer": "File Explorer میں ظاہر کریں۔",
"session.header.reveal.containingFolder": "متعلقہ فولڈر کھولیں",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
"session.header.open.app.zed": "Zed",
"session.header.open.app.textmate": "TextMate",
"session.header.open.app.antigravity": "Antigravity",
"session.header.open.app.terminal": "Terminal",
"session.header.open.app.iterm2": "iTerm2",
"session.header.open.app.ghostty": "Ghostty",
"session.header.open.app.warp": "Warp",
"session.header.open.app.xcode": "Xcode",
"session.header.open.app.androidStudio": "Android Studio",
"session.header.open.app.powershell": "PowerShell",
"session.header.open.app.sublimeText": "Sublime Text",
"status.popover.trigger": "حیثیت",
"status.popover.ariaLabel": "سرور کنفیگریشنز",
"status.popover.tab.servers": "سرورز",
"status.popover.tab.mcp": "MCP",
"status.popover.tab.lsp": "LSP",
"status.popover.tab.plugins": "پلگ انز",
"status.popover.action.manageServers": "سرورز کا نظم کریں۔",
"session.share.popover.title": "ویب پر شائع کریں۔",
"session.share.popover.description.shared": "یہ سیشن ویب پر عوامی ہے۔ یہ لنک کے ساتھ ہر کسی کے لیے قابل رسائی ہے۔",
"session.share.popover.description.unshared":
"ویب پر عوامی طور پر سیشن کا اشتراک کریں۔ یہ لنک کے ساتھ ہر کسی کے لیے قابل رسائی ہو گا۔",
"session.share.action.share": "شیئر کریں۔",
"session.share.action.publish": "شائع کریں۔",
"session.share.action.publishing": "شائع ہو رہا ہے...",
"session.share.action.unpublish": "غیر شائع کریں۔",
"session.share.action.unpublishing": "اشاعت ختم کی جا رہی ہے...",
"session.share.action.view": "دیکھیں",
"session.share.copy.copied": "کاپی",
"session.share.copy.copyLink": "لنک کاپی کریں۔",
"lsp.tooltip.none": "LSP سرورز نہیں ہیں۔",
"lsp.label.connected": "{{count}} LSP",
"prompt.loading": "پرامپٹ لوڈ ہو رہا ہے...",
"terminal.loading": "ٹرمینل لوڈ ہو رہا ہے...",
"terminal.title": "ٹرمینل",
"terminal.title.numbered": "ٹرمینل {{number}}",
"terminal.close": "ٹرمینل بند کریں۔",
"terminal.connectionLost.title": "کنکشن ختم ہو گیا۔",
"terminal.connectionLost.abnormalClose": "WebSocket غیر معمولی طور پر بند ہوا: {{code}}",
"terminal.connectionLost.description": "ٹرمینل کنکشن میں خلل پڑا۔ یہ سرور کے دوبارہ شروع ہونے پر ہوسکتا ہے۔",
"common.closeTab": "ٹیب بند کریں۔",
"common.dismiss": "نظر انداز کریں",
"common.moreCountSuffix": " (+{{count}} مزید)",
"common.requestFailed": "درخواست ناکام ہوگئی",
"common.moreOptions": "مزید اختیارات",
"common.learnMore": "مزید جانیں",
"common.rename": "نام تبدیل کریں۔",
"common.reset": "دوبارہ ترتیب دیں۔",
"common.archive": "آرکائیو کریں",
"common.delete": "حذف کریں۔",
"common.close": "بند",
"common.edit": "ترمیم کریں۔",
"common.loadMore": "مزید لوڈ کریں۔",
"common.key.esc": "ESC",
"common.key.ctrl": "Ctrl",
"common.key.alt": "Alt",
"common.key.shift": "Shift",
"common.key.meta": "Meta",
"common.key.space": "Space",
"common.key.backspace": "Backspace",
"common.key.enter": "Enter",
"common.key.tab": "Tab",
"common.key.delete": "Delete",
"common.key.home": "Home",
"common.key.end": "End",
"common.key.pageUp": "Page Up",
"common.key.pageDown": "Page Down",
"common.key.insert": "Insert",
"common.unknown": "نامعلوم",
"common.time.justNow": "ابھی ابھی",
"common.time.minutesAgo.short": "{{count}}m پہلے",
"common.time.hoursAgo.short": "{{count}}h پہلے",
"common.time.daysAgo.short": "{{count}}d پہلے",
"sidebar.menu.toggle": "مینو دکھائیں یا چھپائیں",
"sidebar.nav.projectsAndSessions": "پروجیکٹس اور سیشنز",
"sidebar.settings": "ترتیبات",
"sidebar.help": "مدد",
"sidebar.workspaces.enable": "ورک اسپیسز کو فعال کریں۔",
"sidebar.workspaces.disable": "ورک اسپیس کو غیر فعال کریں۔",
"sidebar.gettingStarted.title": "شروع کرنا",
"sidebar.gettingStarted.line1": "OpenCode میں مفت ماڈل شامل ہیں لہذا آپ فوری طور پر شروع کر سکتے ہیں۔",
"sidebar.gettingStarted.line2": "ماڈلز استعمال کرنے کے لیے کسی بھی فراہم کنندہ کو جوڑیں۔ Claude، GPT، Gemini وغیرہ",
"sidebar.project.recentSessions": "حالیہ سیشنز",
"sidebar.project.viewAllSessions": "تمام سیشنز دیکھیں",
"sidebar.project.clearNotifications": "اطلاعات کو صاف کریں۔",
"sidebar.empty.title": "کوئی پروجیکٹ نہیں کھلا۔",
"sidebar.empty.description": "شروع کرنے کے لیے ایک پروجیکٹ کھولیں۔",
"debugBar.ariaLabel": "ترقیاتی کارکردگی کی تشخیص",
"debugBar.na": "n/a",
"debugBar.nav.label": "NAV",
"debugBar.nav.tip":
"سیشن صفحے سے متعلق آخری مکمل روٹ منتقلی، جسے روٹر کے آغاز سے منتقلی مکمل ہونے کے بعد پہلی بار اسکرین بننے تک ناپا گیا ہے۔",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "آخری 5 سیکنڈز میں فریم فی سیکنڈ رولنگ۔",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "آخری 5 سیکنڈز میں سب سے خراب فریم ٹائم۔",
"debugBar.jank.label": "JANK",
"debugBar.jank.tip": "آخری 5 سیکنڈ میں 32ms سے زیادہ کے فریم۔",
"debugBar.long.label": "LONG",
"debugBar.long.tip": "آخری 5 سیکنڈ میں مسدود وقت اور طویل کام کی گنتی۔ زیادہ سے زیادہ کام: {{max}}۔",
"debugBar.delay.label": "DELAY",
"debugBar.delay.tip": "آخری 5 سیکنڈ میں سب سے زیادہ مشاہدہ کردہ ان پٹ تاخیر۔",
"debugBar.inp.label": "INP",
"debugBar.inp.tip": "آخری 5 سیکنڈ میں تعامل کا تخمینی دورانیہ۔ یہ INP جیسا ہے، سرکاری Web Vitals INP نہیں۔",
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "موجودہ ایپ کی زندگی بھر کے لیے مجموعی لے آؤٹ شفٹ۔",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "استعمال شدہ JS ہیپ بمقابلہ ہیپ کی حد۔ صرف Chromium۔",
"debugBar.mem.tip": "استعمال شدہ JS ہیپ بمقابلہ ہیپ کی حد۔ {{limit}} میں سے {{used}}۔",
"app.name.desktop": "OpenCode ڈیسک ٹاپ",
"settings.section.desktop": "ڈیسک ٹاپ",
"settings.section.server": "سرور",
"settings.tab.general": "عمومی",
"settings.tab.shortcuts": "شارٹ کٹس",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "WSL انضمام",
"settings.desktop.wsl.description": "Windows پر WSL کے اندر OpenCode سرور چلائیں۔",
"settings.general.section.appearance": "ظاہری شکل",
"settings.general.section.advanced": "اعلیٰ ترتیبات",
"settings.general.section.notifications": "سسٹم کی اطلاعات",
"settings.general.section.updates": "اپڈیٹس",
"settings.general.section.sounds": "صوتی اثرات",
"settings.general.section.feed": "فیڈ",
"settings.general.section.display": "ڈسپلے",
"settings.general.row.language.title": "زبان",
"settings.general.row.language.description": "OpenCode کے لیے ڈسپلے کی زبان تبدیل کریں۔",
"settings.general.row.shell.title": "ٹرمینل شیل",
"settings.general.row.shell.description": "ٹرمینل اور ایجنٹ ٹولز کے ذریعے استعمال ہونے والا شیل",
"settings.general.row.shell.autoDefault": "خودکار (پہلے سے طے شدہ)",
"settings.general.row.shell.terminalOnly": "صرف ٹرمینل",
"settings.general.row.appearance.title": "ظاہری شکل",
"settings.general.row.appearance.description": "اپنی مرضی کے مطابق بنائیں کہ آپ کے آلے پر OpenCode کیسا لگتا ہے۔",
"settings.general.row.colorScheme.title": "رنگ سکیم",
"settings.general.row.colorScheme.description":
"منتخب کریں کہ آیا OpenCode سسٹم، لائٹ یا ڈارک تھیم کی پیروی کرتا ہے۔",
"settings.general.row.theme.title": "تھیم",
"settings.general.row.theme.description": "OpenCode کی تھیم حسب ضرورت بنائیں۔",
"settings.general.row.font.title": "کوڈ فونٹ",
"settings.general.row.font.description": "کوڈ بلاکس میں استعمال ہونے والے فونٹ کو حسب ضرورت بنائیں",
"settings.general.row.terminalFont.title": "ٹرمینل فونٹ",
"settings.general.row.terminalFont.description": "ٹرمینل میں استعمال ہونے والے فونٹ کو حسب ضرورت بنائیں",
"settings.general.row.uiFont.title": "UI فونٹ",
"settings.general.row.uiFont.description": "پورے انٹرفیس میں استعمال ہونے والے فونٹ کو حسب ضرورت بنائیں",
"settings.general.row.followup.title": "فالو اپ کا طرز عمل",
"settings.general.row.followup.description":
"منتخب کریں کہ آیا فالو اپ فوری طور پر آگے بڑھتا ہے یا قطار میں انتظار کرتا ہے۔",
"settings.general.row.followup.option.queue": "قطار",
"settings.general.row.followup.option.steer": "فوری رہنمائی",
"settings.general.row.showFileTree.title": "فائل ٹری",
"settings.general.row.showFileTree.description": "سیشن میں فائل ٹری پینل دکھائیں۔",
"settings.general.row.showNavigation.title": "نیویگیشن کنٹرولز",
"settings.general.row.showNavigation.description": "ڈیسک ٹاپ ٹائٹل بار میں پیچھے اور آگے کے بٹن دکھائیں۔",
"settings.general.row.showSearch.title": "کمانڈ پیلیٹ",
"settings.general.row.showSearch.description": "ٹائٹل بار میں سرچ اور کمانڈ پیلیٹ بٹن دکھائیں۔",
"settings.general.row.showTerminal.title": "ٹرمینل",
"settings.general.row.showTerminal.description": "ڈیسک ٹاپ ٹائٹل بار میں ٹرمینل بٹن دکھائیں۔",
"settings.general.row.showStatus.title": "سرور کی حیثیت",
"settings.general.row.showStatus.description": "ٹائٹل بار میں سرور اسٹیٹس بٹن دکھائیں۔",
"settings.general.row.mobileTitlebarBottom.title": "نیچے نیویگیشن",
"settings.general.row.mobileTitlebarBottom.description": "موبائل پر اسکرین کے نیچے ٹائٹل بار اور سیشن ٹیبز رکھیں",
"settings.general.row.showCustomAgents.title": "ایجنٹ دکھائیں۔",
"settings.general.row.showCustomAgents.description":
"کمپوزر میں ایجنٹس تبدیل کریں۔ چھپانے پر Build ایجنٹ بطور طے شدہ استعمال ہوگا۔",
"settings.general.row.reasoningSummaries.title": "استدلال کے خلاصے دکھائیں۔",
"settings.general.row.reasoningSummaries.description": "ٹائم لائن میں ماڈل استدلال کے خلاصے ڈسپلے کریں۔",
"settings.general.row.shellToolPartsExpanded.title": "شیل ٹول کے حصے پھیلائیں",
"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 استعمال کریں۔",
"settings.general.row.wayland.description": "Wayland پر X11 فال بیک کو غیر فعال کریں۔ دوبارہ شروع کرنے کی ضرورت ہے۔",
"settings.general.row.wayland.tooltip":
"مخلوط ریفریش ریٹ مانیٹر کے ساتھ Linux پر، مقامی Wayland زیادہ مستحکم ہو سکتا ہے۔",
"settings.general.row.releaseNotes.title": "ریلیز نوٹس",
"settings.general.row.releaseNotes.description": "اپ ڈیٹس کے بعد نیا کیا ہے پاپ اپ دکھائیں۔",
"settings.updates.row.startup.title": "سٹارٹ اپ پر اپ ڈیٹس چیک کریں۔",
"settings.updates.row.startup.description": "OpenCode لانچ ہونے پر اپ ڈیٹس کے لیے خودکار طور پر چیک کریں۔",
"settings.updates.row.check.title": "اپ ڈیٹس کے لیے چیک کریں۔",
"settings.updates.row.check.description": "اپ ڈیٹس کے لیے دستی طور پر چیک کریں اور اگر دستیاب ہو تو انسٹال کریں۔",
"settings.updates.action.checkNow": "ابھی چیک کریں۔",
"settings.updates.action.checking": "چیک کر رہا ہے...",
"settings.updates.action.downloading": "ڈاؤن لوڈ ہو رہا ہے...",
"settings.updates.action.installing": "انسٹال ہو رہا ہے...",
"settings.updates.toast.latest.title": "آپ اپ ٹو ڈیٹ ہیں۔",
"settings.updates.toast.latest.description": "آپ OpenCode کا تازہ ترین ورژن چلا رہے ہیں۔",
"sound.option.none": "کوئی نہیں۔",
"sound.option.alert01": "Alert 01",
"sound.option.alert02": "Alert 02",
"sound.option.alert03": "Alert 03",
"sound.option.alert04": "Alert 04",
"sound.option.alert05": "Alert 05",
"sound.option.alert06": "Alert 06",
"sound.option.alert07": "Alert 07",
"sound.option.alert08": "Alert 08",
"sound.option.alert09": "Alert 09",
"sound.option.alert10": "Alert 10",
"sound.option.bipbop01": "Bip-bop 01",
"sound.option.bipbop02": "Bip-bop 02",
"sound.option.bipbop03": "Bip-bop 03",
"sound.option.bipbop04": "Bip-bop 04",
"sound.option.bipbop05": "Bip-bop 05",
"sound.option.bipbop06": "Bip-bop 06",
"sound.option.bipbop07": "Bip-bop 07",
"sound.option.bipbop08": "Bip-bop 08",
"sound.option.bipbop09": "Bip-bop 09",
"sound.option.bipbop10": "Bip-bop 10",
"sound.option.staplebops01": "Staplebops 01",
"sound.option.staplebops02": "Staplebops 02",
"sound.option.staplebops03": "Staplebops 03",
"sound.option.staplebops04": "Staplebops 04",
"sound.option.staplebops05": "Staplebops 05",
"sound.option.staplebops06": "Staplebops 06",
"sound.option.staplebops07": "Staplebops 07",
"sound.option.nope01": "Nope 01",
"sound.option.nope02": "Nope 02",
"sound.option.nope03": "Nope 03",
"sound.option.nope04": "Nope 04",
"sound.option.nope05": "Nope 05",
"sound.option.nope06": "Nope 06",
"sound.option.nope07": "Nope 07",
"sound.option.nope08": "Nope 08",
"sound.option.nope09": "Nope 09",
"sound.option.nope10": "Nope 10",
"sound.option.nope11": "Nope 11",
"sound.option.nope12": "Nope 12",
"sound.option.yup01": "Yup 01",
"sound.option.yup02": "Yup 02",
"sound.option.yup03": "Yup 03",
"sound.option.yup04": "Yup 04",
"sound.option.yup05": "Yup 05",
"sound.option.yup06": "Yup 06",
"settings.general.notifications.agent.title": "ایجنٹ",
"settings.general.notifications.agent.description": "جب ایجنٹ مکمل ہو یا توجہ کی ضرورت ہو تو سسٹم کی اطلاع دکھائیں۔",
"settings.general.notifications.permissions.title": "اجازتیں",
"settings.general.notifications.permissions.description": "جب اجازت درکار ہو تو سسٹم کی اطلاع دکھائیں۔",
"settings.general.notifications.errors.title": "غلطیاں",
"settings.general.notifications.errors.description": "جب کوئی خرابی ہوتی ہے تو سسٹم کی اطلاع دکھائیں۔",
"settings.general.sounds.agent.title": "ایجنٹ",
"settings.general.sounds.agent.description": "جب ایجنٹ مکمل ہو جائے یا توجہ کی ضرورت ہو تو آواز چلائیں۔",
"settings.general.sounds.permissions.title": "اجازتیں",
"settings.general.sounds.permissions.description": "جب اجازت درکار ہو تو آواز چلائیں۔",
"settings.general.sounds.errors.title": "غلطیاں",
"settings.general.sounds.errors.description": "غلطی ہونے پر آواز چلائیں۔",
"settings.shortcuts.title": "کی بورڈ شارٹ کٹس",
"settings.shortcuts.reset.button": "ڈیفالٹس پر ری سیٹ کریں۔",
"settings.shortcuts.reset.toast.title": "شارٹ کٹس ری سیٹ",
"settings.shortcuts.reset.toast.description": "کی بورڈ شارٹ کٹس کو ڈیفالٹس پر ری سیٹ کر دیا گیا ہے۔",
"settings.shortcuts.conflict.title": "شارٹ کٹ پہلے سے استعمال میں ہے۔",
"settings.shortcuts.conflict.description": "{{keybind}} پہلے ہی {{titles}} کو تفویض کیا گیا ہے۔",
"settings.shortcuts.unassigned": "غیر تفویض کردہ",
"settings.shortcuts.pressKeys": "چابیاں دبائیں",
"settings.shortcuts.search.placeholder": "شارٹ کٹ تلاش کریں۔",
"settings.shortcuts.search.empty": "کوئی شارٹ کٹ نہیں ملا",
"settings.shortcuts.group.general": "عمومی",
"settings.shortcuts.group.session": "سیشن",
"settings.shortcuts.group.navigation": "نیویگیشن",
"settings.shortcuts.group.modelAndAgent": "ماڈل اور ایجنٹ",
"settings.shortcuts.group.terminal": "ٹرمینل",
"settings.shortcuts.group.prompt": "پرامپٹ",
"settings.providers.title": "فراہم کرنے والے",
"settings.providers.description": "فراہم کنندہ کی ترتیبات یہاں قابل ترتیب ہوں گی۔",
"settings.providers.section.connected": "منسلک فراہم کنندگان",
"settings.providers.connected.empty": "کوئی منسلک فراہم کنندہ نہیں۔",
"settings.providers.connected.environmentDescription": "آپ کے ماحول کے متغیرات سے جڑا ہوا ہے۔",
"settings.providers.section.popular": "مقبول فراہم کنندگان",
"settings.providers.custom.description": "بیس URL کے ذریعے ایک OpenAI-مطابق فراہم کنندہ شامل کریں۔",
"settings.providers.tag.environment": "ماحول",
"settings.providers.tag.config": "ترتیب",
"settings.providers.tag.custom": "حسب ضرورت",
"settings.providers.tag.other": "دیگر",
"settings.models.title": "ماڈلز",
"settings.models.description": "ماڈل کی ترتیبات یہاں قابل ترتیب ہوں گی۔",
"settings.agents.title": "ایجنٹس",
"settings.agents.description": "ایجنٹ کی ترتیبات یہاں قابل ترتیب ہوں گی۔",
"settings.commands.title": "کمانڈز",
"settings.commands.description": "کمانڈ کی ترتیبات یہاں قابل ترتیب ہوں گی۔",
"settings.mcp.title": "MCP",
"settings.mcp.description": "MCP ترتیبات یہاں قابل ترتیب ہوں گی۔",
"settings.permissions.title": "اجازتیں",
"settings.permissions.description": "کنٹرول کریں کہ سرور کن ٹولز کو بطور ڈیفالٹ استعمال کر سکتا ہے۔",
"settings.permissions.section.tools": "اوزار",
"settings.permissions.toast.updateFailed.title": "اجازتوں کو اپ ڈیٹ کرنے میں ناکام",
"settings.permissions.action.allow": "اجازت دیں۔",
"settings.permissions.action.ask": "پوچھیں",
"settings.permissions.action.deny": "انکار کریں",
"settings.permissions.tool.read.title": "پڑھیں",
"settings.permissions.tool.read.description": "فائل پڑھنا (فائل کے راستے سے میل کھاتا ہے)",
"settings.permissions.tool.edit.title": "ترمیم کریں۔",
"settings.permissions.tool.edit.description": "فائلوں میں ترمیم کریں، بشمول ترامیم، تحریریں اور پیچ",
"settings.permissions.tool.glob.title": "گلوب",
"settings.permissions.tool.glob.description": "گلوب پیٹرن کا استعمال کرتے ہوئے فائلوں کو میچ کریں۔",
"settings.permissions.tool.grep.title": "گریپ",
"settings.permissions.tool.grep.description": "ریگولر ایکسپریشنز کا استعمال کرتے ہوئے فائل کا مواد تلاش کریں۔",
"settings.permissions.tool.list.title": "فہرست",
"settings.permissions.tool.list.description": "ڈائریکٹری میں فائلوں کی فہرست بنائیں",
"settings.permissions.tool.bash.title": "باش",
"settings.permissions.tool.bash.description": "شیل کمانڈز چلائیں۔",
"settings.permissions.tool.task.title": "کام",
"settings.permissions.tool.task.description": "ذیلی ایجنٹس چلائیں۔",
"settings.permissions.tool.skill.title": "ہنر",
"settings.permissions.tool.skill.description": "نام سے ایک مہارت لوڈ کریں۔",
"settings.permissions.tool.lsp.title": "LSP",
"settings.permissions.tool.lsp.description": "زبان کے سرور کے سوالات چلائیں۔",
"settings.permissions.tool.todowrite.title": "ٹوڈو لکھیں۔",
"settings.permissions.tool.todowrite.description": "ٹوڈو لسٹ کو اپ ڈیٹ کریں۔",
"settings.permissions.tool.webfetch.title": "ویب بازیافت",
"settings.permissions.tool.webfetch.description": "URL سے مواد حاصل کریں۔",
"settings.permissions.tool.websearch.title": "ویب تلاش",
"settings.permissions.tool.websearch.description": "ویب پر تلاش کریں۔",
"settings.permissions.tool.external_directory.title": "بیرونی ڈائریکٹری",
"settings.permissions.tool.external_directory.description": "پروجیکٹ ڈائرکٹری سے باہر فائلوں تک رسائی حاصل کریں۔",
"settings.permissions.tool.doom_loop.title": "ڈوم لوپ",
"settings.permissions.tool.doom_loop.description": "ایک جیسی ان پٹ کے ساتھ بار بار ٹول کالز کا پتہ لگائیں۔",
"session.delete.failed.title": "سیشن کو حذف کرنے میں ناکام",
"session.delete.title": "سیشن کو حذف کریں۔",
"session.delete.confirm": 'سیشن "{{name}}" کو حذف کریں؟',
"session.delete.button": "سیشن کو حذف کریں۔",
"workspace.new": "نئی ورک اسپیس",
"workspace.type.local": "مقامی",
"workspace.type.sandbox": "سینڈ باکس",
"workspace.create.failed.title": "ورک اسپیس بنانے میں ناکام",
"workspace.delete.failed.title": "ورک اسپیس کو حذف کرنے میں ناکام",
"workspace.resetting.title": "ورک اسپیس ری سیٹ کی جا رہی ہے",
"workspace.resetting.description": "اس میں ایک منٹ لگ سکتا ہے۔",
"workspace.reset.failed.title": "ورک اسپیس کو ری سیٹ کرنے میں ناکام",
"workspace.reset.success.title": "ورک اسپیس ری سیٹ",
"workspace.reset.success.description": "ورک اسپیس اب ڈیفالٹ برانچ سے میل کھاتا ہے۔",
"workspace.error.stillPreparing": "ورک اسپیس ابھی بھی تیار ہو رہی ہے۔",
"workspace.status.checking": "غیر ضم شدہ تبدیلیوں کی جانچ ہو رہی ہے...",
"workspace.status.error": "گٹ کی حیثیت کی تصدیق کرنے سے قاصر۔",
"workspace.status.clean": "کوئی غیر ضم شدہ تبدیلی نہیں ملی۔",
"workspace.status.dirty": "اس ورک اسپیس میں غیر ضم شدہ تبدیلیاں ملی ہیں۔",
"workspace.delete.title": "ورک اسپیس کو حذف کریں۔",
"workspace.delete.confirm": 'ورک اسپیس "{{name}}" کو حذف کریں؟',
"workspace.delete.button": "ورک اسپیس کو حذف کریں۔",
"workspace.reset.title": "ورک اسپیس کو ری سیٹ کریں۔",
"workspace.reset.confirm": 'ورک اسپیس "{{name}}" کو ری سیٹ کریں؟',
"workspace.reset.button": "ورک اسپیس کو ری سیٹ کریں۔",
"workspace.reset.archived.none": "کوئی فعال سیشن آرکائیو نہیں کیا جائے گا۔",
"workspace.reset.archived.one": "1 سیشن آرکائیو کیا جائے گا۔",
"workspace.reset.archived.many": "{{count}} سیشنز آرکائیو کیے جائیں گے۔",
"workspace.reset.note": "یہ ڈیفالٹ برانچ سے ملنے کے لیے ورک اسپیس کو دوبارہ ترتیب دے گا۔",
}
-1025
View File
@@ -1,1025 +0,0 @@
export const dict = {
"command.category.suggested": "Đề xuất",
"command.category.view": "Xem",
"command.category.project": "Dự án",
"command.category.provider": "Nhà cung cấp",
"command.category.server": "Máy chủ",
"command.category.session": "Phiên",
"command.category.theme": "Chủ đề",
"command.category.language": "Ngôn ngữ",
"command.category.file": "Tệp",
"command.category.context": "Ngữ cảnh",
"command.category.terminal": "Terminal",
"command.category.model": "Mô hình",
"command.category.mcp": "MCP",
"command.category.agent": "Tác nhân",
"command.category.permissions": "Quyền",
"command.category.workspace": "Không gian làm việc",
"command.category.settings": "Cài đặt",
"theme.scheme.system": "Hệ thống",
"theme.scheme.light": "Sáng",
"theme.scheme.dark": "Tối",
"command.sidebar.toggle": "Bật/tắt thanh bên",
"command.project.open": "Mở dự án",
"command.project.previous": "Dự án trước đó",
"command.project.next": "Dự án tiếp theo",
"command.project.index": "Chuyển sang dự án {{index}}",
"command.provider.connect": "Kết nối nhà cung cấp",
"command.server.switch": "Chuyển máy chủ",
"command.settings.open": "Mở cài đặt",
"command.session.previous": "Phiên trước",
"command.session.next": "Phiên tiếp theo",
"command.session.previous.unseen": "Phiên chưa đọc trước đó",
"command.session.next.unseen": "Phiên chưa đọc tiếp theo",
"command.session.archive": "Lưu trữ phiên",
"command.palette": "Bảng lệnh",
"command.theme.cycle": "Chuyển chủ đề",
"command.theme.set": "Sử dụng chủ đề: {{theme}}",
"command.theme.scheme.cycle": "Chuyển chế độ màu",
"command.theme.scheme.set": "Sử dụng bảng màu: {{scheme}}",
"command.language.cycle": "Chuyển ngôn ngữ",
"command.language.set": "Sử dụng ngôn ngữ: {{language}}",
"command.session.new": "Phiên mới",
"command.file.open": "Mở tệp",
"command.tab.close": "Đóng tab",
"command.tab.reopenClosed": "Mở lại tab đã đóng",
"command.context.addSelection": "Thêm lựa chọn vào ngữ cảnh",
"command.context.addSelection.description": "Thêm các dòng đã chọn từ tệp hiện tại",
"command.input.focus": "Tập trung vào ô nhập",
"command.terminal.toggle": "Bật/tắt terminal",
"command.fileTree.toggle": "Bật/tắt cây tệp",
"command.review.toggle": "Bật/tắt phần xem lại",
"command.terminal.new": "Terminal mới",
"command.terminal.new.description": "Tạo một tab terminal mới",
"command.steps.toggle": "Bật/tắt các bước",
"command.steps.toggle.description": "Hiển thị hoặc ẩn các bước cho tin nhắn hiện tại",
"command.message.previous": "Tin nhắn trước đó",
"command.message.previous.description": "Đi tới tin nhắn người dùng trước đó",
"command.message.next": "Tin nhắn tiếp theo",
"command.message.next.description": "Chuyển tới tin nhắn người dùng tiếp theo",
"command.model.choose": "Chọn mô hình",
"command.model.choose.description": "Chọn một mô hình khác",
"command.mcp.toggle": "Bật/tắt MCP",
"command.mcp.toggle.description": "Bật hoặc tắt MCP",
"command.agent.cycle": "Chuyển tác nhân",
"command.agent.cycle.description": "Chuyển sang tác nhân tiếp theo",
"command.agent.cycle.reverse": "Chuyển tác nhân theo chiều ngược",
"command.agent.cycle.reverse.description": "Chuyển sang tác nhân trước đó",
"command.model.variant.cycle": "Chuyển mức độ suy luận",
"command.model.variant.cycle.description": "Chuyển sang mức nỗ lực tiếp theo",
"command.prompt.mode.shell": "Shell",
"command.prompt.mode.normal": "Lời nhắc",
"command.permissions.autoaccept.enable": "Tự động chấp nhận quyền",
"command.permissions.autoaccept.disable": "Dừng tự động chấp nhận quyền",
"command.workspace.toggle": "Bật/tắt không gian làm việc",
"command.workspace.toggle.description": "Bật hoặc tắt nhiều không gian làm việc trong thanh bên",
"command.session.undo": "Hoàn tác",
"command.session.undo.description": "Hoàn tác tin nhắn cuối cùng",
"command.session.redo": "Làm lại",
"command.session.redo.description": "Làm lại tin nhắn đã hoàn tác gần đây nhất",
"command.session.compact": "Nén phiên",
"command.session.compact.description": "Tóm tắt phiên để giảm kích thước ngữ cảnh",
"command.session.fork": "Tách nhánh từ tin nhắn",
"command.session.fork.description": "Tạo phiên mới từ tin nhắn trước đó",
"command.session.share": "Chia sẻ phiên",
"command.session.share.description": "Chia sẻ phiên này và sao chép URL vào bảng tạm",
"command.session.unshare": "Ngừng chia sẻ phiên",
"command.session.unshare.description": "Dừng chia sẻ phiên này",
"palette.search.placeholder": "Tìm kiếm tệp, lệnh và phiên",
"palette.search.placeholder.home": "Tìm kiếm lệnh và phiên",
"palette.empty": "Không tìm thấy kết quả nào",
"palette.group.commands": "Lệnh",
"palette.group.files": "Tệp",
"dialog.provider.search.placeholder": "Tìm kiếm nhà cung cấp",
"dialog.provider.empty": "Không tìm thấy nhà cung cấp nào",
"dialog.provider.group.popular": "Phổ biến",
"dialog.provider.group.other": "Khác",
"dialog.provider.custom.label": "Nhà cung cấp tương thích OpenAI tùy chỉnh",
"dialog.provider.tag.recommended": "Đề xuất",
"dialog.provider.opencode.note": "Các mô hình được tuyển chọn, gồm Claude, GPT, Gemini và nhiều mô hình khác",
"dialog.provider.opencode.tagline": "Các mô hình tối ưu hóa đáng tin cậy",
"dialog.provider.opencodeGo.tagline": "Đăng ký chi phí thấp cho mọi người",
"dialog.provider.anthropic.note": "Truy cập trực tiếp các mô hình Claude, bao gồm Pro và Max",
"dialog.provider.copilot.note": "Các mô hình AI hỗ trợ lập trình qua GitHub Copilot",
"dialog.provider.openai.note": "Các mô hình GPT nhanh và mạnh mẽ cho tác vụ AI đa dụng",
"dialog.provider.google.note": "Các mô hình Gemini cho phản hồi nhanh, có cấu trúc",
"dialog.provider.openrouter.note": "Truy cập tất cả các mô hình được hỗ trợ từ một nhà cung cấp",
"dialog.provider.vercel.note": "Truy cập thống nhất vào các mô hình AI với tính năng định tuyến thông minh",
"dialog.model.select.title": "Chọn mô hình",
"dialog.model.search.placeholder": "Tìm kiếm mô hình",
"dialog.model.empty": "Không có kết quả mô hình",
"dialog.model.manage": "Quản lý mô hình",
"dialog.model.manage.description": "Tùy chỉnh mô hình nào xuất hiện trong bộ chọn mô hình.",
"dialog.model.manage.provider.toggle": "Bật/tắt tất cả mô hình {{provider}}",
"dialog.model.unpaid.freeModels.title": "Các mô hình miễn phí do OpenCode cung cấp",
"dialog.model.unpaid.addMore.title": "Thêm nhiều mô hình từ các nhà cung cấp phổ biến",
"dialog.model.unpaid.viewMoreProviders": "Xem hơn 70 nhà cung cấp khác",
"dialog.provider.viewAll": "Hiển thị thêm nhà cung cấp",
"provider.connect.title": "Kết nối {{provider}}",
"provider.connect.title.anthropicProMax": "Đăng nhập bằng Claude Pro/Max",
"provider.connect.selectMethod": "Chọn phương thức đăng nhập cho {{provider}}.",
"provider.connect.method.apiKey": "Khóa API",
"provider.connect.status.inProgress": "Đang ủy quyền...",
"provider.connect.status.waiting": "Đang chờ ủy quyền...",
"provider.connect.status.failed": "Ủy quyền thất bại: {{error}}",
"provider.connect.apiKey.description":
"Nhập khóa API {{provider}} để kết nối tài khoản và sử dụng các mô hình {{provider}} trong OpenCode.",
"provider.connect.apiKey.label": "Khóa API {{provider}}",
"provider.connect.apiKey.placeholder": "khóa API",
"provider.connect.apiKey.required": "Cần có khóa API",
"provider.connect.opencodeZen.line1":
"OpenCode Zen cho phép bạn truy cập một bộ mô hình được tuyển chọn, tối ưu hóa và đáng tin cậy dành cho tác nhân lập trình.",
"provider.connect.opencodeZen.line2":
"Chỉ với một khóa API, bạn sẽ có quyền truy cập vào các mô hình như Claude, GPT, Gemini, GLM và hơn thế nữa.",
"provider.connect.opencodeZen.visit.prefix": "Truy cập ",
"provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
"provider.connect.opencodeZen.visit.suffix": " để lấy khóa API của bạn.",
"provider.connect.oauth.code.visit.prefix": "Truy cập ",
"provider.connect.oauth.code.visit.link": "liên kết này",
"provider.connect.oauth.code.visit.suffix":
" để lấy mã ủy quyền, kết nối tài khoản và sử dụng các mô hình {{provider}} trong OpenCode.",
"provider.connect.oauth.code.label": "Mã ủy quyền {{method}}",
"provider.connect.oauth.code.placeholder": "Mã ủy quyền",
"provider.connect.oauth.code.required": "Cần có mã ủy quyền",
"provider.connect.oauth.code.invalid": "Mã ủy quyền không hợp lệ",
"provider.connect.oauth.auto.visit.prefix": "Truy cập ",
"provider.connect.oauth.auto.visit.link": "liên kết này",
"provider.connect.oauth.auto.visit.suffix":
" và nhập mã bên dưới để kết nối tài khoản của bạn và sử dụng các mô hình {{provider}} trong OpenCode.",
"provider.connect.oauth.auto.confirmationCode": "Mã xác nhận",
"provider.connect.toast.connected.title": "{{provider}} đã kết nối",
"provider.connect.toast.connected.description": "Các mô hình {{provider}} hiện đã sẵn sàng để sử dụng.",
"provider.custom.title": "Nhà cung cấp tùy chỉnh",
"provider.custom.description.prefix": "Định cấu hình nhà cung cấp tương thích OpenAI. Xem ",
"provider.custom.description.link": "tài liệu cấu hình nhà cung cấp",
"provider.custom.description.suffix": ".",
"provider.custom.field.providerID.label": "ID nhà cung cấp",
"provider.custom.field.providerID.placeholder": "myprovider",
"provider.custom.field.providerID.description": "Chữ thường, số, dấu gạch nối hoặc dấu gạch dưới",
"provider.custom.field.name.label": "Tên hiển thị",
"provider.custom.field.name.placeholder": "Nhà cung cấp AI của tôi",
"provider.custom.field.baseURL.label": "URL cơ sở",
"provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1",
"provider.custom.field.apiKey.label": "Khóa API",
"provider.custom.field.apiKey.placeholder": "khóa API",
"provider.custom.field.apiKey.description": "Không bắt buộc. Để trống nếu bạn quản lý xác thực thông qua tiêu đề.",
"provider.custom.models.label": "Mô hình",
"provider.custom.models.id.label": "ID",
"provider.custom.models.id.placeholder": "model-id",
"provider.custom.models.name.label": "Tên",
"provider.custom.models.name.placeholder": "Tên hiển thị",
"provider.custom.models.remove": "Xóa mô hình",
"provider.custom.models.add": "Thêm mô hình",
"provider.custom.headers.label": "Header (tùy chọn)",
"provider.custom.headers.key.label": "Header",
"provider.custom.headers.key.placeholder": "Header-Name",
"provider.custom.headers.value.label": "Giá trị",
"provider.custom.headers.value.placeholder": "giá trị",
"provider.custom.headers.remove": "Xóa header",
"provider.custom.headers.add": "Thêm header",
"provider.custom.error.providerID.required": "Bắt buộc phải có ID nhà cung cấp",
"provider.custom.error.providerID.format": "Sử dụng chữ cái viết thường, số, dấu gạch nối hoặc dấu gạch dưới",
"provider.custom.error.providerID.exists": "ID nhà cung cấp này đã tồn tại",
"provider.custom.error.name.required": "Tên hiển thị là bắt buộc",
"provider.custom.error.baseURL.required": "Bắt buộc phải có URL cơ sở",
"provider.custom.error.baseURL.format": "Phải bắt đầu bằng http:// hoặc https://",
"provider.custom.error.required": "Bắt buộc",
"provider.custom.error.duplicate": "Trùng lặp",
"provider.disconnect.toast.disconnected.title": "{{provider}} bị ngắt kết nối",
"provider.disconnect.toast.disconnected.description": "Các mô hình {{provider}} không còn khả dụng.",
"model.tag.free": "Miễn phí",
"model.tag.latest": "Mới nhất",
"model.provider.anthropic": "Anthropic",
"model.provider.openai": "OpenAI",
"model.provider.google": "Google",
"model.provider.xai": "xAI",
"model.provider.meta": "Meta",
"model.input.text": "văn bản",
"model.input.image": "hình ảnh",
"model.input.audio": "âm thanh",
"model.input.video": "video",
"model.input.pdf": "pdf",
"model.tooltip.allows": "Cho phép: {{inputs}}",
"model.tooltip.context.label": "Ngữ cảnh",
"model.tooltip.inputs": "Đầu vào",
"model.tooltip.model": "Mô hình",
"model.tooltip.provider": "Nhà cung cấp",
"model.tooltip.reasoning": "Lý luận",
"model.tooltip.reasoning.allowed": "Cho phép suy luận",
"model.tooltip.reasoning.none": "Không hỗ trợ suy luận",
"model.tooltip.context": "Giới hạn ngữ cảnh {{limit}}",
"common.search.placeholder": "Tìm kiếm",
"common.goBack": "Quay lại",
"common.goForward": "Tiến tới",
"common.loading": "Đang tải",
"common.loading.ellipsis": "...",
"common.cancel": "Hủy",
"common.clear": "Xóa",
"common.open": "Mở",
"common.connect": "Kết nối",
"common.disconnect": "Ngắt kết nối",
"common.continue": "Tiếp tục",
"common.submit": "Gửi",
"common.save": "Lưu",
"common.saving": "Đang lưu...",
"common.default": "Mặc định",
"common.attachment": "tệp đính kèm",
"prompt.placeholder.shell": "Nhập lệnh shell... {{example}}",
"prompt.placeholder.normal": 'Hỏi bất cứ điều gì... "{{example}}"',
"prompt.placeholder.simple": "Hỏi bất cứ điều gì...",
"prompt.placeholder.summarizeComments": "Tóm tắt các bình luận…",
"prompt.placeholder.summarizeComment": "Tóm tắt bình luận…",
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Lời nhắc",
"prompt.mode.shell.exit": "esc để thoát",
"session.child.promptDisabled": "Không thể gửi lời nhắc trong phiên tác nhân phụ.",
"session.child.backToParent": "Quay lại phiên chính.",
"prompt.example.1": "Sửa TODO trong cơ sở mã",
"prompt.example.2": "Ngăn xếp công nghệ của dự án này là gì?",
"prompt.example.3": "Sửa các bài kiểm tra bị hỏng",
"prompt.example.4": "Giải thích cách xác thực hoạt động",
"prompt.example.5": "Tìm và sửa các lỗ hổng bảo mật",
"prompt.example.6": "Thêm bài kiểm tra đơn vị cho dịch vụ người dùng",
"prompt.example.7": "Tái cấu trúc hàm này để dễ đọc hơn",
"prompt.example.8": "Lỗi này có nghĩa là gì?",
"prompt.example.9": "Giúp tôi gỡ lỗi vấn đề này",
"prompt.example.10": "Tạo tài liệu API",
"prompt.example.11": "Tối ưu hóa truy vấn cơ sở dữ liệu",
"prompt.example.12": "Thêm xác thực đầu vào",
"prompt.example.13": "Tạo một thành phần mới cho...",
"prompt.example.14": "Làm cách nào để triển khai dự án này?",
"prompt.example.15": "Xem lại mã của tôi để biết các phương pháp hay nhất",
"prompt.example.16": "Thêm xử lý lỗi vào hàm này",
"prompt.example.17": "Giải thích mẫu biểu thức chính quy này",
"prompt.example.18": "Chuyển đổi cái này thành TypeScript",
"prompt.example.19": "Thêm ghi nhật ký trong toàn bộ cơ sở mã",
"prompt.example.20": "Những phụ thuộc nào đã lỗi thời?",
"prompt.example.21": "Giúp tôi viết kịch bản di chuyển",
"prompt.example.22": "Triển khai bộ nhớ đệm cho điểm cuối này",
"prompt.example.23": "Thêm phân trang vào danh sách này",
"prompt.example.24": "Tạo lệnh CLI cho...",
"prompt.example.25": "Các biến môi trường hoạt động như thế nào ở đây?",
"prompt.popover.emptyResults": "Không có kết quả phù hợp",
"prompt.popover.emptyCommands": "Không có lệnh phù hợp",
"prompt.dropzone.label": "Thả hình ảnh, tệp PDF hoặc tệp văn bản vào đây",
"prompt.dropzone.file.label": "Thả để @mention tệp",
"prompt.slash.badge.custom": "tùy chỉnh",
"prompt.slash.badge.skill": "kỹ năng",
"prompt.slash.badge.mcp": "mcp",
"prompt.context.active": "hiện hoạt",
"prompt.context.includeActiveFile": "Bao gồm tệp hiện hoạt",
"prompt.context.removeActiveFile": "Xóa tệp hiện hoạt khỏi ngữ cảnh",
"prompt.context.removeFile": "Xóa tệp khỏi ngữ cảnh",
"prompt.action.attachFile": "Thêm tệp",
"prompt.menu.addImagesAndFiles": "Thêm tệp và nội dung khác",
"prompt.menu.imagesAndFiles": "Hình ảnh và tệp",
"prompt.menu.commands": "Lệnh",
"prompt.menu.context": "Ngữ cảnh",
"prompt.menu.shellCommand": "Lệnh shell",
"prompt.attachment.remove": "Xóa tệp đính kèm",
"prompt.action.send": "Gửi",
"prompt.action.stop": "Dừng",
"prompt.toast.pasteUnsupported.title": "Tệp đính kèm không được hỗ trợ",
"prompt.toast.pasteUnsupported.description": "Chỉ có thể đính kèm hình ảnh, tệp PDF hoặc tệp văn bản ở đây.",
"prompt.toast.attachmentDuplicate.title": "Tệp này đã được tải lên",
"prompt.toast.modelAgentRequired.title": "Chọn tác nhân và mô hình",
"prompt.toast.modelAgentRequired.description": "Chọn một tác nhân và mô hình trước khi gửi lời nhắc.",
"prompt.toast.worktreeCreateFailed.title": "Không tạo được worktree",
"prompt.toast.sessionCreateFailed.title": "Không tạo được phiên",
"prompt.toast.shellSendFailed.title": "Không gửi được lệnh shell",
"prompt.toast.commandSendFailed.title": "Không gửi được lệnh",
"prompt.toast.promptSendFailed.title": "Không gửi được lời nhắc",
"prompt.toast.promptSendFailed.description": "Không thể truy xuất phiên",
"dialog.mcp.title": "MCP",
"dialog.mcp.description": "{{enabled}} trong số {{total}} đã bật",
"dialog.mcp.empty": "Không có MCP nào được định cấu hình",
"dialog.lsp.empty": "LSP được tự động phát hiện từ các loại tệp",
"dialog.plugins.empty": "Các plugin được định cấu hình trong opencode.json",
"mcp.status.connected": "đã kết nối",
"mcp.status.failed": "thất bại",
"mcp.status.needs_auth": "cần xác thực",
"mcp.status.disabled": "đã tắt",
"mcp.auth.clickToAuthenticate": "Bấm để xác thực",
"dialog.fork.empty": "Không có tin nhắn nào để phân nhánh",
"dialog.directory.search.placeholder": "Tìm kiếm thư mục",
"dialog.directory.empty": "Không tìm thấy thư mục nào",
"dialog.directory.action.selectFile": "Chọn tệp",
"dialog.directory.action.selectFolder": "Chọn thư mục",
"dialog.directory.root": "Gốc",
"dialog.directory.parent": "Thư mục mẹ",
"dialog.directory.readError": "Không thể đọc thư mục này",
"app.server.unreachable": "Không thể đạt tới {{server}}",
"app.server.retrying": "Đang tự động thử lại...",
"app.server.otherServers": "Máy chủ khác",
"dialog.server.title": "Máy chủ",
"dialog.server.description": "Chuyển máy chủ OpenCode mà ứng dụng này kết nối tới.",
"dialog.server.search.placeholder": "Tìm kiếm máy chủ",
"dialog.server.empty": "Chưa có máy chủ",
"dialog.server.add.title": "Thêm máy chủ",
"dialog.server.add.url": "Địa chỉ máy chủ",
"dialog.server.add.placeholder": "http://localhost:4096",
"dialog.server.add.error": "Không thể kết nối với máy chủ",
"dialog.server.add.checking": "Đang kiểm tra...",
"dialog.server.add.button": "Thêm máy chủ",
"dialog.server.add.name": "Tên máy chủ (tùy chọn)",
"dialog.server.add.namePlaceholder": "Máy chủ cục bộ",
"dialog.server.add.username": "Tên người dùng (tùy chọn)",
"dialog.server.add.usernamePlaceholder": "tên người dùng",
"dialog.server.add.password": "Mật khẩu (tùy chọn)",
"dialog.server.add.passwordPlaceholder": "mật khẩu",
"dialog.server.edit.title": "Chỉnh sửa máy chủ",
"dialog.server.default.title": "Máy chủ mặc định",
"dialog.server.default.description":
"Kết nối với máy chủ này khi khởi chạy ứng dụng thay vì khởi động máy chủ cục bộ. Yêu cầu khởi động lại.",
"dialog.server.default.none": "Không có máy chủ nào được chọn",
"dialog.server.default.set": "Đặt máy chủ hiện tại làm mặc định",
"dialog.server.default.clear": "Xóa",
"dialog.server.action.remove": "Xóa máy chủ",
"dialog.server.menu.edit": "Chỉnh sửa",
"dialog.server.menu.default": "Đặt làm mặc định",
"dialog.server.menu.defaultRemove": "Xóa mặc định",
"dialog.server.menu.delete": "Xóa",
"dialog.server.current": "Máy chủ hiện tại",
"dialog.server.status.default": "Mặc định",
"wsl.server.add": "Thêm máy chủ WSL",
"wsl.server.addShort": "Thêm WSL",
"wsl.server.label": "WSL",
"wsl.server.menu.label": "Máy chủ WSL",
"wsl.server.retryStart": "Thử khởi động lại",
"wsl.server.updating": "Đang cập nhật...",
"wsl.onboarding.step.distro": "Chọn bản phân phối",
"wsl.onboarding.step.opencode": "OpenCode",
"wsl.onboarding.checkingRuntime": "Đang kiểm tra WSL...",
"wsl.onboarding.restartRequired": "Windows cần khởi động lại để hoàn tất cài đặt WSL.",
"wsl.onboarding.ready": "WSL đã sẵn sàng.",
"wsl.onboarding.required": "WSL là bắt buộc để tiếp tục.",
"wsl.onboarding.checkingDistros": "Đang kiểm tra các bản phân phối...",
"wsl.onboarding.installingDistro": "Đang cài đặt {{distro}}...",
"wsl.onboarding.checkingDistro": "Đang kiểm tra {{distro}}...",
"wsl.onboarding.listingDistros": "Liệt kê các bản phân phối...",
"wsl.onboarding.distroReady": "{{distro}} đã sẵn sàng.",
"wsl.onboarding.distroNotInstalled": "{{distro}} chưa được cài đặt.",
"wsl.onboarding.openDistroOnce": "Mở {{distro}} một lần để hoàn tất thiết lập.",
"wsl.onboarding.finishingDistro": "Đang hoàn tất thiết lập cho {{distro}}.",
"wsl.onboarding.pickDistro": "Chọn một bản phân phối hoặc cài đặt một bản dưới đây.",
"wsl.onboarding.checkingOpencode": "Đang kiểm tra OpenCode...",
"wsl.onboarding.checkingOpencodeIn": "Đang kiểm tra OpenCode trong {{distro}}...",
"wsl.onboarding.updatingOpencode": "Đang cập nhật OpenCode...",
"wsl.onboarding.updatingOpencodeIn": "Đang cập nhật OpenCode trong {{distro}}...",
"wsl.onboarding.updateOpencodeIn": "Cập nhật OpenCode trong {{distro}}.",
"wsl.onboarding.updateOpencode": "Cập nhật OpenCode",
"wsl.onboarding.opencodeReadyIn": "OpenCode đã sẵn sàng trong {{distro}}.",
"wsl.onboarding.opencodeReady": "OpenCode đã sẵn sàng.",
"wsl.onboarding.installOpencodeIn": "Cài đặt OpenCode trong {{distro}}.",
"wsl.onboarding.installOpencode": "Cài đặt OpenCode",
"wsl.onboarding.chooseDistroFirst": "Chọn một bản phân phối đầu tiên.",
"wsl.onboarding.loadFailed": "Không tải được trạng thái WSL.",
"wsl.onboarding.loading": "Đang tải...",
"wsl.onboarding.installedDistros": "Các bản phân phối đã cài đặt",
"wsl.onboarding.checkAgain": "Kiểm tra lại",
"wsl.onboarding.distroStatus.ready": "Sẵn sàng",
"wsl.onboarding.distroStatus.checking": "Đang kiểm tra...",
"wsl.onboarding.distroStatus.opencodeMissing": "OpenCode chưa được cài đặt",
"wsl.onboarding.distroStatus.missingTools": "Thiếu bash, curl",
"wsl.onboarding.distroStatus.unsupported": "Không được hỗ trợ · Sử dụng WSL 2",
"wsl.onboarding.needAnotherDistro": "Cần một bản phân phối khác?",
"wsl.onboarding.needAnotherDistroHint": "Cài đặt bản phân phối Linux từ danh mục WSL",
"wsl.onboarding.wslNotInstalled.title": "WSL chưa được cài đặt",
"wsl.onboarding.wslNotInstalled.description":
"Cần có WSL (Hệ thống con Windows dành cho Linux) trước khi OpenCode có thể thêm máy chủ WSL",
"wsl.onboarding.wslUnavailable.title": "WSL không có sẵn",
"wsl.onboarding.wslUnavailable.description": "OpenCode không thể xác minh WSL trên máy này.",
"wsl.onboarding.installWsl": "Cài đặt WSL",
"wsl.onboarding.windowsRestartRequired": "Khởi động lại Windows để hoàn tất cài đặt WSL, sau đó mở lại OpenCode.",
"wsl.onboarding.next": "Tiếp theo",
"wsl.onboarding.refresh": "Làm mới",
"wsl.onboarding.allDistrosAdded": "Tất cả các bản phân phối đã cài đặt đều đã được thêm vào.",
"wsl.onboarding.noDistros": "Chưa phát hiện thấy bản phân phối nào.",
"wsl.onboarding.install": "Cài đặt",
"wsl.onboarding.installing": "Đang cài đặt...",
"wsl.onboarding.installDistro": "Cài đặt bản phân phối",
"wsl.onboarding.searchDistros": "Tìm kiếm bản phân phối",
"wsl.onboarding.wsl2Required": "WSL 2 là bắt buộc.",
"wsl.onboarding.toolsRequired": "Bản phân phối này cần bash và curl.",
"wsl.onboarding.openTerminal": "Mở terminal",
"wsl.onboarding.path": "Đường dẫn: {{path}}",
"wsl.onboarding.notFound": "không tìm thấy",
"wsl.onboarding.version": "Phiên bản: {{version}}",
"wsl.onboarding.unknown": "không rõ",
"wsl.onboarding.desktopVersion": "Desktop {{version}}",
"wsl.onboarding.versionMismatch": "Phiên bản đã cài đặt không khớp với phiên bản ứng dụng desktop.",
"wsl.onboarding.adding": "Đang thêm...",
"server.row.noUsername": "không có tên người dùng",
"dialog.project.edit.title": "Chỉnh sửa dự án",
"dialog.project.edit.name": "Tên",
"dialog.project.edit.icon": "Biểu tượng",
"dialog.project.edit.icon.alt": "Biểu tượng dự án",
"dialog.project.edit.icon.hint": "Nhấp hoặc kéo hình ảnh",
"dialog.project.edit.icon.recommended": "Khuyến nghị: 128x128px",
"dialog.project.edit.color": "Màu sắc",
"dialog.project.edit.color.select": "Chọn màu {{color}}",
"dialog.project.edit.worktree.startup": "Tập lệnh khởi động không gian làm việc",
"dialog.project.edit.worktree.startup.description": "Chạy sau khi tạo không gian làm việc mới (worktree).",
"dialog.project.edit.worktree.startup.placeholder": "ví dụ: bun install",
"dialog.releaseNotes.action.getStarted": "Bắt đầu",
"dialog.releaseNotes.action.next": "Tiếp theo",
"dialog.releaseNotes.action.hideFuture": "Không hiển thị lại",
"dialog.releaseNotes.media.alt": "Xem trước bản phát hành",
"context.breakdown.title": "Phân tích ngữ cảnh",
"context.breakdown.note":
'Phân tích gần đúng của token đầu vào. "Khác" bao gồm các định nghĩa công cụ và chi phí chung.',
"context.breakdown.system": "Hệ thống",
"context.breakdown.user": "Người dùng",
"context.breakdown.assistant": "Trợ lý",
"context.breakdown.tool": "Lệnh gọi công cụ",
"context.breakdown.other": "Khác",
"context.systemPrompt.title": "Lời nhắc hệ thống",
"context.rawMessages.title": "Tin nhắn thô",
"context.stats.session": "Phiên",
"context.stats.messages": "Tin nhắn",
"context.stats.provider": "Nhà cung cấp",
"context.stats.model": "Mô hình",
"context.stats.limit": "Giới hạn ngữ cảnh",
"context.stats.totalTokens": "Tổng số token",
"context.stats.usage": "Mức sử dụng",
"context.stats.inputTokens": "Token đầu vào",
"context.stats.outputTokens": "Token đầu ra",
"context.stats.reasoningTokens": "Token lý luận",
"context.stats.cacheTokens": "Token bộ đệm (đọc/ghi)",
"context.stats.userMessages": "Tin nhắn của người dùng",
"context.stats.assistantMessages": "Tin nhắn trợ lý",
"context.stats.totalCost": "Tổng chi phí",
"context.stats.sessionCreated": "Đã tạo phiên",
"context.stats.lastActivity": "Hoạt động cuối cùng",
"context.usage.tokens": "Token",
"context.usage.usage": "Mức sử dụng",
"context.usage.cost": "Chi phí",
"context.usage.clickToView": "Nhấn vào đây để xem ngữ cảnh",
"context.usage.view": "Xem cách sử dụng ngữ cảnh",
"language.en": "English",
"language.zh": "简体中文",
"language.zht": "繁體中文",
"language.ko": "한국어",
"language.de": "Deutsch",
"language.es": "Español",
"language.fr": "Français",
"language.da": "Dansk",
"language.ja": "日本語",
"language.pl": "Polski",
"language.ru": "Русский",
"language.ar": "العربية",
"language.no": "Norsk",
"language.br": "Português (Brasil)",
"language.bs": "Bosanski",
"language.uk": "Українська",
"language.th": "ไทย",
"language.tr": "Türkçe",
"toast.language.title": "Ngôn ngữ",
"toast.language.description": "Đã chuyển sang {{language}}",
"toast.theme.title": "Đã chuyển chủ đề",
"toast.scheme.title": "Cách phối màu",
"toast.workspace.enabled.title": "Đã bật không gian làm việc",
"toast.workspace.enabled.description": "Nhiều worktree hiện được hiển thị trên thanh bên",
"toast.workspace.disabled.title": "Đã tắt không gian làm việc",
"toast.workspace.disabled.description": "Chỉ worktree chính được hiển thị trong thanh bên",
"toast.permissions.autoaccept.on.title": "Tự động chấp nhận quyền",
"toast.permissions.autoaccept.on.description": "Yêu cầu quyền sẽ được tự động phê duyệt",
"toast.permissions.autoaccept.off.title": "Đã dừng quyền tự động chấp nhận",
"toast.permissions.autoaccept.off.description": "Yêu cầu quyền sẽ cần được phê duyệt",
"toast.model.none.title": "Không có mô hình nào được chọn",
"toast.model.none.description": "Kết nối nhà cung cấp để tóm tắt phiên này",
"toast.file.loadFailed.title": "Không tải được tệp",
"toast.file.listFailed.title": "Không thể liệt kê các tệp",
"toast.context.noLineSelection.title": "Không có lựa chọn dòng",
"toast.context.noLineSelection.description": "Trước tiên, hãy chọn một phạm vi dòng trong tab tệp.",
"toast.session.share.copyFailed.title": "Không sao chép được URL vào bảng tạm",
"toast.session.share.success.title": "Đã chia sẻ phiên",
"toast.session.share.success.description": "Đã sao chép URL chia sẻ vào bảng tạm!",
"toast.session.share.failed.title": "Không thể chia sẻ phiên",
"toast.session.share.failed.description": "Đã xảy ra lỗi khi chia sẻ phiên",
"toast.session.unshare.success.title": "Đã ngừng chia sẻ phiên",
"toast.session.unshare.success.description": "Đã hủy chia sẻ phiên thành công!",
"toast.session.unshare.failed.title": "Không hủy chia sẻ được phiên",
"toast.session.unshare.failed.description": "Đã xảy ra lỗi khi hủy chia sẻ phiên",
"toast.session.listFailed.title": "Không thể tải phiên cho {{project}}",
"toast.project.reloadFailed.title": "Không thể tải lại {{project}}",
"toast.update.title": "Đã có bản cập nhật",
"toast.update.description": "Hiện đã có phiên bản mới của OpenCode ({{version}}) để cài đặt.",
"toast.update.action.installRestart": "Cài đặt và khởi động lại",
"toast.update.action.notYet": "Chưa",
"error.page.title": "Đã xảy ra lỗi",
"error.page.description": "Đã xảy ra lỗi khi tải ứng dụng.",
"error.page.description.localServerStartup": "Đã xảy ra lỗi khi khởi động máy chủ cục bộ.",
"error.page.details.label": "Chi tiết lỗi",
"error.page.action.restart": "Khởi động lại",
"error.page.action.report": "Báo cáo lỗi",
"error.page.action.reported": "Đã báo lỗi",
"error.page.action.exportLogs": "Xuất nhật ký",
"error.page.action.checking": "Đang kiểm tra...",
"error.page.action.checkUpdates": "Kiểm tra các bản cập nhật",
"error.page.action.updateTo": "Cập nhật lên {{version}}",
"error.page.circular": "[Vòng lặp]",
"error.page.report.prefix": "Vui lòng báo cáo lỗi này cho nhóm OpenCode",
"error.page.report.discord": "trên Discord",
"error.page.version": "Phiên bản: {{version}}",
"error.dev.rootNotFound":
"Không tìm thấy phần tử gốc. Bạn đã quên thêm nó vào index.html của mình? Hoặc có thể thuộc tính id bị sai chính tả?",
"error.serverSync.connectFailed": "Không thể kết nối với máy chủ. Có máy chủ nào đang chạy ở `{{url}}` không?",
"error.serverSDK.noServerAvailable": "Không có máy chủ nào",
"error.serverSDK.serverNotAvailable": "Máy chủ không có sẵn",
"error.childStore.persistedCacheCreateFailed": "Không tạo được bộ nhớ đệm bền vững",
"error.childStore.persistedProjectMetadataCreateFailed": "Không thể tạo siêu dữ liệu dự án bền vững",
"error.childStore.persistedProjectIconCreateFailed": "Không thể tạo biểu tượng dự án bền vững",
"error.childStore.storeCreateFailed": "Không tạo được kho lưu trữ",
"directory.error.invalidUrl": "Thư mục không hợp lệ trong URL.",
"error.chain.unknown": "Lỗi không xác định",
"error.server.invalidConfiguration": "Cấu hình không hợp lệ",
"error.chain.causedBy": "Gây ra bởi:",
"error.chain.apiError": "Lỗi API",
"error.chain.status": "Trạng thái: {{status}}",
"error.chain.retryable": "Có thể thử lại: {{retryable}}",
"error.chain.responseBody": "Nội dung phản hồi:\n{{body}}",
"error.chain.didYouMean": "Có phải ý bạn là: {{suggestions}}",
"error.chain.modelNotFound": "Không tìm thấy mô hình: {{provider}}/{{model}}",
"error.chain.checkConfig": "Kiểm tra tên nhà cung cấp/mô hình cấu hình (opencode.json) của bạn",
"error.chain.mcpFailed": 'Máy chủ MCP "{{name}}" gặp lỗi. Lưu ý: OpenCode chưa hỗ trợ xác thực MCP.',
"error.chain.providerAuthFailed": "Không xác thực được nhà cung cấp ({{provider}}): {{message}}",
"error.chain.providerInitFailed":
'Không khởi tạo được nhà cung cấp "{{provider}}". Kiểm tra thông tin xác thực và cấu hình.',
"error.chain.configJsonInvalid": "Tệp cấu hình tại {{path}} không phải là JSON(C) hợp lệ",
"error.chain.configJsonInvalidWithMessage": "Tệp cấu hình tại {{path}} không phải là JSON(C) hợp lệ: {{message}}",
"error.chain.configDirectoryTypo":
'Thư mục "{{dir}}" trong {{path}} không hợp lệ. Đổi tên thư mục thành "{{suggestion}}" hoặc xóa nó. Đây là một lỗi đánh máy phổ biến.',
"error.chain.configFrontmatterError": "Không thể phân tích cú pháp frontmatter trong {{path}}:\n{{message}}",
"error.chain.configInvalid": "Tệp cấu hình tại {{path}} không hợp lệ",
"error.chain.configInvalidWithMessage": "Tệp cấu hình tại {{path}} không hợp lệ: {{message}}",
"notification.permission.title": "Cần có sự cho phép",
"notification.permission.description": "{{sessionTitle}} trong {{projectName}} cần có sự cho phép",
"notification.question.title": "Câu hỏi",
"notification.question.description": "{{sessionTitle}} trong {{projectName}} có câu hỏi",
"notification.action.goToSession": "Đi đến phiên",
"notification.session.responseReady.title": "Đã sẵn sàng phản hồi",
"notification.session.error.title": "Lỗi phiên",
"notification.session.error.fallbackDescription": "Đã xảy ra lỗi",
"home.recentProjects": "dự án gần đây",
"home.empty.title": "Không có dự án gần đây",
"home.empty.description": "Bắt đầu bằng cách mở một dự án cục bộ",
"home.title": "Trang chủ",
"home.projects": "Dự án",
"home.project.add": "Thêm dự án",
"home.recentlyClosed": "Đã đóng gần đây",
"home.server.collapse": "Thu gọn các dự án máy chủ",
"home.server.expand": "Mở rộng dự án máy chủ",
"home.sessions.search.placeholder": "Tìm kiếm phiên",
"home.sessions.search.placeholder.scoped": "Tìm kiếm phiên trong {{scope}}",
"home.sessions.search.sessions": "Phiên",
"home.sessions.search.noResults": "Không tìm thấy phiên nào cho {{query}}",
"home.sessions.empty": "Chưa có gì ở đây",
"home.sessions.empty.description": "Tạo một phiên để bắt đầu",
"home.sessions.group.today": "Hôm nay",
"home.sessions.group.yesterday": "Hôm qua",
"home.sessions.group.older": "Cũ hơn",
"home.providerTip": "Kết nối với hơn 75 nhà cung cấp để sử dụng các mô hình khác, bao gồm Claude, GPT, Gemini, v.v.",
"session.tab.session": "Phiên",
"session.tab.review": "Xem lại",
"session.tab.context": "Ngữ cảnh",
"session.tab.unknown": "Phiên không xác định",
"session.panel.reviewAndFiles": "Xem lại và tệp",
"session.error.notFound": "Không thể tìm thấy phiên này",
"session.error.notFound.description": "Tab này trỏ đến một phiên không còn tồn tại trên máy chủ này.",
"session.error.notFound.closeTab": "Đóng tab",
"session.error.serverConnection": "Không thể kết nối với máy chủ này",
"session.review.filesChanged": "Số tệp đã thay đổi: {{count}}",
"session.review.change.one": "Thay đổi",
"session.review.change.other": "Thay đổi",
"session.review.loadingChanges": "Đang tải các thay đổi...",
"session.review.empty": "Chưa có thay đổi nào trong phiên này",
"session.review.noVcs": "Không phát hiện hệ thống quản lý phiên bản Git nên không thể hiển thị thay đổi",
"session.review.noVcs.createGit.title": "Tạo kho lưu trữ Git",
"session.review.noVcs.createGit.description": "Theo dõi, xem xét và hoàn tác các thay đổi trong dự án này",
"session.review.noVcs.createGit.actionLoading": "Đang tạo kho lưu trữ Git...",
"session.review.noVcs.createGit.action": "Tạo kho lưu trữ Git",
"session.review.noSnapshot":
"Theo dõi ảnh chụp nhanh bị tắt trong cấu hình, do đó các thay đổi về phiên không khả dụng",
"session.review.noChanges": "Không có thay đổi",
"session.review.noUncommittedChanges": "Chưa có thay đổi nào chưa commit",
"session.review.noBranchChanges": "Chưa có thay đổi nhánh",
"session.files.selectToOpen": "Chọn một tệp để mở",
"session.files.all": "Tất cả tệp",
"session.files.empty": "Không có tệp",
"session.files.binaryContent": "Tệp nhị phân (không thể hiển thị nội dung)",
"session.messages.renderEarlier": "Hiển thị tin nhắn trước đó",
"session.messages.loadingEarlier": "Đang tải tin nhắn trước đó...",
"session.messages.loadEarlier": "Tải tin nhắn trước đó",
"session.messages.loading": "Đang tải tin nhắn...",
"session.messages.jumpToLatest": "Chuyển đến mới nhất",
"session.context.addToContext": "Thêm {{selection}} vào ngữ cảnh",
"session.todo.title": "việc cần làm",
"session.todo.collapse": "Thu gọn",
"session.todo.expand": "Mở rộng",
"session.todo.progress": "{{done}} trong số {{total}} việc cần làm đã hoàn thành",
"session.question.progress": "{{current}} trong số {{total}} câu hỏi",
"session.question.minimize": "Giảm thiểu câu hỏi",
"session.question.restore": "Khôi phục câu hỏi",
"session.question.pending.one": "{{count}} câu hỏi đang chờ xử lý",
"session.question.pending.other": "{{count}} câu hỏi đang chờ xử lý",
"session.followupDock.summary.one": "{{count}} tin nhắn đang chờ",
"session.followupDock.summary.other": "{{count}} tin nhắn đang chờ",
"session.followupDock.sendNow": "Gửi ngay bây giờ",
"session.followupDock.edit": "Chỉnh sửa",
"session.followupDock.collapse": "Thu gọn tin nhắn đang chờ",
"session.followupDock.expand": "Mở rộng tin nhắn đang chờ",
"session.revertDock.summary.one": "{{count}} tin nhắn đã hoàn tác",
"session.revertDock.summary.other": "{{count}} tin nhắn đã hoàn tác",
"session.revertDock.collapse": "Thu gọn tin nhắn đã hoàn tác",
"session.revertDock.expand": "Mở rộng tin nhắn đã hoàn tác",
"session.revertDock.restore": "Khôi phục tin nhắn",
"session.new.title": "Xây dựng bất cứ thứ gì",
"session.new.project.new": "Dự án mới",
"session.new.project.search": "Tìm kiếm dự án",
"session.new.project.add": "Thêm dự án",
"session.new.worktree.main": "Nhánh chính",
"session.new.worktree.mainWithBranch": "Nhánh chính ({{branch}})",
"session.new.worktree.create": "Tạo mới worktree",
"session.new.workspace.runIn": "Chạy phiên trong",
"session.new.workspace.triggerLocal": "Cục bộ",
"session.new.workspace.local": "Kho lưu trữ cục bộ",
"session.new.workspace.existing": "Không gian làm việc…",
"session.new.git.none": "Không dùng Git",
"session.new.lastModified": "Sửa đổi lần cuối",
"session.header.search.placeholder": "Tìm kiếm {{project}}",
"session.header.searchFiles": "Tìm kiếm tệp",
"session.header.openIn": "Mở trong",
"session.header.open.action": "Mở {{app}}",
"session.header.open.ariaLabel": "Mở trong {{app}}",
"session.header.open.menu": "Tùy chọn mở",
"session.header.open.copyPath": "Sao chép đường dẫn",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "File Explorer",
"session.header.open.fileManager": "Trình quản lý tệp",
"session.header.reveal.finder": "Hiển thị trong Finder",
"session.header.reveal.fileExplorer": "Hiển thị trong File Explorer",
"session.header.reveal.containingFolder": "Mở thư mục chứa",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
"session.header.open.app.zed": "Zed",
"session.header.open.app.textmate": "TextMate",
"session.header.open.app.antigravity": "Antigravity",
"session.header.open.app.terminal": "Terminal",
"session.header.open.app.iterm2": "iTerm2",
"session.header.open.app.ghostty": "Ghostty",
"session.header.open.app.warp": "Warp",
"session.header.open.app.xcode": "Xcode",
"session.header.open.app.androidStudio": "Android Studio",
"session.header.open.app.powershell": "PowerShell",
"session.header.open.app.sublimeText": "Sublime Text",
"status.popover.trigger": "Trạng thái",
"status.popover.ariaLabel": "Cấu hình máy chủ",
"status.popover.tab.servers": "Máy chủ",
"status.popover.tab.mcp": "MCP",
"status.popover.tab.lsp": "LSP",
"status.popover.tab.plugins": "Plugin",
"status.popover.action.manageServers": "Quản lý máy chủ",
"session.share.popover.title": "Xuất bản trên web",
"session.share.popover.description.shared":
"Phiên này được công khai trên web. Nó có thể truy cập được bởi bất kỳ ai có liên kết.",
"session.share.popover.description.unshared":
"Chia sẻ phiên công khai trên web. Nó sẽ có thể truy cập được bởi bất kỳ ai có liên kết.",
"session.share.action.share": "Chia sẻ",
"session.share.action.publish": "Xuất bản",
"session.share.action.publishing": "Đang xuất bản...",
"session.share.action.unpublish": "Hủy xuất bản",
"session.share.action.unpublishing": "Đang hủy xuất bản...",
"session.share.action.view": "Xem",
"session.share.copy.copied": "Đã sao chép",
"session.share.copy.copyLink": "Sao chép liên kết",
"lsp.tooltip.none": "Không có máy chủ LSP",
"lsp.label.connected": "{{count}} LSP",
"prompt.loading": "Đang tải lời nhắc...",
"terminal.loading": "Đang tải terminal...",
"terminal.title": "Terminal",
"terminal.title.numbered": "Terminal {{number}}",
"terminal.close": "Đóng terminal",
"terminal.connectionLost.title": "Mất kết nối",
"terminal.connectionLost.abnormalClose": "WebSocket đóng bất thường: {{code}}",
"terminal.connectionLost.description":
"Kết nối terminal bị gián đoạn. Điều này có thể xảy ra khi máy chủ khởi động lại.",
"common.closeTab": "Đóng tab",
"common.dismiss": "Bỏ qua",
"common.moreCountSuffix": " (+{{count}} thêm)",
"common.requestFailed": "Không thực hiện được yêu cầu",
"common.moreOptions": "Nhiều lựa chọn hơn",
"common.learnMore": "Tìm hiểu thêm",
"common.rename": "Đổi tên",
"common.reset": "Đặt lại",
"common.archive": "Lưu trữ",
"common.delete": "Xóa",
"common.close": "Đóng",
"common.edit": "Chỉnh sửa",
"common.loadMore": "Tải thêm",
"common.key.esc": "ESC",
"common.key.ctrl": "Ctrl",
"common.key.alt": "Alt",
"common.key.shift": "Shift",
"common.key.meta": "Meta",
"common.key.space": "Phím cách",
"common.key.backspace": "Backspace",
"common.key.enter": "Enter",
"common.key.tab": "Tab",
"common.key.delete": "Delete",
"common.key.home": "Home",
"common.key.end": "End",
"common.key.pageUp": "Page Up",
"common.key.pageDown": "Page Down",
"common.key.insert": "Insert",
"common.unknown": "không rõ",
"common.time.justNow": "Vừa rồi",
"common.time.minutesAgo.short": "{{count}} phút trước",
"common.time.hoursAgo.short": "{{count}} giờ trước",
"common.time.daysAgo.short": "{{count}} ngày trước",
"sidebar.menu.toggle": "Bật/tắt menu",
"sidebar.nav.projectsAndSessions": "Dự án và phiên",
"sidebar.settings": "Cài đặt",
"sidebar.help": "Trợ giúp",
"sidebar.workspaces.enable": "Bật không gian làm việc",
"sidebar.workspaces.disable": "Tắt không gian làm việc",
"sidebar.gettingStarted.title": "Bắt đầu",
"sidebar.gettingStarted.line1": "OpenCode bao gồm các mô hình miễn phí để bạn có thể bắt đầu ngay lập tức.",
"sidebar.gettingStarted.line2":
"Kết nối với bất kỳ nhà cung cấp nào để sử dụng các mô hình như Claude, GPT, Gemini, v.v.",
"sidebar.project.recentSessions": "Phiên gần đây",
"sidebar.project.viewAllSessions": "Xem tất cả các phiên",
"sidebar.project.clearNotifications": "Xóa thông báo",
"sidebar.empty.title": "Không có dự án nào mở",
"sidebar.empty.description": "Mở một dự án để bắt đầu",
"debugBar.ariaLabel": "Chẩn đoán hiệu suất phát triển",
"debugBar.na": "không có",
"debugBar.nav.label": "NAV",
"debugBar.nav.tip":
"Lần chuyển tuyến hoàn tất gần nhất có truy cập trang phiên, được đo từ lúc bộ định tuyến bắt đầu đến khung hình đầu tiên sau khi ổn định.",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "Số khung hình mỗi giây trong 5 giây qua.",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "Thời gian tạo khung hình tệ nhất trong 5 giây vừa qua.",
"debugBar.jank.label": "JANK",
"debugBar.jank.tip": "Số khung hình mất hơn 32ms trong 5 giây qua.",
"debugBar.long.label": "LONG",
"debugBar.long.tip": "Thời gian bị chặn và số lượng nhiệm vụ dài trong 5 giây qua. Nhiệm vụ tối đa: {{max}}.",
"debugBar.delay.label": "DELAY",
"debugBar.delay.tip": "Độ trễ đầu vào được quan sát tồi tệ nhất trong 5 giây qua.",
"debugBar.inp.label": "INP",
"debugBar.inp.tip":
"Thời lượng tương tác gần đúng trong 5 giây qua. Đây giống như INP, không phải là Web Vitals chính thức INP.",
"debugBar.cls.label": "CLS",
"debugBar.cls.tip": "Sự thay đổi bố cục tích lũy cho thời gian tồn tại của ứng dụng hiện tại.",
"debugBar.mem.label": "MEM",
"debugBar.mem.tipUnavailable": "Bộ nhớ heap JS đã dùng so với giới hạn heap. Chỉ hỗ trợ Chromium.",
"debugBar.mem.tip": "Đã sử dụng JS heap so với giới hạn heap. {{used}} của {{limit}}.",
"app.name.desktop": "OpenCode Desktop",
"settings.section.desktop": "Desktop",
"settings.section.server": "Máy chủ",
"settings.tab.general": "Tổng quan",
"settings.tab.shortcuts": "Phím tắt",
"settings.desktop.section.wsl": "WSL",
"settings.desktop.wsl.title": "WSL tích hợp",
"settings.desktop.wsl.description": "Chạy máy chủ OpenCode bên trong WSL trên Windows.",
"settings.general.section.appearance": "Giao diện",
"settings.general.section.advanced": "Nâng cao",
"settings.general.section.notifications": "Thông báo hệ thống",
"settings.general.section.updates": "Cập nhật",
"settings.general.section.sounds": "Hiệu ứng âm thanh",
"settings.general.section.feed": "Nguồn cấp",
"settings.general.section.display": "Hiển thị",
"settings.general.row.language.title": "Ngôn ngữ",
"settings.general.row.language.description": "Thay đổi ngôn ngữ hiển thị cho OpenCode",
"settings.general.row.shell.title": "Shell terminal",
"settings.general.row.shell.description": "Shell được terminal và các công cụ của tác nhân sử dụng",
"settings.general.row.shell.autoDefault": "Tự động (Mặc định)",
"settings.general.row.shell.terminalOnly": "chỉ terminal",
"settings.general.row.appearance.title": "Giao diện",
"settings.general.row.appearance.description": "Tùy chỉnh giao diện của OpenCode trên thiết bị",
"settings.general.row.colorScheme.title": "Cách phối màu",
"settings.general.row.colorScheme.description": "Chọn xem OpenCode tuân theo hệ thống, chủ đề sáng hay tối",
"settings.general.row.theme.title": "Chủ đề",
"settings.general.row.theme.description": "Tùy chỉnh chủ đề của OpenCode.",
"settings.general.row.font.title": "Phông chữ mã",
"settings.general.row.font.description": "Tùy chỉnh phông chữ được sử dụng trong khối mã",
"settings.general.row.terminalFont.title": "Phông chữ terminal",
"settings.general.row.terminalFont.description": "Tùy chỉnh phông chữ được sử dụng trong terminal",
"settings.general.row.uiFont.title": "Phông chữ giao diện",
"settings.general.row.uiFont.description": "Tùy chỉnh phông chữ dùng trong toàn bộ giao diện",
"settings.general.row.followup.title": "Cách xử lý lời nhắc tiếp theo",
"settings.general.row.followup.description":
"Chọn để lời nhắc tiếp theo điều hướng phiên ngay lập tức hoặc chờ trong hàng đợi",
"settings.general.row.followup.option.queue": "Xếp hàng",
"settings.general.row.followup.option.steer": "Điều hướng",
"settings.general.row.showFileTree.title": "Cây tệp",
"settings.general.row.showFileTree.description": "Hiển thị bảng cây tệp trong phiên",
"settings.general.row.showNavigation.title": "Điều khiển điều hướng",
"settings.general.row.showNavigation.description":
"Hiển thị các nút quay lại và tiến lên trên thanh tiêu đề của màn hình",
"settings.general.row.showSearch.title": "Bảng lệnh",
"settings.general.row.showSearch.description": "Hiển thị nút bảng tìm kiếm và lệnh trong thanh tiêu đề",
"settings.general.row.showTerminal.title": "Terminal",
"settings.general.row.showTerminal.description": "Hiển thị nút terminal trên thanh tiêu đề của ứng dụng desktop",
"settings.general.row.showStatus.title": "Trạng thái máy chủ",
"settings.general.row.showStatus.description": "Hiển thị nút trạng thái máy chủ trên thanh tiêu đề",
"settings.general.row.mobileTitlebarBottom.title": "Điều hướng dưới cùng",
"settings.general.row.mobileTitlebarBottom.description":
"Đặt thanh tiêu đề và tab phiên ở cuối màn hình trên thiết bị di động",
"settings.general.row.showCustomAgents.title": "Hiển thị tác nhân",
"settings.general.row.showCustomAgents.description":
"Chuyển đổi giữa các tác nhân trong trình soạn thảo. Khi ẩn, tác nhân mặc định là Build.",
"settings.general.row.reasoningSummaries.title": "Hiển thị tóm tắt lý luận",
"settings.general.row.reasoningSummaries.description": "Hiển thị tóm tắt lý luận mô hình trong dòng thời gian",
"settings.general.row.shellToolPartsExpanded.title": "Mở rộng các phần của công cụ shell",
"settings.general.row.shellToolPartsExpanded.description":
"Hiển thị các phần công cụ shell được mở rộng theo mặc định trong dòng thời gian",
"settings.general.row.editToolPartsExpanded.title": "Mở rộng các phần công cụ chỉnh sửa",
"settings.general.row.editToolPartsExpanded.description":
"Hiển thị các phần công cụ chỉnh sửa, viết và vá lỗi được mở rộng theo mặc định trong dòng thời gian",
"settings.general.row.newInterface.title": "Bố cục mới",
"settings.general.row.newInterface.badge": "Mới",
"settings.general.row.newInterface.description":
"Sử dụng các tab mới và bố cục trang chủ. Chuyển đổi giữa các bố cục trong một thời gian giới hạn.",
"settings.general.row.newInterfaceNotice.title": "Bạn hiện đang sử dụng bố cục mới",
"settings.general.row.newInterfaceNotice.description": "Bố cục trước đó không còn khả dụng",
"settings.general.row.newInterfaceNotice.dismiss": "Bỏ qua",
"settings.general.row.pinchZoom.title": "Chụm để thu phóng",
"settings.general.row.pinchZoom.description": "Cho phép chụm bàn di chuột và cử chỉ cuộn Ctrl để thu phóng",
"settings.general.row.wayland.title": "Sử dụng Wayland gốc",
"settings.general.row.wayland.description": "Tắt tính năng dự phòng X11 trên Wayland. Yêu cầu khởi động lại.",
"settings.general.row.wayland.tooltip":
"Trên Linux với màn hình có tốc độ làm mới hỗn hợp, Wayland gốc có thể ổn định hơn.",
"settings.general.row.releaseNotes.title": "Ghi chú phát hành",
"settings.general.row.releaseNotes.description": "Hiển thị cửa sổ bật lên Có gì mới sau khi cập nhật",
"settings.updates.row.startup.title": "Kiểm tra cập nhật khi khởi động",
"settings.updates.row.startup.description": "Tự động kiểm tra các bản cập nhật khi OpenCode khởi chạy",
"settings.updates.row.check.title": "Kiểm tra các bản cập nhật",
"settings.updates.row.check.description": "Kiểm tra thủ công các bản cập nhật và cài đặt nếu có",
"settings.updates.action.checkNow": "Kiểm tra ngay",
"settings.updates.action.checking": "Đang kiểm tra...",
"settings.updates.action.downloading": "Đang tải xuống...",
"settings.updates.action.installing": "Đang cài đặt...",
"settings.updates.toast.latest.title": "Đã cập nhật",
"settings.updates.toast.latest.description": "Bạn đang chạy phiên bản mới nhất của OpenCode.",
"sound.option.none": "Không có",
"sound.option.alert01": "Alert 01",
"sound.option.alert02": "Alert 02",
"sound.option.alert03": "Alert 03",
"sound.option.alert04": "Alert 04",
"sound.option.alert05": "Alert 05",
"sound.option.alert06": "Alert 06",
"sound.option.alert07": "Alert 07",
"sound.option.alert08": "Alert 08",
"sound.option.alert09": "Alert 09",
"sound.option.alert10": "Alert 10",
"sound.option.bipbop01": "Bip-bop 01",
"sound.option.bipbop02": "Bip-bop 02",
"sound.option.bipbop03": "Bip-bop 03",
"sound.option.bipbop04": "Bip-bop 04",
"sound.option.bipbop05": "Bip-bop 05",
"sound.option.bipbop06": "Bip-bop 06",
"sound.option.bipbop07": "Bip-bop 07",
"sound.option.bipbop08": "Bip-bop 08",
"sound.option.bipbop09": "Bip-bop 09",
"sound.option.bipbop10": "Bip-bop 10",
"sound.option.staplebops01": "Staplebops 01",
"sound.option.staplebops02": "Staplebops 02",
"sound.option.staplebops03": "Staplebops 03",
"sound.option.staplebops04": "Staplebops 04",
"sound.option.staplebops05": "Staplebops 05",
"sound.option.staplebops06": "Staplebops 06",
"sound.option.staplebops07": "Staplebops 07",
"sound.option.nope01": "Nope 01",
"sound.option.nope02": "Nope 02",
"sound.option.nope03": "Nope 03",
"sound.option.nope04": "Nope 04",
"sound.option.nope05": "Nope 05",
"sound.option.nope06": "Nope 06",
"sound.option.nope07": "Nope 07",
"sound.option.nope08": "Nope 08",
"sound.option.nope09": "Nope 09",
"sound.option.nope10": "Nope 10",
"sound.option.nope11": "Nope 11",
"sound.option.nope12": "Nope 12",
"sound.option.yup01": "Yup 01",
"sound.option.yup02": "Yup 02",
"sound.option.yup03": "Yup 03",
"sound.option.yup04": "Yup 04",
"sound.option.yup05": "Yup 05",
"sound.option.yup06": "Yup 06",
"settings.general.notifications.agent.title": "Tác nhân",
"settings.general.notifications.agent.description":
"Hiển thị thông báo hệ thống khi tác nhân hoàn thành hoặc cần chú ý",
"settings.general.notifications.permissions.title": "Quyền",
"settings.general.notifications.permissions.description": "Hiển thị thông báo hệ thống khi cần có sự cho phép",
"settings.general.notifications.errors.title": "Lỗi",
"settings.general.notifications.errors.description": "Hiển thị thông báo hệ thống khi xảy ra lỗi",
"settings.general.sounds.agent.title": "Tác nhân",
"settings.general.sounds.agent.description": "Phát âm thanh khi tác nhân hoàn thành hoặc cần chú ý",
"settings.general.sounds.permissions.title": "Quyền",
"settings.general.sounds.permissions.description": "Phát âm thanh khi cần có sự cho phép",
"settings.general.sounds.errors.title": "Lỗi",
"settings.general.sounds.errors.description": "Phát âm thanh khi xảy ra lỗi",
"settings.shortcuts.title": "Phím tắt",
"settings.shortcuts.reset.button": "Đặt lại về mặc định",
"settings.shortcuts.reset.toast.title": "Đặt lại phím tắt",
"settings.shortcuts.reset.toast.description": "Phím tắt đã được đặt lại về mặc định.",
"settings.shortcuts.conflict.title": "Phím tắt đã được sử dụng",
"settings.shortcuts.conflict.description": "{{keybind}} đã được gán cho {{titles}}.",
"settings.shortcuts.unassigned": "Chưa được chỉ định",
"settings.shortcuts.pressKeys": "Nhấn phím",
"settings.shortcuts.search.placeholder": "Tìm kiếm phím tắt",
"settings.shortcuts.search.empty": "Không tìm thấy phím tắt",
"settings.shortcuts.group.general": "Tổng quan",
"settings.shortcuts.group.session": "Phiên",
"settings.shortcuts.group.navigation": "Điều hướng",
"settings.shortcuts.group.modelAndAgent": "Mô hình và tác nhân",
"settings.shortcuts.group.terminal": "Terminal",
"settings.shortcuts.group.prompt": "Lời nhắc",
"settings.providers.title": "Nhà cung cấp",
"settings.providers.description": "Cài đặt nhà cung cấp sẽ được cấu hình ở đây.",
"settings.providers.section.connected": "Nhà cung cấp được kết nối",
"settings.providers.connected.empty": "Không có nhà cung cấp được kết nối",
"settings.providers.connected.environmentDescription": "Đã kết nối từ các biến môi trường của bạn",
"settings.providers.section.popular": "Nhà cung cấp phổ biến",
"settings.providers.custom.description": "Thêm nhà cung cấp tương thích OpenAI bằng URL cơ sở.",
"settings.providers.tag.environment": "Môi trường",
"settings.providers.tag.config": "Cấu hình",
"settings.providers.tag.custom": "Tùy chỉnh",
"settings.providers.tag.other": "Khác",
"settings.models.title": "Mô hình",
"settings.models.description": "Cài đặt mô hình sẽ được cấu hình ở đây.",
"settings.agents.title": "Tác nhân",
"settings.agents.description": "Cài đặt tác nhân sẽ được cấu hình ở đây.",
"settings.commands.title": "Lệnh",
"settings.commands.description": "Cài đặt lệnh sẽ được cấu hình ở đây.",
"settings.mcp.title": "MCP",
"settings.mcp.description": "Có thể cấu hình cài đặt MCP tại đây.",
"settings.permissions.title": "Quyền",
"settings.permissions.description": "Kiểm soát những công cụ mà máy chủ có thể sử dụng theo mặc định.",
"settings.permissions.section.tools": "Công cụ",
"settings.permissions.toast.updateFailed.title": "Không cập nhật được quyền",
"settings.permissions.action.allow": "Cho phép",
"settings.permissions.action.ask": "Hỏi",
"settings.permissions.action.deny": "Từ chối",
"settings.permissions.tool.read.title": "Đọc",
"settings.permissions.tool.read.description": "Đọc một tệp (khớp với đường dẫn tệp)",
"settings.permissions.tool.edit.title": "Chỉnh sửa",
"settings.permissions.tool.edit.description": "Sửa đổi tệp, bao gồm chỉnh sửa, ghi và vá lỗi",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "Khớp tệp bằng mẫu glob",
"settings.permissions.tool.grep.title": "Grep",
"settings.permissions.tool.grep.description": "Tìm kiếm nội dung tệp bằng cách sử dụng biểu thức thông thường",
"settings.permissions.tool.list.title": "Danh sách",
"settings.permissions.tool.list.description": "Liệt kê các tệp trong một thư mục",
"settings.permissions.tool.bash.title": "Bash",
"settings.permissions.tool.bash.description": "Chạy lệnh shell",
"settings.permissions.tool.task.title": "Nhiệm vụ",
"settings.permissions.tool.task.description": "Khởi chạy tác nhân phụ",
"settings.permissions.tool.skill.title": "Kỹ năng",
"settings.permissions.tool.skill.description": "Tải một kỹ năng theo tên",
"settings.permissions.tool.lsp.title": "LSP",
"settings.permissions.tool.lsp.description": "Chạy truy vấn máy chủ ngôn ngữ",
"settings.permissions.tool.todowrite.title": "Ghi việc cần làm",
"settings.permissions.tool.todowrite.description": "Cập nhật danh sách việc cần làm",
"settings.permissions.tool.webfetch.title": "Tìm nạp web",
"settings.permissions.tool.webfetch.description": "Tìm nạp nội dung từ URL",
"settings.permissions.tool.websearch.title": "Tìm kiếm trên web",
"settings.permissions.tool.websearch.description": "Tìm kiếm trên web",
"settings.permissions.tool.external_directory.title": "Thư mục bên ngoài",
"settings.permissions.tool.external_directory.description": "Truy cập các tệp bên ngoài thư mục dự án",
"settings.permissions.tool.doom_loop.title": "Vòng lặp vô hạn",
"settings.permissions.tool.doom_loop.description":
"Phát hiện các lệnh gọi công cụ lặp lại với đầu vào giống hệt nhau",
"session.delete.failed.title": "Không thể xóa phiên",
"session.delete.title": "Xóa phiên",
"session.delete.confirm": 'Xóa phiên "{{name}}"?',
"session.delete.button": "Xóa phiên",
"workspace.new": "Không gian làm việc mới",
"workspace.type.local": "cục bộ",
"workspace.type.sandbox": "sandbox",
"workspace.create.failed.title": "Không tạo được không gian làm việc",
"workspace.delete.failed.title": "Không xóa được không gian làm việc",
"workspace.resetting.title": "Đặt lại không gian làm việc",
"workspace.resetting.description": "Việc này có thể mất một phút.",
"workspace.reset.failed.title": "Không thể đặt lại không gian làm việc",
"workspace.reset.success.title": "Đặt lại không gian làm việc",
"workspace.reset.success.description": "Không gian làm việc bây giờ khớp với nhánh mặc định.",
"workspace.error.stillPreparing": "Không gian làm việc vẫn đang chuẩn bị",
"workspace.status.checking": "Đang kiểm tra các thay đổi chưa được hợp nhất...",
"workspace.status.error": "Không thể xác minh trạng thái git.",
"workspace.status.clean": "Không phát hiện thấy thay đổi chưa hợp nhất nào.",
"workspace.status.dirty": "Đã phát hiện thấy các thay đổi chưa được hợp nhất trong không gian làm việc này.",
"workspace.delete.title": "Xóa không gian làm việc",
"workspace.delete.confirm": 'Xóa không gian làm việc "{{name}}"?',
"workspace.delete.button": "Xóa không gian làm việc",
"workspace.reset.title": "Đặt lại không gian làm việc",
"workspace.reset.confirm": 'Đặt lại không gian làm việc "{{name}}"?',
"workspace.reset.button": "Đặt lại không gian làm việc",
"workspace.reset.archived.none": "Không có phiên hoạt động nào sẽ được lưu trữ.",
"workspace.reset.archived.one": "1 phiên sẽ được lưu trữ.",
"workspace.reset.archived.many": "{{count}} phiên sẽ được lưu trữ.",
"workspace.reset.note": "Điều này sẽ thiết lập lại không gian làm việc để phù hợp với nhánh mặc định.",
}
+94 -100
View File
@@ -86,8 +86,8 @@ export const dict = {
"command.model.choose": "选择模型",
"command.model.choose.description": "选择不同的模型",
"command.mcp.toggle": "启用或禁用 MCP 服务器",
"command.mcp.toggle.description": "启用或禁用 MCP 服务器",
"command.mcp.toggle": "切换 MCPs",
"command.mcp.toggle.description": "切换 MCPs",
"command.agent.cycle": "切换智能体",
"command.agent.cycle.description": "切换到下一个智能体",
@@ -110,9 +110,9 @@ export const dict = {
"command.session.undo.description": "撤销上一条消息",
"command.session.redo": "重做",
"command.session.redo.description": "重做上一条撤销的消息",
"command.session.compact": "压缩会话",
"command.session.compact": "精简会话",
"command.session.compact.description": "总结会话以减少上下文大小",
"command.session.fork": "从消息创建新会话",
"command.session.fork": "从消息分叉",
"command.session.fork.description": "从之前的消息创建新会话",
"command.session.share": "分享会话",
"command.session.share.description": "分享此会话并将链接复制到剪贴板",
@@ -129,17 +129,16 @@ export const dict = {
"dialog.provider.empty": "未找到提供商",
"dialog.provider.group.popular": "热门",
"dialog.provider.group.other": "其他",
"dialog.provider.custom.label": "自定义 OpenAI 兼容提供商",
"dialog.provider.tag.recommended": "推荐",
"dialog.provider.opencode.note": "精选模型,包括 Claude、GPT、Gemini 等",
"dialog.provider.opencode.note": "使用 OpenCode Zen 或 API 密钥连接",
"dialog.provider.opencode.tagline": "可靠的优化模型",
"dialog.provider.opencodeGo.tagline": "适合所有人的低成本订阅",
"dialog.provider.anthropic.note": "直接使用 Claude 模型,包括 Pro 和 Max",
"dialog.provider.copilot.note": "通过 GitHub Copilot 使用辅助编程 AI 模型",
"dialog.provider.openai.note": "适合快速处理各类 AI 任务的 GPT 模型",
"dialog.provider.google.note": "可快速生成结构化回复的 Gemini 模型",
"dialog.provider.openrouter.note": "通过一个提供商使用所有受支持的模型",
"dialog.provider.vercel.note": "通过智能路由统一使用 AI 模型",
"dialog.provider.anthropic.note": "使用 Claude Pro/Max 或 API 密钥连接",
"dialog.provider.copilot.note": "使用 Copilot API 密钥连接",
"dialog.provider.openai.note": "使用 ChatGPT Pro/Plus 或 API 密钥连接",
"dialog.provider.google.note": "使用 Google 账号或 API 密钥连接",
"dialog.provider.openrouter.note": "使用 OpenRouter 账号或 API 密钥连接",
"dialog.provider.vercel.note": "使用 Vercel 账号或 API 密钥连接",
"dialog.model.select.title": "选择模型",
"dialog.model.search.placeholder": "搜索模型",
@@ -149,7 +148,6 @@ export const dict = {
"dialog.model.manage.provider.toggle": "切换所有 {{provider}} 模型",
"dialog.model.unpaid.freeModels.title": "OpenCode 提供的免费模型",
"dialog.model.unpaid.addMore.title": "从热门提供商添加更多模型",
"dialog.model.unpaid.viewMoreProviders": "查看另外 70 多个提供商",
"dialog.provider.viewAll": "查看更多提供商",
@@ -161,7 +159,7 @@ export const dict = {
"provider.connect.status.waiting": "等待授权...",
"provider.connect.status.failed": "授权失败:{{error}}",
"provider.connect.apiKey.description":
"输入你的 {{provider}} API 密钥以连接户,并在 OpenCode 中使用 {{provider}} 模型。",
"输入你的 {{provider}} API 密钥以连接户,并在 OpenCode 中使用 {{provider}} 模型。",
"provider.connect.apiKey.label": "{{provider}} API 密钥",
"provider.connect.apiKey.placeholder": "API 密钥",
"provider.connect.apiKey.required": "API 密钥为必填项",
@@ -172,14 +170,14 @@ export const dict = {
"provider.connect.opencodeZen.visit.suffix": " 获取你的 API 密钥。",
"provider.connect.oauth.code.visit.prefix": "访问 ",
"provider.connect.oauth.code.visit.link": "此链接",
"provider.connect.oauth.code.visit.suffix": " 获取授权码,以连接你的户并在 OpenCode 中使用 {{provider}} 模型。",
"provider.connect.oauth.code.visit.suffix": " 获取授权码,以连接你的户并在 OpenCode 中使用 {{provider}} 模型。",
"provider.connect.oauth.code.label": "{{method}} 授权码",
"provider.connect.oauth.code.placeholder": "授权码",
"provider.connect.oauth.code.required": "授权码为必填项",
"provider.connect.oauth.code.invalid": "授权码无效",
"provider.connect.oauth.auto.visit.prefix": "访问 ",
"provider.connect.oauth.auto.visit.link": "此链接",
"provider.connect.oauth.auto.visit.suffix": " 并输入以下代码,以连接你的户并在 OpenCode 中使用 {{provider}} 模型。",
"provider.connect.oauth.auto.visit.suffix": " 并输入以下代码,以连接你的户并在 OpenCode 中使用 {{provider}} 模型。",
"provider.connect.oauth.auto.confirmationCode": "确认码",
"provider.connect.toast.connected.title": "{{provider}} 已连接",
"provider.connect.toast.connected.description": "现在可以使用 {{provider}} 模型了。",
@@ -235,7 +233,7 @@ export const dict = {
"model.input.image": "图像",
"model.input.audio": "音频",
"model.input.video": "视频",
"model.input.pdf": "PDF",
"model.input.pdf": "pdf",
"model.tooltip.allows": "支持:{{inputs}}",
"model.tooltip.context.label": "上下文",
"model.tooltip.inputs": "输入",
@@ -255,7 +253,7 @@ export const dict = {
"common.clear": "清除",
"common.connect": "连接",
"common.disconnect": "断开连接",
"common.continue": "继续",
"common.continue": "提交",
"common.submit": "提交",
"common.save": "保存",
"common.saving": "保存中...",
@@ -318,22 +316,21 @@ export const dict = {
"prompt.action.send": "发送",
"prompt.action.stop": "停止",
"prompt.toast.pasteUnsupported.title": "不支持的附件",
"prompt.toast.attachmentDuplicate.title": "此文件已上传",
"prompt.toast.pasteUnsupported.description": "此处仅能附加图片、PDF 或文本文件。",
"prompt.toast.modelAgentRequired.title": "请选择智能体和模型",
"prompt.toast.modelAgentRequired.description": "发送提示前请先选择智能体和模型。",
"prompt.toast.worktreeCreateFailed.title": "创建工作失败",
"prompt.toast.worktreeCreateFailed.title": "创建工作失败",
"prompt.toast.sessionCreateFailed.title": "创建会话失败",
"prompt.toast.shellSendFailed.title": "发送 shell 命令失败",
"prompt.toast.commandSendFailed.title": "发送命令失败",
"prompt.toast.promptSendFailed.title": "发送提示失败",
"prompt.toast.promptSendFailed.description": "无法获取会话",
"dialog.mcp.title": "MCP 服务器",
"dialog.mcp.title": "MCPs",
"dialog.mcp.description": "已启用 {{enabled}} / {{total}}",
"dialog.mcp.empty": "未配置 MCP 服务器",
"dialog.mcp.empty": "未配置 MCPs",
"dialog.lsp.empty": "已根据文件类型自动检测 LSP",
"dialog.lsp.empty": "已文件类型自动检测 LSPs",
"dialog.plugins.empty": "在 opencode.json 中配置的插件",
@@ -343,7 +340,7 @@ export const dict = {
"mcp.auth.clickToAuthenticate": "点击进行授权",
"mcp.status.disabled": "已禁用",
"dialog.fork.empty": "没有可用于创建新会话的消息",
"dialog.fork.empty": "没有可用于分叉的消息",
"dialog.directory.search.placeholder": "搜索文件夹",
"dialog.directory.empty": "未找到文件夹",
@@ -455,13 +452,13 @@ export const dict = {
"dialog.project.edit.icon.hint": "点击或拖拽图片",
"dialog.project.edit.icon.recommended": "建议:128x128px",
"dialog.project.edit.color": "颜色",
"dialog.project.edit.color.select": "选择颜色:{{color}}",
"dialog.project.edit.color.select": "选择{{color}}颜色",
"dialog.project.edit.worktree.startup": "工作区启动脚本",
"dialog.project.edit.worktree.startup.description": "创建新工作区 (worktree) 后运行。",
"dialog.project.edit.worktree.startup.description": "创建新工作区 (worktree) 后运行。",
"dialog.project.edit.worktree.startup.placeholder": "例如 bun install",
"context.breakdown.title": "上下文分",
"context.breakdown.note": "输入令牌的大致分。“其他”包含工具定义和开销。",
"context.breakdown.title": "上下文分",
"context.breakdown.note": "输入 token 的大致分。“其他”包含工具定义和开销。",
"context.breakdown.system": "系统",
"context.breakdown.user": "用户",
"context.breakdown.assistant": "助手",
@@ -474,18 +471,18 @@ export const dict = {
"context.stats.provider": "提供商",
"context.stats.model": "模型",
"context.stats.limit": "上下文限制",
"context.stats.totalTokens": "令牌总数",
"context.stats.totalTokens": "总 token",
"context.stats.usage": "使用率",
"context.stats.inputTokens": "输入令牌",
"context.stats.outputTokens": "输出令牌",
"context.stats.reasoningTokens": "推理令牌",
"context.stats.cacheTokens": "缓存令牌(读/写)",
"context.stats.inputTokens": "输入 token",
"context.stats.outputTokens": "输出 token",
"context.stats.reasoningTokens": "推理 token",
"context.stats.cacheTokens": "缓存 token(读/写)",
"context.stats.userMessages": "用户消息",
"context.stats.assistantMessages": "助手消息",
"context.stats.totalCost": "总成本",
"context.stats.sessionCreated": "创建时间",
"context.stats.lastActivity": "最后活动",
"context.usage.tokens": "令牌数",
"context.usage.tokens": "Token",
"context.usage.usage": "使用率",
"context.usage.cost": "成本",
"context.usage.clickToView": "点击查看上下文",
@@ -513,7 +510,7 @@ export const dict = {
"toast.language.title": "语言",
"toast.language.description": "已切换到{{language}}",
"toast.theme.title": "主题已切换",
"toast.scheme.title": "色方案",
"toast.scheme.title": "色方案",
"toast.workspace.enabled.title": "工作区已启用",
"toast.workspace.enabled.description": "侧边栏现在显示多个工作树",
"toast.workspace.disabled.title": "工作区已禁用",
@@ -571,7 +568,7 @@ export const dict = {
"error.chain.didYouMean": "你是不是想输入:{{suggestions}}",
"error.chain.modelNotFound": "未找到模型:{{provider}}/{{model}}",
"error.chain.checkConfig": "请检查你的配置 (opencode.json) 中的 provider/model 名称",
"error.chain.mcpFailed": 'MCP 服务器 "{{name}}" 启动失败。注意OpenCode 暂不支持 MCP 认证。',
"error.chain.mcpFailed": 'MCP 服务器 "{{name}}" 启动失败。注意: OpenCode 暂不支持 MCP 认证。',
"error.chain.providerAuthFailed": "提供商认证失败({{provider}}):{{message}}",
"error.chain.providerInitFailed": '无法初始化提供商 "{{provider}}"。请检查凭据和配置。',
"error.chain.configJsonInvalid": "配置文件 {{path}} 不是有效的 JSON(C)",
@@ -609,7 +606,7 @@ export const dict = {
"home.sessions.group.today": "今天",
"home.sessions.group.yesterday": "昨天",
"home.sessions.group.older": "更早",
"home.providerTip": "连接 75 个以上的提供商,使用包括 Claude、GPT、Gemini 在内的更多模型",
"home.providerTip": "连接 75 个以上的提供商,使用 Claude、GPT、Gemini 等其他模型",
"session.tab.session": "会话",
"session.tab.review": "审查",
@@ -620,12 +617,12 @@ export const dict = {
"session.error.notFound.description": "此标签页指向的会话已不存在于此服务器上。",
"session.error.notFound.closeTab": "关闭标签页",
"session.error.serverConnection": "无法连接到此服务器",
"session.review.filesChanged": "{{count}} 个文件已更改",
"session.review.filesChanged": "{{count}} 个文件变更",
"session.review.change.one": "更改",
"session.review.change.other": "更改",
"session.review.loadingChanges": "正在加载更改...",
"session.review.empty": "此会话暂无更改",
"session.review.noVcs": "未检测到 Git,无法显示更改",
"session.review.noVcs": "未检测到 Git 版本控制系统,无法显示更改",
"session.review.noSnapshot": "配置中已禁用快照跟踪,因此会话更改不可用",
"session.review.noChanges": "无更改",
"session.review.noUncommittedChanges": "尚无未提交的更改",
@@ -643,8 +640,8 @@ export const dict = {
"session.todo.title": "待办事项",
"session.todo.collapse": "折叠",
"session.todo.expand": "展开",
"session.question.minimize": "收起问题",
"session.question.restore": "展开问题",
"session.question.minimize": "最小化问题",
"session.question.restore": "恢复问题",
"session.question.pending.one": "{{count}} 个待处理问题",
"session.question.pending.other": "{{count}} 个待处理问题",
"session.followupDock.summary.one": "{{count}} 条排队消息",
@@ -658,7 +655,7 @@ export const dict = {
"session.revertDock.collapse": "折叠已回滚消息",
"session.revertDock.expand": "展开已回滚消息",
"session.revertDock.restore": "恢复消息",
"session.new.title": "构建任何内容",
"session.new.title": "构建任何东西",
"session.new.project.new": "新建项目",
"session.new.project.search": "搜索项目",
"session.new.project.add": "添加项目",
@@ -777,8 +774,8 @@ export const dict = {
"settings.general.row.terminalFont.description": "自定义终端使用的字体",
"settings.general.row.uiFont.title": "界面字体",
"settings.general.row.uiFont.description": "自定义整个界面使用的字体",
"settings.general.row.followup.title": "后续消息行为",
"settings.general.row.followup.description": "选择后续提示是立即引导当前会话还是排队等待",
"settings.general.row.followup.title": "跟进消息行为",
"settings.general.row.followup.description": "选择跟进提示是立即引导还是在队列中等待",
"settings.general.row.followup.option.queue": "排队",
"settings.general.row.followup.option.steer": "引导",
"settings.general.row.showFileTree.title": "文件树",
@@ -793,14 +790,14 @@ export const dict = {
"settings.general.row.showStatus.description": "在标题栏中显示服务器状态按钮",
"settings.general.row.mobileTitlebarBottom.title": "底部导航",
"settings.general.row.mobileTitlebarBottom.description": "在移动设备上将标题栏和会话标签页置于屏幕底部",
"settings.general.row.showCustomAgents.title": "显示智能体",
"settings.general.row.showCustomAgents.description": "在输入框中切换智能体。隐藏时默认使用 Build 智能体。",
"settings.general.row.showCustomAgents.title": "自定义智能体",
"settings.general.row.showCustomAgents.description": "在输入框中显示智能体选择器",
"settings.general.row.reasoningSummaries.title": "显示推理摘要",
"settings.general.row.reasoningSummaries.description": "在时间线中显示模型推理摘要",
"settings.general.row.shellToolPartsExpanded.title": "展开 Shell 工具调用",
"settings.general.row.shellToolPartsExpanded.description": "默认在时间线中展开 Shell 工具调用详情",
"settings.general.row.editToolPartsExpanded.title": "展开编辑工具调用",
"settings.general.row.editToolPartsExpanded.description": "默认在时间线中展开 edit、write 和 patch 工具调用详情",
"settings.general.row.shellToolPartsExpanded.title": "展开 shell 工具部分",
"settings.general.row.shellToolPartsExpanded.description": "默认在时间线中展开 shell 工具部分",
"settings.general.row.editToolPartsExpanded.title": "展开编辑工具部分",
"settings.general.row.editToolPartsExpanded.description": "默认在时间线中展开 edit、write 和 patch 工具部分",
"settings.general.row.newInterface.title": "新布局",
"settings.general.row.newInterface.badge": "新",
"settings.general.row.newInterface.description": "使用新的标签页和主页布局。在有限时间内可在不同布局之间切换。",
@@ -808,7 +805,7 @@ export const dict = {
"settings.general.row.newInterfaceNotice.description": "之前的布局不再可用",
"settings.general.row.newInterfaceNotice.dismiss": "忽略",
"settings.general.row.pinchZoom.title": "双指缩放",
"settings.general.row.pinchZoom.description": "允许使用触控板双指捏合和 Ctrl+滚轮手势缩放",
"settings.general.row.pinchZoom.description": "允许使用触控板双指捏合和 Ctrl-scroll 手势缩放",
"settings.general.row.wayland.title": "使用原生 Wayland",
"settings.general.row.wayland.description": "在 Wayland 上禁用 X11 回退。需要重启。",
"settings.general.row.wayland.tooltip": "在混合刷新率显示器的 Linux 系统上,原生 Wayland 可能更稳定。",
@@ -837,41 +834,41 @@ export const dict = {
"sound.option.alert08": "警报 08",
"sound.option.alert09": "警报 09",
"sound.option.alert10": "警报 10",
"sound.option.bipbop01": "Bip-bop 01",
"sound.option.bipbop02": "Bip-bop 02",
"sound.option.bipbop03": "Bip-bop 03",
"sound.option.bipbop04": "Bip-bop 04",
"sound.option.bipbop05": "Bip-bop 05",
"sound.option.bipbop06": "Bip-bop 06",
"sound.option.bipbop07": "Bip-bop 07",
"sound.option.bipbop08": "Bip-bop 08",
"sound.option.bipbop09": "Bip-bop 09",
"sound.option.bipbop10": "Bip-bop 10",
"sound.option.staplebops01": "Staplebops 01",
"sound.option.staplebops02": "Staplebops 02",
"sound.option.staplebops03": "Staplebops 03",
"sound.option.staplebops04": "Staplebops 04",
"sound.option.staplebops05": "Staplebops 05",
"sound.option.staplebops06": "Staplebops 06",
"sound.option.staplebops07": "Staplebops 07",
"sound.option.nope01": "Nope 01",
"sound.option.nope02": "Nope 02",
"sound.option.nope03": "Nope 03",
"sound.option.nope04": "Nope 04",
"sound.option.nope05": "Nope 05",
"sound.option.nope06": "Nope 06",
"sound.option.nope07": "Nope 07",
"sound.option.nope08": "Nope 08",
"sound.option.nope09": "Nope 09",
"sound.option.nope10": "Nope 10",
"sound.option.nope11": "Nope 11",
"sound.option.nope12": "Nope 12",
"sound.option.yup01": "Yup 01",
"sound.option.yup02": "Yup 02",
"sound.option.yup03": "Yup 03",
"sound.option.yup04": "Yup 04",
"sound.option.yup05": "Yup 05",
"sound.option.yup06": "Yup 06",
"sound.option.bipbop01": "哔啵 01",
"sound.option.bipbop02": "哔啵 02",
"sound.option.bipbop03": "哔啵 03",
"sound.option.bipbop04": "哔啵 04",
"sound.option.bipbop05": "哔啵 05",
"sound.option.bipbop06": "哔啵 06",
"sound.option.bipbop07": "哔啵 07",
"sound.option.bipbop08": "哔啵 08",
"sound.option.bipbop09": "哔啵 09",
"sound.option.bipbop10": "哔啵 10",
"sound.option.staplebops01": "斯泰普博普斯 01",
"sound.option.staplebops02": "斯泰普博普斯 02",
"sound.option.staplebops03": "斯泰普博普斯 03",
"sound.option.staplebops04": "斯泰普博普斯 04",
"sound.option.staplebops05": "斯泰普博普斯 05",
"sound.option.staplebops06": "斯泰普博普斯 06",
"sound.option.staplebops07": "斯泰普博普斯 07",
"sound.option.nope01": " 01",
"sound.option.nope02": " 02",
"sound.option.nope03": " 03",
"sound.option.nope04": " 04",
"sound.option.nope05": " 05",
"sound.option.nope06": " 06",
"sound.option.nope07": " 07",
"sound.option.nope08": " 08",
"sound.option.nope09": " 09",
"sound.option.nope10": " 10",
"sound.option.nope11": " 11",
"sound.option.nope12": " 12",
"sound.option.yup01": " 01",
"sound.option.yup02": " 02",
"sound.option.yup03": " 03",
"sound.option.yup04": " 04",
"sound.option.yup05": " 05",
"sound.option.yup06": " 06",
"settings.general.notifications.agent.title": "智能体",
"settings.general.notifications.agent.description": "当智能体完成或需要注意时显示系统通知",
@@ -904,7 +901,7 @@ export const dict = {
"settings.shortcuts.group.prompt": "提示",
"settings.providers.title": "提供商",
"settings.providers.description": "可在此处配置提供商设置。",
"settings.providers.description": "提供商设置将在此处可配置。",
"settings.providers.section.connected": "已连接的提供商",
"settings.providers.connected.empty": "没有已连接的提供商",
"settings.providers.section.popular": "热门提供商",
@@ -914,16 +911,16 @@ export const dict = {
"settings.providers.tag.other": "其他",
"settings.models.title": "模型",
"settings.models.description": "可在此处配置模型设置。",
"settings.models.description": "模型设置将在此处可配置。",
"settings.agents.title": "智能体",
"settings.agents.description": "可在此处配置智能体设置。",
"settings.agents.description": "智能体设置将在此处可配置。",
"settings.commands.title": "命令",
"settings.commands.description": "可在此处配置命令设置。",
"settings.commands.description": "命令设置将在此处可配置。",
"settings.mcp.title": "MCP",
"settings.mcp.description": "可在此处配置 MCP 设置。",
"settings.mcp.description": "MCP 设置将在此处可配置。",
"settings.permissions.title": "权限",
"settings.permissions.description": "控制服务器默认可以使用哪些工具。",
@@ -935,12 +932,12 @@ export const dict = {
"settings.permissions.tool.read.title": "读取",
"settings.permissions.tool.read.description": "读取文件(匹配文件路径)",
"settings.permissions.tool.edit.title": "编辑",
"settings.permissions.tool.edit.description": "修改文件,包括编辑、写入和应用补丁",
"settings.permissions.tool.edit.description": "修改文件,包括编辑、写入、补丁和多重编辑",
"settings.permissions.tool.glob.title": "Glob",
"settings.permissions.tool.glob.description": "使用 glob 模式匹配文件",
"settings.permissions.tool.grep.title": "Grep",
"settings.permissions.tool.grep.description": "使用正则表达式搜索文件内容",
"settings.permissions.tool.list.title": "列出文件",
"settings.permissions.tool.list.title": "列",
"settings.permissions.tool.list.description": "列出目录中的文件",
"settings.permissions.tool.bash.title": "Bash",
"settings.permissions.tool.bash.description": "运行 shell 命令",
@@ -952,7 +949,7 @@ export const dict = {
"settings.permissions.tool.lsp.description": "运行语言服务器查询",
"settings.permissions.tool.todowrite.title": "更新待办",
"settings.permissions.tool.todowrite.description": "更新待办列表",
"settings.permissions.tool.webfetch.title": "获取网页",
"settings.permissions.tool.webfetch.title": "网页获取",
"settings.permissions.tool.webfetch.description": "从 URL 获取内容",
"settings.permissions.tool.websearch.title": "网页搜索",
"settings.permissions.tool.websearch.description": "搜索网页",
@@ -975,10 +972,10 @@ export const dict = {
"workspace.resetting.description": "这可能需要一点时间。",
"workspace.reset.failed.title": "重置工作区失败",
"workspace.reset.success.title": "工作区已重置",
"workspace.reset.success.description": "工作区已与默认分支一致。",
"workspace.reset.success.description": "工作区已与默认分支保持一致。",
"workspace.error.stillPreparing": "工作区仍在准备中",
"workspace.status.checking": "正在检查未合并的更改...",
"workspace.status.error": "无法验证 Git 状态。",
"workspace.status.error": "无法验证 git 状态。",
"workspace.status.clean": "未检测到未合并的更改。",
"workspace.status.dirty": "检测到未合并的更改。",
"workspace.delete.title": "删除工作区",
@@ -995,7 +992,7 @@ export const dict = {
"dialog.releaseNotes.action.getStarted": "开始",
"dialog.releaseNotes.action.next": "下一步",
"dialog.releaseNotes.action.hideFuture": "不再显示",
"dialog.releaseNotes.media.alt": "版本说明预览",
"dialog.releaseNotes.media.alt": "发布预览",
"toast.project.reloadFailed.title": "无法重新加载 {{project}}",
"error.server.invalidConfiguration": "配置无效",
"common.moreCountSuffix": " (还有 {{count}} 个)",
@@ -1020,9 +1017,6 @@ export const dict = {
"session.question.progress": "{{current}}/{{total}} 个问题",
"session.header.open.finder": "访达",
"session.header.open.fileExplorer": "文件资源管理器",
"session.header.reveal.finder": "在访达中显示",
"session.header.reveal.fileExplorer": "在文件资源管理器中显示",
"session.header.reveal.containingFolder": "打开所在文件夹",
"session.header.open.fileManager": "文件管理器",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
+122 -128
View File
@@ -30,23 +30,23 @@ export const dict = {
"command.project.previous": "上一個專案",
"command.project.next": "下一個專案",
"command.project.index": "切換至專案 {{index}}",
"command.provider.connect": "連提供者",
"command.provider.connect": "連提供者",
"command.server.switch": "切換伺服器",
"command.settings.open": "開啟設定",
"command.session.previous": "上一個工作階段",
"command.session.next": "下一個工作階段",
"command.session.previous.unseen": "上一個未讀工作階段",
"command.session.next.unseen": "下一個未讀工作階段",
"command.session.previous.unseen": "上一個未讀會話",
"command.session.next.unseen": "下一個未讀會話",
"command.session.archive": "封存工作階段",
"command.palette": "命令面板",
"command.theme.cycle": "依序切換主題",
"command.theme.cycle": "循環主題",
"command.theme.set": "使用主題: {{theme}}",
"command.theme.scheme.cycle": "依序切換配色方案",
"command.theme.scheme.cycle": "循環配色方案",
"command.theme.scheme.set": "使用配色方案: {{scheme}}",
"command.language.cycle": "依序切換語言",
"command.language.cycle": "循環語言",
"command.language.set": "使用語言: {{language}}",
"command.session.new": "新增工作階段",
@@ -58,9 +58,9 @@ export const dict = {
"command.input.focus": "聚焦輸入框",
"command.terminal.toggle": "切換終端機",
"command.fileTree.toggle": "切換檔案樹",
"command.review.toggle": "切換檢閱",
"command.review.toggle": "切換審查",
"command.terminal.new": "新增終端機",
"command.terminal.new.description": "建立新的終端機頁",
"command.terminal.new.description": "建立新的終端機標籤頁",
"command.steps.toggle": "切換步驟",
"command.steps.toggle.description": "顯示或隱藏目前訊息的步驟",
"command.message.previous": "上一則訊息",
@@ -71,11 +71,11 @@ export const dict = {
"command.model.choose.description": "選擇不同的模型",
"command.mcp.toggle": "切換 MCP",
"command.mcp.toggle.description": "切換 MCP",
"command.agent.cycle": "切換下一個代理程式",
"command.agent.cycle": "循環代理程式",
"command.agent.cycle.description": "切換到下一個代理程式",
"command.agent.cycle.reverse": "切換上一個代理程式",
"command.agent.cycle.reverse": "反向循環代理程式",
"command.agent.cycle.reverse.description": "切換到上一個代理程式",
"command.model.variant.cycle": "切換思考強度",
"command.model.variant.cycle": "循環思考強度",
"command.model.variant.cycle.description": "切換到下一個強度等級",
"command.prompt.mode.shell": "Shell",
"command.prompt.mode.normal": "Prompt",
@@ -88,7 +88,7 @@ export const dict = {
"command.session.redo": "重做",
"command.session.redo.description": "重做上一則復原的訊息",
"command.session.compact": "精簡工作階段",
"command.session.compact.description": "摘要工作階段以減少上下文大小",
"command.session.compact.description": "總結工作階段以減少上下文大小",
"command.session.fork": "從訊息分支",
"command.session.fork.description": "從先前的訊息建立新工作階段",
"command.session.share": "分享工作階段",
@@ -106,14 +106,13 @@ export const dict = {
"dialog.provider.empty": "找不到提供者",
"dialog.provider.group.popular": "熱門",
"dialog.provider.group.other": "其他",
"dialog.provider.custom.label": "自訂 OpenAI 相容提供者",
"dialog.provider.tag.recommended": "推薦",
"dialog.provider.opencode.note": "精選模型,包含 Claude、GPT、Gemini 等等",
"dialog.provider.opencode.tagline": "經過最佳化的可靠模型",
"dialog.provider.opencode.tagline": "可靠的優化模型",
"dialog.provider.opencodeGo.tagline": "適合所有人的低成本訂閱",
"dialog.provider.anthropic.note": "直接存取 Claude 模型,包括 Pro 和 Max",
"dialog.provider.openai.note": "適合快速且功能強大的通用 AI 工作之 GPT 模型",
"dialog.provider.copilot.note": "透過 GitHub Copilot 使用程式設計輔助 AI 模型",
"dialog.provider.anthropic.note": "使用 Claude Pro/Max 或 API 金鑰連線",
"dialog.provider.openai.note": "使用 ChatGPT Pro/Plus 或 API 金鑰連線",
"dialog.provider.copilot.note": "使用 Copilot API 金鑰連線",
"dialog.provider.google.note": "Gemini 模型,提供快速且結構化的回應",
"dialog.provider.openrouter.note": "從單一提供者存取所有支援的模型",
"dialog.provider.vercel.note": "透過智慧路由統一存取 AI 模型",
@@ -127,7 +126,6 @@ export const dict = {
"dialog.model.unpaid.freeModels.title": "OpenCode 提供的免費模型",
"dialog.model.unpaid.addMore.title": "從熱門提供者新增更多模型",
"dialog.model.unpaid.viewMoreProviders": "查看另外 70 多個提供者",
"dialog.provider.viewAll": "查看更多提供者",
@@ -163,16 +161,16 @@ export const dict = {
"provider.connect.toast.connected.title": "{{provider}} 已連線",
"provider.connect.toast.connected.description": "現在可以使用 {{provider}} 模型了。",
"provider.custom.title": "自訂提供",
"provider.custom.description.prefix": "設定與 OpenAI 相容的提供。請參閱",
"provider.custom.description.link": "提供設定文件",
"provider.custom.title": "自訂提供",
"provider.custom.description.prefix": "設定與 OpenAI 相容的提供。請參閱",
"provider.custom.description.link": "提供設定文件",
"provider.custom.description.suffix": "。",
"provider.custom.field.providerID.label": "提供 ID",
"provider.custom.field.providerID.label": "提供 ID",
"provider.custom.field.providerID.placeholder": "myprovider",
"provider.custom.field.providerID.description": "使用小寫字母、數字、連字號或底線",
"provider.custom.field.name.label": "顯示名稱",
"provider.custom.field.name.placeholder": "我的 AI 提供",
"provider.custom.field.baseURL.label": "基 URL",
"provider.custom.field.name.placeholder": "我的 AI 提供",
"provider.custom.field.baseURL.label": "基 URL",
"provider.custom.field.baseURL.placeholder": "https://api.myprovider.com/v1",
"provider.custom.field.apiKey.label": "API 金鑰",
"provider.custom.field.apiKey.placeholder": "API 金鑰",
@@ -191,11 +189,11 @@ export const dict = {
"provider.custom.headers.value.placeholder": "value",
"provider.custom.headers.remove": "移除標頭",
"provider.custom.headers.add": "新增標頭",
"provider.custom.error.providerID.required": "提供 ID 為必填",
"provider.custom.error.providerID.required": "提供 ID 為必填",
"provider.custom.error.providerID.format": "請使用小寫字母、數字、連字號或底線",
"provider.custom.error.providerID.exists": "該提供 ID 已存在",
"provider.custom.error.providerID.exists": "該提供 ID 已存在",
"provider.custom.error.name.required": "顯示名稱為必填",
"provider.custom.error.baseURL.required": "基 URL 為必填",
"provider.custom.error.baseURL.required": "基 URL 為必填",
"provider.custom.error.baseURL.format": "必須以 http:// 或 https:// 開頭",
"provider.custom.error.required": "必填",
"provider.custom.error.duplicate": "重複",
@@ -214,12 +212,12 @@ export const dict = {
"model.input.image": "圖片",
"model.input.audio": "音訊",
"model.input.video": "影片",
"model.input.pdf": "PDF",
"model.input.pdf": "pdf",
"model.tooltip.allows": "支援: {{inputs}}",
"model.tooltip.context.label": "上下文",
"model.tooltip.inputs": "輸入",
"model.tooltip.model": "模型",
"model.tooltip.provider": "提供者",
"model.tooltip.provider": "供應商",
"model.tooltip.reasoning": "推理",
"model.tooltip.reasoning.allowed": "支援推理",
"model.tooltip.reasoning.none": "不支援推理",
@@ -233,7 +231,7 @@ export const dict = {
"common.clear": "清除",
"common.connect": "連線",
"common.disconnect": "中斷連線",
"common.continue": "繼續",
"common.continue": "提交",
"common.submit": "提交",
"common.save": "儲存",
"common.saving": "儲存中...",
@@ -241,10 +239,10 @@ export const dict = {
"common.attachment": "附件",
"prompt.placeholder.shell": "輸入 shell 命令... {{example}}",
"prompt.placeholder.normal": "想問什麼都可以…「{{example}}」",
"prompt.placeholder.simple": "想問什麼都可以…",
"prompt.placeholder.summarizeComments": "摘要留言…",
"prompt.placeholder.summarizeComment": "摘要這則留言…",
"prompt.placeholder.normal": '隨便問點什麼... "{{example}}"',
"prompt.placeholder.simple": "隨便問點什麼...",
"prompt.placeholder.summarizeComments": "摘要評論…",
"prompt.placeholder.summarizeComment": "摘要這則評論…",
"prompt.mode.shell": "Shell",
"prompt.mode.normal": "Prompt",
"prompt.mode.shell.exit": "按 esc 退出",
@@ -252,30 +250,30 @@ export const dict = {
"session.child.backToParent": "返回主要工作階段。",
"prompt.example.1": "修復程式碼庫中的一個 TODO",
"prompt.example.2": "這個專案的技術堆疊是什麼",
"prompt.example.2": "這個專案的技術堆疊是什麼?",
"prompt.example.3": "修復失敗的測試",
"prompt.example.4": "解釋驗證是如何運作的",
"prompt.example.5": "尋找並修復安全漏洞",
"prompt.example.6": "為使用者服務新增單元測試",
"prompt.example.7": "重構這個函式,讓它更易讀",
"prompt.example.8": "這個錯誤是什麼意思",
"prompt.example.8": "這個錯誤是什麼意思?",
"prompt.example.9": "幫我偵錯這個問題",
"prompt.example.10": "產生 API 文件",
"prompt.example.11": "最佳化資料庫查詢",
"prompt.example.12": "新增輸入驗證",
"prompt.example.13": "建立一個新的元件用於...",
"prompt.example.14": "我該如何部署這個專案",
"prompt.example.15": "檢閱我的程式碼並提供最佳實務建議",
"prompt.example.14": "我該如何部署這個專案?",
"prompt.example.15": "審查我的程式碼並給出最佳實務建議",
"prompt.example.16": "為這個函式新增錯誤處理",
"prompt.example.17": "解釋這個正規表示式",
"prompt.example.18": "把它轉換成 TypeScript",
"prompt.example.19": "在整個程式碼庫中加入記錄功能",
"prompt.example.20": "哪些相依性已經過期",
"prompt.example.19": "在整個程式碼庫中新增日誌",
"prompt.example.20": "哪些相依性已經過期?",
"prompt.example.21": "幫我寫一個遷移腳本",
"prompt.example.22": "為這個端點實作快取",
"prompt.example.23": "為這份清單加入分頁功能",
"prompt.example.23": "給這個清單新增分頁",
"prompt.example.24": "建立一個 CLI 命令用於...",
"prompt.example.25": "這裡的環境變數是怎麼運作的",
"prompt.example.25": "這裡的環境變數是怎麼運作的?",
"prompt.popover.emptyResults": "沒有符合的結果",
"prompt.popover.emptyCommands": "沒有符合的命令",
@@ -299,7 +297,6 @@ export const dict = {
"prompt.action.stop": "停止",
"prompt.toast.pasteUnsupported.title": "不支援的附件",
"prompt.toast.attachmentDuplicate.title": "此檔案已上傳",
"prompt.toast.pasteUnsupported.description": "此處僅能附加圖片、PDF 或文字檔案。",
"prompt.toast.modelAgentRequired.title": "請選擇代理程式和模型",
"prompt.toast.modelAgentRequired.description": "傳送提示前請先選擇代理程式和模型。",
@@ -314,13 +311,13 @@ export const dict = {
"dialog.mcp.description": "已啟用 {{enabled}} / {{total}}",
"dialog.mcp.empty": "未設定 MCP",
"dialog.lsp.empty": "會根據檔案類型自動偵測 LSP",
"dialog.lsp.empty": "已從檔案類型自動偵測 LSPs",
"dialog.plugins.empty": "在 opencode.json 中設定的外掛程式",
"mcp.status.connected": "已連線",
"mcp.status.failed": "失敗",
"mcp.status.needs_auth": "需要授權",
"mcp.auth.clickToAuthenticate": "按一下以進行授權",
"mcp.auth.clickToAuthenticate": "點擊以進行授權",
"mcp.status.disabled": "已停用",
"dialog.fork.empty": "沒有可用於分支的訊息",
@@ -336,7 +333,7 @@ export const dict = {
"dialog.server.title": "伺服器",
"dialog.server.description": "切換此應用程式連線的 OpenCode 伺服器。",
"dialog.server.search.placeholder": "搜尋伺服器",
"dialog.server.empty": "無伺服器",
"dialog.server.empty": "無伺服器",
"dialog.server.add.title": "新增伺服器",
"dialog.server.add.url": "伺服器 URL",
"dialog.server.add.placeholder": "http://localhost:4096",
@@ -349,7 +346,7 @@ export const dict = {
"dialog.server.add.password": "密碼(選填)",
"dialog.server.edit.title": "編輯伺服器",
"dialog.server.default.title": "預設伺服器",
"dialog.server.default.description": "應用程式啟動時連線此伺服器,而不是啟動本伺服器。需要重新啟動。",
"dialog.server.default.description": "應用程式啟動時連線此伺服器,而不是啟動本伺服器。需要重新啟動。",
"dialog.server.default.none": "未選擇伺服器",
"dialog.server.default.set": "將目前伺服器設為預設",
"dialog.server.default.clear": "清除",
@@ -433,7 +430,7 @@ export const dict = {
"dialog.project.edit.name": "名稱",
"dialog.project.edit.icon": "圖示",
"dialog.project.edit.icon.alt": "專案圖示",
"dialog.project.edit.icon.hint": "按一下或拖曳圖片",
"dialog.project.edit.icon.hint": "點擊或拖曳圖片",
"dialog.project.edit.icon.recommended": "建議:128x128px",
"dialog.project.edit.color": "顏色",
"dialog.project.edit.color.select": "選擇{{color}}顏色",
@@ -441,11 +438,11 @@ export const dict = {
"dialog.project.edit.worktree.startup": "工作區啟動腳本",
"dialog.project.edit.worktree.startup.description": "在建立新的工作區 (worktree) 後執行。",
"dialog.project.edit.worktree.startup.placeholder": "例如 bun install",
"context.breakdown.title": "上下文分",
"context.breakdown.note": "輸入 token 的概略細分。「其他」包含工具定義和額外負擔。",
"context.breakdown.title": "上下文分",
"context.breakdown.note": "輸入 token 的大致拆分。「其他」包含工具定義和額外開銷。",
"context.breakdown.system": "系統",
"context.breakdown.user": "使用者",
"context.breakdown.assistant": "助",
"context.breakdown.assistant": "助",
"context.breakdown.tool": "工具呼叫",
"context.breakdown.other": "其他",
@@ -464,7 +461,7 @@ export const dict = {
"context.stats.reasoningTokens": "推理 token",
"context.stats.cacheTokens": "快取 token(讀/寫)",
"context.stats.userMessages": "使用者訊息",
"context.stats.assistantMessages": "助訊息",
"context.stats.assistantMessages": "助訊息",
"context.stats.totalCost": "總成本",
"context.stats.sessionCreated": "建立時間",
"context.stats.lastActivity": "最後活動",
@@ -472,7 +469,7 @@ export const dict = {
"context.usage.tokens": "Token",
"context.usage.usage": "使用量",
"context.usage.cost": "成本",
"context.usage.clickToView": "按一下以檢視上下文",
"context.usage.clickToView": "點擊查看上下文",
"context.usage.view": "檢視上下文用量",
"language.en": "English",
@@ -498,7 +495,7 @@ export const dict = {
"toast.language.description": "已切換到 {{language}}",
"toast.theme.title": "主題已切換",
"toast.scheme.title": "色方案",
"toast.scheme.title": "色方案",
"toast.workspace.enabled.title": "工作區已啟用",
"toast.workspace.enabled.description": "側邊欄現在顯示多個工作樹",
@@ -506,12 +503,12 @@ export const dict = {
"toast.workspace.disabled.description": "側邊欄只顯示主工作樹",
"toast.permissions.autoaccept.on.title": "正在自動接受權限",
"toast.permissions.autoaccept.on.description": "權限求將自動准",
"toast.permissions.autoaccept.on.description": "權限求將自動准",
"toast.permissions.autoaccept.off.title": "已停止自動接受權限",
"toast.permissions.autoaccept.off.description": "權限求將需要准",
"toast.permissions.autoaccept.off.description": "權限求將需要准",
"toast.model.none.title": "未選擇模型",
"toast.model.none.description": "請先連線提供者以摘要此工作階段",
"toast.model.none.description": "請先連線提供者以總結此工作階段",
"toast.file.loadFailed.title": "載入檔案失敗",
@@ -543,7 +540,7 @@ export const dict = {
"error.page.action.restart": "重新啟動",
"error.page.action.report": "回報錯誤",
"error.page.action.reported": "已回報錯誤",
"error.page.action.exportLogs": "匯出記錄檔",
"error.page.action.exportLogs": "匯出日誌",
"error.page.action.checking": "檢查中...",
"error.page.action.checkUpdates": "檢查更新",
"error.page.action.updateTo": "更新到 {{version}}",
@@ -551,9 +548,9 @@ export const dict = {
"error.page.report.discord": "在 Discord 上",
"error.page.version": "版本: {{version}}",
"error.dev.rootNotFound": "找不到根元素。你是不是忘了把它新增到 index.html或者 id 屬性拼錯了",
"error.dev.rootNotFound": "找不到根元素。你是不是忘了把它新增到 index.html? 或者 id 屬性拼錯了?",
"error.serverSync.connectFailed": "無法連線到伺服器。是否有伺服器正在 `{{url}}` 執行",
"error.serverSync.connectFailed": "無法連線到伺服器。是否有伺服器正在 `{{url}}` 執行?",
"directory.error.invalidUrl": "URL 中的目錄無效。",
"error.chain.unknown": "未知錯誤",
@@ -565,8 +562,8 @@ export const dict = {
"error.chain.didYouMean": "你是不是想輸入: {{suggestions}}",
"error.chain.modelNotFound": "找不到模型: {{provider}}/{{model}}",
"error.chain.checkConfig": "請檢查你的設定 (opencode.json) 中的 provider/model 名稱",
"error.chain.mcpFailed": "MCP 伺服器{{name}}啟動失敗。注意OpenCode 不支援 MCP 證。",
"error.chain.providerAuthFailed": "提供者證失敗{{provider}}):{{message}}",
"error.chain.mcpFailed": 'MCP 伺服器 "{{name}}" 啟動失敗。注意: OpenCode 不支援 MCP 證。',
"error.chain.providerAuthFailed": "提供者證失敗 ({{provider}}): {{message}}",
"error.chain.providerInitFailed": '無法初始化提供者 "{{provider}}"。請檢查憑證和設定。',
"error.chain.configJsonInvalid": "設定檔 {{path}} 不是有效的 JSON(C)",
"error.chain.configJsonInvalidWithMessage": "設定檔 {{path}} 不是有效的 JSON(C): {{message}}",
@@ -588,7 +585,7 @@ export const dict = {
"home.recentProjects": "最近專案",
"home.empty.title": "沒有最近專案",
"home.empty.description": "開啟本專案開始使用",
"home.empty.description": "透過開啟本專案開始使用",
"home.title": "首頁",
"home.projects": "專案",
"home.project.add": "新增專案",
@@ -604,13 +601,13 @@ export const dict = {
"home.sessions.group.today": "今天",
"home.sessions.group.yesterday": "昨天",
"home.sessions.group.older": "更早",
"home.providerTip": "連 75 個以上的提供者,使用 Claude、GPT、Gemini 等其他模型",
"home.providerTip": "連 75 個以上的供應商,使用 Claude、GPT、Gemini 等其他模型",
"session.tab.session": "工作階段",
"session.tab.review": "檢閱",
"session.tab.review": "審查",
"session.tab.context": "上下文",
"session.tab.unknown": "未知的工作階段",
"session.panel.reviewAndFiles": "檢閱與檔案",
"session.panel.reviewAndFiles": "審查與檔案",
"session.error.notFound": "找不到此工作階段",
"session.error.notFound.description": "此分頁指向的工作階段已不存在於此伺服器。",
"session.error.notFound.closeTab": "關閉分頁",
@@ -619,7 +616,7 @@ export const dict = {
"session.review.change.one": "變更",
"session.review.change.other": "變更",
"session.review.loadingChanges": "正在載入變更...",
"session.review.empty": "此工作階段無變更",
"session.review.empty": "此工作階段無變更",
"session.review.noChanges": "沒有變更",
"session.review.noUncommittedChanges": "尚無未提交的變更",
"session.review.noBranchChanges": "尚無分支變更",
@@ -637,7 +634,7 @@ export const dict = {
"session.messages.jumpToLatest": "跳到最新",
"session.context.addToContext": "將 {{selection}} 新增到上下文",
"session.todo.title": "待辦事項",
"session.todo.collapse": "收合",
"session.todo.collapse": "折疊",
"session.todo.expand": "展開",
"session.question.minimize": "最小化問題",
"session.question.restore": "還原問題",
@@ -649,13 +646,13 @@ export const dict = {
"session.followupDock.edit": "編輯",
"session.followupDock.collapse": "收合佇列訊息",
"session.followupDock.expand": "展開佇列訊息",
"session.revertDock.summary.one": "{{count}} 則已還原的訊息",
"session.revertDock.summary.other": "{{count}} 則已還原的訊息",
"session.revertDock.collapse": "收合已還原的訊息",
"session.revertDock.expand": "展開已還原的訊息",
"session.revertDock.summary.one": "{{count}} 則已回復訊息",
"session.revertDock.summary.other": "{{count}} 則已回復訊息",
"session.revertDock.collapse": "收合已回復訊息",
"session.revertDock.expand": "展開已回復訊息",
"session.revertDock.restore": "還原訊息",
"session.new.title": "實現任何想法",
"session.new.title": "建構任何東西",
"session.new.project.new": "新專案",
"session.new.project.search": "搜尋專案",
"session.new.project.add": "新增專案",
@@ -708,7 +705,7 @@ export const dict = {
"terminal.connectionLost.title": "連線中斷",
"terminal.connectionLost.description": "終端機連線已中斷。這可能會在伺服器重新啟動時發生。",
"common.closeTab": "關閉頁",
"common.closeTab": "關閉標籤頁",
"common.dismiss": "忽略",
"common.requestFailed": "要求失敗",
"common.moreOptions": "更多選項",
@@ -834,41 +831,41 @@ export const dict = {
"sound.option.alert08": "警報 08",
"sound.option.alert09": "警報 09",
"sound.option.alert10": "警報 10",
"sound.option.bipbop01": "Bip-bop 01",
"sound.option.bipbop02": "Bip-bop 02",
"sound.option.bipbop03": "Bip-bop 03",
"sound.option.bipbop04": "Bip-bop 04",
"sound.option.bipbop05": "Bip-bop 05",
"sound.option.bipbop06": "Bip-bop 06",
"sound.option.bipbop07": "Bip-bop 07",
"sound.option.bipbop08": "Bip-bop 08",
"sound.option.bipbop09": "Bip-bop 09",
"sound.option.bipbop10": "Bip-bop 10",
"sound.option.staplebops01": "Staplebops 01",
"sound.option.staplebops02": "Staplebops 02",
"sound.option.staplebops03": "Staplebops 03",
"sound.option.staplebops04": "Staplebops 04",
"sound.option.staplebops05": "Staplebops 05",
"sound.option.staplebops06": "Staplebops 06",
"sound.option.staplebops07": "Staplebops 07",
"sound.option.nope01": "Nope 01",
"sound.option.nope02": "Nope 02",
"sound.option.nope03": "Nope 03",
"sound.option.nope04": "Nope 04",
"sound.option.nope05": "Nope 05",
"sound.option.nope06": "Nope 06",
"sound.option.nope07": "Nope 07",
"sound.option.nope08": "Nope 08",
"sound.option.nope09": "Nope 09",
"sound.option.nope10": "Nope 10",
"sound.option.nope11": "Nope 11",
"sound.option.nope12": "Nope 12",
"sound.option.yup01": "Yup 01",
"sound.option.yup02": "Yup 02",
"sound.option.yup03": "Yup 03",
"sound.option.yup04": "Yup 04",
"sound.option.yup05": "Yup 05",
"sound.option.yup06": "Yup 06",
"sound.option.bipbop01": "嗶啵 01",
"sound.option.bipbop02": "嗶啵 02",
"sound.option.bipbop03": "嗶啵 03",
"sound.option.bipbop04": "嗶啵 04",
"sound.option.bipbop05": "嗶啵 05",
"sound.option.bipbop06": "嗶啵 06",
"sound.option.bipbop07": "嗶啵 07",
"sound.option.bipbop08": "嗶啵 08",
"sound.option.bipbop09": "嗶啵 09",
"sound.option.bipbop10": "嗶啵 10",
"sound.option.staplebops01": "斯泰普博普斯 01",
"sound.option.staplebops02": "斯泰普博普斯 02",
"sound.option.staplebops03": "斯泰普博普斯 03",
"sound.option.staplebops04": "斯泰普博普斯 04",
"sound.option.staplebops05": "斯泰普博普斯 05",
"sound.option.staplebops06": "斯泰普博普斯 06",
"sound.option.staplebops07": "斯泰普博普斯 07",
"sound.option.nope01": " 01",
"sound.option.nope02": " 02",
"sound.option.nope03": " 03",
"sound.option.nope04": " 04",
"sound.option.nope05": " 05",
"sound.option.nope06": " 06",
"sound.option.nope07": " 07",
"sound.option.nope08": " 08",
"sound.option.nope09": " 09",
"sound.option.nope10": " 10",
"sound.option.nope11": " 11",
"sound.option.nope12": " 12",
"sound.option.yup01": " 01",
"sound.option.yup02": " 02",
"sound.option.yup03": " 03",
"sound.option.yup04": " 04",
"sound.option.yup05": " 05",
"sound.option.yup06": " 06",
"settings.general.notifications.agent.title": "代理程式",
"settings.general.notifications.agent.description": "當代理程式完成或需要注意時顯示系統通知",
"settings.general.notifications.permissions.title": "權限",
@@ -903,11 +900,11 @@ export const dict = {
"settings.providers.title": "提供者",
"settings.providers.description": "提供者設定將在此處可設定。",
"settings.providers.section.connected": "已連線的提供",
"settings.providers.connected.empty": "沒有已連線的提供",
"settings.providers.section.popular": "熱門提供",
"settings.providers.section.connected": "已連線的提供",
"settings.providers.connected.empty": "沒有已連線的提供",
"settings.providers.section.popular": "熱門提供",
"settings.providers.tag.environment": "環境",
"settings.providers.tag.config": "設定",
"settings.providers.tag.config": "配置",
"settings.providers.tag.custom": "自訂",
"settings.providers.tag.other": "其他",
"settings.models.title": "模型",
@@ -959,11 +956,11 @@ export const dict = {
"session.delete.failed.title": "刪除工作階段失敗",
"session.delete.title": "刪除工作階段",
"session.delete.confirm": "要刪除工作階段{{name}}」嗎?",
"session.delete.confirm": '刪除工作階段 "{{name}}"?',
"session.delete.button": "刪除工作階段",
"workspace.new": "新增工作區",
"workspace.type.local": "本",
"workspace.type.local": "本",
"workspace.type.sandbox": "沙盒",
"workspace.create.failed.title": "建立工作區失敗",
"workspace.delete.failed.title": "刪除工作區失敗",
@@ -971,27 +968,27 @@ export const dict = {
"workspace.resetting.description": "這可能需要一點時間。",
"workspace.reset.failed.title": "重設工作區失敗",
"workspace.reset.success.title": "工作區已重設",
"workspace.reset.success.description": "工作區現在與預設分支一致。",
"workspace.reset.success.description": "工作區與預設分支保持一致。",
"workspace.error.stillPreparing": "工作區仍在準備中",
"workspace.status.checking": "正在檢查未合併的變更...",
"workspace.status.error": "無法驗證 Git 狀態。",
"workspace.status.error": "無法驗證 git 狀態。",
"workspace.status.clean": "未偵測到未合併的變更。",
"workspace.status.dirty": "偵測到未合併的變更。",
"workspace.delete.title": "刪除工作區",
"workspace.delete.confirm": "要刪除工作區{{name}}」嗎?",
"workspace.delete.confirm": '刪除工作區 "{{name}}"?',
"workspace.delete.button": "刪除工作區",
"workspace.reset.title": "重設工作區",
"workspace.reset.confirm": "要重設工作區{{name}}」嗎?",
"workspace.reset.confirm": '重設工作區 "{{name}}"?',
"workspace.reset.button": "重設工作區",
"workspace.reset.archived.none": "不會封存任何作用中工作階段。",
"workspace.reset.archived.one": "將封存 1 個工作階段。",
"workspace.reset.archived.many": "將封存 {{count}} 個工作階段。",
"workspace.reset.note": "這將把工作區重設為與預設分支一致。",
"common.open": "開",
"common.open": "開",
"dialog.releaseNotes.action.getStarted": "開始",
"dialog.releaseNotes.action.next": "下一步",
"dialog.releaseNotes.action.hideFuture": "不再顯示",
"dialog.releaseNotes.media.alt": "版本預覽",
"dialog.releaseNotes.media.alt": "發佈預覽",
"toast.project.reloadFailed.title": "無法重新載入 {{project}}",
"error.server.invalidConfiguration": "無效的設定",
"common.moreCountSuffix": " (還有 {{count}} 個)",
@@ -1000,7 +997,7 @@ export const dict = {
"common.time.hoursAgo.short": "{{count}}小時前",
"common.time.daysAgo.short": "{{count}}天前",
"settings.providers.connected.environmentDescription": "已從環境變數連線",
"settings.providers.custom.description": "透過基 URL 新增與 OpenAI 相容的提供者。",
"settings.providers.custom.description": "透過基 URL 新增與 OpenAI 相容的提供者。",
"app.server.unreachable": "無法連線至 {{server}}",
"app.server.retrying": "正在自動重試...",
@@ -1016,9 +1013,6 @@ export const dict = {
"session.question.progress": "{{current}}/{{total}} 個問題",
"session.header.open.finder": "Finder",
"session.header.open.fileExplorer": "檔案總管",
"session.header.reveal.finder": "在 Finder 中顯示",
"session.header.reveal.fileExplorer": "在檔案總管中顯示",
"session.header.reveal.containingFolder": "開啟所在的檔案夾",
"session.header.open.fileManager": "檔案管理員",
"session.header.open.app.vscode": "VS Code",
"session.header.open.app.cursor": "Cursor",
@@ -1038,11 +1032,11 @@ export const dict = {
"debugBar.nav.label": "NAV",
"debugBar.nav.tip": "最後一次完成的涉及工作階段頁面的路由轉換,從路由器啟動到穩定後的第一次繪製。",
"debugBar.fps.label": "FPS",
"debugBar.fps.tip": "過去 5 秒內的移動影格率。",
"debugBar.fps.tip": "過去 5 秒內的滾動幀率。",
"debugBar.frame.label": "FRAME",
"debugBar.frame.tip": "過去 5 秒內最差的影格時間。",
"debugBar.frame.tip": "過去 5 秒內最差的時間。",
"debugBar.jank.label": "JANK",
"debugBar.jank.tip": "過去 5 秒內超過 32ms 的影格。",
"debugBar.jank.tip": "過去 5 秒內超過 32ms 的。",
"debugBar.long.label": "LONG",
"debugBar.long.tip": "過去 5 秒內的阻塞時間和長任務計數。最大任務:{{max}}。",
"debugBar.delay.label": "DELAY",
+1 -1
View File
@@ -27,4 +27,4 @@ export {
type WslServersState,
} from "./wsl/types"
export { ServerConnection } from "./context/server"
export { createDraftStore, type DraftStore } from "./utils/draft-store"
export { handleNotificationClick } from "./utils/notification-click"
@@ -63,7 +63,6 @@ export function DirectoryDataProvider(
<DataProvider
data={sync().data}
directory={directory}
sessionID={params.id}
onNavigateToSession={(sessionID: string) => navigate(href(sessionID))}
onSessionHref={href}
>
+1 -1
View File
@@ -354,7 +354,7 @@ export const ErrorPage: Component<ErrorPageProps> = (props) => {
<button
type="button"
class="flex items-center text-text-interactive-base gap-1"
onClick={() => platform.openExternal("https://opencode.ai/desktop-feedback")}
onClick={() => platform.openLink("https://opencode.ai/desktop-feedback")}
>
<div>{language.t("error.page.report.discord")}</div>
<Icon name="discord" class="text-text-interactive-base" />
@@ -120,7 +120,7 @@ export function createHomeProjectsController(home: HomeController) {
},
utility: {
settings: openSettings,
help: () => platform.openExternal("https://opencode.ai/desktop-feedback"),
help: () => platform.openLink("https://opencode.ai/desktop-feedback"),
},
}
}
@@ -1,6 +1,7 @@
import type { Session } from "@opencode-ai/sdk/v2/client"
import { preloadMarkdown } from "@opencode-ai/session-ui/markdown-cache"
import { useDialog } from "@opencode-ai/ui/context/dialog"
import { useMarked } from "@opencode-ai/ui/context/marked"
import { useQuery } from "@tanstack/solid-query"
import { DateTime } from "luxon"
import { type Accessor, createEffect, createMemo, createRoot, type JSX, startTransition } from "solid-js"
@@ -43,6 +44,7 @@ export function createHomeSessionsController(home: HomeController) {
const command = useCommand()
const dialog = useDialog()
const language = useLanguage()
const marked = useMarked()
const projectDirectories = createMemo(() => {
const project = home.project.selected()
if (!project) return home.project.list().flatMap(directories)
@@ -117,7 +119,7 @@ export function createHomeSessionsController(home: HomeController) {
(ctx.sync.session.data.message[record.session.id] ?? []).flatMap((message) =>
(ctx.sync.session.data.part[message.id] ?? []).flatMap((part) => {
if (part.type !== "text" || !part.text) return []
return preloadMarkdown(part.text, part.id)
return preloadMarkdown(part.text, part.id, marked)
}),
),
),
+4
View File
@@ -1,13 +1,17 @@
import { createEffect, Suspense, type ParentProps } from "solid-js"
import { createStore } from "solid-js/store"
import { useNavigate } from "@solidjs/router"
import { DebugBar } from "@/components/debug-bar"
import { TabsInfoPopup } from "@/components/help-button"
import { Titlebar, type TitlebarUpdate } from "@/components/titlebar"
import { usePlatform } from "@/context/platform"
import { setNavigate } from "@/utils/notification-click"
import { setV2Toast, ToastRegion } from "@/utils/toast"
export default function NewLayout(props: ParentProps) {
const platform = usePlatform()
const navigate = useNavigate()
setNavigate(navigate)
const [state, setState] = createStore({ debugTools: true })
createEffect(() => setV2Toast(true))
+24 -22
View File
@@ -33,7 +33,8 @@ import { createStore, produce, reconcile } from "solid-js/store"
import { DragDropProvider, DragDropSensors, DragOverlay, SortableProvider, closestCenter } from "@thisbeyond/solid-dnd"
import type { DragEvent } from "@thisbeyond/solid-dnd"
import { useProviders } from "@/hooks/use-providers"
import { dismissToast, setV2Toast, showToast, ToastRegion } from "@/utils/toast"
import { toaster } from "@opencode-ai/ui/toast"
import { setV2Toast, showToast, ToastRegion } from "@/utils/toast"
import { useServerSDK } from "@/context/server-sdk"
import { normalizeProjectInfo } from "@/context/global-sync/utils"
import { clearWorkspaceTerminals } from "@/context/terminal"
@@ -44,6 +45,7 @@ import { Binary } from "@opencode-ai/core/util/binary"
import { retry } from "@opencode-ai/core/util/retry"
import { playSoundById } from "@/utils/sound"
import { createAim } from "@/utils/aim"
import { setNavigate } from "@/utils/notification-click"
import { Worktree as WorktreeState } from "@/utils/worktree"
import { setSessionHandoff } from "@/pages/session/handoff"
import { SessionRouteKey, SessionStateKey } from "@/utils/server-scope"
@@ -116,6 +118,7 @@ export default function LegacyLayout(props: ParentProps) {
const notification = useNotification()
const permission = usePermission()
const navigate = useNavigate()
setNavigate(navigate)
const providers = useProviders(() => undefined)
const dialog = useDialog()
const command = useCommand()
@@ -381,7 +384,7 @@ export default function LegacyLayout(props: ParentProps) {
const dismissSessionAlert = (sessionKey: string) => {
const toastId = toastBySession.get(sessionKey)
if (toastId === undefined) return
dismissToast(toastId)
toaster.dismiss(toastId)
toastBySession.delete(sessionKey)
alertedAtBySession.delete(sessionKey)
}
@@ -446,13 +449,13 @@ export default function LegacyLayout(props: ParentProps) {
void playSoundById(settings.sounds.permissions())
}
if (settings.notifications.permissions()) {
void platform.notify(title, description, () => navigate(href))
void platform.notify(title, description, href)
}
}
if (e.details.type === "question.asked") {
if (settings.notifications.agent()) {
void platform.notify(title, description, () => navigate(href))
void platform.notify(title, description, href)
}
}
@@ -1456,7 +1459,7 @@ export default function LegacyLayout(props: ParentProps) {
title: language.t("workspace.resetting.title"),
description: language.t("workspace.resetting.description"),
})
const dismiss = () => dismissToast(progress)
const dismiss = () => toaster.dismiss(progress)
const sessions = await listAllSessions(serverSDK().api.session, { directory, order: "desc" }).catch(() => [])
@@ -2249,7 +2252,7 @@ export default function LegacyLayout(props: ParentProps) {
settingsKeybind={() => command.keybind("settings.open")}
onOpenSettings={openSettings}
helpLabel={() => language.t("sidebar.help")}
onOpenHelp={() => platform.openExternal("https://opencode.ai/desktop-feedback")}
onOpenHelp={() => platform.openLink("https://opencode.ai/desktop-feedback")}
renderPanel={() =>
mobile ? <SidebarPanel project={currentProject} mobile /> : <SidebarPanel project={currentProject} merged />
}
@@ -2278,7 +2281,7 @@ export default function LegacyLayout(props: ParentProps) {
data-component="sidebar-nav-desktop"
classList={{
"hidden xl:block": true,
"absolute inset-y-0 start-0": true,
"absolute inset-y-0 left-0": true,
"z-10": true,
}}
style={{ width: `${side()}px` }}
@@ -2301,7 +2304,7 @@ export default function LegacyLayout(props: ParentProps) {
<Show when={layout.sidebar.opened()}>
<div
class="hidden xl:block absolute inset-y-0 z-30 w-0 overflow-visible"
style={{ "inset-inline-start": `${side()}px` }}
style={{ left: `${side()}px` }}
onPointerDown={() => setState("sizing", true)}
>
<ResizeHandle
@@ -2320,8 +2323,8 @@ export default function LegacyLayout(props: ParentProps) {
</Show>
<div
class="hidden xl:block pointer-events-none absolute top-0 end-0 z-0 border-t border-border-weaker-base"
style={{ "inset-inline-start": "calc(4rem + 12px)" }}
class="hidden xl:block pointer-events-none absolute top-0 right-0 z-0 border-t border-border-weaker-base"
style={{ left: "calc(4rem + 12px)" }}
/>
<div class="xl:hidden">
@@ -2339,9 +2342,9 @@ export default function LegacyLayout(props: ParentProps) {
aria-label={language.t("sidebar.nav.projectsAndSessions")}
data-component="sidebar-nav-mobile"
classList={{
"@container fixed top-10 bottom-0 start-0 z-50 w-full max-w-[400px] overflow-hidden border-e border-border-weaker-base bg-background-base transition-transform duration-200 ease-out": true,
"@container fixed top-10 bottom-0 left-0 z-50 w-full max-w-[400px] overflow-hidden border-r border-border-weaker-base bg-background-base transition-transform duration-200 ease-out": true,
"translate-x-0": layout.mobileSidebar.opened(),
"ltr:-translate-x-full rtl:translate-x-full": !layout.mobileSidebar.opened(),
"-translate-x-full": !layout.mobileSidebar.opened(),
}}
onClick={(e) => e.stopPropagation()}
>
@@ -2352,9 +2355,9 @@ export default function LegacyLayout(props: ParentProps) {
<div
classList={{
"absolute inset-0": true,
"xl:inset-y-0 xl:end-0 xl:start-[var(--main-left)]": true,
"xl:inset-y-0 xl:right-0 xl:left-[var(--main-left)]": true,
"z-20": true,
"transition-[inset-inline-start] duration-200 ease-[cubic-bezier(0.22,1,0.36,1)] will-change-[inset-inline-start] motion-reduce:transition-none":
"transition-[left] duration-200 ease-[cubic-bezier(0.22,1,0.36,1)] will-change-[left] motion-reduce:transition-none":
!state.sizing,
}}
style={{
@@ -2363,7 +2366,7 @@ export default function LegacyLayout(props: ParentProps) {
>
<main
classList={{
"size-full overflow-x-hidden flex flex-col items-start contain-strict border-t border-border-weak-base bg-background-base xl:border-s xl:rounded-ss-[12px]": true,
"size-full overflow-x-hidden flex flex-col items-start contain-strict border-t border-border-weak-base bg-background-base xl:border-l xl:rounded-tl-[12px]": true,
}}
>
<Show when={!autoselecting.loading} fallback={<div class="size-full" />}>
@@ -2374,10 +2377,9 @@ export default function LegacyLayout(props: ParentProps) {
<div
classList={{
"hidden xl:flex absolute inset-y-0 start-16 z-30": true,
"hidden xl:flex absolute inset-y-0 left-16 z-30": true,
"opacity-100 translate-x-0 pointer-events-auto": state.peeked && !layout.sidebar.opened(),
"opacity-0 ltr:-translate-x-2 rtl:translate-x-2 pointer-events-none":
!state.peeked || layout.sidebar.opened(),
"opacity-0 -translate-x-2 pointer-events-none": !state.peeked || layout.sidebar.opened(),
"transition-[opacity,transform] motion-reduce:transition-none": true,
"duration-180 ease-out": state.peeked && !layout.sidebar.opened(),
"duration-120 ease-in": !state.peeked || layout.sidebar.opened(),
@@ -2399,14 +2401,14 @@ export default function LegacyLayout(props: ParentProps) {
<div
classList={{
"hidden xl:block pointer-events-none absolute inset-y-0 end-0 z-25 overflow-hidden": true,
"hidden xl:block pointer-events-none absolute inset-y-0 right-0 z-25 overflow-hidden": true,
"opacity-100 translate-x-0": state.peeked && !layout.sidebar.opened(),
"opacity-0 ltr:-translate-x-2 rtl:translate-x-2": !state.peeked || layout.sidebar.opened(),
"opacity-0 -translate-x-2": !state.peeked || layout.sidebar.opened(),
"transition-[opacity,transform] motion-reduce:transition-none": true,
"duration-180 ease-out": state.peeked && !layout.sidebar.opened(),
"duration-120 ease-in": !state.peeked || layout.sidebar.opened(),
}}
style={{ "inset-inline-start": `calc(4rem + ${panel()}px)` }}
style={{ left: `calc(4rem + ${panel()}px)` }}
>
<div class="h-full w-px" style={{ "box-shadow": "var(--shadow-sidebar-overlay)" }} />
</div>
@@ -2448,7 +2450,7 @@ function UpdateAvailableToast(props: {
onCleanup(() => {
if (toastId === undefined) return
dismissToast(toastId)
toaster.dismiss(toastId)
})
return null
@@ -78,9 +78,9 @@ export function NewSessionStatus(props: { mount: Accessor<HTMLElement | null>; v
const language = useLanguage()
return (
<Show when={props.mount()} keyed>
<Show when={props.mount()}>
{(mount) => (
<Portal mount={mount}>
<Portal mount={mount()}>
<Show when={props.visible()}>
<Tooltip placement="bottom" value={language.t("status.popover.trigger")}>
<StatusPopoverV2 />
+1 -1
View File
@@ -2282,7 +2282,7 @@ export default function Page() {
<div onPointerDown={() => size.start()}>
<ResizeHandle
classList={{
"-end-1": settings.general.newLayoutDesigns(),
"-right-1": settings.general.newLayoutDesigns(),
}}
direction="horizontal"
size={sessionPanelResizedWidth()}
@@ -18,7 +18,11 @@ export function SessionFollowupDock(props: {
const toggle = () => setStore("collapsed", (value) => !value)
const total = createMemo(() => props.items.length)
const label = createMemo(() => language.plural("session.followupDock.summary", total()))
const label = createMemo(() =>
language.t(total() === 1 ? "session.followupDock.summary.one" : "session.followupDock.summary.other", {
count: total(),
}),
)
const preview = createMemo(() => props.items[0]?.text ?? "")
return (
@@ -29,7 +29,11 @@ export function SessionRevertDock(props: {
const toggle = () => setStore("collapsed", (value) => !value)
const total = createMemo(() => props.items.length)
const label = createMemo(() => language.plural("session.revertDock.summary", total()))
const label = createMemo(() =>
language.t(total() === 1 ? "session.revertDock.summary.one" : "session.revertDock.summary.other", {
count: total(),
}),
)
const preview = createMemo(() => props.items[0]?.text ?? "")
const onHeaderKeyDown = (event: KeyboardEvent) => {
@@ -59,7 +59,6 @@ import { SessionFileBrowserTab, type SessionFileBrowserState } from "@/pages/ses
type ReviewDiff = FileDiffInfo | SnapshotFileDiff | VcsFileDiff
type RenderDiff = FileDiffInfo | (SnapshotFileDiff & { file: string }) | VcsFileDiff
const FILE_TREE_WIDTH_MIN = 240
function renderDiff(value: ReviewDiff): value is RenderDiff {
return typeof value.file === "string"
@@ -105,14 +104,13 @@ export function SessionSidePanel(props: {
}),
)
const open = createMemo(() => reviewOpen() || fileOpen())
const fileTreeWidth = createMemo(() => Math.max(FILE_TREE_WIDTH_MIN, layout.fileTree.width()))
const reviewTab = createMemo(() => isDesktop())
const panelWidth = createMemo(() => {
if (!open()) return "0px"
if (reviewOpen()) return "auto"
return `${fileTreeWidth()}px`
return `${layout.fileTree.width()}px`
})
const treeWidth = createMemo(() => (fileOpen() ? `${fileTreeWidth()}px` : "0px"))
const treeWidth = createMemo(() => (fileOpen() ? `${layout.fileTree.width()}px` : "0px"))
const diffs = createMemo(() => props.diffs().filter(renderDiff))
const diffFiles = createMemo(() => diffs().map((d) => d.file))
@@ -847,8 +845,8 @@ export function SessionSidePanel(props: {
<ResizeHandle
direction="horizontal"
edge="start"
size={fileTreeWidth()}
min={FILE_TREE_WIDTH_MIN}
size={layout.fileTree.width()}
min={200}
max={480}
onResize={(width) => {
props.size.touch()
@@ -161,7 +161,10 @@ function TimelineDiffSummaryRow(props: { diffs: SummaryDiff[] }) {
>
<div data-slot="session-turn-diffs-header">
<span data-slot="session-turn-diffs-label">
{language.plural("ui.sessionTurn.diffs.changed", props.diffs.length)}
{language.t(
props.diffs.length === 1 ? "ui.sessionTurn.diffs.changed.one" : "ui.sessionTurn.diffs.changed.other",
{ count: String(props.diffs.length) },
)}
</span>
<DiffChanges changes={props.diffs} />
<Show when={overflow() > 0}>
@@ -643,7 +646,7 @@ export function MessageTimeline(props: {
const viewShare = () => {
const url = shareUrl()
if (!url) return
platform.openExternal(url)
platform.openLink(url)
}
const errorMessage = (err: unknown) => {
@@ -1103,7 +1106,7 @@ export function MessageTimeline(props: {
return (
<TimelineRowFrame row={commentStripRow}>
<div class="w-full px-4 md:px-5 pb-2">
<div class="ms-auto max-w-[82%] overflow-x-auto no-scrollbar">
<div class="ml-auto max-w-[82%] overflow-x-auto no-scrollbar">
<div class="flex w-max min-w-full justify-end gap-2">
<Index each={comments()}>
{(comment) => (
-171
View File
@@ -1,171 +0,0 @@
import type { AsyncStorage } from "@solid-primitives/storage"
export type BlobReference = { id: string; url: string }
type Driver = {
get(key: string): Promise<string | null>
set(key: string, value: string): Promise<void>
remove(key: string): Promise<void>
putBlob(blob: Blob): Promise<string>
getBlob(id: string): Promise<Blob | null>
}
export type DraftStore = AsyncStorage & { putBlob(blob: Blob): Promise<BlobReference> }
const urls = new Map<string, string>()
function blobUrl(id: string, blob: Blob) {
const existing = urls.get(id)
if (existing) return existing
const url = URL.createObjectURL(blob)
urls.set(id, url)
return url
}
async function blobID(blob: Blob) {
const id = Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256", await blob.arrayBuffer())))
.map((byte) => byte.toString(16).padStart(2, "0"))
.join("")
return id
}
export async function createBlobReference(blob: Blob): Promise<BlobReference> {
const id = await blobID(blob)
return { id, url: blobUrl(id, blob) }
}
export function createDraftStore(driver: Driver): DraftStore {
const versions = new Map<string, number>()
const putBlob = async (blob: Blob) => {
const id = await driver.putBlob(blob)
return { id, url: blobUrl(id, blob) }
}
const encode = async (value: unknown): Promise<unknown> => {
if (Array.isArray(value)) return Promise.all(value.map(encode))
if (!value || typeof value !== "object") return value
const item = value as Record<string, unknown>
if (item.type === "image" && typeof item.dataUrl === "string") {
const blob = await fetch(item.dataUrl).then((response) => response.blob())
const { dataUrl: _, ...rest } = item
return { ...rest, blob: { id: await driver.putBlob(blob) } }
}
if ("blob" in item && item.blob && typeof item.blob === "object") {
const blob = item.blob as Record<string, unknown>
if (typeof blob.id === "string" && blob.id.startsWith("data:")) {
const data = await fetch(blob.id).then((response) => response.blob())
return { ...item, blob: { id: await driver.putBlob(data) } }
}
return { ...item, blob: { id: blob.id } }
}
return Object.fromEntries(
await Promise.all(Object.entries(item).map(async ([key, entry]) => [key, await encode(entry)])),
)
}
const decode = async (value: unknown): Promise<unknown> => {
if (Array.isArray(value)) return Promise.all(value.map(decode))
if (!value || typeof value !== "object") return value
const item = value as Record<string, unknown>
if (item.blob && typeof item.blob === "object") {
const ref = item.blob as Record<string, unknown>
if (typeof ref.id === "string") {
const blob = await driver.getBlob(ref.id)
if (blob) return { ...item, blob: { id: ref.id, url: blobUrl(ref.id, blob) } }
}
}
return Object.fromEntries(
await Promise.all(Object.entries(item).map(async ([key, entry]) => [key, await decode(entry)])),
)
}
return {
getItem: async (key) => {
const value = await driver.get(key)
return value === null ? null : JSON.stringify(await decode(JSON.parse(value)))
},
setItem: async (key, value) => {
const version = (versions.get(key) ?? 0) + 1
versions.set(key, version)
const encoded = JSON.stringify(await encode(JSON.parse(value)))
if (versions.get(key) === version) await driver.set(key, encoded)
},
removeItem: async (key) => {
versions.set(key, (versions.get(key) ?? 0) + 1)
await driver.remove(key)
},
putBlob,
}
}
export function createBrowserDraftStore(): DraftStore {
const request = indexedDB.open("opencode-drafts", 1)
request.addEventListener("upgradeneeded", () => {
request.result.createObjectStore("documents")
request.result.createObjectStore("blobs")
})
const db = new Promise<IDBDatabase>((resolve, reject) => {
request.addEventListener("success", () => {
const database = request.result
const transaction = database.transaction(["documents", "blobs"], "readwrite")
const documents = transaction.objectStore("documents").getAll()
documents.addEventListener("success", () => {
const used = new Set<string>()
JSON.parse(`[${documents.result.join(",")}]`, (_key, item) => {
if (item?.blob && typeof item.blob.id === "string") used.add(item.blob.id)
return item
})
const blobs = transaction.objectStore("blobs").openKeyCursor()
blobs.addEventListener("success", () => {
const cursor = blobs.result
if (!cursor) return
if (!used.has(String(cursor.key))) cursor.delete()
cursor.continue()
})
})
transaction.addEventListener("complete", () => resolve(database))
transaction.addEventListener("abort", () => resolve(database))
})
request.addEventListener("error", () => reject(request.error))
})
const get = async (store: string, key: string) => {
const result = (await db).transaction(store).objectStore(store).get(key)
return new Promise<unknown>((resolve, reject) => {
result.addEventListener("success", () => resolve(result.result))
result.addEventListener("error", () => reject(result.error))
})
}
const write = async (store: string, key: string, value?: unknown) => {
const transaction = (await db).transaction(store, "readwrite")
if (value === undefined) transaction.objectStore(store).delete(key)
else transaction.objectStore(store).put(value, key)
return new Promise<void>((resolve, reject) => {
transaction.addEventListener("complete", () => resolve())
transaction.addEventListener("error", () => reject(transaction.error))
})
}
return createDraftStore({
get: async (key) => ((await get("documents", key)) as string | undefined) ?? null,
set: (key, value) => write("documents", key, value),
remove: (key) => write("documents", key),
putBlob: async (blob) => {
const id = await blobID(blob)
await write("blobs", id, blob)
return id
},
getBlob: async (id) => ((await get("blobs", id)) as Blob | undefined) ?? null,
})
}
export async function blobDataUrl(blob: BlobReference, mime: string) {
const data = await fetch(blob.url).then((response) => response.blob())
return new Promise<string>((resolve, reject) => {
const reader = new FileReader()
reader.addEventListener("error", () => reject(reader.error))
reader.addEventListener("load", () => {
const value = typeof reader.result === "string" ? reader.result : ""
resolve(`data:${mime};base64,${value.slice(value.indexOf(",") + 1)}`)
})
reader.readAsDataURL(data)
})
}
export function createLegacyBlobReference(dataUrl: string): BlobReference {
return { id: dataUrl, url: dataUrl }
}
@@ -0,0 +1,27 @@
import { afterEach, describe, expect, test } from "bun:test"
import { handleNotificationClick, setNavigate } from "./notification-click"
describe("notification click", () => {
afterEach(() => {
setNavigate(undefined as any)
})
test("navigates via registered navigate function", () => {
const calls: string[] = []
setNavigate((href) => calls.push(href))
handleNotificationClick("/abc/session/123")
expect(calls).toEqual(["/abc/session/123"])
})
test("does not navigate when href is missing", () => {
const calls: string[] = []
setNavigate((href) => calls.push(href))
handleNotificationClick(undefined)
expect(calls).toEqual([])
})
test("falls back to location.assign without registered navigate", () => {
handleNotificationClick("/abc/session/123")
// falls back to window.location.assign — no error thrown
})
})
@@ -0,0 +1,13 @@
let nav: ((href: string) => void) | undefined
export const setNavigate = (fn: (href: string) => void) => {
nav = fn
}
export const handleNotificationClick = (href?: string) => {
window.focus()
if (!href) return
if (nav) return nav(href)
console.warn("notification-click: navigate function not set, falling back to window.location.assign")
window.location.assign(href)
}
+5 -47
View File
@@ -15,7 +15,6 @@ type PersistedWithReady<T> = [
]
type PersistTarget = {
draft?: boolean
storage?: string
scope?: "window"
legacyStorageNames?: string[]
@@ -296,14 +295,6 @@ async function removeAsync(storage: AsyncStorage, key: string) {
} catch {}
}
function toAsyncStorage(storage: SyncStorage | AsyncStorage): AsyncStorage {
return {
getItem: async (key) => storage.getItem(key),
setItem: async (key, value) => storage.setItem(key, value),
removeItem: async (key) => storage.removeItem(key),
}
}
async function migrateLegacyAsync(input: {
current: AsyncStorage
legacyStore?: AsyncStorage
@@ -522,9 +513,6 @@ export const Persist = {
if (session) return Persist.serverSession(scope, dir, session, key, legacy)
return Persist.serverWorkspace(scope, dir, key, legacy)
},
prompt(target: PersistTarget): PersistTarget {
return { ...target, draft: true }
},
}
function resolveTarget(target: PersistTarget, platform: Platform): PersistTarget {
@@ -538,12 +526,9 @@ function resolveTarget(target: PersistTarget, platform: Platform): PersistTarget
}
export function removePersisted(
target: { draft?: boolean; storage?: string; legacyStorageNames?: string[]; key: string },
target: { storage?: string; legacyStorageNames?: string[]; key: string },
platform?: Platform,
) {
if (target.draft && platform?.draftStore) {
void platform.draftStore.removeItem(`${target.storage ?? "default"}:${target.key}`)
}
const isDesktop = platform?.platform === "desktop" && !!platform.storage
if (isDesktop) {
@@ -576,17 +561,8 @@ export function persisted<T>(
const legacy = config.legacy ?? []
const isDesktop = platform.platform === "desktop" && !!platform.storage
const draft = config.draft ? platform.draftStore : undefined
const currentStorage = (() => {
if (draft) {
const prefix = `${config.storage ?? "default"}:`
return {
getItem: (key: string) => draft.getItem(prefix + key),
setItem: (key: string, value: string) => draft.setItem(prefix + key, value),
removeItem: (key: string) => draft.removeItem(prefix + key),
} satisfies AsyncStorage
}
if (isDesktop) return platform.storage?.(config.storage)
if (!config.storage) return localStorageDirect()
return localStorageWithPrefix(config.storage)
@@ -601,7 +577,7 @@ export function persisted<T>(
const legacyStorageNames = config.legacyStorageNames ?? []
const storage = (() => {
if (!isDesktop && !draft) {
if (!isDesktop) {
const current = currentStorage as SyncStorage
const legacyStore = legacyStorage as SyncStorage
const legacyStores = legacyStorageNames.map(localStorageWithPrefix)
@@ -633,26 +609,15 @@ export function persisted<T>(
const current = currentStorage as AsyncStorage
const legacyStore = legacyStorage as AsyncStorage | undefined
const oldCurrent = draft
? isDesktop
? platform.storage?.(config.storage)
: config.storage
? localStorageWithPrefix(config.storage)
: localStorageDirect()
: undefined
const legacyStores = [
oldCurrent,
...legacyStorageNames.map((name) => (isDesktop ? platform.storage?.(name) : localStorageWithPrefix(name))),
]
const legacyStores = legacyStorageNames
.map((name) => platform.storage?.(name) as AsyncStorage | undefined)
.filter((x) => !!x)
.map(toAsyncStorage)
let draftLatest: string | undefined
const api: AsyncStorage = {
getItem: async (key) => {
const value = await readCurrentAsync({ storage: current, key, defaults, migrate: config.migrate })
if (value !== undefined) return value
const migrated = await migrateLegacyAsync({
return migrateLegacyAsync({
current,
legacyStore,
stores: legacyStores,
@@ -661,15 +626,8 @@ export function persisted<T>(
defaults,
migrate: config.migrate,
})
if (draftLatest === undefined) {
if (draft && migrated !== null) return (await current.getItem(key)) ?? migrated
return migrated
}
await current.setItem(key, draftLatest)
return draftLatest
},
setItem: async (key, value) => {
if (draft) draftLatest = value
await current.setItem(key, value)
},
removeItem: async (key) => {
+2 -12
View File
@@ -37,18 +37,8 @@ describe("extractPromptFromParts", () => {
expect(result).toHaveLength(3)
expect(result[0]).toMatchObject({ type: "text", content: "check these" })
expect(result.slice(1)).toMatchObject([
{
type: "image",
filename: "a.png",
mime: "image/png",
blob: expect.objectContaining({ id: expect.any(String) }),
},
{
type: "image",
filename: "b.pdf",
mime: "application/pdf",
blob: expect.objectContaining({ id: expect.any(String) }),
},
{ type: "image", filename: "a.png", mime: "image/png", dataUrl: "data:image/png;base64,AAA" },
{ type: "image", filename: "b.pdf", mime: "application/pdf", dataUrl: "data:application/pdf;base64,BBB" },
])
})
})
+1 -2
View File
@@ -1,6 +1,5 @@
import type { AgentPart as MessageAgentPart, FilePart, Part, TextPart } from "@opencode-ai/sdk/v2"
import type { AgentPart, FileAttachmentPart, ImageAttachmentPart, Prompt } from "@/context/prompt"
import { createLegacyBlobReference } from "@/utils/draft-store"
type Inline =
| {
@@ -108,7 +107,7 @@ export function extractPromptFromParts(parts: Part[], opts?: { directory?: strin
id: filePart.id,
filename: filePart.filename ?? attachmentName,
mime: filePart.mime,
blob: createLegacyBlobReference(filePart.url),
dataUrl: filePart.url,
})
}
}
-12
View File
@@ -1,17 +1,5 @@
const pattern = /^(New session|Child session) - \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/
interface Info {
readonly title?: string
readonly parentID?: string
readonly time: {
readonly created: number
}
}
export function withTimestampedFallback(info: Info) {
return info.title ?? `${info.parentID ? "Child" : "New"} session - ${new Date(info.time.created).toISOString()}`
}
export function sessionTitle(title?: string) {
if (!title) return title
const match = title.match(pattern)
-20
View File
@@ -36,14 +36,6 @@ describe("normalizeSessionInfo", () => {
revert: { messageID: "message-1", partID: "part-1", snapshot: "snapshot" },
})
})
test("supplies timestamped titles for untitled current sessions", () => {
const root = currentSession("session-1")
const child = currentSession("session-2", "session-1")
expect(normalizeSessionInfo(root).title).toBe("New session - 1970-01-01T00:00:00.000Z")
expect(normalizeSessionInfo(child).title).toBe("Child session - 1970-01-01T00:00:00.000Z")
})
})
describe("listAllSessions", () => {
@@ -100,15 +92,3 @@ function sessionInfo(id: string, archived = false) {
location: { directory: "/repo" },
} as SessionInfo
}
function currentSession(id: string, parentID?: string) {
return {
id,
parentID,
projectID: "project-1",
cost: 0,
tokens: { input: 0, output: 0, reasoning: 0, cache: { read: 0, write: 0 } },
time: { created: 0, updated: 0 },
location: { directory: "/repo" },
} as SessionInfo
}
+1 -2
View File
@@ -1,6 +1,5 @@
import type { SessionApi, SessionInfo, SessionListInput } from "@opencode-ai/client/promise"
import type { Session } from "@opencode-ai/sdk/v2/client"
import { withTimestampedFallback } from "./session-title"
export function normalizeSessionInfo(input: SessionInfo | Session): Session {
if (!("location" in input)) return input
@@ -14,7 +13,7 @@ export function normalizeSessionInfo(input: SessionInfo | Session): Session {
parentID: input.parentID,
cost: input.cost,
tokens: input.tokens,
title: withTimestampedFallback(input),
title: input.title,
agent: input.agent,
model: input.model,
version: "",
+2 -15
View File
@@ -1,12 +1,6 @@
import { Icon, type IconProps } from "@opencode-ai/ui/icon"
import {
Toast,
showToast as showLegacyToast,
toaster as legacyToaster,
type ToastOptions,
type ToastVariant,
} from "@opencode-ai/ui/toast"
import { ToastV2, showToastV2, toasterV2 } from "@opencode-ai/ui/v2/toast-v2"
import { Toast, showToast as showLegacyToast, type ToastOptions, type ToastVariant } from "@opencode-ai/ui/toast"
import { ToastV2, showToastV2 } from "@opencode-ai/ui/v2/toast-v2"
let v2 = false
@@ -33,13 +27,6 @@ export function showToast(options: ToastOptions | string) {
})
}
// v1 and v2 ids come from separate registries, so dismissal has to use the same
// implementation that issued the id.
export function dismissToast(toastId: number) {
if (!v2) return legacyToaster.dismiss(toastId)
return toasterV2.dismiss(toastId)
}
function resolveIcon(icon: IconProps["name"] | undefined, variant: ToastVariant | undefined) {
const name = icon ?? (variant === "success" ? "check" : undefined)
if (!name) return
@@ -1,10 +1,7 @@
import { describe, expect, test } from "bun:test"
import { createRoot } from "solid-js"
import { createStore } from "solid-js/store"
import { createPromptAttachmentsCore } from "@/components/prompt-input/attachments"
import { createPromptState } from "@/context/prompt"
import { createPromptInputV2Attachments } from "../../session-ui/src/v2/components/prompt-input/attachments"
import type { PromptInputV2Prompt } from "../../session-ui/src/v2/components/prompt-input/types"
describe("prompt attachment session ownership", () => {
test("adds an asynchronously read image to the session where the read started", async () => {
@@ -88,88 +85,6 @@ describe("prompt attachment session ownership", () => {
})
})
test("rejects a duplicate native clipboard attachment in the V2 prompt store", async () => {
await createRoot(async (dispose) => {
const [state, setState] = createStore({ prompt: [] as PromptInputV2Prompt })
const duplicate = Promise.withResolvers<void>()
const files = [
new File(["hello"], "clipboard-1.txt", { type: "text/plain" }),
new File(["hello"], "clipboard-2.txt", { type: "text/plain" }),
]
const attachments = createPromptInputV2Attachments({
capture: () => ({
current: () => state.prompt,
cursor: () => 0,
set: (prompt) => setState("prompt", prompt),
}),
editor: () => document.createElement("div"),
focusEditor: () => undefined,
addPart: () => false,
setDraggingType: () => undefined,
directory: () => "/",
isDialogActive: () => false,
warn: () => undefined,
duplicate: duplicate.resolve,
onError: () => undefined,
readClipboardImage: async () => files.shift() ?? null,
})
const event = {
clipboardData: { items: [], getData: () => "" },
preventDefault: () => undefined,
stopPropagation: () => undefined,
} as unknown as ClipboardEvent
await attachments.handlePaste(event)
await attachments.handlePaste(event)
await duplicate.promise
expect(state.prompt).toHaveLength(1)
dispose()
})
})
test("rejects desktop duplicates and keeps changed files in the V2 prompt store", async () => {
await createRoot(async (dispose) => {
const [state, setState] = createStore({ prompt: [] as PromptInputV2Prompt })
const duplicates: string[] = []
const attachments = createPromptInputV2Attachments({
capture: () => ({
current: () => state.prompt,
cursor: () => 0,
set: (prompt) => setState("prompt", prompt),
}),
editor: () => document.createElement("div"),
focusEditor: () => undefined,
addPart: () => false,
setDraggingType: () => undefined,
directory: () => "/",
isDialogActive: () => false,
warn: () => undefined,
duplicate: () => duplicates.push("duplicate"),
onError: () => undefined,
getPathForFile: (file) => (file.name === "browser.txt" ? "" : `/tmp/${file.name}`),
})
const first = new File(["first"], "a.txt", { type: "text/plain" })
const second = new File(["second"], "b.txt", { type: "text/plain" })
await attachments.addAttachments([first, second])
await attachments.addAttachments([first, second])
expect(state.prompt).toHaveLength(2)
expect(duplicates).toEqual(["duplicate", "duplicate"])
await attachments.addAttachments([new File(["edited"], "a.txt", { type: "text/plain" })])
expect(state.prompt).toHaveLength(3)
await attachments.addAttachments([
new File(["same"], "browser.txt", { type: "text/plain" }),
new File(["same"], "browser.txt", { type: "text/plain" }),
])
expect(state.prompt).toHaveLength(4)
expect(duplicates).toHaveLength(3)
dispose()
})
})
function images(prompt: ReturnType<typeof createPromptState>) {
return prompt.current().filter((part) => part.type === "image")
}
@@ -2,7 +2,6 @@ import { beforeAll, describe, expect, mock, test } from "bun:test"
import type { AsyncStorage } from "@solid-primitives/storage"
import { createEffect, createRoot } from "solid-js"
import { ServerScope } from "@/utils/server-scope"
import { createDraftStore } from "@/utils/draft-store"
let Prompt: typeof import("@/context/prompt")
let read: ((value: string | null) => void) | undefined
@@ -31,7 +30,7 @@ beforeAll(async () => {
}),
}))
mock.module("@/context/platform", () => ({
usePlatform: () => ({ platform: "desktop", storage: () => storage, draftStore: storage }),
usePlatform: () => ({ platform: "desktop", storage: () => storage }),
}))
Prompt = await import("@/context/prompt")
@@ -70,50 +69,3 @@ describe("prompt persistence", () => {
})
})
})
test("moves legacy image data URLs into blobs and hydrates object URLs", async () => {
const documents = new Map<string, string>()
const blobs = new Map<string, Blob>()
const store = createDraftStore({
get: async (key) => documents.get(key) ?? null,
set: async (key, value) => void documents.set(key, value),
remove: async (key) => void documents.delete(key),
putBlob: async (blob) => {
const id = String(blob.size)
blobs.set(id, blob)
return id
},
getBlob: async (id) => blobs.get(id) ?? null,
})
await store.setItem("prompt", JSON.stringify({ prompt: [{ type: "image", dataUrl: "data:image/png;base64,YQ==" }] }))
expect(documents.get("prompt")).not.toContain("dataUrl")
const value = JSON.parse((await store.getItem("prompt"))!)
expect(value.prompt[0].blob.id).toBe("1")
expect(value.prompt[0].blob.url).toStartWith("blob:")
})
test("does not let delayed blob migration overwrite a newer draft", async () => {
const documents = new Map<string, string>()
const migration = Promise.withResolvers<void>()
const store = createDraftStore({
get: async () => null,
set: async (key, value) => void documents.set(key, value),
remove: async () => undefined,
putBlob: async () => {
await migration.promise
return "blob"
},
getBlob: async () => null,
})
const older = store.setItem(
"prompt",
JSON.stringify({ prompt: [{ type: "image", dataUrl: "data:image/png;base64,YQ==" }] }),
)
await Bun.sleep(0)
await store.setItem("prompt", JSON.stringify({ prompt: [{ type: "text", content: "latest" }] }))
migration.resolve()
await older
expect(documents.get("prompt")).toContain("latest")
})
+1 -39
View File
@@ -1,46 +1,8 @@
import { beforeEach, describe, expect, test } from "bun:test"
import { describe, expect, test } from "bun:test"
import { createSignal, type JSX } from "solid-js"
import { showToastV2, toasterV2 } from "@opencode-ai/ui/v2/toast-v2"
describe("showToastV2", () => {
// The toast registry is module state, so each test starts from an empty stack.
beforeEach(() => {
toasterV2.dismiss()
})
test("coalesces exact active content", () => {
const first = showToastV2({ title: "Repeated error", description: "Try again" })
const second = showToastV2({ title: "Repeated error", description: "Try again" })
const different = showToastV2({ title: "Repeated error", description: "A different error" })
expect(second).toBe(first)
expect(different).not.toBe(first)
toasterV2.dismiss(first)
toasterV2.dismiss(different)
})
test("allows dismissed content to appear again", () => {
const first = showToastV2("Dismiss and retry")
toasterV2.dismiss(first)
const second = showToastV2("Dismiss and retry")
expect(second).not.toBe(first)
toasterV2.dismiss(second)
})
test("recreates matching content when it is not the topmost toast", () => {
const first = showToastV2("First toast")
const topmost = showToastV2("Topmost toast")
const repeated = showToastV2("First toast")
expect(repeated).not.toBe(first)
toasterV2.dismiss(topmost)
toasterV2.dismiss(repeated)
})
test("creates no reactive computations at call time", () => {
const [tick, setTick] = createSignal(0)
let reads = 0

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