mirror of
https://github.com/anomalyco/opencode.git
synced 2026-02-12 03:44:28 +00:00
Compare commits
79 Commits
snapshot-s
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5bdf1c4b96 | ||
|
|
135f8ffb2a | ||
|
|
bf5a01edd9 | ||
|
|
81ca2df6ad | ||
|
|
aea68c386a | ||
|
|
8eea53a41e | ||
|
|
3befd0c6c5 | ||
|
|
8577eb8ec9 | ||
|
|
c856f875a1 | ||
|
|
264dd213f9 | ||
|
|
125727d09c | ||
|
|
8c7b35ad05 | ||
|
|
e2a33f75e1 | ||
|
|
006d673ed2 | ||
|
|
6b4d617df0 | ||
|
|
e3471526f4 | ||
|
|
6b30e0b752 | ||
|
|
fbabce1125 | ||
|
|
8f56ed5b85 | ||
|
|
81b5a6a08b | ||
|
|
94cb6390aa | ||
|
|
42bea5d297 | ||
|
|
f252e3234c | ||
|
|
eef3ae3e1f | ||
|
|
fc88dde63f | ||
|
|
4619e9d183 | ||
|
|
4dc363f306 | ||
|
|
2e8082dd21 | ||
|
|
a52fe28246 | ||
|
|
8c5ba8aeb0 | ||
|
|
50330820c0 | ||
|
|
7222fc0ba0 | ||
|
|
17bdb5d56a | ||
|
|
7a463cd193 | ||
|
|
352a54c698 | ||
|
|
93957da2c9 | ||
|
|
edcfd562af | ||
|
|
ef5ec5dc28 | ||
|
|
c426cb0f14 | ||
|
|
dd1862cc2b | ||
|
|
a25b2af05a | ||
|
|
8bfd6fdba2 | ||
|
|
cf7a1b8d80 | ||
|
|
5ba4c0e024 | ||
|
|
567e094e6c | ||
|
|
b523998329 | ||
|
|
7e1247c420 | ||
|
|
783888131e | ||
|
|
213a87234d | ||
|
|
d98bd4bd52 | ||
|
|
22125d1347 | ||
|
|
8c120f2fab | ||
|
|
c6ec2f47ef | ||
|
|
0fd6f365be | ||
|
|
60bdb6e9ba | ||
|
|
6e9cd576ea | ||
|
|
53ec15a56a | ||
|
|
a90b62267f | ||
|
|
24556331c8 | ||
|
|
39145b99e8 | ||
|
|
0afa6e03a8 | ||
|
|
7a3c775dc1 | ||
|
|
3ea58bb790 | ||
|
|
50c705cd2d | ||
|
|
3894c217cc | ||
|
|
66c2bb8f37 | ||
|
|
1bbbd51d48 | ||
|
|
50f3e74d05 | ||
|
|
21475a1dfd | ||
|
|
dce4c05fa9 | ||
|
|
8c56571ef9 | ||
|
|
92a77b72fb | ||
|
|
4f6b929784 | ||
|
|
55119559b3 | ||
|
|
fd5531316f | ||
|
|
fbc41475b4 | ||
|
|
a0673256db | ||
|
|
fc37337a3e | ||
|
|
80220cebe4 |
3
.github/VOUCHED.td
vendored
3
.github/VOUCHED.td
vendored
@@ -8,6 +8,8 @@
|
||||
# - Denounce with minus prefix: -username or -platform:username.
|
||||
# - Optional details after a space following the handle.
|
||||
adamdotdevin
|
||||
ariane-emory
|
||||
-florianleibert
|
||||
fwang
|
||||
iamdavidhill
|
||||
jayair
|
||||
@@ -15,4 +17,5 @@ kitlangton
|
||||
kommander
|
||||
r44vc0rp
|
||||
rekram1-node
|
||||
-spider-yamet clawdbot/llm psychosis, spam pinging the team
|
||||
thdxr
|
||||
|
||||
11
.github/workflows/docs-locale-sync.yml
vendored
11
.github/workflows/docs-locale-sync.yml
vendored
@@ -64,10 +64,13 @@ jobs:
|
||||
|
||||
Requirements:
|
||||
1. Update all relevant locale docs under packages/web/src/content/docs/<locale>/ so they reflect these English page changes.
|
||||
2. Preserve frontmatter keys, internal links, code blocks, and existing locale-specific metadata unless the English change requires an update.
|
||||
3. Keep locale docs structure aligned with their corresponding English pages.
|
||||
4. Do not modify English source docs in packages/web/src/content/docs/*.mdx.
|
||||
5. If no locale updates are needed, make no changes.
|
||||
2. You MUST use the Task tool for translation work and launch subagents with subagent_type `translator` (defined in .opencode/agent/translator.md).
|
||||
3. Do not translate directly in the primary agent. Use translator subagent output as the source for locale text updates.
|
||||
4. Run translator subagent Task calls in parallel whenever file/locale translation work is independent.
|
||||
5. Preserve frontmatter keys, internal links, code blocks, and existing locale-specific metadata unless the English change requires an update.
|
||||
6. Keep locale docs structure aligned with their corresponding English pages.
|
||||
7. Do not modify English source docs in packages/web/src/content/docs/*.mdx.
|
||||
8. If no locale updates are needed, make no changes.
|
||||
|
||||
- name: Commit and push locale docs updates
|
||||
if: steps.changes.outputs.has_changes == 'true'
|
||||
|
||||
@@ -32,6 +32,9 @@ description: Use this when you are working on file operations like reading, writ
|
||||
- Decode tool stderr with `Bun.readableStreamToText`.
|
||||
- For large writes, use `Bun.write(Bun.file(path), text)`.
|
||||
|
||||
NOTE: Bun.file(...).exists() will return `false` if the value is a directory.
|
||||
Use Filesystem.exists(...) instead if path can be file or directory
|
||||
|
||||
## Quick checklist
|
||||
|
||||
- Use Bun APIs first.
|
||||
|
||||
56
bun.lock
56
bun.lock
@@ -23,7 +23,7 @@
|
||||
},
|
||||
"packages/app": {
|
||||
"name": "@opencode-ai/app",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"dependencies": {
|
||||
"@kobalte/core": "catalog:",
|
||||
"@opencode-ai/sdk": "workspace:*",
|
||||
@@ -73,7 +73,7 @@
|
||||
},
|
||||
"packages/console/app": {
|
||||
"name": "@opencode-ai/console-app",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"dependencies": {
|
||||
"@cloudflare/vite-plugin": "1.15.2",
|
||||
"@ibm/plex": "6.4.1",
|
||||
@@ -107,7 +107,7 @@
|
||||
},
|
||||
"packages/console/core": {
|
||||
"name": "@opencode-ai/console-core",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"dependencies": {
|
||||
"@aws-sdk/client-sts": "3.782.0",
|
||||
"@jsx-email/render": "1.1.1",
|
||||
@@ -134,7 +134,7 @@
|
||||
},
|
||||
"packages/console/function": {
|
||||
"name": "@opencode-ai/console-function",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"dependencies": {
|
||||
"@ai-sdk/anthropic": "2.0.0",
|
||||
"@ai-sdk/openai": "2.0.2",
|
||||
@@ -158,7 +158,7 @@
|
||||
},
|
||||
"packages/console/mail": {
|
||||
"name": "@opencode-ai/console-mail",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"dependencies": {
|
||||
"@jsx-email/all": "2.2.3",
|
||||
"@jsx-email/cli": "1.4.3",
|
||||
@@ -182,7 +182,7 @@
|
||||
},
|
||||
"packages/desktop": {
|
||||
"name": "@opencode-ai/desktop",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"dependencies": {
|
||||
"@opencode-ai/app": "workspace:*",
|
||||
"@opencode-ai/ui": "workspace:*",
|
||||
@@ -215,7 +215,7 @@
|
||||
},
|
||||
"packages/enterprise": {
|
||||
"name": "@opencode-ai/enterprise",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"dependencies": {
|
||||
"@opencode-ai/ui": "workspace:*",
|
||||
"@opencode-ai/util": "workspace:*",
|
||||
@@ -244,7 +244,7 @@
|
||||
},
|
||||
"packages/function": {
|
||||
"name": "@opencode-ai/function",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"dependencies": {
|
||||
"@octokit/auth-app": "8.0.1",
|
||||
"@octokit/rest": "catalog:",
|
||||
@@ -260,7 +260,7 @@
|
||||
},
|
||||
"packages/opencode": {
|
||||
"name": "opencode",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"bin": {
|
||||
"opencode": "./bin/opencode",
|
||||
},
|
||||
@@ -301,8 +301,8 @@
|
||||
"@opencode-ai/sdk": "workspace:*",
|
||||
"@opencode-ai/util": "workspace:*",
|
||||
"@openrouter/ai-sdk-provider": "1.5.4",
|
||||
"@opentui/core": "0.1.77",
|
||||
"@opentui/solid": "0.1.77",
|
||||
"@opentui/core": "0.1.79",
|
||||
"@opentui/solid": "0.1.79",
|
||||
"@parcel/watcher": "2.5.1",
|
||||
"@pierre/diffs": "catalog:",
|
||||
"@solid-primitives/event-bus": "1.1.2",
|
||||
@@ -366,7 +366,7 @@
|
||||
},
|
||||
"packages/plugin": {
|
||||
"name": "@opencode-ai/plugin",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"dependencies": {
|
||||
"@opencode-ai/sdk": "workspace:*",
|
||||
"zod": "catalog:",
|
||||
@@ -386,7 +386,7 @@
|
||||
},
|
||||
"packages/sdk/js": {
|
||||
"name": "@opencode-ai/sdk",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"devDependencies": {
|
||||
"@hey-api/openapi-ts": "0.90.10",
|
||||
"@tsconfig/node22": "catalog:",
|
||||
@@ -397,7 +397,7 @@
|
||||
},
|
||||
"packages/slack": {
|
||||
"name": "@opencode-ai/slack",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"dependencies": {
|
||||
"@opencode-ai/sdk": "workspace:*",
|
||||
"@slack/bolt": "^3.17.1",
|
||||
@@ -410,7 +410,7 @@
|
||||
},
|
||||
"packages/ui": {
|
||||
"name": "@opencode-ai/ui",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"dependencies": {
|
||||
"@kobalte/core": "catalog:",
|
||||
"@opencode-ai/sdk": "workspace:*",
|
||||
@@ -452,7 +452,7 @@
|
||||
},
|
||||
"packages/util": {
|
||||
"name": "@opencode-ai/util",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"dependencies": {
|
||||
"zod": "catalog:",
|
||||
},
|
||||
@@ -463,7 +463,7 @@
|
||||
},
|
||||
"packages/web": {
|
||||
"name": "@opencode-ai/web",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"dependencies": {
|
||||
"@astrojs/cloudflare": "12.6.3",
|
||||
"@astrojs/markdown-remark": "6.3.1",
|
||||
@@ -522,7 +522,7 @@
|
||||
"@tailwindcss/vite": "4.1.11",
|
||||
"@tsconfig/bun": "1.0.9",
|
||||
"@tsconfig/node22": "22.0.2",
|
||||
"@types/bun": "1.3.8",
|
||||
"@types/bun": "1.3.9",
|
||||
"@types/luxon": "3.7.1",
|
||||
"@types/node": "22.13.9",
|
||||
"@types/semver": "7.7.1",
|
||||
@@ -1279,21 +1279,21 @@
|
||||
|
||||
"@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="],
|
||||
|
||||
"@opentui/core": ["@opentui/core@0.1.77", "", { "dependencies": { "bun-ffi-structs": "0.1.2", "diff": "8.0.2", "jimp": "1.6.0", "marked": "17.0.1", "yoga-layout": "3.2.1" }, "optionalDependencies": { "@dimforge/rapier2d-simd-compat": "^0.17.3", "@opentui/core-darwin-arm64": "0.1.77", "@opentui/core-darwin-x64": "0.1.77", "@opentui/core-linux-arm64": "0.1.77", "@opentui/core-linux-x64": "0.1.77", "@opentui/core-win32-arm64": "0.1.77", "@opentui/core-win32-x64": "0.1.77", "bun-webgpu": "0.1.4", "planck": "^1.4.2", "three": "0.177.0" }, "peerDependencies": { "web-tree-sitter": "0.25.10" } }, "sha512-lE3kabm6jdqK3AuBq+O0zZrXdxt6ulmibTc57sf+AsPny6cmwYHnWI4wD6hcreFiYoQVNVvdiJchVgPtowMlEg=="],
|
||||
"@opentui/core": ["@opentui/core@0.1.79", "", { "dependencies": { "bun-ffi-structs": "0.1.2", "diff": "8.0.2", "jimp": "1.6.0", "marked": "17.0.1", "yoga-layout": "3.2.1" }, "optionalDependencies": { "@dimforge/rapier2d-simd-compat": "^0.17.3", "@opentui/core-darwin-arm64": "0.1.79", "@opentui/core-darwin-x64": "0.1.79", "@opentui/core-linux-arm64": "0.1.79", "@opentui/core-linux-x64": "0.1.79", "@opentui/core-win32-arm64": "0.1.79", "@opentui/core-win32-x64": "0.1.79", "bun-webgpu": "0.1.4", "planck": "^1.4.2", "three": "0.177.0" }, "peerDependencies": { "web-tree-sitter": "0.25.10" } }, "sha512-job/t09w8A/aHb/WuaVbimu5fIffyN+PCuVO5cYhXEg/NkOkC/WdFi80B8bwncR/DBPyLAh6oJ3EG86grOVo5g=="],
|
||||
|
||||
"@opentui/core-darwin-arm64": ["@opentui/core-darwin-arm64@0.1.77", "", { "os": "darwin", "cpu": "arm64" }, "sha512-SNqmygCMEsPCW7xWjzCZ5caBf36xaprwVdAnFijGDOuIzLA4iaDa6um8cj3TJh7awenN3NTRsuRc7OuH42UH+g=="],
|
||||
"@opentui/core-darwin-arm64": ["@opentui/core-darwin-arm64@0.1.79", "", { "os": "darwin", "cpu": "arm64" }, "sha512-kgsGniV+DM5G1P3GideyJhvfnthNKcVCAm2mPTIr9InQ3L0gS/Feh7zgwOS/jxDvdlQbOWGKMk2Z3JApeC1MLw=="],
|
||||
|
||||
"@opentui/core-darwin-x64": ["@opentui/core-darwin-x64@0.1.77", "", { "os": "darwin", "cpu": "x64" }, "sha512-/8fsa03swEHTQt/9NrGm98kemlU+VuTURI/OFZiH53vPDRrOYIYoa4Jyga/H7ZMcG+iFhkq97zIe+0Kw95LGmA=="],
|
||||
"@opentui/core-darwin-x64": ["@opentui/core-darwin-x64@0.1.79", "", { "os": "darwin", "cpu": "x64" }, "sha512-OpyAmFqAAKQ2CeFmf/oLWcNksmP6Ryx/3R5dbKXThOudMCeQvfvInJTRbc2jTn9VFpf+Qj4BgHkJg1h90tf/EA=="],
|
||||
|
||||
"@opentui/core-linux-arm64": ["@opentui/core-linux-arm64@0.1.77", "", { "os": "linux", "cpu": "arm64" }, "sha512-QfUXZJPc69OvqoMu+AlLgjqXrwu4IeqcBuUWYMuH8nPTeLsVUc3CBbXdV2lv9UDxWzxzrxdS4ALPaxvmEv9lsQ=="],
|
||||
"@opentui/core-linux-arm64": ["@opentui/core-linux-arm64@0.1.79", "", { "os": "linux", "cpu": "arm64" }, "sha512-DCa5YaknS4bWhFt8TMEGH+qmTinyzuY8hoZbO4crtWXAxofPP7Pas76Cwxlvis/PyLffA+pPxAl1l5sUZpsvqw=="],
|
||||
|
||||
"@opentui/core-linux-x64": ["@opentui/core-linux-x64@0.1.77", "", { "os": "linux", "cpu": "x64" }, "sha512-Kmfx0yUKnPj67AoXYIgL7qQo0QVsUG5Iw8aRtv6XFzXqa5SzBPhaKkKZ9yHPjOmTalZquUs+9zcCRNKpYYuL7A=="],
|
||||
"@opentui/core-linux-x64": ["@opentui/core-linux-x64@0.1.79", "", { "os": "linux", "cpu": "x64" }, "sha512-V6xjvFfHh3NGvsuuDae1KHPRZXHMEE8XL0A/GM6v4I4OCC23kDmkK60Vn6OptQwAzwwbz0X0IX+Ut/GQU9qGgA=="],
|
||||
|
||||
"@opentui/core-win32-arm64": ["@opentui/core-win32-arm64@0.1.77", "", { "os": "win32", "cpu": "arm64" }, "sha512-HGTscPXc7gdd23Nh1DbzUNjog1I+5IZp95XPtLftGTpjrWs60VcetXcyJqK2rQcXNxewJK5yDyaa5QyMjfEhCQ=="],
|
||||
"@opentui/core-win32-arm64": ["@opentui/core-win32-arm64@0.1.79", "", { "os": "win32", "cpu": "arm64" }, "sha512-sPRKnVzOdT5szI59tte7pxwwkYA+07EQN+6miFAvkFuiLmRUngONUD8HVjL7nCnxcPFqxaU4Rvl1y40ST86g8g=="],
|
||||
|
||||
"@opentui/core-win32-x64": ["@opentui/core-win32-x64@0.1.77", "", { "os": "win32", "cpu": "x64" }, "sha512-c7GijsbvVgnlzd2murIbwuwrGbcv76KdUw6WlVv7a0vex50z6xJCpv1keGzpe0QfxrZ/6fFEFX7JnwGLno0wjA=="],
|
||||
"@opentui/core-win32-x64": ["@opentui/core-win32-x64@0.1.79", "", { "os": "win32", "cpu": "x64" }, "sha512-vmQcFTvKf9fqajnDtgU6/uAsiTGwx8//khqHVBmiTEXUsiT792Ki9l8sgNughbuldqG5iZOiF6IaAWU1H67UpA=="],
|
||||
|
||||
"@opentui/solid": ["@opentui/solid@0.1.77", "", { "dependencies": { "@babel/core": "7.28.0", "@babel/preset-typescript": "7.27.1", "@opentui/core": "0.1.77", "babel-plugin-module-resolver": "5.0.2", "babel-preset-solid": "1.9.9", "s-js": "^0.4.9" }, "peerDependencies": { "solid-js": "1.9.9" } }, "sha512-JY+hUbXVV+XCk6bC8dvcwawWCEmC3Gid6GDs23AJWBgHZ3TU2kRKrgwTdltm45DOq2cZXrYCt690/yE8bP+Gxg=="],
|
||||
"@opentui/solid": ["@opentui/solid@0.1.79", "", { "dependencies": { "@babel/core": "7.28.0", "@babel/preset-typescript": "7.27.1", "@opentui/core": "0.1.79", "babel-plugin-module-resolver": "5.0.2", "babel-preset-solid": "1.9.9", "s-js": "^0.4.9" }, "peerDependencies": { "solid-js": "1.9.9" } }, "sha512-c5+0jexKxb8GwRDDkQ/U6isZZqClAzHccXmYiLYmSnqdoQQp2lIGHLartL+K8lfIQrsKClzP2ZHumN6nexRfRg=="],
|
||||
|
||||
"@oslojs/asn1": ["@oslojs/asn1@1.0.0", "", { "dependencies": { "@oslojs/binary": "1.0.0" } }, "sha512-zw/wn0sj0j0QKbIXfIlnEcTviaCzYOY3V5rAyjR6YtOByFtJiT574+8p9Wlach0lZH9fddD4yb9laEAIl4vXQA=="],
|
||||
|
||||
@@ -1853,7 +1853,7 @@
|
||||
|
||||
"@types/braces": ["@types/braces@3.0.5", "", {}, "sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w=="],
|
||||
|
||||
"@types/bun": ["@types/bun@1.3.8", "", { "dependencies": { "bun-types": "1.3.8" } }, "sha512-3LvWJ2q5GerAXYxO2mffLTqOzEu5qnhEAlh48Vnu8WQfnmSwbgagjGZV6BoHKJztENYEDn6QmVd949W4uESRJA=="],
|
||||
"@types/bun": ["@types/bun@1.3.9", "", { "dependencies": { "bun-types": "1.3.9" } }, "sha512-KQ571yULOdWJiMH+RIWIOZ7B2RXQGpL1YQrBtLIV3FqDcCu6FsbFUBwhdKUlCKUpS3PJDsHlJ1QKlpxoVR+xtw=="],
|
||||
|
||||
"@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="],
|
||||
|
||||
@@ -2181,7 +2181,7 @@
|
||||
|
||||
"bun-pty": ["bun-pty@0.4.8", "", {}, "sha512-rO70Mrbr13+jxHHHu2YBkk2pNqrJE5cJn29WE++PUr+GFA0hq/VgtQPZANJ8dJo6d7XImvBk37Innt8GM7O28w=="],
|
||||
|
||||
"bun-types": ["bun-types@1.3.8", "", { "dependencies": { "@types/node": "*" } }, "sha512-fL99nxdOWvV4LqjmC+8Q9kW3M4QTtTR1eePs94v5ctGqU8OeceWrSUaRw3JYb7tU3FkMIAjkueehrHPPPGKi5Q=="],
|
||||
"bun-types": ["bun-types@1.3.9", "", { "dependencies": { "@types/node": "*" } }, "sha512-+UBWWOakIP4Tswh0Bt0QD0alpTY8cb5hvgiYeWCMet9YukHbzuruIEeXC2D7nMJPB12kbh8C7XJykSexEqGKJg=="],
|
||||
|
||||
"bun-webgpu": ["bun-webgpu@0.1.4", "", { "dependencies": { "@webgpu/types": "^0.1.60" }, "optionalDependencies": { "bun-webgpu-darwin-arm64": "^0.1.4", "bun-webgpu-darwin-x64": "^0.1.4", "bun-webgpu-linux-x64": "^0.1.4", "bun-webgpu-win32-x64": "^0.1.4" } }, "sha512-Kw+HoXl1PMWJTh9wvh63SSRofTA8vYBFCw0XEP1V1fFdQEDhI8Sgf73sdndE/oDpN/7CMx0Yv/q8FCvO39ROMQ=="],
|
||||
|
||||
|
||||
@@ -166,14 +166,10 @@ const bucketNew = new sst.cloudflare.Bucket("ZenDataNew")
|
||||
const AWS_SES_ACCESS_KEY_ID = new sst.Secret("AWS_SES_ACCESS_KEY_ID")
|
||||
const AWS_SES_SECRET_ACCESS_KEY = new sst.Secret("AWS_SES_SECRET_ACCESS_KEY")
|
||||
|
||||
let logProcessor
|
||||
if ($app.stage === "production" || $app.stage === "frank") {
|
||||
const HONEYCOMB_API_KEY = new sst.Secret("HONEYCOMB_API_KEY")
|
||||
logProcessor = new sst.cloudflare.Worker("LogProcessor", {
|
||||
handler: "packages/console/function/src/log-processor.ts",
|
||||
link: [HONEYCOMB_API_KEY],
|
||||
})
|
||||
}
|
||||
const logProcessor = new sst.cloudflare.Worker("LogProcessor", {
|
||||
handler: "packages/console/function/src/log-processor.ts",
|
||||
link: [new sst.Secret("HONEYCOMB_API_KEY")],
|
||||
})
|
||||
|
||||
new sst.cloudflare.x.SolidStart("Console", {
|
||||
domain,
|
||||
@@ -211,7 +207,7 @@ new sst.cloudflare.x.SolidStart("Console", {
|
||||
transform: {
|
||||
worker: {
|
||||
placement: { mode: "smart" },
|
||||
tailConsumers: logProcessor ? [{ service: logProcessor.nodes.worker.scriptName }] : [],
|
||||
tailConsumers: [{ service: logProcessor.nodes.worker.scriptName }],
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"nodeModules": {
|
||||
"x86_64-linux": "sha256-cvRBvHRuunNjF07c4GVHl5rRgoTn1qfI/HdJWtOV63M=",
|
||||
"aarch64-linux": "sha256-DJUI4pMZ7wQTnyOiuDHALmZz7FZtrTbzRzCuNOShmWE=",
|
||||
"aarch64-darwin": "sha256-JnkqDwuC7lNsjafV+jOGfvs8K1xC8rk5CTOW+spjiCA=",
|
||||
"x86_64-darwin": "sha256-GBeTqq2vDn/mXplYNglrAT2xajjFVzB4ATHnMS0j7z4="
|
||||
"x86_64-linux": "sha256-pp2gb4nxiIT3VltB6Xli2wZPH32JfnMsI+BbihyU1+E=",
|
||||
"aarch64-linux": "sha256-hJwxhBICZz/pbIxQsF/sIpZTlFIgLpcAyF44O8wxMdU=",
|
||||
"aarch64-darwin": "sha256-DPONXP52XOg/ApdSnLp32a+K5XCOnDGhbTUto2Rme0g=",
|
||||
"x86_64-darwin": "sha256-KX1h5LRJSgthpbOPqWlbM/sPf8cvQrdRJvxtrz/FzBQ="
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"description": "AI-powered development tool",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"packageManager": "bun@1.3.8",
|
||||
"packageManager": "bun@1.3.9",
|
||||
"scripts": {
|
||||
"dev": "bun run --cwd packages/opencode --conditions=browser src/index.ts",
|
||||
"dev:desktop": "bun --cwd packages/desktop tauri dev",
|
||||
@@ -23,7 +23,7 @@
|
||||
"packages/slack"
|
||||
],
|
||||
"catalog": {
|
||||
"@types/bun": "1.3.8",
|
||||
"@types/bun": "1.3.9",
|
||||
"@octokit/rest": "22.0.0",
|
||||
"@hono/zod-validator": "0.4.2",
|
||||
"ulid": "3.0.1",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { test, expect } from "../fixtures"
|
||||
import { openSidebar, withSession } from "../actions"
|
||||
import { defocus, openSidebar, withSession } from "../actions"
|
||||
import { promptSelector } from "../selectors"
|
||||
import { modKey } from "../utils"
|
||||
|
||||
test("titlebar back/forward navigates between sessions", async ({ page, slug, sdk, gotoSession }) => {
|
||||
await page.setViewportSize({ width: 1400, height: 800 })
|
||||
@@ -40,3 +41,84 @@ test("titlebar back/forward navigates between sessions", async ({ page, slug, sd
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
test("titlebar forward is cleared after branching history from sidebar", async ({ page, slug, sdk, gotoSession }) => {
|
||||
await page.setViewportSize({ width: 1400, height: 800 })
|
||||
|
||||
const stamp = Date.now()
|
||||
|
||||
await withSession(sdk, `e2e titlebar history a ${stamp}`, async (a) => {
|
||||
await withSession(sdk, `e2e titlebar history b ${stamp}`, async (b) => {
|
||||
await withSession(sdk, `e2e titlebar history c ${stamp}`, async (c) => {
|
||||
await gotoSession(a.id)
|
||||
|
||||
await openSidebar(page)
|
||||
|
||||
const second = page.locator(`[data-session-id="${b.id}"] a`).first()
|
||||
await expect(second).toBeVisible()
|
||||
await second.scrollIntoViewIfNeeded()
|
||||
await second.click()
|
||||
|
||||
await expect(page).toHaveURL(new RegExp(`/${slug}/session/${b.id}(?:\\?|#|$)`))
|
||||
await expect(page.locator(promptSelector)).toBeVisible()
|
||||
|
||||
const back = page.getByRole("button", { name: "Back" })
|
||||
const forward = page.getByRole("button", { name: "Forward" })
|
||||
|
||||
await expect(back).toBeVisible()
|
||||
await expect(back).toBeEnabled()
|
||||
await back.click()
|
||||
|
||||
await expect(page).toHaveURL(new RegExp(`/${slug}/session/${a.id}(?:\\?|#|$)`))
|
||||
await expect(page.locator(promptSelector)).toBeVisible()
|
||||
|
||||
await openSidebar(page)
|
||||
|
||||
const third = page.locator(`[data-session-id="${c.id}"] a`).first()
|
||||
await expect(third).toBeVisible()
|
||||
await third.scrollIntoViewIfNeeded()
|
||||
await third.click()
|
||||
|
||||
await expect(page).toHaveURL(new RegExp(`/${slug}/session/${c.id}(?:\\?|#|$)`))
|
||||
await expect(page.locator(promptSelector)).toBeVisible()
|
||||
|
||||
await expect(forward).toBeVisible()
|
||||
await expect(forward).toBeDisabled()
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
test("keyboard shortcuts navigate titlebar history", async ({ page, slug, sdk, gotoSession }) => {
|
||||
await page.setViewportSize({ width: 1400, height: 800 })
|
||||
|
||||
const stamp = Date.now()
|
||||
|
||||
await withSession(sdk, `e2e titlebar shortcuts 1 ${stamp}`, async (one) => {
|
||||
await withSession(sdk, `e2e titlebar shortcuts 2 ${stamp}`, async (two) => {
|
||||
await gotoSession(one.id)
|
||||
|
||||
await openSidebar(page)
|
||||
|
||||
const link = page.locator(`[data-session-id="${two.id}"] a`).first()
|
||||
await expect(link).toBeVisible()
|
||||
await link.scrollIntoViewIfNeeded()
|
||||
await link.click()
|
||||
|
||||
await expect(page).toHaveURL(new RegExp(`/${slug}/session/${two.id}(?:\\?|#|$)`))
|
||||
await expect(page.locator(promptSelector)).toBeVisible()
|
||||
|
||||
await defocus(page)
|
||||
await page.keyboard.press(`${modKey}+[`)
|
||||
|
||||
await expect(page).toHaveURL(new RegExp(`/${slug}/session/${one.id}(?:\\?|#|$)`))
|
||||
await expect(page.locator(promptSelector)).toBeVisible()
|
||||
|
||||
await defocus(page)
|
||||
await page.keyboard.press(`${modKey}+]`)
|
||||
|
||||
await expect(page).toHaveURL(new RegExp(`/${slug}/session/${two.id}(?:\\?|#|$)`))
|
||||
await expect(page.locator(promptSelector)).toBeVisible()
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,37 +1,49 @@
|
||||
import { test, expect } from "../fixtures"
|
||||
|
||||
test.skip("file tree can expand folders and open a file", async ({ page, gotoSession }) => {
|
||||
test("file tree can expand folders and open a file", async ({ page, gotoSession }) => {
|
||||
await gotoSession()
|
||||
|
||||
const toggle = page.getByRole("button", { name: "Toggle file tree" })
|
||||
const treeTabs = page.locator('[data-component="tabs"][data-variant="pill"][data-scope="filetree"]')
|
||||
const panel = page.locator("#file-tree-panel")
|
||||
const treeTabs = panel.locator('[data-component="tabs"][data-variant="pill"][data-scope="filetree"]')
|
||||
|
||||
await expect(toggle).toBeVisible()
|
||||
if ((await toggle.getAttribute("aria-expanded")) !== "true") await toggle.click()
|
||||
await expect(toggle).toHaveAttribute("aria-expanded", "true")
|
||||
await expect(panel).toBeVisible()
|
||||
await expect(treeTabs).toBeVisible()
|
||||
|
||||
await treeTabs.locator('[data-slot="tabs-trigger"]').nth(1).click()
|
||||
const allTab = treeTabs.getByRole("tab", { name: /^all files$/i })
|
||||
await expect(allTab).toBeVisible()
|
||||
await allTab.click()
|
||||
await expect(allTab).toHaveAttribute("aria-selected", "true")
|
||||
|
||||
const node = (name: string) => treeTabs.getByRole("button", { name, exact: true })
|
||||
const tree = treeTabs.locator('[data-slot="tabs-content"]:not([hidden])')
|
||||
await expect(tree).toBeVisible()
|
||||
|
||||
await expect(node("packages")).toBeVisible()
|
||||
await node("packages").click()
|
||||
const expand = async (name: string) => {
|
||||
const folder = tree.getByRole("button", { name, exact: true }).first()
|
||||
await expect(folder).toBeVisible()
|
||||
await expect(folder).toHaveAttribute("aria-expanded", /true|false/)
|
||||
if ((await folder.getAttribute("aria-expanded")) === "false") await folder.click()
|
||||
await expect(folder).toHaveAttribute("aria-expanded", "true")
|
||||
}
|
||||
|
||||
await expect(node("app")).toBeVisible()
|
||||
await node("app").click()
|
||||
await expand("packages")
|
||||
await expand("app")
|
||||
await expand("src")
|
||||
await expand("components")
|
||||
|
||||
await expect(node("src")).toBeVisible()
|
||||
await node("src").click()
|
||||
|
||||
await expect(node("components")).toBeVisible()
|
||||
await node("components").click()
|
||||
|
||||
await expect(node("file-tree.tsx")).toBeVisible()
|
||||
await node("file-tree.tsx").click()
|
||||
const file = tree.getByRole("button", { name: "file-tree.tsx", exact: true }).first()
|
||||
await expect(file).toBeVisible()
|
||||
await file.click()
|
||||
|
||||
const tab = page.getByRole("tab", { name: "file-tree.tsx" })
|
||||
await expect(tab).toBeVisible()
|
||||
await tab.click()
|
||||
await expect(tab).toHaveAttribute("aria-selected", "true")
|
||||
|
||||
const code = page.locator('[data-component="code"]').first()
|
||||
await expect(code.getByText("export default function FileTree")).toBeVisible()
|
||||
await expect(code).toBeVisible()
|
||||
await expect(code).toContainText("export default function FileTree")
|
||||
})
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { test, expect } from "../fixtures"
|
||||
import { createTestProject, cleanupTestProject, openSidebar, clickMenuItem } from "../actions"
|
||||
import { projectCloseHoverSelector, projectCloseMenuSelector, projectSwitchSelector } from "../selectors"
|
||||
import { createTestProject, cleanupTestProject, openSidebar, clickMenuItem, openProjectMenu } from "../actions"
|
||||
import { projectCloseHoverSelector, projectSwitchSelector } from "../selectors"
|
||||
import { dirSlug } from "../utils"
|
||||
|
||||
test("can close a project via hover card close button", async ({ page, withProject }) => {
|
||||
@@ -31,16 +31,15 @@ test("can close a project via hover card close button", async ({ page, withProje
|
||||
}
|
||||
})
|
||||
|
||||
test("can close a project via project header more options menu", async ({ page, withProject }) => {
|
||||
test("closing active project navigates to another open project", async ({ page, withProject }) => {
|
||||
await page.setViewportSize({ width: 1400, height: 800 })
|
||||
|
||||
const other = await createTestProject()
|
||||
const otherName = other.split("/").pop() ?? other
|
||||
const otherSlug = dirSlug(other)
|
||||
|
||||
try {
|
||||
await withProject(
|
||||
async () => {
|
||||
async ({ slug }) => {
|
||||
await openSidebar(page)
|
||||
|
||||
const otherButton = page.locator(projectSwitchSelector(otherSlug)).first()
|
||||
@@ -49,21 +48,20 @@ test("can close a project via project header more options menu", async ({ page,
|
||||
|
||||
await expect(page).toHaveURL(new RegExp(`/${otherSlug}/session`))
|
||||
|
||||
const header = page
|
||||
.locator(".group\\/project")
|
||||
.filter({ has: page.locator(`[data-action="project-menu"][data-project="${otherSlug}"]`) })
|
||||
.first()
|
||||
await expect(header).toContainText(otherName)
|
||||
|
||||
const trigger = header.locator(`[data-action="project-menu"][data-project="${otherSlug}"]`).first()
|
||||
await expect(trigger).toHaveCount(1)
|
||||
await trigger.focus()
|
||||
await page.keyboard.press("Enter")
|
||||
|
||||
const menu = page.locator('[data-component="dropdown-menu-content"]').first()
|
||||
await expect(menu).toBeVisible({ timeout: 10_000 })
|
||||
const menu = await openProjectMenu(page, otherSlug)
|
||||
|
||||
await clickMenuItem(menu, /^Close$/i, { force: true })
|
||||
|
||||
await expect
|
||||
.poll(() => {
|
||||
const pathname = new URL(page.url()).pathname
|
||||
if (new RegExp(`^/${slug}/session(?:/[^/]+)?/?$`).test(pathname)) return "project"
|
||||
if (pathname === "/") return "home"
|
||||
return ""
|
||||
})
|
||||
.toMatch(/^(project|home)$/)
|
||||
|
||||
await expect(page).not.toHaveURL(new RegExp(`/${otherSlug}/session(?:[/?#]|$)`))
|
||||
await expect(otherButton).toHaveCount(0)
|
||||
},
|
||||
{ extra: [other] },
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { base64Decode } from "@opencode-ai/util/encode"
|
||||
import fs from "node:fs/promises"
|
||||
import os from "node:os"
|
||||
import path from "node:path"
|
||||
import type { Page } from "@playwright/test"
|
||||
|
||||
@@ -10,11 +11,18 @@ import {
|
||||
cleanupTestProject,
|
||||
clickMenuItem,
|
||||
confirmDialog,
|
||||
openProjectMenu,
|
||||
openSidebar,
|
||||
openWorkspaceMenu,
|
||||
setWorkspacesEnabled,
|
||||
} from "../actions"
|
||||
import { inlineInputSelector, workspaceItemSelector } from "../selectors"
|
||||
import {
|
||||
inlineInputSelector,
|
||||
projectSwitchSelector,
|
||||
projectWorkspacesToggleSelector,
|
||||
workspaceItemSelector,
|
||||
} from "../selectors"
|
||||
import { dirSlug } from "../utils"
|
||||
|
||||
function slugFromUrl(url: string) {
|
||||
return /\/([^/]+)\/session(?:\/|$)/.exec(url)?.[1] ?? ""
|
||||
@@ -126,6 +134,40 @@ test("can create a workspace", async ({ page, withProject }) => {
|
||||
})
|
||||
})
|
||||
|
||||
test("non-git projects keep workspace mode disabled", async ({ page, withProject }) => {
|
||||
await page.setViewportSize({ width: 1400, height: 800 })
|
||||
|
||||
const nonGit = await fs.mkdtemp(path.join(os.tmpdir(), "opencode-e2e-project-nongit-"))
|
||||
const nonGitSlug = dirSlug(nonGit)
|
||||
|
||||
await fs.writeFile(path.join(nonGit, "README.md"), "# e2e nongit\n")
|
||||
|
||||
try {
|
||||
await withProject(
|
||||
async () => {
|
||||
await openSidebar(page)
|
||||
|
||||
const nonGitButton = page.locator(projectSwitchSelector(nonGitSlug)).first()
|
||||
await expect(nonGitButton).toBeVisible()
|
||||
await nonGitButton.click()
|
||||
await expect(page).toHaveURL(new RegExp(`/${nonGitSlug}/session`))
|
||||
|
||||
const menu = await openProjectMenu(page, nonGitSlug)
|
||||
const toggle = menu.locator(projectWorkspacesToggleSelector(nonGitSlug)).first()
|
||||
|
||||
await expect(toggle).toBeVisible()
|
||||
await expect(toggle).toBeDisabled()
|
||||
|
||||
await expect(menu.getByRole("menuitem", { name: "New workspace" })).toHaveCount(0)
|
||||
await expect(page.getByRole("button", { name: "New workspace" })).toHaveCount(0)
|
||||
},
|
||||
{ extra: [nonGit] },
|
||||
)
|
||||
} finally {
|
||||
await cleanupTestProject(nonGit)
|
||||
}
|
||||
})
|
||||
|
||||
test("can rename a workspace", async ({ page, withProject }) => {
|
||||
await page.setViewportSize({ width: 1400, height: 800 })
|
||||
|
||||
|
||||
@@ -23,10 +23,15 @@ async function seedConversation(input: {
|
||||
const messages = await input.sdk.session
|
||||
.messages({ sessionID: input.sessionID, limit: 50 })
|
||||
.then((r) => r.data ?? [])
|
||||
const users = messages.filter((m) => m.info.role === "user")
|
||||
const users = messages.filter(
|
||||
(m) =>
|
||||
m.info.role === "user" &&
|
||||
m.parts.filter((p) => p.type === "text").some((p) => p.text.includes(input.token)),
|
||||
)
|
||||
if (users.length === 0) return false
|
||||
|
||||
const user = users.reduce((acc, item) => (item.info.id > acc.info.id ? item : acc))
|
||||
const user = users[users.length - 1]
|
||||
if (!user) return false
|
||||
userMessageID = user.info.id
|
||||
|
||||
const assistantText = messages
|
||||
@@ -124,3 +129,107 @@ test("slash redo clears revert and restores latest state", async ({ page, withPr
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
test("slash undo/redo traverses multi-step revert stack", async ({ page, withProject }) => {
|
||||
test.setTimeout(120_000)
|
||||
|
||||
const firstToken = `undo_redo_first_${Date.now()}`
|
||||
const secondToken = `undo_redo_second_${Date.now()}`
|
||||
|
||||
await withProject(async (project) => {
|
||||
const sdk = createSdk(project.directory)
|
||||
|
||||
await withSession(sdk, `e2e undo redo stack ${Date.now()}`, async (session) => {
|
||||
await project.gotoSession(session.id)
|
||||
|
||||
const first = await seedConversation({
|
||||
page,
|
||||
sdk,
|
||||
sessionID: session.id,
|
||||
token: firstToken,
|
||||
})
|
||||
const second = await seedConversation({
|
||||
page,
|
||||
sdk,
|
||||
sessionID: session.id,
|
||||
token: secondToken,
|
||||
})
|
||||
|
||||
expect(first.userMessageID).not.toBe(second.userMessageID)
|
||||
|
||||
const firstMessage = page.locator(`[data-message-id="${first.userMessageID}"]`)
|
||||
const secondMessage = page.locator(`[data-message-id="${second.userMessageID}"]`)
|
||||
|
||||
await expect(firstMessage.first()).toBeVisible()
|
||||
await expect(secondMessage.first()).toBeVisible()
|
||||
|
||||
await second.prompt.click()
|
||||
await page.keyboard.press(`${modKey}+A`)
|
||||
await page.keyboard.press("Backspace")
|
||||
await page.keyboard.type("/undo")
|
||||
|
||||
const undo = page.locator('[data-slash-id="session.undo"]').first()
|
||||
await expect(undo).toBeVisible()
|
||||
await page.keyboard.press("Enter")
|
||||
|
||||
await expect
|
||||
.poll(async () => await sdk.session.get({ sessionID: session.id }).then((r) => r.data?.revert?.messageID), {
|
||||
timeout: 30_000,
|
||||
})
|
||||
.toBe(second.userMessageID)
|
||||
|
||||
await expect(firstMessage.first()).toBeVisible()
|
||||
await expect(secondMessage).toHaveCount(0)
|
||||
|
||||
await second.prompt.click()
|
||||
await page.keyboard.press(`${modKey}+A`)
|
||||
await page.keyboard.press("Backspace")
|
||||
await page.keyboard.type("/undo")
|
||||
await expect(undo).toBeVisible()
|
||||
await page.keyboard.press("Enter")
|
||||
|
||||
await expect
|
||||
.poll(async () => await sdk.session.get({ sessionID: session.id }).then((r) => r.data?.revert?.messageID), {
|
||||
timeout: 30_000,
|
||||
})
|
||||
.toBe(first.userMessageID)
|
||||
|
||||
await expect(firstMessage).toHaveCount(0)
|
||||
await expect(secondMessage).toHaveCount(0)
|
||||
|
||||
await second.prompt.click()
|
||||
await page.keyboard.press(`${modKey}+A`)
|
||||
await page.keyboard.press("Backspace")
|
||||
await page.keyboard.type("/redo")
|
||||
|
||||
const redo = page.locator('[data-slash-id="session.redo"]').first()
|
||||
await expect(redo).toBeVisible()
|
||||
await page.keyboard.press("Enter")
|
||||
|
||||
await expect
|
||||
.poll(async () => await sdk.session.get({ sessionID: session.id }).then((r) => r.data?.revert?.messageID), {
|
||||
timeout: 30_000,
|
||||
})
|
||||
.toBe(second.userMessageID)
|
||||
|
||||
await expect(firstMessage.first()).toBeVisible()
|
||||
await expect(secondMessage).toHaveCount(0)
|
||||
|
||||
await second.prompt.click()
|
||||
await page.keyboard.press(`${modKey}+A`)
|
||||
await page.keyboard.press("Backspace")
|
||||
await page.keyboard.type("/redo")
|
||||
await expect(redo).toBeVisible()
|
||||
await page.keyboard.press("Enter")
|
||||
|
||||
await expect
|
||||
.poll(async () => await sdk.session.get({ sessionID: session.id }).then((r) => r.data?.revert?.messageID), {
|
||||
timeout: 30_000,
|
||||
})
|
||||
.toBeUndefined()
|
||||
|
||||
await expect(firstMessage.first()).toBeVisible()
|
||||
await expect(secondMessage.first()).toBeVisible()
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -9,7 +9,7 @@ test("changing sidebar toggle keybind works", async ({ page, gotoSession }) => {
|
||||
const dialog = await openSettings(page)
|
||||
await dialog.getByRole("tab", { name: "Shortcuts" }).click()
|
||||
|
||||
const keybindButton = dialog.locator(keybindButtonSelector("sidebar.toggle"))
|
||||
const keybindButton = dialog.locator(keybindButtonSelector("sidebar.toggle")).first()
|
||||
await expect(keybindButton).toBeVisible()
|
||||
|
||||
const initialKeybind = await keybindButton.textContent()
|
||||
@@ -51,6 +51,40 @@ test("changing sidebar toggle keybind works", async ({ page, gotoSession }) => {
|
||||
expect(finalClosed).toBe(initiallyClosed)
|
||||
})
|
||||
|
||||
test("sidebar toggle keybind guards against shortcut conflicts", async ({ page, gotoSession }) => {
|
||||
await gotoSession()
|
||||
|
||||
const dialog = await openSettings(page)
|
||||
await dialog.getByRole("tab", { name: "Shortcuts" }).click()
|
||||
|
||||
const keybindButton = dialog.locator(keybindButtonSelector("sidebar.toggle"))
|
||||
await expect(keybindButton).toBeVisible()
|
||||
|
||||
const initialKeybind = await keybindButton.textContent()
|
||||
expect(initialKeybind).toContain("B")
|
||||
|
||||
await keybindButton.click()
|
||||
await expect(keybindButton).toHaveText(/press/i)
|
||||
|
||||
await page.keyboard.press(`${modKey}+Shift+KeyP`)
|
||||
await page.waitForTimeout(100)
|
||||
|
||||
const toast = page.locator('[data-component="toast"]').last()
|
||||
await expect(toast).toBeVisible()
|
||||
await expect(toast).toContainText(/already/i)
|
||||
|
||||
await keybindButton.click()
|
||||
await expect(keybindButton).toContainText("B")
|
||||
|
||||
const stored = await page.evaluate(() => {
|
||||
const raw = localStorage.getItem("settings.v3")
|
||||
return raw ? JSON.parse(raw) : null
|
||||
})
|
||||
expect(stored?.keybinds?.["sidebar.toggle"]).toBeUndefined()
|
||||
|
||||
await closeDialog(page, dialog)
|
||||
})
|
||||
|
||||
test("resetting all keybinds to defaults works", async ({ page, gotoSession }) => {
|
||||
await page.addInitScript(() => {
|
||||
localStorage.setItem("settings.v3", JSON.stringify({ keybinds: { "sidebar.toggle": "mod+shift+x" } }))
|
||||
@@ -277,6 +311,44 @@ test("changing terminal toggle keybind works", async ({ page, gotoSession }) =>
|
||||
await expect(terminal).not.toBeVisible()
|
||||
})
|
||||
|
||||
test("terminal toggle keybind persists after reload", async ({ page, gotoSession }) => {
|
||||
await gotoSession()
|
||||
|
||||
const dialog = await openSettings(page)
|
||||
await dialog.getByRole("tab", { name: "Shortcuts" }).click()
|
||||
|
||||
const keybindButton = dialog.locator(keybindButtonSelector("terminal.toggle"))
|
||||
await expect(keybindButton).toBeVisible()
|
||||
|
||||
await keybindButton.click()
|
||||
await expect(keybindButton).toHaveText(/press/i)
|
||||
|
||||
await page.keyboard.press(`${modKey}+Shift+KeyY`)
|
||||
await page.waitForTimeout(100)
|
||||
|
||||
await expect(keybindButton).toContainText("Y")
|
||||
await closeDialog(page, dialog)
|
||||
|
||||
await page.reload()
|
||||
|
||||
await expect
|
||||
.poll(async () => {
|
||||
return await page.evaluate(() => {
|
||||
const raw = localStorage.getItem("settings.v3")
|
||||
if (!raw) return
|
||||
const parsed = JSON.parse(raw)
|
||||
return parsed?.keybinds?.["terminal.toggle"]
|
||||
})
|
||||
})
|
||||
.toBe("mod+shift+y")
|
||||
|
||||
const reloaded = await openSettings(page)
|
||||
await reloaded.getByRole("tab", { name: "Shortcuts" }).click()
|
||||
const reloadedKeybind = reloaded.locator(keybindButtonSelector("terminal.toggle")).first()
|
||||
await expect(reloadedKeybind).toContainText("Y")
|
||||
await closeDialog(page, reloaded)
|
||||
})
|
||||
|
||||
test("changing command palette keybind works", async ({ page, gotoSession }) => {
|
||||
await gotoSession()
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@ import {
|
||||
settingsNotificationsPermissionsSelector,
|
||||
settingsReleaseNotesSelector,
|
||||
settingsSoundsAgentSelector,
|
||||
settingsSoundsErrorsSelector,
|
||||
settingsSoundsPermissionsSelector,
|
||||
settingsThemeSelector,
|
||||
settingsUpdatesStartupSelector,
|
||||
} from "../selectors"
|
||||
@@ -139,6 +141,105 @@ test("changing font persists in localStorage and updates CSS variable", async ({
|
||||
expect(newFontFamily).not.toBe(initialFontFamily)
|
||||
})
|
||||
|
||||
test("color scheme and font rehydrate after reload", async ({ page, gotoSession }) => {
|
||||
await gotoSession()
|
||||
|
||||
const dialog = await openSettings(page)
|
||||
|
||||
const colorSchemeSelect = dialog.locator(settingsColorSchemeSelector)
|
||||
await expect(colorSchemeSelect).toBeVisible()
|
||||
await colorSchemeSelect.locator('[data-slot="select-select-trigger"]').click()
|
||||
await page.locator('[data-slot="select-select-item"]').filter({ hasText: "Dark" }).click()
|
||||
await expect(page.locator("html")).toHaveAttribute("data-color-scheme", "dark")
|
||||
|
||||
const fontSelect = dialog.locator(settingsFontSelector)
|
||||
await expect(fontSelect).toBeVisible()
|
||||
|
||||
const initialFontFamily = await page.evaluate(() => {
|
||||
return getComputedStyle(document.documentElement).getPropertyValue("--font-family-mono").trim()
|
||||
})
|
||||
|
||||
const initialSettings = await page.evaluate((key) => {
|
||||
const raw = localStorage.getItem(key)
|
||||
return raw ? JSON.parse(raw) : null
|
||||
}, settingsKey)
|
||||
|
||||
const currentFont =
|
||||
(await fontSelect.locator('[data-slot="select-select-trigger-value"]').textContent())?.trim() ?? ""
|
||||
await fontSelect.locator('[data-slot="select-select-trigger"]').click()
|
||||
|
||||
const fontItems = page.locator('[data-slot="select-select-item"]')
|
||||
expect(await fontItems.count()).toBeGreaterThan(1)
|
||||
|
||||
if (currentFont) {
|
||||
await fontItems.filter({ hasNotText: currentFont }).first().click()
|
||||
}
|
||||
if (!currentFont) {
|
||||
await fontItems.nth(1).click()
|
||||
}
|
||||
|
||||
await expect
|
||||
.poll(async () => {
|
||||
return await page.evaluate((key) => {
|
||||
const raw = localStorage.getItem(key)
|
||||
return raw ? JSON.parse(raw) : null
|
||||
}, settingsKey)
|
||||
})
|
||||
.toMatchObject({
|
||||
appearance: {
|
||||
font: expect.any(String),
|
||||
},
|
||||
})
|
||||
|
||||
const updatedSettings = await page.evaluate((key) => {
|
||||
const raw = localStorage.getItem(key)
|
||||
return raw ? JSON.parse(raw) : null
|
||||
}, settingsKey)
|
||||
|
||||
const updatedFontFamily = await page.evaluate(() => {
|
||||
return getComputedStyle(document.documentElement).getPropertyValue("--font-family-mono").trim()
|
||||
})
|
||||
expect(updatedFontFamily).not.toBe(initialFontFamily)
|
||||
expect(updatedSettings?.appearance?.font).not.toBe(initialSettings?.appearance?.font)
|
||||
|
||||
await closeDialog(page, dialog)
|
||||
await page.reload()
|
||||
|
||||
await expect(page.locator("html")).toHaveAttribute("data-color-scheme", "dark")
|
||||
|
||||
await expect
|
||||
.poll(async () => {
|
||||
return await page.evaluate((key) => {
|
||||
const raw = localStorage.getItem(key)
|
||||
return raw ? JSON.parse(raw) : null
|
||||
}, settingsKey)
|
||||
})
|
||||
.toMatchObject({
|
||||
appearance: {
|
||||
font: updatedSettings?.appearance?.font,
|
||||
},
|
||||
})
|
||||
|
||||
const rehydratedSettings = await page.evaluate((key) => {
|
||||
const raw = localStorage.getItem(key)
|
||||
return raw ? JSON.parse(raw) : null
|
||||
}, settingsKey)
|
||||
|
||||
await expect
|
||||
.poll(async () => {
|
||||
return await page.evaluate(() => {
|
||||
return getComputedStyle(document.documentElement).getPropertyValue("--font-family-mono").trim()
|
||||
})
|
||||
})
|
||||
.not.toBe(initialFontFamily)
|
||||
|
||||
const rehydratedFontFamily = await page.evaluate(() => {
|
||||
return getComputedStyle(document.documentElement).getPropertyValue("--font-family-mono").trim()
|
||||
})
|
||||
expect(rehydratedFontFamily).not.toBe(initialFontFamily)
|
||||
expect(rehydratedSettings?.appearance?.font).toBe(updatedSettings?.appearance?.font)
|
||||
})
|
||||
|
||||
test("toggling notification agent switch updates localStorage", async ({ page, gotoSession }) => {
|
||||
await gotoSession()
|
||||
|
||||
@@ -234,6 +335,67 @@ test("changing sound agent selection persists in localStorage", async ({ page, g
|
||||
expect(stored?.sounds?.agent).not.toBe("staplebops-01")
|
||||
})
|
||||
|
||||
test("changing permissions and errors sounds updates localStorage", async ({ page, gotoSession }) => {
|
||||
await gotoSession()
|
||||
|
||||
const dialog = await openSettings(page)
|
||||
const permissionsSelect = dialog.locator(settingsSoundsPermissionsSelector)
|
||||
const errorsSelect = dialog.locator(settingsSoundsErrorsSelector)
|
||||
await expect(permissionsSelect).toBeVisible()
|
||||
await expect(errorsSelect).toBeVisible()
|
||||
|
||||
const initial = await page.evaluate((key) => {
|
||||
const raw = localStorage.getItem(key)
|
||||
return raw ? JSON.parse(raw) : null
|
||||
}, settingsKey)
|
||||
|
||||
const permissionsCurrent =
|
||||
(await permissionsSelect.locator('[data-slot="select-select-trigger-value"]').textContent())?.trim() ?? ""
|
||||
await permissionsSelect.locator('[data-slot="select-select-trigger"]').click()
|
||||
const permissionItems = page.locator('[data-slot="select-select-item"]')
|
||||
expect(await permissionItems.count()).toBeGreaterThan(1)
|
||||
if (permissionsCurrent) {
|
||||
await permissionItems.filter({ hasNotText: permissionsCurrent }).first().click()
|
||||
}
|
||||
if (!permissionsCurrent) {
|
||||
await permissionItems.nth(1).click()
|
||||
}
|
||||
|
||||
const errorsCurrent =
|
||||
(await errorsSelect.locator('[data-slot="select-select-trigger-value"]').textContent())?.trim() ?? ""
|
||||
await errorsSelect.locator('[data-slot="select-select-trigger"]').click()
|
||||
const errorItems = page.locator('[data-slot="select-select-item"]')
|
||||
expect(await errorItems.count()).toBeGreaterThan(1)
|
||||
if (errorsCurrent) {
|
||||
await errorItems.filter({ hasNotText: errorsCurrent }).first().click()
|
||||
}
|
||||
if (!errorsCurrent) {
|
||||
await errorItems.nth(1).click()
|
||||
}
|
||||
|
||||
await expect
|
||||
.poll(async () => {
|
||||
return await page.evaluate((key) => {
|
||||
const raw = localStorage.getItem(key)
|
||||
return raw ? JSON.parse(raw) : null
|
||||
}, settingsKey)
|
||||
})
|
||||
.toMatchObject({
|
||||
sounds: {
|
||||
permissions: expect.any(String),
|
||||
errors: expect.any(String),
|
||||
},
|
||||
})
|
||||
|
||||
const stored = await page.evaluate((key) => {
|
||||
const raw = localStorage.getItem(key)
|
||||
return raw ? JSON.parse(raw) : null
|
||||
}, settingsKey)
|
||||
|
||||
expect(stored?.sounds?.permissions).not.toBe(initial?.sounds?.permissions)
|
||||
expect(stored?.sounds?.errors).not.toBe(initial?.sounds?.errors)
|
||||
})
|
||||
|
||||
test("toggling updates startup switch updates localStorage", async ({ page, gotoSession }) => {
|
||||
await gotoSession()
|
||||
|
||||
|
||||
36
packages/app/e2e/sidebar/sidebar-popover-actions.spec.ts
Normal file
36
packages/app/e2e/sidebar/sidebar-popover-actions.spec.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
import { test, expect } from "../fixtures"
|
||||
import { closeSidebar, hoverSessionItem } from "../actions"
|
||||
import { projectSwitchSelector, sessionItemSelector } from "../selectors"
|
||||
|
||||
test("collapsed sidebar popover stays open when archiving a session", async ({ page, slug, sdk, gotoSession }) => {
|
||||
const stamp = Date.now()
|
||||
|
||||
const one = await sdk.session.create({ title: `e2e sidebar popover archive 1 ${stamp}` }).then((r) => r.data)
|
||||
const two = await sdk.session.create({ title: `e2e sidebar popover archive 2 ${stamp}` }).then((r) => r.data)
|
||||
|
||||
if (!one?.id) throw new Error("Session create did not return an id")
|
||||
if (!two?.id) throw new Error("Session create did not return an id")
|
||||
|
||||
try {
|
||||
await gotoSession(one.id)
|
||||
await closeSidebar(page)
|
||||
|
||||
const project = page.locator(projectSwitchSelector(slug)).first()
|
||||
await expect(project).toBeVisible()
|
||||
await project.hover()
|
||||
|
||||
await expect(page.locator(sessionItemSelector(one.id)).first()).toBeVisible()
|
||||
await expect(page.locator(sessionItemSelector(two.id)).first()).toBeVisible()
|
||||
|
||||
const item = await hoverSessionItem(page, one.id)
|
||||
await item
|
||||
.getByRole("button", { name: /archive/i })
|
||||
.first()
|
||||
.click()
|
||||
|
||||
await expect(page.locator(sessionItemSelector(two.id)).first()).toBeVisible()
|
||||
} finally {
|
||||
await sdk.session.delete({ sessionID: one.id }).catch(() => undefined)
|
||||
await sdk.session.delete({ sessionID: two.id }).catch(() => undefined)
|
||||
}
|
||||
})
|
||||
@@ -1,5 +1,5 @@
|
||||
import { test, expect } from "../fixtures"
|
||||
import { openSidebar, toggleSidebar } from "../actions"
|
||||
import { openSidebar, toggleSidebar, withSession } from "../actions"
|
||||
|
||||
test("sidebar can be collapsed and expanded", async ({ page, gotoSession }) => {
|
||||
await gotoSession()
|
||||
@@ -12,3 +12,26 @@ test("sidebar can be collapsed and expanded", async ({ page, gotoSession }) => {
|
||||
await toggleSidebar(page)
|
||||
await expect(page.locator("main")).not.toHaveClass(/xl:border-l/)
|
||||
})
|
||||
|
||||
test("sidebar collapsed state persists across navigation and reload", async ({ page, sdk, gotoSession }) => {
|
||||
await withSession(sdk, "sidebar persist session 1", async (session1) => {
|
||||
await withSession(sdk, "sidebar persist session 2", async (session2) => {
|
||||
await gotoSession(session1.id)
|
||||
|
||||
await openSidebar(page)
|
||||
await toggleSidebar(page)
|
||||
await expect(page.locator("main")).toHaveClass(/xl:border-l/)
|
||||
|
||||
await gotoSession(session2.id)
|
||||
await expect(page.locator("main")).toHaveClass(/xl:border-l/)
|
||||
|
||||
await page.reload()
|
||||
await expect(page.locator("main")).toHaveClass(/xl:border-l/)
|
||||
|
||||
const opened = await page.evaluate(
|
||||
() => JSON.parse(localStorage.getItem("opencode.global.dat:layout") ?? "{}").sidebar?.opened,
|
||||
)
|
||||
await expect(opened).toBe(false)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@opencode-ai/app",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"description": "",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
|
||||
@@ -43,7 +43,7 @@ function UiI18nBridge(props: ParentProps) {
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
__OPENCODE__?: { updaterEnabled?: boolean; serverPassword?: string; deepLinks?: string[] }
|
||||
__OPENCODE__?: { updaterEnabled?: boolean; serverPassword?: string; deepLinks?: string[]; wsl?: boolean }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ import { onCleanup, onMount } from "solid-js"
|
||||
import { showToast } from "@opencode-ai/ui/toast"
|
||||
import { usePrompt, type ContentPart, type ImageAttachmentPart } from "@/context/prompt"
|
||||
import { useLanguage } from "@/context/language"
|
||||
import { uuid } from "@/utils/uuid"
|
||||
import { getCursorPosition } from "./editor-dom"
|
||||
|
||||
export const ACCEPTED_IMAGE_TYPES = ["image/png", "image/jpeg", "image/gif", "image/webp"]
|
||||
@@ -31,7 +32,7 @@ export function createPromptAttachments(input: PromptAttachmentsInput) {
|
||||
const dataUrl = reader.result as string
|
||||
const attachment: ImageAttachmentPart = {
|
||||
type: "image",
|
||||
id: crypto.randomUUID?.() ?? Math.random().toString(16).slice(2),
|
||||
id: uuid(),
|
||||
filename: file.name,
|
||||
mime: file.type,
|
||||
dataUrl,
|
||||
|
||||
@@ -166,6 +166,7 @@ export function SessionHeader() {
|
||||
})
|
||||
|
||||
const [prefs, setPrefs] = persisted(Persist.global("open.app"), createStore({ app: "finder" as OpenApp }))
|
||||
const [menu, setMenu] = createStore({ open: false })
|
||||
|
||||
const canOpen = createMemo(() => platform.platform === "desktop" && !!platform.openPath && server.isLocal())
|
||||
const current = createMemo(() => options().find((o) => o.id === prefs.app) ?? options()[0])
|
||||
@@ -328,17 +329,19 @@ export function SessionHeader() {
|
||||
<Show
|
||||
when={canOpen()}
|
||||
fallback={
|
||||
<Button
|
||||
variant="ghost"
|
||||
class="rounded-sm h-[24px] py-1.5 pr-3 pl-2 gap-2 border-none shadow-none"
|
||||
onClick={copyPath}
|
||||
aria-label={language.t("session.header.open.copyPath")}
|
||||
>
|
||||
<Icon name="copy" size="small" class="text-icon-base" />
|
||||
<span class="text-12-regular text-text-strong">
|
||||
{language.t("session.header.open.copyPath")}
|
||||
</span>
|
||||
</Button>
|
||||
<div class="flex h-[24px] box-border items-center rounded-md border border-border-base bg-surface-panel overflow-hidden">
|
||||
<Button
|
||||
variant="ghost"
|
||||
class="rounded-none h-full py-0 pr-3 pl-2 gap-2 border-none shadow-none"
|
||||
onClick={copyPath}
|
||||
aria-label={language.t("session.header.open.copyPath")}
|
||||
>
|
||||
<Icon name="copy" size="small" class="text-icon-base" />
|
||||
<span class="text-12-regular text-text-strong">
|
||||
{language.t("session.header.open.copyPath")}
|
||||
</span>
|
||||
</Button>
|
||||
</div>
|
||||
}
|
||||
>
|
||||
<div class="flex items-center">
|
||||
@@ -355,7 +358,12 @@ export function SessionHeader() {
|
||||
<span class="text-12-regular text-text-strong">Open</span>
|
||||
</Button>
|
||||
<div class="self-stretch w-px bg-border-base/70" />
|
||||
<DropdownMenu gutter={6} placement="bottom-end">
|
||||
<DropdownMenu
|
||||
gutter={6}
|
||||
placement="bottom-end"
|
||||
open={menu.open}
|
||||
onOpenChange={(open) => setMenu("open", open)}
|
||||
>
|
||||
<DropdownMenu.Trigger
|
||||
as={IconButton}
|
||||
icon="chevron-down"
|
||||
@@ -375,7 +383,13 @@ export function SessionHeader() {
|
||||
}}
|
||||
>
|
||||
{options().map((o) => (
|
||||
<DropdownMenu.RadioItem value={o.id} onSelect={() => openDir(o.id)}>
|
||||
<DropdownMenu.RadioItem
|
||||
value={o.id}
|
||||
onSelect={() => {
|
||||
setMenu("open", false)
|
||||
openDir(o.id)
|
||||
}}
|
||||
>
|
||||
<div class="flex size-5 shrink-0 items-center justify-center">
|
||||
<AppIcon id={o.icon} class={size(o.icon)} />
|
||||
</div>
|
||||
@@ -388,7 +402,12 @@ export function SessionHeader() {
|
||||
</DropdownMenu.RadioGroup>
|
||||
</DropdownMenu.Group>
|
||||
<DropdownMenu.Separator />
|
||||
<DropdownMenu.Item onSelect={copyPath}>
|
||||
<DropdownMenu.Item
|
||||
onSelect={() => {
|
||||
setMenu("open", false)
|
||||
copyPath()
|
||||
}}
|
||||
>
|
||||
<div class="flex size-5 shrink-0 items-center justify-center">
|
||||
<Icon name="copy" size="small" class="text-icon-weak" />
|
||||
</div>
|
||||
|
||||
@@ -367,6 +367,34 @@ export const SettingsGeneral: Component = () => {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Show when={platform.platform === "desktop" && platform.os === "windows" && platform.getWslEnabled}>
|
||||
{(_) => {
|
||||
const [enabledResource, actions] = createResource(() => platform.getWslEnabled?.())
|
||||
const enabled = () => (enabledResource.state === "pending" ? undefined : enabledResource.latest)
|
||||
|
||||
return (
|
||||
<div class="flex flex-col gap-1">
|
||||
<h3 class="text-14-medium text-text-strong pb-2">{language.t("settings.desktop.section.wsl")}</h3>
|
||||
|
||||
<div class="bg-surface-raised-base px-4 rounded-lg">
|
||||
<SettingsRow
|
||||
title={language.t("settings.desktop.wsl.title")}
|
||||
description={language.t("settings.desktop.wsl.description")}
|
||||
>
|
||||
<div data-action="settings-wsl">
|
||||
<Switch
|
||||
checked={enabled() ?? false}
|
||||
disabled={enabledResource.state === "pending"}
|
||||
onChange={(checked) => platform.setWslEnabled?.(checked)?.finally(() => actions.refetch())}
|
||||
/>
|
||||
</div>
|
||||
</SettingsRow>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}}
|
||||
</Show>
|
||||
|
||||
{/* Updates Section */}
|
||||
<div class="flex flex-col gap-1">
|
||||
<h3 class="text-14-medium text-text-strong pb-2">{language.t("settings.general.section.updates")}</h3>
|
||||
|
||||
@@ -91,7 +91,7 @@ export const Terminal = (props: TerminalProps) => {
|
||||
}
|
||||
|
||||
const getTerminalColors = (): TerminalColors => {
|
||||
const mode = theme.mode()
|
||||
const mode = theme.mode() === "dark" ? "dark" : "light"
|
||||
const fallback = DEFAULT_TERMINAL_COLORS[mode]
|
||||
const currentTheme = theme.themes()[theme.themeId()]
|
||||
if (!currentTheme) return fallback
|
||||
@@ -130,11 +130,12 @@ export const Terminal = (props: TerminalProps) => {
|
||||
const t = term
|
||||
if (!t) return
|
||||
t.focus()
|
||||
t.textarea?.focus()
|
||||
setTimeout(() => t.textarea?.focus(), 0)
|
||||
}
|
||||
const handlePointerDown = () => {
|
||||
const activeElement = document.activeElement
|
||||
if (activeElement instanceof HTMLElement && activeElement !== container) {
|
||||
if (activeElement instanceof HTMLElement && activeElement !== container && !container.contains(activeElement)) {
|
||||
activeElement.blur()
|
||||
}
|
||||
focusTerminal()
|
||||
@@ -185,12 +186,26 @@ export const Terminal = (props: TerminalProps) => {
|
||||
}
|
||||
ws = socket
|
||||
|
||||
const restore = typeof local.pty.buffer === "string" ? local.pty.buffer : ""
|
||||
const restoreSize =
|
||||
restore &&
|
||||
typeof local.pty.cols === "number" &&
|
||||
Number.isSafeInteger(local.pty.cols) &&
|
||||
local.pty.cols > 0 &&
|
||||
typeof local.pty.rows === "number" &&
|
||||
Number.isSafeInteger(local.pty.rows) &&
|
||||
local.pty.rows > 0
|
||||
? { cols: local.pty.cols, rows: local.pty.rows }
|
||||
: undefined
|
||||
|
||||
const t = new mod.Terminal({
|
||||
cursorBlink: true,
|
||||
cursorStyle: "bar",
|
||||
cols: restoreSize?.cols,
|
||||
rows: restoreSize?.rows,
|
||||
fontSize: 14,
|
||||
fontFamily: monoFontFamily(settings.appearance.font()),
|
||||
allowTransparency: true,
|
||||
allowTransparency: false,
|
||||
convertEol: true,
|
||||
theme: terminalColors(),
|
||||
scrollback: 10_000,
|
||||
@@ -204,44 +219,32 @@ export const Terminal = (props: TerminalProps) => {
|
||||
ghostty = g
|
||||
term = t
|
||||
|
||||
const copy = () => {
|
||||
const handleCopy = (event: ClipboardEvent) => {
|
||||
const selection = t.getSelection()
|
||||
if (!selection) return false
|
||||
if (!selection) return
|
||||
|
||||
const body = document.body
|
||||
if (body) {
|
||||
const textarea = document.createElement("textarea")
|
||||
textarea.value = selection
|
||||
textarea.setAttribute("readonly", "")
|
||||
textarea.style.position = "fixed"
|
||||
textarea.style.opacity = "0"
|
||||
body.appendChild(textarea)
|
||||
textarea.select()
|
||||
const copied = document.execCommand("copy")
|
||||
body.removeChild(textarea)
|
||||
if (copied) return true
|
||||
}
|
||||
const clipboard = event.clipboardData
|
||||
if (!clipboard) return
|
||||
|
||||
const clipboard = navigator.clipboard
|
||||
if (clipboard?.writeText) {
|
||||
clipboard.writeText(selection).catch(() => {})
|
||||
return true
|
||||
}
|
||||
event.preventDefault()
|
||||
clipboard.setData("text/plain", selection)
|
||||
}
|
||||
|
||||
return false
|
||||
const handlePaste = (event: ClipboardEvent) => {
|
||||
const clipboard = event.clipboardData
|
||||
const text = clipboard?.getData("text/plain") ?? clipboard?.getData("text") ?? ""
|
||||
if (!text) return
|
||||
|
||||
event.preventDefault()
|
||||
event.stopPropagation()
|
||||
t.paste(text)
|
||||
}
|
||||
|
||||
t.attachCustomKeyEventHandler((event) => {
|
||||
const key = event.key.toLowerCase()
|
||||
|
||||
if (event.ctrlKey && event.shiftKey && !event.metaKey && key === "c") {
|
||||
copy()
|
||||
return true
|
||||
}
|
||||
|
||||
if (event.metaKey && !event.ctrlKey && !event.altKey && key === "c") {
|
||||
if (!t.hasSelection()) return true
|
||||
copy()
|
||||
document.execCommand("copy")
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -252,6 +255,12 @@ export const Terminal = (props: TerminalProps) => {
|
||||
return matchKeybind(keybinds, event)
|
||||
})
|
||||
|
||||
container.addEventListener("copy", handleCopy, true)
|
||||
cleanups.push(() => container.removeEventListener("copy", handleCopy, true))
|
||||
|
||||
container.addEventListener("paste", handlePaste, true)
|
||||
cleanups.push(() => container.removeEventListener("paste", handlePaste, true))
|
||||
|
||||
const fit = new mod.FitAddon()
|
||||
const serializer = new SerializeAddon()
|
||||
cleanups.push(() => disposeIfDisposable(fit))
|
||||
@@ -282,18 +291,28 @@ export const Terminal = (props: TerminalProps) => {
|
||||
|
||||
focusTerminal()
|
||||
|
||||
fit.fit()
|
||||
|
||||
if (local.pty.buffer) {
|
||||
t.write(local.pty.buffer, () => {
|
||||
if (local.pty.scrollY) t.scrollToLine(local.pty.scrollY)
|
||||
})
|
||||
const startResize = () => {
|
||||
fit.observeResize()
|
||||
handleResize = () => fit.fit()
|
||||
window.addEventListener("resize", handleResize)
|
||||
cleanups.push(() => window.removeEventListener("resize", handleResize))
|
||||
}
|
||||
|
||||
fit.observeResize()
|
||||
handleResize = () => fit.fit()
|
||||
window.addEventListener("resize", handleResize)
|
||||
cleanups.push(() => window.removeEventListener("resize", handleResize))
|
||||
if (restore && restoreSize) {
|
||||
t.write(restore, () => {
|
||||
fit.fit()
|
||||
if (typeof local.pty.scrollY === "number") t.scrollToLine(local.pty.scrollY)
|
||||
startResize()
|
||||
})
|
||||
} else {
|
||||
fit.fit()
|
||||
if (restore) {
|
||||
t.write(restore, () => {
|
||||
if (typeof local.pty.scrollY === "number") t.scrollToLine(local.pty.scrollY)
|
||||
})
|
||||
}
|
||||
startResize()
|
||||
}
|
||||
|
||||
const onResize = t.onResize(async (size) => {
|
||||
if (socket.readyState === WebSocket.OPEN) {
|
||||
|
||||
@@ -4,6 +4,7 @@ import { createSimpleContext } from "@opencode-ai/ui/context"
|
||||
import { useParams } from "@solidjs/router"
|
||||
import { Persist, persisted } from "@/utils/persist"
|
||||
import { createScopedCache } from "@/utils/scoped-cache"
|
||||
import { uuid } from "@/utils/uuid"
|
||||
import type { SelectedLineRange } from "@/context/file"
|
||||
|
||||
export type LineComment = {
|
||||
@@ -53,7 +54,7 @@ function createCommentSessionState(store: Store<CommentStore>, setStore: SetStor
|
||||
|
||||
const add = (input: Omit<LineComment, "id" | "time">) => {
|
||||
const next: LineComment = {
|
||||
id: crypto.randomUUID?.() ?? Math.random().toString(16).slice(2),
|
||||
id: uuid(),
|
||||
time: Date.now(),
|
||||
...input,
|
||||
}
|
||||
|
||||
@@ -12,10 +12,19 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo
|
||||
const platform = usePlatform()
|
||||
const abort = new AbortController()
|
||||
|
||||
const auth = (() => {
|
||||
if (typeof window === "undefined") return
|
||||
const password = window.__OPENCODE__?.serverPassword
|
||||
if (!password) return
|
||||
return {
|
||||
Authorization: `Basic ${btoa(`opencode:${password}`)}`,
|
||||
}
|
||||
})()
|
||||
|
||||
const eventSdk = createOpencodeClient({
|
||||
baseUrl: server.url,
|
||||
signal: abort.signal,
|
||||
fetch: platform.fetch,
|
||||
headers: auth,
|
||||
})
|
||||
const emitter = createGlobalEmitter<{
|
||||
[key: string]: Event
|
||||
|
||||
@@ -4,6 +4,7 @@ import { createSimpleContext } from "@opencode-ai/ui/context"
|
||||
import { useGlobalSync } from "./global-sync"
|
||||
import { useGlobalSDK } from "./global-sdk"
|
||||
import { useServer } from "./server"
|
||||
import { usePlatform } from "./platform"
|
||||
import { Project } from "@opencode-ai/sdk/v2"
|
||||
import { Persist, persisted, removePersisted } from "@/utils/persist"
|
||||
import { same } from "@/utils/same"
|
||||
@@ -90,6 +91,7 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
|
||||
const globalSdk = useGlobalSDK()
|
||||
const globalSync = useGlobalSync()
|
||||
const server = useServer()
|
||||
const platform = usePlatform()
|
||||
|
||||
const isRecord = (value: unknown): value is Record<string, unknown> =>
|
||||
typeof value === "object" && value !== null && !Array.isArray(value)
|
||||
@@ -200,10 +202,10 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
|
||||
|
||||
for (const entry of SESSION_STATE_KEYS) {
|
||||
const target = session ? Persist.session(dir, session, entry.key) : Persist.workspace(dir, entry.key)
|
||||
void removePersisted(target)
|
||||
void removePersisted(target, platform)
|
||||
|
||||
const legacyKey = `${dir}/${entry.legacy}${session ? "/" + session : ""}.${entry.version}`
|
||||
void removePersisted({ key: legacyKey })
|
||||
void removePersisted({ key: legacyKey }, platform)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ export const { use: useNotification, provider: NotificationProvider } = createSi
|
||||
}),
|
||||
)
|
||||
|
||||
const meta = { pruned: false }
|
||||
const meta = { pruned: false, disposed: false }
|
||||
|
||||
createEffect(() => {
|
||||
if (!ready()) return
|
||||
@@ -84,6 +84,17 @@ export const { use: useNotification, provider: NotificationProvider } = createSi
|
||||
|
||||
const index = createMemo(() => buildNotificationIndex(store.list))
|
||||
|
||||
const lookup = (directory: string, sessionID?: string) => {
|
||||
if (!sessionID) return Promise.resolve(undefined)
|
||||
const [syncStore] = globalSync.child(directory, { bootstrap: false })
|
||||
const match = Binary.search(syncStore.session, sessionID, (s) => s.id)
|
||||
if (match.found) return Promise.resolve(syncStore.session[match.index])
|
||||
return globalSDK.client.session
|
||||
.get({ directory, sessionID })
|
||||
.then((x) => x.data)
|
||||
.catch(() => undefined)
|
||||
}
|
||||
|
||||
const unsub = globalSDK.event.listen((e) => {
|
||||
const event = e.details
|
||||
if (event.type !== "session.idle" && event.type !== "session.error") return
|
||||
@@ -102,61 +113,65 @@ export const { use: useNotification, provider: NotificationProvider } = createSi
|
||||
switch (event.type) {
|
||||
case "session.idle": {
|
||||
const sessionID = event.properties.sessionID
|
||||
const [syncStore] = globalSync.child(directory, { bootstrap: false })
|
||||
const match = Binary.search(syncStore.session, sessionID, (s) => s.id)
|
||||
const session = match.found ? syncStore.session[match.index] : undefined
|
||||
if (session?.parentID) break
|
||||
void lookup(directory, sessionID).then((session) => {
|
||||
if (meta.disposed) return
|
||||
if (!session) return
|
||||
if (session.parentID) return
|
||||
|
||||
playSound(soundSrc(settings.sounds.agent()))
|
||||
playSound(soundSrc(settings.sounds.agent()))
|
||||
|
||||
append({
|
||||
directory,
|
||||
time,
|
||||
viewed: viewed(sessionID),
|
||||
type: "turn-complete",
|
||||
session: sessionID,
|
||||
append({
|
||||
directory,
|
||||
time,
|
||||
viewed: viewed(sessionID),
|
||||
type: "turn-complete",
|
||||
session: sessionID,
|
||||
})
|
||||
|
||||
const href = `/${base64Encode(directory)}/session/${sessionID}`
|
||||
if (settings.notifications.agent()) {
|
||||
void platform.notify(
|
||||
language.t("notification.session.responseReady.title"),
|
||||
session.title ?? sessionID,
|
||||
href,
|
||||
)
|
||||
}
|
||||
})
|
||||
|
||||
const href = `/${base64Encode(directory)}/session/${sessionID}`
|
||||
if (settings.notifications.agent()) {
|
||||
void platform.notify(
|
||||
language.t("notification.session.responseReady.title"),
|
||||
session?.title ?? sessionID,
|
||||
href,
|
||||
)
|
||||
}
|
||||
break
|
||||
}
|
||||
case "session.error": {
|
||||
const sessionID = event.properties.sessionID
|
||||
const [syncStore] = globalSync.child(directory, { bootstrap: false })
|
||||
const match = sessionID ? Binary.search(syncStore.session, sessionID, (s) => s.id) : undefined
|
||||
const session = sessionID && match?.found ? syncStore.session[match.index] : undefined
|
||||
if (session?.parentID) break
|
||||
void lookup(directory, sessionID).then((session) => {
|
||||
if (meta.disposed) return
|
||||
if (session?.parentID) return
|
||||
|
||||
playSound(soundSrc(settings.sounds.errors()))
|
||||
playSound(soundSrc(settings.sounds.errors()))
|
||||
|
||||
const error = "error" in event.properties ? event.properties.error : undefined
|
||||
append({
|
||||
directory,
|
||||
time,
|
||||
viewed: viewed(sessionID),
|
||||
type: "error",
|
||||
session: sessionID ?? "global",
|
||||
error,
|
||||
const error = "error" in event.properties ? event.properties.error : undefined
|
||||
append({
|
||||
directory,
|
||||
time,
|
||||
viewed: viewed(sessionID),
|
||||
type: "error",
|
||||
session: sessionID ?? "global",
|
||||
error,
|
||||
})
|
||||
const description =
|
||||
session?.title ??
|
||||
(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, href)
|
||||
}
|
||||
})
|
||||
const description =
|
||||
session?.title ??
|
||||
(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, href)
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
})
|
||||
onCleanup(unsub)
|
||||
onCleanup(() => {
|
||||
meta.disposed = true
|
||||
unsub()
|
||||
})
|
||||
|
||||
return {
|
||||
ready,
|
||||
|
||||
@@ -57,6 +57,12 @@ export type Platform = {
|
||||
/** Set the default server URL to use on app startup (platform-specific) */
|
||||
setDefaultServerUrl?(url: string | null): Promise<void> | void
|
||||
|
||||
/** Get the configured WSL integration (desktop only) */
|
||||
getWslEnabled?(): Promise<boolean>
|
||||
|
||||
/** Set the configured WSL integration (desktop only) */
|
||||
setWslEnabled?(config: boolean): Promise<void> | void
|
||||
|
||||
/** Get the preferred display backend (desktop only) */
|
||||
getDisplayBackend?(): Promise<DisplayBackend | null> | DisplayBackend | null
|
||||
|
||||
|
||||
@@ -3,7 +3,8 @@ import { createSimpleContext } from "@opencode-ai/ui/context"
|
||||
import { batch, createEffect, createMemo, createRoot, onCleanup } from "solid-js"
|
||||
import { useParams } from "@solidjs/router"
|
||||
import { useSDK } from "./sdk"
|
||||
import { Persist, persisted } from "@/utils/persist"
|
||||
import type { Platform } from "./platform"
|
||||
import { Persist, persisted, removePersisted } from "@/utils/persist"
|
||||
|
||||
export type LocalPTY = {
|
||||
id: string
|
||||
@@ -35,6 +36,28 @@ type TerminalCacheEntry = {
|
||||
dispose: VoidFunction
|
||||
}
|
||||
|
||||
const caches = new Set<Map<string, TerminalCacheEntry>>()
|
||||
|
||||
export function clearWorkspaceTerminals(dir: string, sessionIDs?: string[], platform?: Platform) {
|
||||
const key = getWorkspaceTerminalCacheKey(dir)
|
||||
for (const cache of caches) {
|
||||
const entry = cache.get(key)
|
||||
entry?.value.clear()
|
||||
}
|
||||
|
||||
removePersisted(Persist.workspace(dir, "terminal"), platform)
|
||||
|
||||
const legacy = new Set(getLegacyTerminalStorageKeys(dir))
|
||||
for (const id of sessionIDs ?? []) {
|
||||
for (const key of getLegacyTerminalStorageKeys(dir, id)) {
|
||||
legacy.add(key)
|
||||
}
|
||||
}
|
||||
for (const key of legacy) {
|
||||
removePersisted({ key }, platform)
|
||||
}
|
||||
}
|
||||
|
||||
function createWorkspaceTerminalSession(sdk: ReturnType<typeof useSDK>, dir: string, legacySessionID?: string) {
|
||||
const legacy = getLegacyTerminalStorageKeys(dir, legacySessionID)
|
||||
|
||||
@@ -56,7 +79,7 @@ function createWorkspaceTerminalSession(sdk: ReturnType<typeof useSDK>, dir: str
|
||||
}),
|
||||
)
|
||||
|
||||
const unsub = sdk.event.on("pty.exited", (event) => {
|
||||
const unsub = sdk.event.on("pty.exited", (event: { properties: { id: string } }) => {
|
||||
const id = event.properties.id
|
||||
if (!store.all.some((x) => x.id === id)) return
|
||||
batch(() => {
|
||||
@@ -96,6 +119,12 @@ function createWorkspaceTerminalSession(sdk: ReturnType<typeof useSDK>, dir: str
|
||||
ready,
|
||||
all: createMemo(() => Object.values(store.all)),
|
||||
active: createMemo(() => store.active),
|
||||
clear() {
|
||||
batch(() => {
|
||||
setStore("active", undefined)
|
||||
setStore("all", [])
|
||||
})
|
||||
},
|
||||
new() {
|
||||
const existingTitleNumbers = new Set(
|
||||
store.all.flatMap((pty) => {
|
||||
@@ -114,7 +143,7 @@ function createWorkspaceTerminalSession(sdk: ReturnType<typeof useSDK>, dir: str
|
||||
|
||||
sdk.client.pty
|
||||
.create({ title: `Terminal ${nextNumber}` })
|
||||
.then((pty) => {
|
||||
.then((pty: { data?: { id?: string; title?: string } }) => {
|
||||
const id = pty.data?.id
|
||||
if (!id) return
|
||||
const newTerminal = {
|
||||
@@ -128,8 +157,8 @@ function createWorkspaceTerminalSession(sdk: ReturnType<typeof useSDK>, dir: str
|
||||
})
|
||||
setStore("active", id)
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error("Failed to create terminal", e)
|
||||
.catch((error: unknown) => {
|
||||
console.error("Failed to create terminal", error)
|
||||
})
|
||||
},
|
||||
update(pty: Partial<LocalPTY> & { id: string }) {
|
||||
@@ -143,8 +172,8 @@ function createWorkspaceTerminalSession(sdk: ReturnType<typeof useSDK>, dir: str
|
||||
title: pty.title,
|
||||
size: pty.cols && pty.rows ? { rows: pty.rows, cols: pty.cols } : undefined,
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error("Failed to update terminal", e)
|
||||
.catch((error: unknown) => {
|
||||
console.error("Failed to update terminal", error)
|
||||
})
|
||||
},
|
||||
async clone(id: string) {
|
||||
@@ -155,8 +184,8 @@ function createWorkspaceTerminalSession(sdk: ReturnType<typeof useSDK>, dir: str
|
||||
.create({
|
||||
title: pty.title,
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error("Failed to clone terminal", e)
|
||||
.catch((error: unknown) => {
|
||||
console.error("Failed to clone terminal", error)
|
||||
return undefined
|
||||
})
|
||||
if (!clone?.data) return
|
||||
@@ -168,6 +197,12 @@ function createWorkspaceTerminalSession(sdk: ReturnType<typeof useSDK>, dir: str
|
||||
id: clone.data.id,
|
||||
title: clone.data.title ?? pty.title,
|
||||
titleNumber: pty.titleNumber,
|
||||
// New PTY process, so start clean.
|
||||
buffer: undefined,
|
||||
cursor: undefined,
|
||||
scrollY: undefined,
|
||||
rows: undefined,
|
||||
cols: undefined,
|
||||
})
|
||||
if (active) {
|
||||
setStore("active", clone.data.id)
|
||||
@@ -200,8 +235,8 @@ function createWorkspaceTerminalSession(sdk: ReturnType<typeof useSDK>, dir: str
|
||||
setStore("all", filtered)
|
||||
})
|
||||
|
||||
await sdk.client.pty.remove({ ptyID: id }).catch((e) => {
|
||||
console.error("Failed to close terminal", e)
|
||||
await sdk.client.pty.remove({ ptyID: id }).catch((error: unknown) => {
|
||||
console.error("Failed to close terminal", error)
|
||||
})
|
||||
},
|
||||
move(id: string, to: number) {
|
||||
@@ -225,6 +260,9 @@ export const { use: useTerminal, provider: TerminalProvider } = createSimpleCont
|
||||
const params = useParams()
|
||||
const cache = new Map<string, TerminalCacheEntry>()
|
||||
|
||||
caches.add(cache)
|
||||
onCleanup(() => caches.delete(cache))
|
||||
|
||||
const disposeAll = () => {
|
||||
for (const entry of cache.values()) {
|
||||
entry.dispose()
|
||||
|
||||
@@ -16,11 +16,9 @@ export const dict = {
|
||||
"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.provider.connect": "اتصال بموفر",
|
||||
@@ -31,17 +29,13 @@ export const dict = {
|
||||
"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": "إغلاق علامة التبويب",
|
||||
@@ -72,6 +66,7 @@ export const dict = {
|
||||
"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": "إعادة",
|
||||
@@ -84,32 +79,30 @@ export const dict = {
|
||||
"command.session.share.description": "مشاركة هذه الجلسة ونسخ الرابط إلى الحافظة",
|
||||
"command.session.unshare": "إلغاء مشاركة الجلسة",
|
||||
"command.session.unshare.description": "إيقاف مشاركة هذه الجلسة",
|
||||
|
||||
"palette.search.placeholder": "البحث في الملفات والأوامر والجلسات",
|
||||
"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.tag.recommended": "موصى به",
|
||||
"dialog.provider.opencode.note": "نماذج مختارة تتضمن Claude و GPT و Gemini والمزيد",
|
||||
"dialog.provider.anthropic.note": "اتصل باستخدام Claude Pro/Max أو مفتاح API",
|
||||
"dialog.provider.openai.note": "اتصل باستخدام ChatGPT Pro/Plus أو مفتاح 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": "وصول موحد إلى نماذج الذكاء الاصطناعي مع توجيه ذكي",
|
||||
"dialog.model.select.title": "تحديد نموذج",
|
||||
"dialog.model.search.placeholder": "البحث عن نماذج",
|
||||
"dialog.model.empty": "لا توجد نتائج للنماذج",
|
||||
"dialog.model.manage": "إدارة النماذج",
|
||||
"dialog.model.manage.description": "تخصيص النماذج التي تظهر في محدد النماذج.",
|
||||
|
||||
"dialog.model.unpaid.freeModels.title": "نماذج مجانية مقدمة من OpenCode",
|
||||
"dialog.model.unpaid.addMore.title": "إضافة المزيد من النماذج من موفرين مشهورين",
|
||||
|
||||
"dialog.provider.viewAll": "عرض المزيد من الموفرين",
|
||||
|
||||
"provider.connect.title": "اتصال {{provider}}",
|
||||
"provider.connect.title.anthropicProMax": "تسجيل الدخول باستخدام Claude Pro/Max",
|
||||
"provider.connect.selectMethod": "حدد طريقة تسجيل الدخول لـ {{provider}}.",
|
||||
@@ -144,7 +137,42 @@ export const dict = {
|
||||
"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": "موفر الذكاء الاصطناعي الخاص بي",
|
||||
"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": "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": "معرف الموفر هذا موجود بالفعل",
|
||||
"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": "مجاني",
|
||||
@@ -163,9 +191,9 @@ export const dict = {
|
||||
"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": "إلغاء",
|
||||
@@ -176,14 +204,12 @@ export const dict = {
|
||||
"common.saving": "جارٍ الحفظ...",
|
||||
"common.default": "افتراضي",
|
||||
"common.attachment": "مرفق",
|
||||
|
||||
"prompt.placeholder.shell": "أدخل أمر shell...",
|
||||
"prompt.placeholder.normal": 'اسأل أي شيء... "{{example}}"',
|
||||
"prompt.placeholder.summarizeComments": "لخّص التعليقات…",
|
||||
"prompt.placeholder.summarizeComment": "لخّص التعليق…",
|
||||
"prompt.mode.shell": "Shell",
|
||||
"prompt.mode.shell.exit": "esc للخروج",
|
||||
|
||||
"prompt.example.1": "إصلاح TODO في قاعدة التعليمات البرمجية",
|
||||
"prompt.example.2": "ما هو المكدس التقني لهذا المشروع؟",
|
||||
"prompt.example.3": "إصلاح الاختبارات المعطلة",
|
||||
@@ -209,7 +235,6 @@ export const dict = {
|
||||
"prompt.example.23": "إضافة ترقيم الصفحات إلى هذه القائمة",
|
||||
"prompt.example.24": "إنشاء أمر CLI لـ...",
|
||||
"prompt.example.25": "كيف تعمل متغيرات البيئة هنا؟",
|
||||
|
||||
"prompt.popover.emptyResults": "لا توجد نتائج مطابقة",
|
||||
"prompt.popover.emptyCommands": "لا توجد أوامر مطابقة",
|
||||
"prompt.dropzone.label": "أفلت الصور أو ملفات PDF هنا",
|
||||
@@ -225,7 +250,6 @@ export const dict = {
|
||||
"prompt.attachment.remove": "إزالة المرفق",
|
||||
"prompt.action.send": "إرسال",
|
||||
"prompt.action.stop": "توقف",
|
||||
|
||||
"prompt.toast.pasteUnsupported.title": "لصق غير مدعوم",
|
||||
"prompt.toast.pasteUnsupported.description": "يمكن لصق الصور أو ملفات PDF فقط هنا.",
|
||||
"prompt.toast.modelAgentRequired.title": "حدد وكيلاً ونموذجاً",
|
||||
@@ -236,24 +260,18 @@ export const dict = {
|
||||
"prompt.toast.commandSendFailed.title": "فشل إرسال الأمر",
|
||||
"prompt.toast.promptSendFailed.title": "فشل إرسال الموجه",
|
||||
"prompt.toast.promptSendFailed.description": "تعذر استرداد الجلسة",
|
||||
|
||||
"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": "فشل",
|
||||
"mcp.status.needs_auth": "يحتاج إلى مصادقة",
|
||||
"mcp.status.disabled": "معطل",
|
||||
|
||||
"dialog.fork.empty": "لا توجد رسائل للتفرع منها",
|
||||
|
||||
"dialog.directory.search.placeholder": "البحث في المجلدات",
|
||||
"dialog.directory.empty": "لم يتم العثور على مجلدات",
|
||||
|
||||
"dialog.server.title": "الخوادم",
|
||||
"dialog.server.description": "تبديل خادم OpenCode الذي يتصل به هذا التطبيق.",
|
||||
"dialog.server.search.placeholder": "البحث في الخوادم",
|
||||
@@ -271,14 +289,12 @@ export const dict = {
|
||||
"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": "افتراضي",
|
||||
|
||||
"dialog.project.edit.title": "تحرير المشروع",
|
||||
"dialog.project.edit.name": "الاسم",
|
||||
"dialog.project.edit.icon": "أيقونة",
|
||||
@@ -287,7 +303,6 @@ 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.description": "يتم تشغيله بعد إنشاء مساحة عمل جديدة (شجرة عمل).",
|
||||
"dialog.project.edit.worktree.startup.placeholder": "مثال: bun install",
|
||||
@@ -298,10 +313,8 @@ export const dict = {
|
||||
"context.breakdown.assistant": "المساعد",
|
||||
"context.breakdown.tool": "استدعاءات الأداة",
|
||||
"context.breakdown.other": "أخرى",
|
||||
|
||||
"context.systemPrompt.title": "موجه النظام",
|
||||
"context.rawMessages.title": "الرسائل الخام",
|
||||
|
||||
"context.stats.session": "جلسة",
|
||||
"context.stats.messages": "رسائل",
|
||||
"context.stats.provider": "موفر",
|
||||
@@ -318,34 +331,42 @@ export const dict = {
|
||||
"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.th": "ไทย",
|
||||
"toast.language.title": "لغة",
|
||||
"toast.language.description": "تم التبديل إلى {{language}}",
|
||||
|
||||
"toast.theme.title": "تم تبديل السمة",
|
||||
"toast.scheme.title": "مخطط الألوان",
|
||||
|
||||
"toast.permissions.autoaccept.on.title": "قبول التعديلات تلقائيًا",
|
||||
"toast.permissions.autoaccept.on.description": "سيتم الموافقة تلقائيًا على أذونات التحرير والكتابة",
|
||||
"toast.permissions.autoaccept.off.title": "توقف قبول التعديلات تلقائيًا",
|
||||
"toast.permissions.autoaccept.off.description": "ستتطلب أذونات التحرير والكتابة موافقة",
|
||||
|
||||
"toast.workspace.enabled.title": "تم تمكين مساحات العمل",
|
||||
"toast.workspace.enabled.description": "الآن يتم عرض عدة worktrees في الشريط الجانبي",
|
||||
"toast.workspace.disabled.title": "تم تعطيل مساحات العمل",
|
||||
"toast.workspace.disabled.description": "يتم عرض worktree الرئيسي فقط في الشريط الجانبي",
|
||||
|
||||
"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": "حدد نطاق أسطر في تبويب ملف أولاً.",
|
||||
@@ -354,19 +375,15 @@ export const dict = {
|
||||
"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.update.title": "تحديث متاح",
|
||||
"toast.update.description": "نسخة جديدة من OpenCode ({{version}}) متاحة الآن للتثبيت.",
|
||||
"toast.update.action.installRestart": "تثبيت وإعادة تشغيل",
|
||||
"toast.update.action.notYet": "ليس الآن",
|
||||
|
||||
"error.page.title": "حدث خطأ ما",
|
||||
"error.page.description": "حدث خطأ أثناء تحميل التطبيق.",
|
||||
"error.page.details.label": "تفاصيل الخطأ",
|
||||
@@ -377,12 +394,10 @@ export const dict = {
|
||||
"error.page.report.prefix": "يرجى الإبلاغ عن هذا الخطأ لفريق OpenCode",
|
||||
"error.page.report.discord": "على Discord",
|
||||
"error.page.version": "الإصدار: {{version}}",
|
||||
|
||||
"error.dev.rootNotFound":
|
||||
"لم يتم العثور على العنصر الجذري. هل نسيت إضافته إلى index.html؟ أو ربما تمت كتابة سمة id بشكل خاطئ؟",
|
||||
|
||||
"error.globalSync.connectFailed": "تعذر الاتصال بالخادم. هل هناك خادم يعمل في `{{url}}`؟",
|
||||
|
||||
"directory.error.invalidUrl": "دليل غير صالح في عنوان URL.",
|
||||
"error.chain.unknown": "خطأ غير معروف",
|
||||
"error.chain.causedBy": "بسبب:",
|
||||
"error.chain.apiError": "خطأ API",
|
||||
@@ -402,21 +417,17 @@ export const dict = {
|
||||
"error.chain.configFrontmatterError": "فشل تحليل frontmatter في {{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": "ابدأ بفتح مشروع محلي",
|
||||
|
||||
"session.tab.session": "جلسة",
|
||||
"session.tab.review": "مراجعة",
|
||||
"session.tab.context": "سياق",
|
||||
@@ -435,17 +446,18 @@ export const dict = {
|
||||
"session.messages.loadEarlier": "تحميل الرسائل السابقة",
|
||||
"session.messages.loading": "جارٍ تحميل الرسائل...",
|
||||
"session.messages.jumpToLatest": "الانتقال إلى الأحدث",
|
||||
|
||||
"session.context.addToContext": "إضافة {{selection}} إلى السياق",
|
||||
|
||||
"session.new.worktree.main": "الفرع الرئيسي",
|
||||
"session.new.worktree.mainWithBranch": "الفرع الرئيسي ({{branch}})",
|
||||
"session.new.worktree.create": "إنشاء شجرة عمل جديدة",
|
||||
"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": "نسخ المسار",
|
||||
"status.popover.trigger": "الحالة",
|
||||
"status.popover.ariaLabel": "إعدادات الخوادم",
|
||||
"status.popover.tab.servers": "الخوادم",
|
||||
@@ -453,7 +465,6 @@ export const dict = {
|
||||
"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": "شارك الجلسة علنًا على الويب. ستكون متاحة لأي شخص لديه الرابط.",
|
||||
@@ -465,10 +476,8 @@ export const dict = {
|
||||
"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": "محطة طرفية",
|
||||
@@ -476,7 +485,6 @@ export const dict = {
|
||||
"terminal.close": "إغلاق المحطة الطرفية",
|
||||
"terminal.connectionLost.title": "فقد الاتصال",
|
||||
"terminal.connectionLost.description": "انقطع اتصال المحطة الطرفية. يمكن أن يحدث هذا عند إعادة تشغيل الخادم.",
|
||||
|
||||
"common.closeTab": "إغلاق علامة التبويب",
|
||||
"common.dismiss": "رفض",
|
||||
"common.requestFailed": "فشل الطلب",
|
||||
@@ -490,7 +498,6 @@ export const dict = {
|
||||
"common.edit": "تحرير",
|
||||
"common.loadMore": "تحميل المزيد",
|
||||
"common.key.esc": "ESC",
|
||||
|
||||
"sidebar.menu.toggle": "تبديل القائمة",
|
||||
"sidebar.nav.projectsAndSessions": "المشاريع والجلسات",
|
||||
"sidebar.settings": "الإعدادات",
|
||||
@@ -502,18 +509,19 @@ export const dict = {
|
||||
"sidebar.gettingStarted.line2": "قم بتوصيل أي موفر لاستخدام النماذج، بما في ذلك Claude و GPT و Gemini وما إلى ذلك.",
|
||||
"sidebar.project.recentSessions": "الجلسات الحديثة",
|
||||
"sidebar.project.viewAllSessions": "عرض جميع الجلسات",
|
||||
|
||||
"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": "تشغيل خادم OpenCode داخل WSL على Windows.",
|
||||
"settings.general.section.appearance": "المظهر",
|
||||
"settings.general.section.notifications": "إشعارات النظام",
|
||||
"settings.general.section.updates": "التحديثات",
|
||||
"settings.general.section.sounds": "المؤثرات الصوتية",
|
||||
|
||||
"settings.general.section.display": "شاشة العرض",
|
||||
"settings.general.row.language.title": "اللغة",
|
||||
"settings.general.row.language.description": "تغيير لغة العرض لـ OpenCode",
|
||||
"settings.general.row.appearance.title": "المظهر",
|
||||
@@ -522,10 +530,12 @@ export const dict = {
|
||||
"settings.general.row.theme.description": "تخصيص سمة OpenCode.",
|
||||
"settings.general.row.font.title": "الخط",
|
||||
"settings.general.row.font.description": "تخصيص الخط الأحادي المستخدم في كتل التعليمات البرمجية",
|
||||
|
||||
"settings.general.row.wayland.title": "استخدام Wayland الأصلي",
|
||||
"settings.general.row.wayland.description": "تعطيل التراجع إلى X11 على Wayland. يتطلب إعادة التشغيل.",
|
||||
"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": "التحقق من التحديثات",
|
||||
@@ -591,21 +601,18 @@ export const dict = {
|
||||
"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": "أذونات",
|
||||
"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": "تم إعادة تعيين الاختصارات",
|
||||
@@ -616,14 +623,12 @@ export const dict = {
|
||||
"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": "الموفرون المتصلون",
|
||||
@@ -641,16 +646,13 @@ export const dict = {
|
||||
"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": "تحرير",
|
||||
@@ -664,9 +666,9 @@ export const dict = {
|
||||
"settings.permissions.tool.list.description": "سرد الملفات داخل دليل",
|
||||
"settings.permissions.tool.bash.title": "Bash",
|
||||
"settings.permissions.tool.bash.description": "تشغيل أوامر shell",
|
||||
"settings.permissions.tool.task.title": "Task",
|
||||
"settings.permissions.tool.task.title": "مهمة",
|
||||
"settings.permissions.tool.task.description": "تشغيل الوكلاء الفرعيين",
|
||||
"settings.permissions.tool.skill.title": "Skill",
|
||||
"settings.permissions.tool.skill.title": "مهارة",
|
||||
"settings.permissions.tool.skill.description": "تحميل مهارة بالاسم",
|
||||
"settings.permissions.tool.lsp.title": "LSP",
|
||||
"settings.permissions.tool.lsp.description": "تشغيل استعلامات خادم اللغة",
|
||||
@@ -684,12 +686,10 @@ export const dict = {
|
||||
"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": "صندوق رمل",
|
||||
|
||||
@@ -16,11 +16,9 @@ export const dict = {
|
||||
"command.category.permissions": "Permissões",
|
||||
"command.category.workspace": "Espaço de trabalho",
|
||||
"command.category.settings": "Configurações",
|
||||
|
||||
"theme.scheme.system": "Sistema",
|
||||
"theme.scheme.light": "Claro",
|
||||
"theme.scheme.dark": "Escuro",
|
||||
|
||||
"command.sidebar.toggle": "Alternar barra lateral",
|
||||
"command.project.open": "Abrir projeto",
|
||||
"command.provider.connect": "Conectar provedor",
|
||||
@@ -31,17 +29,13 @@ export const dict = {
|
||||
"command.session.previous.unseen": "Sessão não lida anterior",
|
||||
"command.session.next.unseen": "Próxima sessão não lida",
|
||||
"command.session.archive": "Arquivar sessão",
|
||||
|
||||
"command.palette": "Paleta de comandos",
|
||||
|
||||
"command.theme.cycle": "Alternar tema",
|
||||
"command.theme.set": "Usar tema: {{theme}}",
|
||||
"command.theme.scheme.cycle": "Alternar esquema de cores",
|
||||
"command.theme.scheme.set": "Usar esquema de cores: {{scheme}}",
|
||||
|
||||
"command.language.cycle": "Alternar idioma",
|
||||
"command.language.set": "Usar idioma: {{language}}",
|
||||
|
||||
"command.session.new": "Nova sessão",
|
||||
"command.file.open": "Abrir arquivo",
|
||||
"command.tab.close": "Fechar aba",
|
||||
@@ -72,6 +66,7 @@ export const dict = {
|
||||
"command.permissions.autoaccept.enable": "Aceitar edições automaticamente",
|
||||
"command.permissions.autoaccept.disable": "Parar de aceitar edições automaticamente",
|
||||
"command.workspace.toggle": "Alternar espaços de trabalho",
|
||||
"command.workspace.toggle.description": "Habilitar ou desabilitar múltiplos espaços de trabalho na barra lateral",
|
||||
"command.session.undo": "Desfazer",
|
||||
"command.session.undo.description": "Desfazer a última mensagem",
|
||||
"command.session.redo": "Refazer",
|
||||
@@ -84,32 +79,30 @@ export const dict = {
|
||||
"command.session.share.description": "Compartilhar esta sessão e copiar a URL para a área de transferência",
|
||||
"command.session.unshare": "Parar de compartilhar sessão",
|
||||
"command.session.unshare.description": "Parar de compartilhar esta sessão",
|
||||
|
||||
"palette.search.placeholder": "Buscar arquivos, comandos e sessões",
|
||||
"palette.empty": "Nenhum resultado encontrado",
|
||||
"palette.group.commands": "Comandos",
|
||||
"palette.group.files": "Arquivos",
|
||||
|
||||
"dialog.provider.search.placeholder": "Buscar provedores",
|
||||
"dialog.provider.empty": "Nenhum provedor encontrado",
|
||||
"dialog.provider.group.popular": "Popular",
|
||||
"dialog.provider.group.other": "Outro",
|
||||
"dialog.provider.tag.recommended": "Recomendado",
|
||||
"dialog.provider.opencode.note": "Modelos selecionados incluindo Claude, GPT, Gemini e mais",
|
||||
"dialog.provider.anthropic.note": "Conectar com Claude Pro/Max ou chave de API",
|
||||
"dialog.provider.openai.note": "Conectar com ChatGPT Pro/Plus 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",
|
||||
"dialog.model.select.title": "Selecionar modelo",
|
||||
"dialog.model.search.placeholder": "Buscar modelos",
|
||||
"dialog.model.empty": "Nenhum resultado de modelo",
|
||||
"dialog.model.manage": "Gerenciar modelos",
|
||||
"dialog.model.manage.description": "Personalizar quais modelos aparecem no seletor de modelos.",
|
||||
|
||||
"dialog.model.unpaid.freeModels.title": "Modelos gratuitos fornecidos pelo OpenCode",
|
||||
"dialog.model.unpaid.addMore.title": "Adicionar mais modelos de provedores populares",
|
||||
|
||||
"dialog.provider.viewAll": "Ver mais provedores",
|
||||
|
||||
"provider.connect.title": "Conectar {{provider}}",
|
||||
"provider.connect.title.anthropicProMax": "Entrar com Claude Pro/Max",
|
||||
"provider.connect.selectMethod": "Selecionar método de login para {{provider}}.",
|
||||
@@ -144,7 +137,42 @@ export const dict = {
|
||||
"provider.connect.oauth.auto.confirmationCode": "Código de confirmação",
|
||||
"provider.connect.toast.connected.title": "{{provider}} conectado",
|
||||
"provider.connect.toast.connected.description": "Modelos do {{provider}} agora estão disponíveis para uso.",
|
||||
|
||||
"provider.custom.title": "Provedor personalizado",
|
||||
"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.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.baseURL.placeholder": "https://api.meuprovedor.com/v1",
|
||||
"provider.custom.field.apiKey.label": "Chave de API",
|
||||
"provider.custom.field.apiKey.placeholder": "Chave de API",
|
||||
"provider.custom.field.apiKey.description": "Opcional. Deixe em branco se gerenciar autenticação via cabeçalhos.",
|
||||
"provider.custom.models.label": "Modelos",
|
||||
"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.remove": "Remover modelo",
|
||||
"provider.custom.models.add": "Adicionar modelo",
|
||||
"provider.custom.headers.label": "Cabeçalhos (opcional)",
|
||||
"provider.custom.headers.key.label": "Cabeçalho",
|
||||
"provider.custom.headers.key.placeholder": "Nome-Do-Cabeçalho",
|
||||
"provider.custom.headers.value.label": "Valor",
|
||||
"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": "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": "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",
|
||||
"provider.disconnect.toast.disconnected.title": "{{provider}} desconectado",
|
||||
"provider.disconnect.toast.disconnected.description": "Os modelos de {{provider}} não estão mais disponíveis.",
|
||||
"model.tag.free": "Grátis",
|
||||
@@ -163,9 +191,9 @@ export const dict = {
|
||||
"model.tooltip.reasoning.allowed": "Permite raciocínio",
|
||||
"model.tooltip.reasoning.none": "Sem raciocínio",
|
||||
"model.tooltip.context": "Limite de contexto {{limit}}",
|
||||
|
||||
"common.search.placeholder": "Buscar",
|
||||
"common.goBack": "Voltar",
|
||||
"common.goForward": "Avançar",
|
||||
"common.loading": "Carregando",
|
||||
"common.loading.ellipsis": "...",
|
||||
"common.cancel": "Cancelar",
|
||||
@@ -176,14 +204,12 @@ export const dict = {
|
||||
"common.saving": "Salvando...",
|
||||
"common.default": "Padrão",
|
||||
"common.attachment": "anexo",
|
||||
|
||||
"prompt.placeholder.shell": "Digite comando do shell...",
|
||||
"prompt.placeholder.normal": 'Pergunte qualquer coisa... "{{example}}"',
|
||||
"prompt.placeholder.summarizeComments": "Resumir comentários…",
|
||||
"prompt.placeholder.summarizeComment": "Resumir comentário…",
|
||||
"prompt.mode.shell": "Shell",
|
||||
"prompt.mode.shell.exit": "esc para sair",
|
||||
|
||||
"prompt.example.1": "Corrigir um TODO no código",
|
||||
"prompt.example.2": "Qual é a stack tecnológica deste projeto?",
|
||||
"prompt.example.3": "Corrigir testes quebrados",
|
||||
@@ -209,7 +235,6 @@ export const dict = {
|
||||
"prompt.example.23": "Adicionar paginação a esta lista",
|
||||
"prompt.example.24": "Criar um comando CLI para...",
|
||||
"prompt.example.25": "Como funcionam as variáveis de ambiente aqui?",
|
||||
|
||||
"prompt.popover.emptyResults": "Nenhum resultado correspondente",
|
||||
"prompt.popover.emptyCommands": "Nenhum comando correspondente",
|
||||
"prompt.dropzone.label": "Solte imagens ou PDFs aqui",
|
||||
@@ -225,7 +250,6 @@ export const dict = {
|
||||
"prompt.attachment.remove": "Remover anexo",
|
||||
"prompt.action.send": "Enviar",
|
||||
"prompt.action.stop": "Parar",
|
||||
|
||||
"prompt.toast.pasteUnsupported.title": "Colagem não suportada",
|
||||
"prompt.toast.pasteUnsupported.description": "Somente imagens ou PDFs podem ser colados aqui.",
|
||||
"prompt.toast.modelAgentRequired.title": "Selecione um agente e modelo",
|
||||
@@ -236,23 +260,18 @@ export const dict = {
|
||||
"prompt.toast.commandSendFailed.title": "Falha ao enviar comando",
|
||||
"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}} habilitados",
|
||||
"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",
|
||||
"mcp.status.connected": "conectado",
|
||||
"mcp.status.failed": "falhou",
|
||||
"mcp.status.needs_auth": "precisa de autenticação",
|
||||
"mcp.status.disabled": "desabilitado",
|
||||
|
||||
"dialog.fork.empty": "Nenhuma mensagem para bifurcar",
|
||||
|
||||
"dialog.directory.search.placeholder": "Buscar pastas",
|
||||
"dialog.directory.empty": "Nenhuma pasta encontrada",
|
||||
|
||||
"dialog.server.title": "Servidores",
|
||||
"dialog.server.description": "Trocar para qual servidor OpenCode este aplicativo se conecta.",
|
||||
"dialog.server.search.placeholder": "Buscar servidores",
|
||||
@@ -270,7 +289,6 @@ export const dict = {
|
||||
"dialog.server.default.set": "Definir servidor atual como padrão",
|
||||
"dialog.server.default.clear": "Limpar",
|
||||
"dialog.server.action.remove": "Remover servidor",
|
||||
|
||||
"dialog.server.menu.edit": "Editar",
|
||||
"dialog.server.menu.default": "Definir como padrão",
|
||||
"dialog.server.menu.defaultRemove": "Remover padrão",
|
||||
@@ -288,7 +306,6 @@ export const dict = {
|
||||
"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",
|
||||
"context.breakdown.note":
|
||||
'Detalhamento aproximado dos tokens de entrada. "Outros" inclui definições de ferramentas e overhead.',
|
||||
@@ -297,10 +314,8 @@ export const dict = {
|
||||
"context.breakdown.assistant": "Assistente",
|
||||
"context.breakdown.tool": "Chamadas de Ferramentas",
|
||||
"context.breakdown.other": "Outros",
|
||||
|
||||
"context.systemPrompt.title": "Prompt do Sistema",
|
||||
"context.rawMessages.title": "Mensagens brutas",
|
||||
|
||||
"context.stats.session": "Sessão",
|
||||
"context.stats.messages": "Mensagens",
|
||||
"context.stats.provider": "Provedor",
|
||||
@@ -317,34 +332,42 @@ export const dict = {
|
||||
"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",
|
||||
"context.usage.clickToView": "Clique para ver o contexto",
|
||||
"context.usage.view": "Ver uso do contexto",
|
||||
|
||||
"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.th": "ไทย",
|
||||
"toast.language.title": "Idioma",
|
||||
"toast.language.description": "Alterado para {{language}}",
|
||||
|
||||
"toast.theme.title": "Tema alterado",
|
||||
"toast.scheme.title": "Esquema de cores",
|
||||
|
||||
"toast.permissions.autoaccept.on.title": "Aceitando edições automaticamente",
|
||||
"toast.permissions.autoaccept.on.description": "Permissões de edição e escrita serão aprovadas automaticamente",
|
||||
"toast.permissions.autoaccept.off.title": "Parou de aceitar edições automaticamente",
|
||||
"toast.permissions.autoaccept.off.description": "Permissões de edição e escrita exigirão aprovação",
|
||||
|
||||
"toast.workspace.enabled.title": "Espaços de trabalho ativados",
|
||||
"toast.workspace.enabled.description": "Várias worktrees agora são exibidas na barra lateral",
|
||||
"toast.workspace.disabled.title": "Espaços de trabalho desativados",
|
||||
"toast.workspace.disabled.description": "Apenas a worktree principal é exibida na barra lateral",
|
||||
|
||||
"toast.permissions.autoaccept.on.title": "Aceitando edições automaticamente",
|
||||
"toast.permissions.autoaccept.on.description": "Permissões de edição e escrita serão aprovadas automaticamente",
|
||||
"toast.permissions.autoaccept.off.title": "Parou de aceitar edições automaticamente",
|
||||
"toast.permissions.autoaccept.off.description": "Permissões de edição e escrita exigirão aprovação",
|
||||
"toast.model.none.title": "Nenhum modelo selecionado",
|
||||
"toast.model.none.description": "Conecte um provedor para resumir esta sessão",
|
||||
|
||||
"toast.file.loadFailed.title": "Falha ao carregar arquivo",
|
||||
|
||||
"toast.file.listFailed.title": "Falha ao listar arquivos",
|
||||
"toast.context.noLineSelection.title": "Nenhuma seleção de linhas",
|
||||
"toast.context.noLineSelection.description": "Selecione primeiro um intervalo de linhas em uma aba de arquivo.",
|
||||
@@ -353,19 +376,15 @@ export const dict = {
|
||||
"toast.session.share.success.description": "URL compartilhada copiada para a área de transferência!",
|
||||
"toast.session.share.failed.title": "Falha ao compartilhar sessão",
|
||||
"toast.session.share.failed.description": "Ocorreu um erro ao compartilhar a sessão",
|
||||
|
||||
"toast.session.unshare.success.title": "Sessão não compartilhada",
|
||||
"toast.session.unshare.success.description": "Sessão deixou de ser compartilhada com sucesso!",
|
||||
"toast.session.unshare.failed.title": "Falha ao parar de compartilhar sessão",
|
||||
"toast.session.unshare.failed.description": "Ocorreu um erro ao parar de compartilhar a sessão",
|
||||
|
||||
"toast.session.listFailed.title": "Falha ao carregar sessões para {{project}}",
|
||||
|
||||
"toast.update.title": "Atualização disponível",
|
||||
"toast.update.description": "Uma nova versão do OpenCode ({{version}}) está disponível para instalação.",
|
||||
"toast.update.action.installRestart": "Instalar e reiniciar",
|
||||
"toast.update.action.notYet": "Agora não",
|
||||
|
||||
"error.page.title": "Algo deu errado",
|
||||
"error.page.description": "Ocorreu um erro ao carregar a aplicação.",
|
||||
"error.page.details.label": "Detalhes do Erro",
|
||||
@@ -376,12 +395,10 @@ export const dict = {
|
||||
"error.page.report.prefix": "Por favor, reporte este erro para a equipe do OpenCode",
|
||||
"error.page.report.discord": "no Discord",
|
||||
"error.page.version": "Versão: {{version}}",
|
||||
|
||||
"error.dev.rootNotFound":
|
||||
"Elemento raiz não encontrado. Você esqueceu de adicioná-lo ao seu index.html? Ou talvez o atributo id foi escrito incorretamente?",
|
||||
|
||||
"error.globalSync.connectFailed": "Não foi possível conectar ao servidor. Há um servidor executando em `{{url}}`?",
|
||||
|
||||
"directory.error.invalidUrl": "Diretório inválido na URL.",
|
||||
"error.chain.unknown": "Erro desconhecido",
|
||||
"error.chain.causedBy": "Causado por:",
|
||||
"error.chain.apiError": "Erro de API",
|
||||
@@ -403,21 +420,17 @@ export const dict = {
|
||||
"error.chain.configFrontmatterError": "Falha ao analisar frontmatter em {{path}}:\n{{message}}",
|
||||
"error.chain.configInvalid": "Arquivo de configuração em {{path}} é inválido",
|
||||
"error.chain.configInvalidWithMessage": "Arquivo de configuração em {{path}} é inválido: {{message}}",
|
||||
|
||||
"notification.permission.title": "Permissão necessária",
|
||||
"notification.permission.description": "{{sessionTitle}} em {{projectName}} precisa de permissão",
|
||||
"notification.question.title": "Pergunta",
|
||||
"notification.question.description": "{{sessionTitle}} em {{projectName}} tem uma pergunta",
|
||||
"notification.action.goToSession": "Ir para sessão",
|
||||
|
||||
"notification.session.responseReady.title": "Resposta pronta",
|
||||
"notification.session.error.title": "Erro na sessão",
|
||||
"notification.session.error.fallbackDescription": "Ocorreu um erro",
|
||||
|
||||
"home.recentProjects": "Projetos recentes",
|
||||
"home.empty.title": "Nenhum projeto recente",
|
||||
"home.empty.description": "Comece abrindo um projeto local",
|
||||
|
||||
"session.tab.session": "Sessão",
|
||||
"session.tab.review": "Revisão",
|
||||
"session.tab.context": "Contexto",
|
||||
@@ -436,17 +449,18 @@ export const dict = {
|
||||
"session.messages.loadEarlier": "Carregar mensagens anteriores",
|
||||
"session.messages.loading": "Carregando mensagens...",
|
||||
"session.messages.jumpToLatest": "Ir para a mais recente",
|
||||
|
||||
"session.context.addToContext": "Adicionar {{selection}} ao contexto",
|
||||
|
||||
"session.new.worktree.main": "Branch principal",
|
||||
"session.new.worktree.mainWithBranch": "Branch principal ({{branch}})",
|
||||
"session.new.worktree.create": "Criar novo worktree",
|
||||
"session.new.lastModified": "Última modificação",
|
||||
|
||||
"session.header.search.placeholder": "Buscar {{project}}",
|
||||
"session.header.searchFiles": "Buscar arquivos",
|
||||
|
||||
"session.header.openIn": "Abrir em",
|
||||
"session.header.open.action": "Abrir {{app}}",
|
||||
"session.header.open.ariaLabel": "Abrir em {{app}}",
|
||||
"session.header.open.menu": "Opções de abertura",
|
||||
"session.header.open.copyPath": "Copiar caminho",
|
||||
"status.popover.trigger": "Status",
|
||||
"status.popover.ariaLabel": "Configurações de servidores",
|
||||
"status.popover.tab.servers": "Servidores",
|
||||
@@ -454,7 +468,6 @@ export const dict = {
|
||||
"status.popover.tab.lsp": "LSP",
|
||||
"status.popover.tab.plugins": "Plugins",
|
||||
"status.popover.action.manageServers": "Gerenciar servidores",
|
||||
|
||||
"session.share.popover.title": "Publicar na web",
|
||||
"session.share.popover.description.shared":
|
||||
"Esta sessão é pública na web. Está acessível para qualquer pessoa com o link.",
|
||||
@@ -468,10 +481,8 @@ export const dict = {
|
||||
"session.share.action.view": "Ver",
|
||||
"session.share.copy.copied": "Copiado",
|
||||
"session.share.copy.copyLink": "Copiar link",
|
||||
|
||||
"lsp.tooltip.none": "Nenhum servidor LSP",
|
||||
"lsp.label.connected": "{{count}} LSP",
|
||||
|
||||
"prompt.loading": "Carregando prompt...",
|
||||
"terminal.loading": "Carregando terminal...",
|
||||
"terminal.title": "Terminal",
|
||||
@@ -480,7 +491,6 @@ export const dict = {
|
||||
"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",
|
||||
"common.dismiss": "Descartar",
|
||||
"common.requestFailed": "Requisição falhou",
|
||||
@@ -494,7 +504,6 @@ export const dict = {
|
||||
"common.edit": "Editar",
|
||||
"common.loadMore": "Carregar mais",
|
||||
"common.key.esc": "ESC",
|
||||
|
||||
"sidebar.menu.toggle": "Alternar menu",
|
||||
"sidebar.nav.projectsAndSessions": "Projetos e sessões",
|
||||
"sidebar.settings": "Configurações",
|
||||
@@ -506,18 +515,19 @@ export const dict = {
|
||||
"sidebar.gettingStarted.line2": "Conecte qualquer provedor para usar modelos, incluindo Claude, GPT, Gemini etc.",
|
||||
"sidebar.project.recentSessions": "Sessões recentes",
|
||||
"sidebar.project.viewAllSessions": "Ver todas as sessões",
|
||||
|
||||
"app.name.desktop": "OpenCode Desktop",
|
||||
"settings.section.desktop": "Desktop",
|
||||
"settings.section.server": "Servidor",
|
||||
"settings.tab.general": "Geral",
|
||||
"settings.tab.shortcuts": "Atalhos",
|
||||
|
||||
"settings.desktop.section.wsl": "WSL",
|
||||
"settings.desktop.wsl.title": "WSL integration",
|
||||
"settings.desktop.wsl.description": "Executar o servidor OpenCode dentro do WSL no Windows.",
|
||||
"settings.general.section.appearance": "Aparência",
|
||||
"settings.general.section.notifications": "Notificações do sistema",
|
||||
"settings.general.section.updates": "Atualizações",
|
||||
"settings.general.section.sounds": "Efeitos sonoros",
|
||||
|
||||
"settings.general.section.display": "Tela",
|
||||
"settings.general.row.language.title": "Idioma",
|
||||
"settings.general.row.language.description": "Alterar o idioma de exibição do OpenCode",
|
||||
"settings.general.row.appearance.title": "Aparência",
|
||||
@@ -526,10 +536,12 @@ export const dict = {
|
||||
"settings.general.row.theme.description": "Personalize como o OpenCode é tematizado.",
|
||||
"settings.general.row.font.title": "Fonte",
|
||||
"settings.general.row.font.description": "Personalize a fonte monoespaçada usada em blocos de código",
|
||||
|
||||
"settings.general.row.wayland.title": "Usar Wayland nativo",
|
||||
"settings.general.row.wayland.description": "Desabilitar fallback X11 no Wayland. Requer reinicialização.",
|
||||
"settings.general.row.wayland.tooltip":
|
||||
"No Linux com monitores de taxas de atualização mistas, Wayland nativo pode ser mais estável.",
|
||||
"settings.general.row.releaseNotes.title": "Notas da versão",
|
||||
"settings.general.row.releaseNotes.description": 'Mostrar pop-ups de "Novidades" após atualizações',
|
||||
|
||||
"settings.updates.row.startup.title": "Verificar atualizações ao iniciar",
|
||||
"settings.updates.row.startup.description": "Verificar atualizações automaticamente quando o OpenCode iniciar",
|
||||
"settings.updates.row.check.title": "Verificar atualizações",
|
||||
@@ -595,7 +607,6 @@ export const dict = {
|
||||
"sound.option.yup04": "Sim 04",
|
||||
"sound.option.yup05": "Sim 05",
|
||||
"sound.option.yup06": "Sim 06",
|
||||
|
||||
"settings.general.notifications.agent.title": "Agente",
|
||||
"settings.general.notifications.agent.description":
|
||||
"Mostrar notificação do sistema quando o agente estiver completo ou precisar de atenção",
|
||||
@@ -604,14 +615,12 @@ export const dict = {
|
||||
"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 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",
|
||||
"settings.general.sounds.errors.description": "Reproduzir som quando ocorrer um erro",
|
||||
|
||||
"settings.shortcuts.title": "Atalhos de teclado",
|
||||
"settings.shortcuts.reset.button": "Redefinir para padrões",
|
||||
"settings.shortcuts.reset.toast.title": "Atalhos redefinidos",
|
||||
@@ -622,14 +631,12 @@ export const dict = {
|
||||
"settings.shortcuts.pressKeys": "Pressione teclas",
|
||||
"settings.shortcuts.search.placeholder": "Buscar atalhos",
|
||||
"settings.shortcuts.search.empty": "Nenhum atalho encontrado",
|
||||
|
||||
"settings.shortcuts.group.general": "Geral",
|
||||
"settings.shortcuts.group.session": "Sessão",
|
||||
"settings.shortcuts.group.navigation": "Navegação",
|
||||
"settings.shortcuts.group.modelAndAgent": "Modelo e agente",
|
||||
"settings.shortcuts.group.terminal": "Terminal",
|
||||
"settings.shortcuts.group.prompt": "Prompt",
|
||||
|
||||
"settings.providers.title": "Provedores",
|
||||
"settings.providers.description": "Configurações de provedores estarão disponíveis aqui.",
|
||||
"settings.providers.section.connected": "Provedores conectados",
|
||||
@@ -647,16 +654,13 @@ export const dict = {
|
||||
"settings.commands.description": "Configurações de comandos estarão disponíveis aqui.",
|
||||
"settings.mcp.title": "MCP",
|
||||
"settings.mcp.description": "Configurações de MCP estarão disponíveis aqui.",
|
||||
|
||||
"settings.permissions.title": "Permissões",
|
||||
"settings.permissions.description": "Controle quais ferramentas o servidor pode usar por padrão.",
|
||||
"settings.permissions.section.tools": "Ferramentas",
|
||||
"settings.permissions.toast.updateFailed.title": "Falha ao atualizar permissões",
|
||||
|
||||
"settings.permissions.action.allow": "Permitir",
|
||||
"settings.permissions.action.ask": "Perguntar",
|
||||
"settings.permissions.action.deny": "Negar",
|
||||
|
||||
"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",
|
||||
@@ -690,12 +694,10 @@ export const dict = {
|
||||
"settings.permissions.tool.external_directory.description": "Acessar arquivos fora do diretório do projeto",
|
||||
"settings.permissions.tool.doom_loop.title": "Loop Infinito",
|
||||
"settings.permissions.tool.doom_loop.description": "Detectar chamadas de ferramentas repetidas com entrada idêntica",
|
||||
|
||||
"session.delete.failed.title": "Falha ao excluir sessão",
|
||||
"session.delete.title": "Excluir sessão",
|
||||
"session.delete.confirm": 'Excluir sessão "{{name}}"?',
|
||||
"session.delete.button": "Excluir sessão",
|
||||
|
||||
"workspace.new": "Novo espaço de trabalho",
|
||||
"workspace.type.local": "local",
|
||||
"workspace.type.sandbox": "sandbox",
|
||||
|
||||
@@ -150,6 +150,44 @@ export const dict = {
|
||||
"provider.connect.toast.connected.title": "{{provider}} povezan",
|
||||
"provider.connect.toast.connected.description": "{{provider}} modeli su sada dostupni za korištenje.",
|
||||
|
||||
"provider.custom.title": "Prilagođeni provajder",
|
||||
"provider.custom.description.prefix": "Konfiguriši OpenAI-kompatibilnog provajdera. Pogledaj ",
|
||||
"provider.custom.description.link": "dokumentaciju za konfiguraciju provajdera",
|
||||
"provider.custom.description.suffix": ".",
|
||||
"provider.custom.field.providerID.label": "ID provajdera",
|
||||
"provider.custom.field.providerID.placeholder": "mojprovajder",
|
||||
"provider.custom.field.providerID.description": "Mala slova, brojevi, crtice ili donje crte",
|
||||
"provider.custom.field.name.label": "Prikazano ime",
|
||||
"provider.custom.field.name.placeholder": "Moj AI Provajder",
|
||||
"provider.custom.field.baseURL.label": "Bazni URL",
|
||||
"provider.custom.field.baseURL.placeholder": "https://api.mojprovajder.com/v1",
|
||||
"provider.custom.field.apiKey.label": "API ključ",
|
||||
"provider.custom.field.apiKey.placeholder": "API ključ",
|
||||
"provider.custom.field.apiKey.description":
|
||||
"Opcionalno. Ostavi prazno ako upravljaš autentifikacijom putem zaglavlja.",
|
||||
"provider.custom.models.label": "Modeli",
|
||||
"provider.custom.models.id.label": "ID",
|
||||
"provider.custom.models.id.placeholder": "model-id",
|
||||
"provider.custom.models.name.label": "Ime",
|
||||
"provider.custom.models.name.placeholder": "Prikazano ime",
|
||||
"provider.custom.models.remove": "Ukloni model",
|
||||
"provider.custom.models.add": "Dodaj model",
|
||||
"provider.custom.headers.label": "Zaglavlja (opcionalno)",
|
||||
"provider.custom.headers.key.label": "Zaglavlje",
|
||||
"provider.custom.headers.key.placeholder": "Ime-Zaglavlja",
|
||||
"provider.custom.headers.value.label": "Vrijednost",
|
||||
"provider.custom.headers.value.placeholder": "vrijednost",
|
||||
"provider.custom.headers.remove": "Ukloni zaglavlje",
|
||||
"provider.custom.headers.add": "Dodaj zaglavlje",
|
||||
"provider.custom.error.providerID.required": "ID provajdera je obavezan",
|
||||
"provider.custom.error.providerID.format": "Koristi mala slova, brojeve, crtice ili donje crte",
|
||||
"provider.custom.error.providerID.exists": "Taj ID provajdera već postoji",
|
||||
"provider.custom.error.name.required": "Prikazano ime je obavezno",
|
||||
"provider.custom.error.baseURL.required": "Bazni URL je obavezan",
|
||||
"provider.custom.error.baseURL.format": "Mora početi sa http:// ili https://",
|
||||
"provider.custom.error.required": "Obavezno",
|
||||
"provider.custom.error.duplicate": "Duplikat",
|
||||
|
||||
"provider.disconnect.toast.disconnected.title": "{{provider}} odspojen",
|
||||
"provider.disconnect.toast.disconnected.description": "{{provider}} modeli više nisu dostupni.",
|
||||
|
||||
@@ -408,6 +446,7 @@ export const dict = {
|
||||
"Korijenski element nije pronađen. Da li si zaboravio da ga dodaš u index.html? Ili je možda id atribut pogrešno napisan?",
|
||||
|
||||
"error.globalSync.connectFailed": "Nije moguće povezati se na server. Da li server radi na `{{url}}`?",
|
||||
"directory.error.invalidUrl": "Nevažeći direktorij u URL-u.",
|
||||
|
||||
"error.chain.unknown": "Nepoznata greška",
|
||||
"error.chain.causedBy": "Uzrok:",
|
||||
@@ -417,7 +456,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 konfiguraciju (opencode.json) - nazive provajdera/modela",
|
||||
"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":
|
||||
@@ -474,6 +513,11 @@ export const dict = {
|
||||
|
||||
"session.header.search.placeholder": "Pretraži {{project}}",
|
||||
"session.header.searchFiles": "Pretraži datoteke",
|
||||
"session.header.openIn": "Otvori u",
|
||||
"session.header.open.action": "Otvori {{app}}",
|
||||
"session.header.open.ariaLabel": "Otvori u {{app}}",
|
||||
"session.header.open.menu": "Opcije otvaranja",
|
||||
"session.header.open.copyPath": "Kopiraj putanju",
|
||||
|
||||
"status.popover.trigger": "Status",
|
||||
"status.popover.ariaLabel": "Konfiguracije servera",
|
||||
@@ -539,11 +583,15 @@ export const dict = {
|
||||
"settings.section.server": "Server",
|
||||
"settings.tab.general": "Opšte",
|
||||
"settings.tab.shortcuts": "Prečice",
|
||||
"settings.desktop.section.wsl": "WSL",
|
||||
"settings.desktop.wsl.title": "WSL integracija",
|
||||
"settings.desktop.wsl.description": "Pokreni OpenCode server unutar WSL-a na Windowsu.",
|
||||
|
||||
"settings.general.section.appearance": "Izgled",
|
||||
"settings.general.section.notifications": "Sistemske obavijesti",
|
||||
"settings.general.section.updates": "Ažuriranja",
|
||||
"settings.general.section.sounds": "Zvučni efekti",
|
||||
"settings.general.section.display": "Prikaz",
|
||||
|
||||
"settings.general.row.language.title": "Jezik",
|
||||
"settings.general.row.language.description": "Promijeni jezik prikaza u OpenCode-u",
|
||||
@@ -554,6 +602,11 @@ export const dict = {
|
||||
"settings.general.row.font.title": "Font",
|
||||
"settings.general.row.font.description": "Prilagodi monospace font koji se koristi u blokovima koda",
|
||||
|
||||
"settings.general.row.wayland.title": "Koristi nativni Wayland",
|
||||
"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.",
|
||||
|
||||
"settings.general.row.releaseNotes.title": "Bilješke o izdanju",
|
||||
"settings.general.row.releaseNotes.description": 'Prikaži iskačuće prozore "Šta je novo" nakon ažuriranja',
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@ export const dict = {
|
||||
"command.permissions.autoaccept.enable": "Accepter ændringer automatisk",
|
||||
"command.permissions.autoaccept.disable": "Stop automatisk accept af ændringer",
|
||||
"command.workspace.toggle": "Skift arbejdsområder",
|
||||
"command.workspace.toggle.description": "Aktiver eller deaktiver flere arbejdsområder i sidebjælken",
|
||||
"command.session.undo": "Fortryd",
|
||||
"command.session.undo.description": "Fortryd den sidste besked",
|
||||
"command.session.redo": "Omgør",
|
||||
@@ -95,9 +96,13 @@ export const dict = {
|
||||
"dialog.provider.group.popular": "Populære",
|
||||
"dialog.provider.group.other": "Andre",
|
||||
"dialog.provider.tag.recommended": "Anbefalet",
|
||||
"dialog.provider.anthropic.note": "Forbind med Claude Pro/Max eller API-nøgle",
|
||||
"dialog.provider.openai.note": "Forbind med ChatGPT Pro/Plus eller API-nøgle",
|
||||
"dialog.provider.copilot.note": "Forbind med Copilot eller API-nøgle",
|
||||
"dialog.provider.opencode.note": "Udvalgte modeller inklusive Claude, GPT, Gemini og flere",
|
||||
"dialog.provider.anthropic.note": "Direkte adgang til Claude-modeller, inklusive Pro og Max",
|
||||
"dialog.provider.copilot.note": "Claude-modeller til kodningsassistance",
|
||||
"dialog.provider.openai.note": "GPT-modeller til hurtige, kompetente generelle AI-opgaver",
|
||||
"dialog.provider.google.note": "Gemini-modeller til hurtige, strukturerede svar",
|
||||
"dialog.provider.openrouter.note": "Få adgang til alle understøttede modeller fra én udbyder",
|
||||
"dialog.provider.vercel.note": "Samlet adgang til AI-modeller med smart routing",
|
||||
|
||||
"dialog.model.select.title": "Vælg model",
|
||||
"dialog.model.search.placeholder": "Søg modeller",
|
||||
@@ -145,6 +150,43 @@ export const dict = {
|
||||
"provider.connect.toast.connected.title": "{{provider}} forbundet",
|
||||
"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 ",
|
||||
"provider.custom.description.link": "dokumentation for udbyderkonfiguration",
|
||||
"provider.custom.description.suffix": ".",
|
||||
"provider.custom.field.providerID.label": "Udbyder-ID",
|
||||
"provider.custom.field.providerID.placeholder": "minudbyder",
|
||||
"provider.custom.field.providerID.description": "Små bogstaver, tal, bindestreger eller understregninger",
|
||||
"provider.custom.field.name.label": "Visningsnavn",
|
||||
"provider.custom.field.name.placeholder": "Min AI-udbyder",
|
||||
"provider.custom.field.baseURL.label": "Basis-URL",
|
||||
"provider.custom.field.baseURL.placeholder": "https://api.minudbyder.dk/v1",
|
||||
"provider.custom.field.apiKey.label": "API-nøgle",
|
||||
"provider.custom.field.apiKey.placeholder": "API-nøgle",
|
||||
"provider.custom.field.apiKey.description": "Valgfri. Lad være tom, hvis du administrerer godkendelse via headers.",
|
||||
"provider.custom.models.label": "Modeller",
|
||||
"provider.custom.models.id.label": "ID",
|
||||
"provider.custom.models.id.placeholder": "model-id",
|
||||
"provider.custom.models.name.label": "Navn",
|
||||
"provider.custom.models.name.placeholder": "Visningsnavn",
|
||||
"provider.custom.models.remove": "Fjern model",
|
||||
"provider.custom.models.add": "Tilføj model",
|
||||
"provider.custom.headers.label": "Headers (valgfri)",
|
||||
"provider.custom.headers.key.label": "Header",
|
||||
"provider.custom.headers.key.placeholder": "Header-Navn",
|
||||
"provider.custom.headers.value.label": "Værdi",
|
||||
"provider.custom.headers.value.placeholder": "værdi",
|
||||
"provider.custom.headers.remove": "Fjern header",
|
||||
"provider.custom.headers.add": "Tilføj header",
|
||||
"provider.custom.error.providerID.required": "Udbyder-ID er påkrævet",
|
||||
"provider.custom.error.providerID.format": "Brug små bogstaver, tal, bindestreger eller understregninger",
|
||||
"provider.custom.error.providerID.exists": "Dette udbyder-ID findes allerede",
|
||||
"provider.custom.error.name.required": "Visningsnavn er påkrævet",
|
||||
"provider.custom.error.baseURL.required": "Basis-URL er påkrævet",
|
||||
"provider.custom.error.baseURL.format": "Skal starte med http:// eller https://",
|
||||
"provider.custom.error.required": "Påkrævet",
|
||||
"provider.custom.error.duplicate": "Duplikeret",
|
||||
|
||||
"provider.disconnect.toast.disconnected.title": "{{provider}} frakoblet",
|
||||
"provider.disconnect.toast.disconnected.description": "Modeller fra {{provider}} er ikke længere tilgængelige.",
|
||||
"model.tag.free": "Gratis",
|
||||
@@ -166,6 +208,7 @@ export const dict = {
|
||||
"model.tooltip.context": "Kontekstgrænse {{limit}}",
|
||||
"common.search.placeholder": "Søg",
|
||||
"common.goBack": "Gå tilbage",
|
||||
"common.goForward": "Naviger fremad",
|
||||
"common.loading": "Indlæser",
|
||||
"common.loading.ellipsis": "...",
|
||||
"common.cancel": "Annuller",
|
||||
@@ -308,10 +351,10 @@ export const dict = {
|
||||
"context.stats.provider": "Udbyder",
|
||||
"context.stats.model": "Model",
|
||||
"context.stats.limit": "Kontekstgrænse",
|
||||
"context.stats.totalTokens": "Total Tokens",
|
||||
"context.stats.totalTokens": "Samlede tokens",
|
||||
"context.stats.usage": "Forbrug",
|
||||
"context.stats.inputTokens": "Input Tokens",
|
||||
"context.stats.outputTokens": "Output Tokens",
|
||||
"context.stats.inputTokens": "Input-tokens",
|
||||
"context.stats.outputTokens": "Output-tokens",
|
||||
"context.stats.reasoningTokens": "Tænke Tokens",
|
||||
"context.stats.cacheTokens": "Cache Tokens (læs/skriv)",
|
||||
"context.stats.userMessages": "Brugerbeskeder",
|
||||
@@ -326,6 +369,23 @@ export const dict = {
|
||||
"context.usage.clickToView": "Klik for at se kontekst",
|
||||
"context.usage.view": "Se kontekstforbrug",
|
||||
|
||||
"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.th": "ไทย",
|
||||
|
||||
"toast.language.title": "Sprog",
|
||||
"toast.language.description": "Skiftede til {{language}}",
|
||||
|
||||
@@ -383,6 +443,7 @@ export const dict = {
|
||||
"Rodelement ikke fundet. Har du glemt at tilføje det til din index.html? Eller måske er id-attributten stavet forkert?",
|
||||
|
||||
"error.globalSync.connectFailed": "Kunne ikke forbinde til server. Kører der en server på `{{url}}`?",
|
||||
"directory.error.invalidUrl": "Ugyldig mappe i URL.",
|
||||
|
||||
"error.chain.unknown": "Ukendt fejl",
|
||||
"error.chain.causedBy": "Forårsaget af:",
|
||||
@@ -447,6 +508,11 @@ export const dict = {
|
||||
|
||||
"session.header.search.placeholder": "Søg {{project}}",
|
||||
"session.header.searchFiles": "Søg efter filer",
|
||||
"session.header.openIn": "Åbn i",
|
||||
"session.header.open.action": "Åbn {{app}}",
|
||||
"session.header.open.ariaLabel": "Åbn i {{app}}",
|
||||
"session.header.open.menu": "Åbningsmuligheder",
|
||||
"session.header.open.copyPath": "Kopier sti",
|
||||
|
||||
"status.popover.trigger": "Status",
|
||||
"status.popover.ariaLabel": "Serverkonfigurationer",
|
||||
@@ -512,11 +578,15 @@ export const dict = {
|
||||
"settings.section.server": "Server",
|
||||
"settings.tab.general": "Generelt",
|
||||
"settings.tab.shortcuts": "Genveje",
|
||||
"settings.desktop.section.wsl": "WSL",
|
||||
"settings.desktop.wsl.title": "WSL integration",
|
||||
"settings.desktop.wsl.description": "Kør OpenCode-serveren inde i WSL på Windows.",
|
||||
|
||||
"settings.general.section.appearance": "Udseende",
|
||||
"settings.general.section.notifications": "Systemmeddelelser",
|
||||
"settings.general.section.updates": "Opdateringer",
|
||||
"settings.general.section.sounds": "Lydeffekter",
|
||||
"settings.general.section.display": "Skærm",
|
||||
|
||||
"settings.general.row.language.title": "Sprog",
|
||||
"settings.general.row.language.description": "Ændr visningssproget for OpenCode",
|
||||
@@ -527,6 +597,11 @@ export const dict = {
|
||||
"settings.general.row.font.title": "Skrifttype",
|
||||
"settings.general.row.font.description": "Tilpas mono-skrifttypen brugt i kodeblokke",
|
||||
|
||||
"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 blandet opdateringshastighed kan native Wayland være mere stabilt.",
|
||||
|
||||
"settings.general.row.releaseNotes.title": "Udgivelsesnoter",
|
||||
"settings.general.row.releaseNotes.description": 'Vis "Hvad er nyt"-popups efter opdateringer',
|
||||
|
||||
|
||||
@@ -19,12 +19,10 @@ export const dict = {
|
||||
"command.category.agent": "Agent",
|
||||
"command.category.permissions": "Berechtigungen",
|
||||
"command.category.workspace": "Arbeitsbereich",
|
||||
|
||||
"command.category.settings": "Einstellungen",
|
||||
"theme.scheme.system": "System",
|
||||
"theme.scheme.light": "Hell",
|
||||
"theme.scheme.dark": "Dunkel",
|
||||
|
||||
"command.sidebar.toggle": "Seitenleiste umschalten",
|
||||
"command.project.open": "Projekt öffnen",
|
||||
"command.provider.connect": "Anbieter verbinden",
|
||||
@@ -35,17 +33,13 @@ export const dict = {
|
||||
"command.session.previous.unseen": "Vorherige ungelesene Sitzung",
|
||||
"command.session.next.unseen": "Nächste ungelesene Sitzung",
|
||||
"command.session.archive": "Sitzung archivieren",
|
||||
|
||||
"command.palette": "Befehlspalette",
|
||||
|
||||
"command.theme.cycle": "Thema wechseln",
|
||||
"command.theme.set": "Thema verwenden: {{theme}}",
|
||||
"command.theme.scheme.cycle": "Farbschema wechseln",
|
||||
"command.theme.scheme.set": "Farbschema verwenden: {{scheme}}",
|
||||
|
||||
"command.language.cycle": "Sprache wechseln",
|
||||
"command.language.set": "Sprache verwenden: {{language}}",
|
||||
|
||||
"command.session.new": "Neue Sitzung",
|
||||
"command.file.open": "Datei öffnen",
|
||||
"command.tab.close": "Tab schließen",
|
||||
@@ -76,6 +70,7 @@ export const dict = {
|
||||
"command.permissions.autoaccept.enable": "Änderungen automatisch akzeptieren",
|
||||
"command.permissions.autoaccept.disable": "Automatische Annahme von Änderungen stoppen",
|
||||
"command.workspace.toggle": "Arbeitsbereiche umschalten",
|
||||
"command.workspace.toggle.description": "Mehrere Arbeitsbereiche in der Seitenleiste aktivieren oder deaktivieren",
|
||||
"command.session.undo": "Rückgängig",
|
||||
"command.session.undo.description": "Letzte Nachricht rückgängig machen",
|
||||
"command.session.redo": "Wiederherstellen",
|
||||
@@ -88,32 +83,30 @@ export const dict = {
|
||||
"command.session.share.description": "Diese Sitzung teilen und URL in die Zwischenablage kopieren",
|
||||
"command.session.unshare": "Teilen der Sitzung aufheben",
|
||||
"command.session.unshare.description": "Teilen dieser Sitzung beenden",
|
||||
|
||||
"palette.search.placeholder": "Dateien, Befehle und Sitzungen durchsuchen",
|
||||
"palette.empty": "Keine Ergebnisse gefunden",
|
||||
"palette.group.commands": "Befehle",
|
||||
"palette.group.files": "Dateien",
|
||||
|
||||
"dialog.provider.search.placeholder": "Anbieter durchsuchen",
|
||||
"dialog.provider.empty": "Keine Anbieter gefunden",
|
||||
"dialog.provider.group.popular": "Beliebt",
|
||||
"dialog.provider.group.other": "Andere",
|
||||
"dialog.provider.tag.recommended": "Empfohlen",
|
||||
"dialog.provider.opencode.note": "Kuratierte Modelle inklusive Claude, GPT, Gemini und mehr",
|
||||
"dialog.provider.anthropic.note": "Mit Claude Pro/Max oder API-Schlüssel verbinden",
|
||||
"dialog.provider.openai.note": "Mit ChatGPT Pro/Plus 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",
|
||||
"dialog.model.select.title": "Modell auswählen",
|
||||
"dialog.model.search.placeholder": "Modelle durchsuchen",
|
||||
"dialog.model.empty": "Keine Modellergebnisse",
|
||||
"dialog.model.manage": "Modelle verwalten",
|
||||
"dialog.model.manage.description": "Anpassen, welche Modelle in der Modellauswahl erscheinen.",
|
||||
|
||||
"dialog.model.unpaid.freeModels.title": "Kostenlose Modelle von OpenCode",
|
||||
"dialog.model.unpaid.addMore.title": "Weitere Modelle von beliebten Anbietern hinzufügen",
|
||||
|
||||
"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.",
|
||||
@@ -148,7 +141,6 @@ export const dict = {
|
||||
"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.custom.title": "Benutzerdefinierter Anbieter",
|
||||
"provider.custom.description.prefix": "Konfigurieren Sie einen OpenAI-kompatiblen Anbieter. Siehe die ",
|
||||
"provider.custom.description.link": "Anbieter-Konfigurationsdokumente",
|
||||
@@ -186,12 +178,10 @@ export const dict = {
|
||||
"provider.custom.error.baseURL.format": "Muss mit http:// oder https:// beginnen",
|
||||
"provider.custom.error.required": "Erforderlich",
|
||||
"provider.custom.error.duplicate": "Duplikat",
|
||||
|
||||
"provider.disconnect.toast.disconnected.title": "{{provider}} getrennt",
|
||||
"provider.disconnect.toast.disconnected.description": "Die {{provider}}-Modelle sind nicht mehr verfügbar.",
|
||||
"model.tag.free": "Kostenlos",
|
||||
"model.tag.latest": "Neueste",
|
||||
|
||||
"model.provider.anthropic": "Anthropic",
|
||||
"model.provider.openai": "OpenAI",
|
||||
"model.provider.google": "Google",
|
||||
@@ -201,13 +191,14 @@ export const dict = {
|
||||
"model.input.image": "Bild",
|
||||
"model.input.audio": "Audio",
|
||||
"model.input.video": "Video",
|
||||
"model.input.pdf": "pdf",
|
||||
"model.input.pdf": "PDF",
|
||||
"model.tooltip.allows": "Erlaubt: {{inputs}}",
|
||||
"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": "Laden",
|
||||
"common.loading.ellipsis": "...",
|
||||
"common.cancel": "Abbrechen",
|
||||
@@ -218,14 +209,12 @@ export const dict = {
|
||||
"common.saving": "Speichert...",
|
||||
"common.default": "Standard",
|
||||
"common.attachment": "Anhang",
|
||||
|
||||
"prompt.placeholder.shell": "Shell-Befehl eingeben...",
|
||||
"prompt.placeholder.normal": 'Fragen Sie alles... "{{example}}"',
|
||||
"prompt.placeholder.summarizeComments": "Kommentare zusammenfassen…",
|
||||
"prompt.placeholder.summarizeComment": "Kommentar zusammenfassen…",
|
||||
"prompt.mode.shell": "Shell",
|
||||
"prompt.mode.shell.exit": "esc zum Verlassen",
|
||||
|
||||
"prompt.example.1": "Ein TODO in der Codebasis beheben",
|
||||
"prompt.example.2": "Was ist der Tech-Stack dieses Projekts?",
|
||||
"prompt.example.3": "Fehlerhafte Tests beheben",
|
||||
@@ -251,14 +240,13 @@ export const dict = {
|
||||
"prompt.example.23": "Paginierung zu dieser Liste hinzufügen",
|
||||
"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 oder PDFs hier ablegen",
|
||||
"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",
|
||||
"prompt.slash.badge.skill": "Skill",
|
||||
"prompt.slash.badge.mcp": "MCP",
|
||||
"prompt.context.active": "aktiv",
|
||||
"prompt.context.includeActiveFile": "Aktive Datei einbeziehen",
|
||||
"prompt.context.removeActiveFile": "Aktive Datei aus dem Kontext entfernen",
|
||||
@@ -267,7 +255,6 @@ export const dict = {
|
||||
"prompt.attachment.remove": "Anhang entfernen",
|
||||
"prompt.action.send": "Senden",
|
||||
"prompt.action.stop": "Stopp",
|
||||
|
||||
"prompt.toast.pasteUnsupported.title": "Nicht unterstütztes Einfügen",
|
||||
"prompt.toast.pasteUnsupported.description": "Hier können nur Bilder oder PDFs eingefügt werden.",
|
||||
"prompt.toast.modelAgentRequired.title": "Wählen Sie einen Agenten und ein Modell",
|
||||
@@ -279,24 +266,18 @@ export const dict = {
|
||||
"prompt.toast.commandSendFailed.title": "Befehl konnte nicht gesendet werden",
|
||||
"prompt.toast.promptSendFailed.title": "Eingabe konnte nicht gesendet werden",
|
||||
"prompt.toast.promptSendFailed.description": "Sitzung konnte nicht abgerufen werden",
|
||||
|
||||
"dialog.mcp.title": "MCPs",
|
||||
"dialog.mcp.description": "{{enabled}} von {{total}} aktiviert",
|
||||
"dialog.mcp.empty": "Keine MCPs konfiguriert",
|
||||
|
||||
"dialog.lsp.empty": "LSPs automatisch nach Dateityp erkannt",
|
||||
"dialog.plugins.empty": "In opencode.json konfigurierte Plugins",
|
||||
|
||||
"mcp.status.connected": "verbunden",
|
||||
"mcp.status.failed": "fehlgeschlagen",
|
||||
"mcp.status.needs_auth": "benötigt Authentifizierung",
|
||||
"mcp.status.disabled": "deaktiviert",
|
||||
|
||||
"dialog.fork.empty": "Keine Nachrichten zum Abzweigen vorhanden",
|
||||
|
||||
"dialog.directory.search.placeholder": "Ordner durchsuchen",
|
||||
"dialog.directory.empty": "Keine Ordner gefunden",
|
||||
|
||||
"dialog.server.title": "Server",
|
||||
"dialog.server.description": "Wechseln Sie den OpenCode-Server, mit dem sich diese App verbindet.",
|
||||
"dialog.server.search.placeholder": "Server durchsuchen",
|
||||
@@ -314,14 +295,12 @@ export const dict = {
|
||||
"dialog.server.default.set": "Aktuellen Server als Standard setzen",
|
||||
"dialog.server.default.clear": "Löschen",
|
||||
"dialog.server.action.remove": "Server entfernen",
|
||||
|
||||
"dialog.server.menu.edit": "Bearbeiten",
|
||||
"dialog.server.menu.default": "Als Standard festlegen",
|
||||
"dialog.server.menu.defaultRemove": "Standard entfernen",
|
||||
"dialog.server.menu.delete": "Löschen",
|
||||
"dialog.server.current": "Aktueller Server",
|
||||
"dialog.server.status.default": "Standard",
|
||||
|
||||
"dialog.project.edit.title": "Projekt bearbeiten",
|
||||
"dialog.project.edit.name": "Name",
|
||||
"dialog.project.edit.icon": "Icon",
|
||||
@@ -330,7 +309,6 @@ export const dict = {
|
||||
"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",
|
||||
"dialog.project.edit.worktree.startup.description":
|
||||
"Wird nach dem Erstellen eines neuen Arbeitsbereichs (Worktree) ausgeführt.",
|
||||
@@ -343,10 +321,8 @@ export const dict = {
|
||||
"context.breakdown.assistant": "Assistent",
|
||||
"context.breakdown.tool": "Werkzeugaufrufe",
|
||||
"context.breakdown.other": "Andere",
|
||||
|
||||
"context.systemPrompt.title": "System-Prompt",
|
||||
"context.rawMessages.title": "Rohdaten der Nachrichten",
|
||||
|
||||
"context.stats.session": "Sitzung",
|
||||
"context.stats.messages": "Nachrichten",
|
||||
"context.stats.provider": "Anbieter",
|
||||
@@ -363,29 +339,42 @@ export const dict = {
|
||||
"context.stats.totalCost": "Gesamtkosten",
|
||||
"context.stats.sessionCreated": "Sitzung erstellt",
|
||||
"context.stats.lastActivity": "Letzte Aktivität",
|
||||
|
||||
"context.usage.tokens": "Token",
|
||||
"context.usage.usage": "Nutzung",
|
||||
"context.usage.cost": "Kosten",
|
||||
"context.usage.clickToView": "Klicken, um Kontext anzuzeigen",
|
||||
"context.usage.view": "Kontextnutzung anzeigen",
|
||||
|
||||
"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.th": "ไทย",
|
||||
"toast.language.title": "Sprache",
|
||||
"toast.language.description": "Zu {{language}} gewechselt",
|
||||
|
||||
"toast.theme.title": "Thema gewechselt",
|
||||
"toast.scheme.title": "Farbschema",
|
||||
|
||||
"toast.workspace.enabled.title": "Arbeitsbereiche aktiviert",
|
||||
"toast.workspace.enabled.description": "Mehrere Worktrees werden jetzt in der Seitenleiste angezeigt",
|
||||
"toast.workspace.disabled.title": "Arbeitsbereiche deaktiviert",
|
||||
"toast.workspace.disabled.description": "Nur der Haupt-Worktree wird in der Seitenleiste angezeigt",
|
||||
"toast.permissions.autoaccept.on.title": "Änderungen werden automatisch akzeptiert",
|
||||
"toast.permissions.autoaccept.on.description": "Bearbeitungs- und Schreibrechte werden automatisch genehmigt",
|
||||
"toast.permissions.autoaccept.off.title": "Automatische Annahme von Änderungen gestoppt",
|
||||
"toast.permissions.autoaccept.off.description": "Bearbeitungs- und Schreibrechte erfordern Genehmigung",
|
||||
|
||||
"toast.model.none.title": "Kein Modell ausgewählt",
|
||||
"toast.model.none.description": "Verbinden Sie einen Anbieter, um diese Sitzung zusammenzufassen",
|
||||
|
||||
"toast.file.loadFailed.title": "Datei konnte nicht geladen werden",
|
||||
|
||||
"toast.file.listFailed.title": "Dateien konnten nicht aufgelistet werden",
|
||||
"toast.context.noLineSelection.title": "Keine Zeilenauswahl",
|
||||
"toast.context.noLineSelection.description": "Wählen Sie zuerst einen Zeilenbereich in einem Datei-Tab aus.",
|
||||
@@ -394,19 +383,15 @@ export const dict = {
|
||||
"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",
|
||||
"toast.session.unshare.success.description": "Teilen der Sitzung erfolgreich aufgehoben!",
|
||||
"toast.session.unshare.failed.title": "Aufheben des Teilens fehlgeschlagen",
|
||||
"toast.session.unshare.failed.description": "Beim Aufheben des Teilens ist ein Fehler aufgetreten",
|
||||
|
||||
"toast.session.listFailed.title": "Sitzungen für {{project}} konnten nicht geladen werden",
|
||||
|
||||
"toast.update.title": "Update verfügbar",
|
||||
"toast.update.description": "Eine neue Version von OpenCode ({{version}}) ist zur Installation verfügbar.",
|
||||
"toast.update.action.installRestart": "Installieren und neu starten",
|
||||
"toast.update.action.notYet": "Noch nicht",
|
||||
|
||||
"error.page.title": "Etwas ist schiefgelaufen",
|
||||
"error.page.description": "Beim Laden der Anwendung ist ein Fehler aufgetreten.",
|
||||
"error.page.details.label": "Fehlerdetails",
|
||||
@@ -417,13 +402,10 @@ export const dict = {
|
||||
"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?",
|
||||
|
||||
"error.globalSync.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",
|
||||
"error.chain.causedBy": "Verursacht durch:",
|
||||
"error.chain.apiError": "API-Fehler",
|
||||
@@ -446,21 +428,17 @@ export const dict = {
|
||||
"error.chain.configFrontmatterError": "Frontmatter in {{path}} konnte nicht geparst werden:\n{{message}}",
|
||||
"error.chain.configInvalid": "Konfigurationsdatei unter {{path}} ist ungültig",
|
||||
"error.chain.configInvalidWithMessage": "Konfigurationsdatei unter {{path}} ist ungültig: {{message}}",
|
||||
|
||||
"notification.permission.title": "Berechtigung erforderlich",
|
||||
"notification.permission.description": "{{sessionTitle}} in {{projectName}} benötigt Berechtigung",
|
||||
"notification.question.title": "Frage",
|
||||
"notification.question.description": "{{sessionTitle}} in {{projectName}} hat eine Frage",
|
||||
"notification.action.goToSession": "Zur Sitzung gehen",
|
||||
|
||||
"notification.session.responseReady.title": "Antwort bereit",
|
||||
"notification.session.error.title": "Sitzungsfehler",
|
||||
"notification.session.error.fallbackDescription": "Ein Fehler ist aufgetreten",
|
||||
|
||||
"home.recentProjects": "Letzte Projekte",
|
||||
"home.empty.title": "Keine letzten Projekte",
|
||||
"home.empty.description": "Starten Sie, indem Sie ein lokales Projekt öffnen",
|
||||
|
||||
"session.tab.session": "Sitzung",
|
||||
"session.tab.review": "Überprüfung",
|
||||
"session.tab.context": "Kontext",
|
||||
@@ -478,18 +456,19 @@ export const dict = {
|
||||
"session.messages.loadingEarlier": "Lade frühere Nachrichten...",
|
||||
"session.messages.loadEarlier": "Frühere Nachrichten laden",
|
||||
"session.messages.loading": "Lade Nachrichten...",
|
||||
|
||||
"session.messages.jumpToLatest": "Zum neuesten springen",
|
||||
"session.context.addToContext": "{{selection}} zum Kontext hinzufügen",
|
||||
|
||||
"session.new.worktree.main": "Haupt-Branch",
|
||||
"session.new.worktree.mainWithBranch": "Haupt-Branch ({{branch}})",
|
||||
"session.new.worktree.create": "Neuen Worktree erstellen",
|
||||
"session.new.lastModified": "Zuletzt geändert",
|
||||
|
||||
"session.header.search.placeholder": "{{project}} durchsuchen",
|
||||
"session.header.searchFiles": "Dateien suchen",
|
||||
|
||||
"session.header.openIn": "Öffnen in",
|
||||
"session.header.open.action": "{{app}} öffnen",
|
||||
"session.header.open.ariaLabel": "In {{app}} öffnen",
|
||||
"session.header.open.menu": "Öffnen-Optionen",
|
||||
"session.header.open.copyPath": "Pfad kopieren",
|
||||
"status.popover.trigger": "Status",
|
||||
"status.popover.ariaLabel": "Serverkonfigurationen",
|
||||
"status.popover.tab.servers": "Server",
|
||||
@@ -497,7 +476,6 @@ export const dict = {
|
||||
"status.popover.tab.lsp": "LSP",
|
||||
"status.popover.tab.plugins": "Plugins",
|
||||
"status.popover.action.manageServers": "Server verwalten",
|
||||
|
||||
"session.share.popover.title": "Im Web veröffentlichen",
|
||||
"session.share.popover.description.shared":
|
||||
"Diese Sitzung ist öffentlich im Web. Sie ist für jeden mit dem Link zugänglich.",
|
||||
@@ -511,16 +489,13 @@ export const dict = {
|
||||
"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": "Lade Prompt...",
|
||||
"terminal.loading": "Lade Terminal...",
|
||||
"terminal.title": "Terminal",
|
||||
"terminal.title.numbered": "Terminal {{number}}",
|
||||
"terminal.close": "Terminal schließen",
|
||||
|
||||
"terminal.connectionLost.title": "Verbindung verloren",
|
||||
"terminal.connectionLost.description":
|
||||
"Die Terminalverbindung wurde unterbrochen. Das kann passieren, wenn der Server neu startet.",
|
||||
@@ -536,7 +511,6 @@ export const dict = {
|
||||
"common.close": "Schließen",
|
||||
"common.edit": "Bearbeiten",
|
||||
"common.loadMore": "Mehr laden",
|
||||
|
||||
"common.key.esc": "ESC",
|
||||
"sidebar.menu.toggle": "Menü umschalten",
|
||||
"sidebar.nav.projectsAndSessions": "Projekte und Sitzungen",
|
||||
@@ -550,18 +524,19 @@ export const dict = {
|
||||
"Verbinden Sie einen beliebigen Anbieter, um Modelle wie Claude, GPT, Gemini usw. zu nutzen.",
|
||||
"sidebar.project.recentSessions": "Letzte Sitzungen",
|
||||
"sidebar.project.viewAllSessions": "Alle Sitzungen anzeigen",
|
||||
|
||||
"app.name.desktop": "OpenCode Desktop",
|
||||
"settings.section.desktop": "Desktop",
|
||||
"settings.section.server": "Server",
|
||||
"settings.tab.general": "Allgemein",
|
||||
"settings.tab.shortcuts": "Tastenkombinationen",
|
||||
|
||||
"settings.desktop.section.wsl": "WSL",
|
||||
"settings.desktop.wsl.title": "WSL-Integration",
|
||||
"settings.desktop.wsl.description": "OpenCode-Server innerhalb von WSL unter Windows ausführen.",
|
||||
"settings.general.section.appearance": "Erscheinungsbild",
|
||||
"settings.general.section.notifications": "Systembenachrichtigungen",
|
||||
"settings.general.section.updates": "Updates",
|
||||
"settings.general.section.sounds": "Soundeffekte",
|
||||
|
||||
"settings.general.section.display": "Anzeige",
|
||||
"settings.general.row.language.title": "Sprache",
|
||||
"settings.general.row.language.description": "Die Anzeigesprache für OpenCode ändern",
|
||||
"settings.general.row.appearance.title": "Erscheinungsbild",
|
||||
@@ -570,10 +545,12 @@ export const dict = {
|
||||
"settings.general.row.theme.description": "Das Thema von OpenCode anpassen.",
|
||||
"settings.general.row.font.title": "Schriftart",
|
||||
"settings.general.row.font.description": "Die in Codeblöcken verwendete Monospace-Schriftart anpassen",
|
||||
|
||||
"settings.general.row.wayland.title": "Natives Wayland verwenden",
|
||||
"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",
|
||||
"settings.general.row.releaseNotes.description": '"Neuigkeiten"-Pop-ups nach Updates anzeigen',
|
||||
|
||||
"settings.updates.row.startup.title": "Beim Start nach Updates suchen",
|
||||
"settings.updates.row.startup.description": "Beim Start von OpenCode automatisch nach Updates suchen",
|
||||
"settings.updates.row.check.title": "Nach Updates suchen",
|
||||
@@ -582,7 +559,6 @@ export const dict = {
|
||||
"settings.updates.action.checking": "Wird geprüft...",
|
||||
"settings.updates.toast.latest.title": "Du bist auf dem neuesten Stand",
|
||||
"settings.updates.toast.latest.description": "Du verwendest die aktuelle Version von OpenCode.",
|
||||
|
||||
"font.option.ibmPlexMono": "IBM Plex Mono",
|
||||
"font.option.cascadiaCode": "Cascadia Code",
|
||||
"font.option.firaCode": "Fira Code",
|
||||
@@ -648,14 +624,12 @@ export const dict = {
|
||||
"Systembenachrichtigung anzeigen, wenn eine Berechtigung erforderlich ist",
|
||||
"settings.general.notifications.errors.title": "Fehler",
|
||||
"settings.general.notifications.errors.description": "Systembenachrichtigung anzeigen, wenn ein Fehler auftritt",
|
||||
|
||||
"settings.general.sounds.agent.title": "Agent",
|
||||
"settings.general.sounds.agent.description": "Ton abspielen, wenn der Agent fertig ist oder Aufmerksamkeit benötigt",
|
||||
"settings.general.sounds.permissions.title": "Berechtigungen",
|
||||
"settings.general.sounds.permissions.description": "Ton abspielen, wenn eine Berechtigung erforderlich ist",
|
||||
"settings.general.sounds.errors.title": "Fehler",
|
||||
"settings.general.sounds.errors.description": "Ton abspielen, wenn ein Fehler auftritt",
|
||||
|
||||
"settings.shortcuts.title": "Tastenkombinationen",
|
||||
"settings.shortcuts.reset.button": "Auf Standard zurücksetzen",
|
||||
"settings.shortcuts.reset.toast.title": "Tastenkombinationen zurückgesetzt",
|
||||
@@ -666,14 +640,12 @@ export const dict = {
|
||||
"settings.shortcuts.pressKeys": "Tasten drücken",
|
||||
"settings.shortcuts.search.placeholder": "Tastenkürzel suchen",
|
||||
"settings.shortcuts.search.empty": "Keine Tastenkürzel gefunden",
|
||||
|
||||
"settings.shortcuts.group.general": "Allgemein",
|
||||
"settings.shortcuts.group.session": "Sitzung",
|
||||
"settings.shortcuts.group.navigation": "Navigation",
|
||||
"settings.shortcuts.group.modelAndAgent": "Modell und Agent",
|
||||
"settings.shortcuts.group.terminal": "Terminal",
|
||||
"settings.shortcuts.group.prompt": "Prompt",
|
||||
|
||||
"settings.providers.title": "Anbieter",
|
||||
"settings.providers.description": "Anbietereinstellungen können hier konfiguriert werden.",
|
||||
"settings.providers.section.connected": "Verbundene Anbieter",
|
||||
@@ -691,16 +663,13 @@ export const dict = {
|
||||
"settings.commands.description": "Befehlseinstellungen können hier konfiguriert werden.",
|
||||
"settings.mcp.title": "MCP",
|
||||
"settings.mcp.description": "MCP-Einstellungen können hier konfiguriert werden.",
|
||||
|
||||
"settings.permissions.title": "Berechtigungen",
|
||||
"settings.permissions.description": "Steuern Sie, welche Tools der Server standardmäßig verwenden darf.",
|
||||
"settings.permissions.section.tools": "Tools",
|
||||
"settings.permissions.toast.updateFailed.title": "Berechtigungen konnten nicht aktualisiert werden",
|
||||
|
||||
"settings.permissions.action.allow": "Erlauben",
|
||||
"settings.permissions.action.ask": "Fragen",
|
||||
"settings.permissions.action.deny": "Verweigern",
|
||||
|
||||
"settings.permissions.tool.read.title": "Lesen",
|
||||
"settings.permissions.tool.read.description": "Lesen einer Datei (stimmt mit dem Dateipfad überein)",
|
||||
"settings.permissions.tool.edit.title": "Bearbeiten",
|
||||
@@ -734,12 +703,10 @@ export const dict = {
|
||||
"settings.permissions.tool.external_directory.description": "Zugriff auf Dateien außerhalb des Projektverzeichnisses",
|
||||
"settings.permissions.tool.doom_loop.title": "Doom Loop",
|
||||
"settings.permissions.tool.doom_loop.description": "Wiederholte Tool-Aufrufe mit identischer Eingabe erkennen",
|
||||
|
||||
"session.delete.failed.title": "Sitzung konnte nicht gelöscht werden",
|
||||
"session.delete.title": "Sitzung löschen",
|
||||
"session.delete.confirm": 'Sitzung "{{name}}" löschen?',
|
||||
"session.delete.button": "Sitzung löschen",
|
||||
|
||||
"workspace.new": "Neuer Arbeitsbereich",
|
||||
"workspace.type.local": "lokal",
|
||||
"workspace.type.sandbox": "Sandbox",
|
||||
|
||||
@@ -583,6 +583,9 @@ export const dict = {
|
||||
"settings.section.server": "Server",
|
||||
"settings.tab.general": "General",
|
||||
"settings.tab.shortcuts": "Shortcuts",
|
||||
"settings.desktop.section.wsl": "WSL",
|
||||
"settings.desktop.wsl.title": "WSL integration",
|
||||
"settings.desktop.wsl.description": "Run the OpenCode server inside WSL on Windows.",
|
||||
|
||||
"settings.general.section.appearance": "Appearance",
|
||||
"settings.general.section.notifications": "System notifications",
|
||||
|
||||
@@ -15,8 +15,8 @@ export const dict = {
|
||||
"command.category.agent": "Agente",
|
||||
"command.category.permissions": "Permisos",
|
||||
"command.category.workspace": "Espacio de trabajo",
|
||||
|
||||
"command.category.settings": "Ajustes",
|
||||
|
||||
"theme.scheme.system": "Sistema",
|
||||
"theme.scheme.light": "Claro",
|
||||
"theme.scheme.dark": "Oscuro",
|
||||
@@ -72,6 +72,7 @@ export const dict = {
|
||||
"command.permissions.autoaccept.enable": "Aceptar ediciones automáticamente",
|
||||
"command.permissions.autoaccept.disable": "Dejar de aceptar ediciones automáticamente",
|
||||
"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",
|
||||
"command.session.redo": "Rehacer",
|
||||
@@ -95,9 +96,13 @@ export const dict = {
|
||||
"dialog.provider.group.popular": "Popular",
|
||||
"dialog.provider.group.other": "Otro",
|
||||
"dialog.provider.tag.recommended": "Recomendado",
|
||||
"dialog.provider.anthropic.note": "Conectar con Claude Pro/Max o clave API",
|
||||
"dialog.provider.openai.note": "Conectar con ChatGPT Pro/Plus o clave API",
|
||||
"dialog.provider.copilot.note": "Conectar con Copilot o clave API",
|
||||
"dialog.provider.opencode.note": "Modelos seleccionados incluyendo Claude, GPT, Gemini y más",
|
||||
"dialog.provider.anthropic.note": "Acceso directo a modelos Claude, incluyendo Pro y Max",
|
||||
"dialog.provider.copilot.note": "Modelos Claude para asistencia de codificación",
|
||||
"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 soportados desde un solo proveedor",
|
||||
"dialog.provider.vercel.note": "Acceso unificado a modelos de IA con enrutamiento inteligente",
|
||||
|
||||
"dialog.model.select.title": "Seleccionar modelo",
|
||||
"dialog.model.search.placeholder": "Buscar modelos",
|
||||
@@ -145,11 +150,48 @@ export const dict = {
|
||||
"provider.connect.toast.connected.title": "{{provider}} conectado",
|
||||
"provider.connect.toast.connected.description": "Los modelos de {{provider}} ahora están disponibles para usar.",
|
||||
|
||||
"provider.custom.title": "Proveedor personalizado",
|
||||
"provider.custom.description.prefix": "Configurar un proveedor compatible con OpenAI. Ver la ",
|
||||
"provider.custom.description.link": "documentación de configuración del proveedor",
|
||||
"provider.custom.description.suffix": ".",
|
||||
"provider.custom.field.providerID.label": "ID del proveedor",
|
||||
"provider.custom.field.providerID.placeholder": "miproveedor",
|
||||
"provider.custom.field.providerID.description": "Letras minúsculas, números, guiones o guiones bajos",
|
||||
"provider.custom.field.name.label": "Nombre para mostrar",
|
||||
"provider.custom.field.name.placeholder": "Mi Proveedor de IA",
|
||||
"provider.custom.field.baseURL.label": "URL base",
|
||||
"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. 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",
|
||||
"provider.custom.models.name.label": "Nombre",
|
||||
"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": "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 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",
|
||||
"provider.custom.error.name.required": "El nombre para mostrar es obligatorio",
|
||||
"provider.custom.error.baseURL.required": "La URL base es obligatoria",
|
||||
"provider.custom.error.baseURL.format": "Debe comenzar con http:// o https://",
|
||||
"provider.custom.error.required": "Obligatorio",
|
||||
"provider.custom.error.duplicate": "Duplicado",
|
||||
|
||||
"provider.disconnect.toast.disconnected.title": "{{provider}} desconectado",
|
||||
"provider.disconnect.toast.disconnected.description": "Los modelos de {{provider}} ya no están disponibles.",
|
||||
|
||||
"model.tag.free": "Gratis",
|
||||
"model.tag.latest": "Último",
|
||||
|
||||
"model.provider.anthropic": "Anthropic",
|
||||
"model.provider.openai": "OpenAI",
|
||||
"model.provider.google": "Google",
|
||||
@@ -164,8 +206,10 @@ export const dict = {
|
||||
"model.tooltip.reasoning.allowed": "Permite razonamiento",
|
||||
"model.tooltip.reasoning.none": "Sin razonamiento",
|
||||
"model.tooltip.context": "Límite de contexto {{limit}}",
|
||||
|
||||
"common.search.placeholder": "Buscar",
|
||||
"common.goBack": "Volver",
|
||||
"common.goForward": "Avanzar",
|
||||
"common.loading": "Cargando",
|
||||
"common.loading.ellipsis": "...",
|
||||
"common.cancel": "Cancelar",
|
||||
@@ -287,11 +331,11 @@ export const dict = {
|
||||
"dialog.project.edit.icon.recommended": "Recomendado: 128x128px",
|
||||
"dialog.project.edit.color": "Color",
|
||||
"dialog.project.edit.color.select": "Seleccionar color {{color}}",
|
||||
|
||||
"dialog.project.edit.worktree.startup": "Script de inicio del espacio de trabajo",
|
||||
"dialog.project.edit.worktree.startup.description":
|
||||
"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 de Contexto",
|
||||
"context.breakdown.note":
|
||||
'Desglose aproximado de tokens de entrada. "Otro" incluye definiciones de herramientas y sobrecarga.',
|
||||
@@ -327,30 +371,48 @@ export const dict = {
|
||||
"context.usage.clickToView": "Haz clic para ver contexto",
|
||||
"context.usage.view": "Ver uso del contexto",
|
||||
|
||||
"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.th": "ไทย",
|
||||
|
||||
"toast.language.title": "Idioma",
|
||||
"toast.language.description": "Cambiado a {{language}}",
|
||||
|
||||
"toast.theme.title": "Tema cambiado",
|
||||
"toast.scheme.title": "Esquema de color",
|
||||
|
||||
"toast.permissions.autoaccept.on.title": "Aceptando ediciones automáticamente",
|
||||
"toast.permissions.autoaccept.on.description": "Los permisos de edición y escritura serán aprobados automáticamente",
|
||||
"toast.permissions.autoaccept.off.title": "Se dejó de aceptar ediciones automáticamente",
|
||||
"toast.permissions.autoaccept.off.description": "Los permisos de edición y escritura requerirán aprobación",
|
||||
|
||||
"toast.workspace.enabled.title": "Espacios de trabajo habilitados",
|
||||
"toast.workspace.enabled.description": "Ahora se muestran varios worktrees en la barra lateral",
|
||||
"toast.workspace.disabled.title": "Espacios de trabajo deshabilitados",
|
||||
"toast.workspace.disabled.description": "Solo se muestra el worktree principal en la barra lateral",
|
||||
|
||||
"toast.permissions.autoaccept.on.title": "Aceptando ediciones automáticamente",
|
||||
"toast.permissions.autoaccept.on.description": "Los permisos de edición y escritura serán aprobados automáticamente",
|
||||
"toast.permissions.autoaccept.off.title": "Se dejó de aceptar ediciones automáticamente",
|
||||
"toast.permissions.autoaccept.off.description": "Los permisos de edición y escritura requerirán aprobación",
|
||||
|
||||
"toast.model.none.title": "Ningún modelo seleccionado",
|
||||
"toast.model.none.description": "Conecta un proveedor para resumir esta sesión",
|
||||
|
||||
"toast.file.loadFailed.title": "Fallo al cargar archivo",
|
||||
|
||||
"toast.file.listFailed.title": "Fallo al listar archivos",
|
||||
|
||||
"toast.context.noLineSelection.title": "Sin selección de líneas",
|
||||
"toast.context.noLineSelection.description": "Primero selecciona un rango de líneas en una pestaña de archivo.",
|
||||
|
||||
"toast.session.share.copyFailed.title": "Fallo al copiar URL al portapapeles",
|
||||
"toast.session.share.success.title": "Sesión compartida",
|
||||
"toast.session.share.success.description": "¡URL compartida copiada al portapapeles!",
|
||||
@@ -384,6 +446,7 @@ export const dict = {
|
||||
"Elemento raíz no encontrado. ¿Olvidaste añadirlo a tu index.html? ¿O tal vez el atributo id está mal escrito?",
|
||||
|
||||
"error.globalSync.connectFailed": "No se pudo conectar al servidor. ¿Hay un servidor ejecutándose en `{{url}}`?",
|
||||
"directory.error.invalidUrl": "URL de directorio inválida.",
|
||||
|
||||
"error.chain.unknown": "Error desconocido",
|
||||
"error.chain.causedBy": "Causado por:",
|
||||
@@ -431,15 +494,17 @@ export const dict = {
|
||||
"session.review.loadingChanges": "Cargando cambios...",
|
||||
"session.review.empty": "No hay cambios en esta sesión aún",
|
||||
"session.review.noChanges": "Sin cambios",
|
||||
|
||||
"session.files.selectToOpen": "Selecciona un archivo para abrir",
|
||||
"session.files.all": "Todos los archivos",
|
||||
"session.files.binaryContent": "Archivo binario (el contenido no puede ser mostrado)",
|
||||
|
||||
"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 último",
|
||||
|
||||
"session.context.addToContext": "Añadir {{selection}} al contexto",
|
||||
|
||||
"session.new.worktree.main": "Rama principal",
|
||||
@@ -449,6 +514,11 @@ export const dict = {
|
||||
|
||||
"session.header.search.placeholder": "Buscar {{project}}",
|
||||
"session.header.searchFiles": "Buscar archivos",
|
||||
"session.header.openIn": "Abrir en",
|
||||
"session.header.open.action": "Abrir {{app}}",
|
||||
"session.header.open.ariaLabel": "Abrir en {{app}}",
|
||||
"session.header.open.menu": "Opciones de apertura",
|
||||
"session.header.open.copyPath": "Copiar ruta",
|
||||
|
||||
"status.popover.trigger": "Estado",
|
||||
"status.popover.ariaLabel": "Configuraciones del servidor",
|
||||
@@ -480,10 +550,10 @@ export const dict = {
|
||||
"terminal.title": "Terminal",
|
||||
"terminal.title.numbered": "Terminal {{number}}",
|
||||
"terminal.close": "Cerrar terminal",
|
||||
|
||||
"terminal.connectionLost.title": "Conexión perdida",
|
||||
"terminal.connectionLost.description":
|
||||
"La conexión del terminal se interrumpió. Esto puede ocurrir cuando el servidor se reinicia.",
|
||||
|
||||
"common.closeTab": "Cerrar pestaña",
|
||||
"common.dismiss": "Descartar",
|
||||
"common.requestFailed": "Solicitud fallida",
|
||||
@@ -496,8 +566,8 @@ export const dict = {
|
||||
"common.close": "Cerrar",
|
||||
"common.edit": "Editar",
|
||||
"common.loadMore": "Cargar más",
|
||||
|
||||
"common.key.esc": "ESC",
|
||||
|
||||
"sidebar.menu.toggle": "Alternar menú",
|
||||
"sidebar.nav.projectsAndSessions": "Proyectos y sesiones",
|
||||
"sidebar.settings": "Ajustes",
|
||||
@@ -511,15 +581,20 @@ export const dict = {
|
||||
"sidebar.project.viewAllSessions": "Ver todas las sesiones",
|
||||
|
||||
"app.name.desktop": "OpenCode Desktop",
|
||||
|
||||
"settings.section.desktop": "Escritorio",
|
||||
"settings.section.server": "Servidor",
|
||||
"settings.tab.general": "General",
|
||||
"settings.tab.shortcuts": "Atajos",
|
||||
"settings.desktop.section.wsl": "WSL",
|
||||
"settings.desktop.wsl.title": "Integración con WSL",
|
||||
"settings.desktop.wsl.description": "Ejecutar el servidor OpenCode dentro de WSL en Windows.",
|
||||
|
||||
"settings.general.section.appearance": "Apariencia",
|
||||
"settings.general.section.notifications": "Notificaciones del sistema",
|
||||
"settings.general.section.updates": "Actualizaciones",
|
||||
"settings.general.section.sounds": "Efectos de sonido",
|
||||
"settings.general.section.display": "Pantalla",
|
||||
|
||||
"settings.general.row.language.title": "Idioma",
|
||||
"settings.general.row.language.description": "Cambiar el idioma de visualización para OpenCode",
|
||||
@@ -528,7 +603,12 @@ export const dict = {
|
||||
"settings.general.row.theme.title": "Tema",
|
||||
"settings.general.row.theme.description": "Personaliza el tema de OpenCode.",
|
||||
"settings.general.row.font.title": "Fuente",
|
||||
"settings.general.row.font.description": "Personaliza la fuente mono usada en bloques de código",
|
||||
"settings.general.row.font.description": "Personaliza la fuente monoespaciada usada en bloques de código",
|
||||
|
||||
"settings.general.row.wayland.title": "Usar Wayland nativo",
|
||||
"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.",
|
||||
|
||||
"settings.general.row.releaseNotes.title": "Notas de la versión",
|
||||
"settings.general.row.releaseNotes.description":
|
||||
@@ -542,7 +622,6 @@ export const dict = {
|
||||
"settings.updates.action.checking": "Buscando...",
|
||||
"settings.updates.toast.latest.title": "Estás al día",
|
||||
"settings.updates.toast.latest.description": "Estás usando la última versión de OpenCode.",
|
||||
|
||||
"font.option.ibmPlexMono": "IBM Plex Mono",
|
||||
"font.option.cascadiaCode": "Cascadia Code",
|
||||
"font.option.firaCode": "Fira Code",
|
||||
@@ -600,6 +679,7 @@ export const dict = {
|
||||
"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":
|
||||
"Mostrar notificación del sistema cuando el agente termine o necesite atención",
|
||||
|
||||
@@ -15,12 +15,10 @@ export const dict = {
|
||||
"command.category.agent": "Agent",
|
||||
"command.category.permissions": "Permissions",
|
||||
"command.category.workspace": "Espace de travail",
|
||||
|
||||
"command.category.settings": "Paramètres",
|
||||
"theme.scheme.system": "Système",
|
||||
"theme.scheme.light": "Clair",
|
||||
"theme.scheme.dark": "Sombre",
|
||||
|
||||
"command.sidebar.toggle": "Basculer la barre latérale",
|
||||
"command.project.open": "Ouvrir un projet",
|
||||
"command.provider.connect": "Connecter un fournisseur",
|
||||
@@ -31,23 +29,19 @@ export const dict = {
|
||||
"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",
|
||||
"command.theme.set": "Utiliser le thème : {{theme}}",
|
||||
"command.theme.scheme.cycle": "Changer de schéma de couleurs",
|
||||
"command.theme.scheme.set": "Utiliser le schéma de couleurs : {{scheme}}",
|
||||
|
||||
"command.language.cycle": "Changer de langue",
|
||||
"command.language.set": "Utiliser la langue : {{language}}",
|
||||
|
||||
"command.session.new": "Nouvelle session",
|
||||
"command.file.open": "Ouvrir un fichier",
|
||||
"command.tab.close": "Fermer l'onglet",
|
||||
"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": "Focus input",
|
||||
"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",
|
||||
@@ -72,6 +66,7 @@ export const dict = {
|
||||
"command.permissions.autoaccept.enable": "Accepter automatiquement les modifications",
|
||||
"command.permissions.autoaccept.disable": "Arrêter l'acceptation automatique des modifications",
|
||||
"command.workspace.toggle": "Basculer les espaces de travail",
|
||||
"command.workspace.toggle.description": "Activer ou désactiver plusieurs espaces de travail dans la barre latérale",
|
||||
"command.session.undo": "Annuler",
|
||||
"command.session.undo.description": "Annuler le dernier message",
|
||||
"command.session.redo": "Rétablir",
|
||||
@@ -84,32 +79,30 @@ export const dict = {
|
||||
"command.session.share.description": "Partager cette session et copier l'URL dans le presse-papiers",
|
||||
"command.session.unshare": "Ne plus partager la session",
|
||||
"command.session.unshare.description": "Arrêter de partager cette session",
|
||||
|
||||
"palette.search.placeholder": "Rechercher des fichiers, des commandes et des sessions",
|
||||
"palette.empty": "Aucun résultat trouvé",
|
||||
"palette.group.commands": "Commandes",
|
||||
"palette.group.files": "Fichiers",
|
||||
|
||||
"dialog.provider.search.placeholder": "Rechercher des fournisseurs",
|
||||
"dialog.provider.empty": "Aucun fournisseur trouvé",
|
||||
"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.anthropic.note": "Connectez-vous avec Claude Pro/Max ou une clé API",
|
||||
"dialog.provider.openai.note": "Connectez-vous avec ChatGPT Pro/Plus ou une clé API",
|
||||
"dialog.provider.copilot.note": "Connectez-vous avec Copilot ou une clé API",
|
||||
|
||||
"dialog.provider.openai.note": "Connectez-vous avec ChatGPT Pro/Plus ou une clé API",
|
||||
"dialog.provider.google.note": "Modèles Gemini pour des réponses rapides et structurées",
|
||||
"dialog.provider.openrouter.note": "Accédez à tous les modèles pris en charge depuis un seul fournisseur",
|
||||
"dialog.provider.vercel.note": "Accès unifié aux modèles d'IA avec routage intelligent",
|
||||
"dialog.model.select.title": "Sélectionner un modèle",
|
||||
"dialog.model.search.placeholder": "Rechercher des modèles",
|
||||
"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.unpaid.freeModels.title": "Modèles gratuits fournis par OpenCode",
|
||||
"dialog.model.unpaid.addMore.title": "Ajouter plus de modèles de fournisseurs populaires",
|
||||
|
||||
"dialog.provider.viewAll": "Voir plus de fournisseurs",
|
||||
|
||||
"provider.connect.title": "Connecter {{provider}}",
|
||||
"provider.connect.title.anthropicProMax": "Connexion avec Claude Pro/Max",
|
||||
"provider.connect.selectMethod": "Sélectionnez la méthode de connexion pour {{provider}}.",
|
||||
@@ -144,12 +137,46 @@ export const dict = {
|
||||
"provider.connect.oauth.auto.confirmationCode": "Code de confirmation",
|
||||
"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": "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 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": "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",
|
||||
"provider.custom.models.name.label": "Nom",
|
||||
"provider.custom.models.name.placeholder": "Nom d'affichage",
|
||||
"provider.custom.models.remove": "Supprimer le modèle",
|
||||
"provider.custom.models.add": "Ajouter un modèle",
|
||||
"provider.custom.headers.label": "En-têtes (optionnel)",
|
||||
"provider.custom.headers.key.label": "En-tête",
|
||||
"provider.custom.headers.key.placeholder": "Nom-En-Tête",
|
||||
"provider.custom.headers.value.label": "Valeur",
|
||||
"provider.custom.headers.value.placeholder": "valeur",
|
||||
"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, 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",
|
||||
"provider.custom.error.baseURL.format": "Doit commencer par http:// ou https://",
|
||||
"provider.custom.error.required": "Requis",
|
||||
"provider.custom.error.duplicate": "Doublon",
|
||||
"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": "Dernier",
|
||||
|
||||
"model.provider.anthropic": "Anthropic",
|
||||
"model.provider.openai": "OpenAI",
|
||||
"model.provider.google": "Google",
|
||||
@@ -166,6 +193,7 @@ export const dict = {
|
||||
"model.tooltip.context": "Limite de contexte {{limit}}",
|
||||
"common.search.placeholder": "Rechercher",
|
||||
"common.goBack": "Retour",
|
||||
"common.goForward": "Avancer",
|
||||
"common.loading": "Chargement",
|
||||
"common.loading.ellipsis": "...",
|
||||
"common.cancel": "Annuler",
|
||||
@@ -176,14 +204,12 @@ export const dict = {
|
||||
"common.saving": "Enregistrement...",
|
||||
"common.default": "Défaut",
|
||||
"common.attachment": "pièce jointe",
|
||||
|
||||
"prompt.placeholder.shell": "Entrez une commande shell...",
|
||||
"prompt.placeholder.normal": 'Demandez n\'importe quoi... "{{example}}"',
|
||||
"prompt.placeholder.summarizeComments": "Résumer les commentaires…",
|
||||
"prompt.placeholder.summarizeComment": "Résumer le commentaire…",
|
||||
"prompt.mode.shell": "Shell",
|
||||
"prompt.mode.shell.exit": "esc pour quitter",
|
||||
|
||||
"prompt.example.1": "Corriger un TODO dans la base de code",
|
||||
"prompt.example.2": "Quelle est la pile technique de ce projet ?",
|
||||
"prompt.example.3": "Réparer les tests échoués",
|
||||
@@ -209,7 +235,6 @@ export const dict = {
|
||||
"prompt.example.23": "Ajouter la pagination à cette liste",
|
||||
"prompt.example.24": "Créer une commande CLI pour...",
|
||||
"prompt.example.25": "Comment fonctionnent les variables d'environnement ici ?",
|
||||
|
||||
"prompt.popover.emptyResults": "Aucun résultat correspondant",
|
||||
"prompt.popover.emptyCommands": "Aucune commande correspondante",
|
||||
"prompt.dropzone.label": "Déposez des images ou des PDF ici",
|
||||
@@ -225,7 +250,6 @@ export const dict = {
|
||||
"prompt.attachment.remove": "Supprimer la pièce jointe",
|
||||
"prompt.action.send": "Envoyer",
|
||||
"prompt.action.stop": "Arrêter",
|
||||
|
||||
"prompt.toast.pasteUnsupported.title": "Collage non supporté",
|
||||
"prompt.toast.pasteUnsupported.description": "Seules les images ou les PDF peuvent être collés ici.",
|
||||
"prompt.toast.modelAgentRequired.title": "Sélectionnez un agent et un modèle",
|
||||
@@ -236,24 +260,18 @@ export const dict = {
|
||||
"prompt.toast.commandSendFailed.title": "Échec de l'envoi de la commande",
|
||||
"prompt.toast.promptSendFailed.title": "Échec de l'envoi du message",
|
||||
"prompt.toast.promptSendFailed.description": "Impossible de récupérer la session",
|
||||
|
||||
"dialog.mcp.title": "MCPs",
|
||||
"dialog.mcp.description": "{{enabled}} sur {{total}} activés",
|
||||
"dialog.mcp.empty": "Aucun MCP configuré",
|
||||
|
||||
"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": "échoué",
|
||||
"mcp.status.needs_auth": "nécessite auth",
|
||||
"mcp.status.disabled": "désactivé",
|
||||
|
||||
"dialog.fork.empty": "Aucun message à partir duquel bifurquer",
|
||||
|
||||
"dialog.directory.search.placeholder": "Rechercher des dossiers",
|
||||
"dialog.directory.empty": "Aucun dossier trouvé",
|
||||
|
||||
"dialog.server.title": "Serveurs",
|
||||
"dialog.server.description": "Changez le serveur OpenCode auquel cette application se connecte.",
|
||||
"dialog.server.search.placeholder": "Rechercher des serveurs",
|
||||
@@ -271,14 +289,12 @@ export const dict = {
|
||||
"dialog.server.default.set": "Définir le serveur actuel comme défaut",
|
||||
"dialog.server.default.clear": "Effacer",
|
||||
"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": "Supprimer par défaut",
|
||||
"dialog.server.menu.delete": "Supprimer",
|
||||
"dialog.server.current": "Serveur actuel",
|
||||
"dialog.server.status.default": "Défaut",
|
||||
|
||||
"dialog.project.edit.title": "Modifier le projet",
|
||||
"dialog.project.edit.name": "Nom",
|
||||
"dialog.project.edit.icon": "Icône",
|
||||
@@ -287,7 +303,6 @@ export const dict = {
|
||||
"dialog.project.edit.icon.recommended": "Recommandé : 128x128px",
|
||||
"dialog.project.edit.color": "Couleur",
|
||||
"dialog.project.edit.color.select": "Sélectionner la couleur {{color}}",
|
||||
|
||||
"dialog.project.edit.worktree.startup": "Script de démarrage de l'espace de travail",
|
||||
"dialog.project.edit.worktree.startup.description":
|
||||
"S'exécute après la création d'un nouvel espace de travail (arbre de travail).",
|
||||
@@ -300,10 +315,8 @@ export const dict = {
|
||||
"context.breakdown.assistant": "Assistant",
|
||||
"context.breakdown.tool": "Appels d'outils",
|
||||
"context.breakdown.other": "Autre",
|
||||
|
||||
"context.systemPrompt.title": "Prompt système",
|
||||
"context.rawMessages.title": "Messages bruts",
|
||||
|
||||
"context.stats.session": "Session",
|
||||
"context.stats.messages": "Messages",
|
||||
"context.stats.provider": "Fournisseur",
|
||||
@@ -320,36 +333,44 @@ export const dict = {
|
||||
"context.stats.totalCost": "Coût total",
|
||||
"context.stats.sessionCreated": "Session créée",
|
||||
"context.stats.lastActivity": "Dernière activité",
|
||||
|
||||
"context.usage.tokens": "Jetons",
|
||||
"context.usage.usage": "Utilisation",
|
||||
"context.usage.cost": "Coût",
|
||||
"context.usage.clickToView": "Cliquez pour voir le contexte",
|
||||
"context.usage.view": "Voir l'utilisation du contexte",
|
||||
|
||||
"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.th": "ไทย",
|
||||
"toast.language.title": "Langue",
|
||||
"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 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 le worktree principal est affiché dans la barre latérale",
|
||||
"toast.permissions.autoaccept.on.title": "Acceptation auto des modifications",
|
||||
"toast.permissions.autoaccept.on.description":
|
||||
"Les permissions de modification et d'écriture seront automatiquement approuvées",
|
||||
"toast.permissions.autoaccept.off.title": "Arrêt acceptation auto des modifications",
|
||||
"toast.permissions.autoaccept.off.description":
|
||||
"Les permissions de modification et d'écriture nécessiteront une approbation",
|
||||
|
||||
"toast.workspace.enabled.title": "Espaces de travail activés",
|
||||
"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 le worktree principal est affiché dans la barre latérale",
|
||||
|
||||
"toast.model.none.title": "Aucun modèle sélectionné",
|
||||
"toast.model.none.description": "Connectez un fournisseur pour résumer cette session",
|
||||
|
||||
"toast.file.loadFailed.title": "Échec du chargement du fichier",
|
||||
|
||||
"toast.file.listFailed.title": "Échec de la liste des fichiers",
|
||||
"toast.context.noLineSelection.title": "Aucune sélection de lignes",
|
||||
"toast.context.noLineSelection.description": "Sélectionnez d'abord une plage de lignes dans un onglet de fichier.",
|
||||
@@ -358,20 +379,16 @@ 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": "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": "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.details.label": "Détails de l'erreur",
|
||||
@@ -382,13 +399,11 @@ export const dict = {
|
||||
"error.page.report.prefix": "Veuillez signaler cette erreur à l'équipe OpenCode",
|
||||
"error.page.report.discord": "sur Discord",
|
||||
"error.page.version": "Version : {{version}}",
|
||||
|
||||
"error.dev.rootNotFound":
|
||||
"Élément racine introuvable. Avez-vous oublié de l'ajouter à votre index.html ? Ou peut-être que l'attribut id est mal orthographié ?",
|
||||
|
||||
"error.globalSync.connectFailed":
|
||||
"Impossible de se connecter au serveur. Y a-t-il un serveur en cours d'exécution à `{{url}}` ?",
|
||||
|
||||
"directory.error.invalidUrl": "Répertoire invalide dans l'URL.",
|
||||
"error.chain.unknown": "Erreur inconnue",
|
||||
"error.chain.causedBy": "Causé par :",
|
||||
"error.chain.apiError": "Erreur API",
|
||||
@@ -411,21 +426,17 @@ export const dict = {
|
||||
"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",
|
||||
"notification.permission.description": "{{sessionTitle}} dans {{projectName}} a besoin d'une permission",
|
||||
"notification.question.title": "Question",
|
||||
"notification.question.description": "{{sessionTitle}} dans {{projectName}} a une question",
|
||||
"notification.action.goToSession": "Aller à la session",
|
||||
|
||||
"notification.session.responseReady.title": "Réponse prête",
|
||||
"notification.session.error.title": "Erreur de session",
|
||||
"notification.session.error.fallbackDescription": "Une erreur s'est produite",
|
||||
|
||||
"home.recentProjects": "Projets récents",
|
||||
"home.empty.title": "Aucun projet récent",
|
||||
"home.empty.description": "Commencez par ouvrir un projet local",
|
||||
|
||||
"session.tab.session": "Session",
|
||||
"session.tab.review": "Revue",
|
||||
"session.tab.context": "Contexte",
|
||||
@@ -443,18 +454,19 @@ 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 dernier",
|
||||
"session.context.addToContext": "Ajouter {{selection}} au contexte",
|
||||
|
||||
"session.new.worktree.main": "Branche principale",
|
||||
"session.new.worktree.mainWithBranch": "Branche principale ({{branch}})",
|
||||
"session.new.worktree.create": "Créer un nouvel arbre de travail",
|
||||
"session.new.lastModified": "Dernière modification",
|
||||
|
||||
"session.header.search.placeholder": "Rechercher {{project}}",
|
||||
"session.header.searchFiles": "Rechercher des fichiers",
|
||||
|
||||
"session.header.openIn": "Ouvrir dans",
|
||||
"session.header.open.action": "Ouvrir {{app}}",
|
||||
"session.header.open.ariaLabel": "Ouvrir dans {{app}}",
|
||||
"session.header.open.menu": "Options d'ouverture",
|
||||
"session.header.open.copyPath": "Copier le chemin",
|
||||
"status.popover.trigger": "Statut",
|
||||
"status.popover.ariaLabel": "Configurations des serveurs",
|
||||
"status.popover.tab.servers": "Serveurs",
|
||||
@@ -462,7 +474,6 @@ export const dict = {
|
||||
"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.description.shared":
|
||||
"Cette session est publique sur le web. Elle est accessible à toute personne disposant du lien.",
|
||||
@@ -476,16 +487,13 @@ export const dict = {
|
||||
"session.share.action.view": "Voir",
|
||||
"session.share.copy.copied": "Copié",
|
||||
"session.share.copy.copyLink": "Copier le lien",
|
||||
|
||||
"lsp.tooltip.none": "Aucun serveur LSP",
|
||||
"lsp.label.connected": "{{count}} LSP",
|
||||
|
||||
"prompt.loading": "Chargement du prompt...",
|
||||
"terminal.loading": "Chargement du terminal...",
|
||||
"terminal.title": "Terminal",
|
||||
"terminal.title.numbered": "Terminal {{number}}",
|
||||
"terminal.close": "Fermer le terminal",
|
||||
|
||||
"terminal.connectionLost.title": "Connexion perdue",
|
||||
"terminal.connectionLost.description":
|
||||
"La connexion au terminal a été interrompue. Cela peut arriver lorsque le serveur redémarre.",
|
||||
@@ -501,7 +509,6 @@ export const dict = {
|
||||
"common.close": "Fermer",
|
||||
"common.edit": "Modifier",
|
||||
"common.loadMore": "Charger plus",
|
||||
|
||||
"common.key.esc": "ESC",
|
||||
"sidebar.menu.toggle": "Basculer le menu",
|
||||
"sidebar.nav.projectsAndSessions": "Projets et sessions",
|
||||
@@ -516,18 +523,19 @@ export const dict = {
|
||||
"Connectez n'importe quel fournisseur pour utiliser des modèles, y compris Claude, GPT, Gemini etc.",
|
||||
"sidebar.project.recentSessions": "Sessions récentes",
|
||||
"sidebar.project.viewAllSessions": "Voir toutes les sessions",
|
||||
|
||||
"app.name.desktop": "OpenCode Desktop",
|
||||
"settings.section.desktop": "Bureau",
|
||||
"settings.section.server": "Serveur",
|
||||
"settings.tab.general": "Général",
|
||||
"settings.tab.shortcuts": "Raccourcis",
|
||||
|
||||
"settings.desktop.section.wsl": "WSL",
|
||||
"settings.desktop.wsl.title": "Intégration WSL",
|
||||
"settings.desktop.wsl.description": "Exécuter le serveur OpenCode dans WSL sur Windows.",
|
||||
"settings.general.section.appearance": "Apparence",
|
||||
"settings.general.section.notifications": "Notifications système",
|
||||
"settings.general.section.updates": "Mises à jour",
|
||||
"settings.general.section.sounds": "Effets sonores",
|
||||
|
||||
"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.appearance.title": "Apparence",
|
||||
@@ -536,10 +544,12 @@ export const dict = {
|
||||
"settings.general.row.theme.description": "Personnaliser le thème d'OpenCode.",
|
||||
"settings.general.row.font.title": "Police",
|
||||
"settings.general.row.font.description": "Personnaliser la police mono utilisée dans les blocs de code",
|
||||
|
||||
"settings.general.row.wayland.title": "Utiliser Wayland natif",
|
||||
"settings.general.row.wayland.description": "Désactiver le repli X11 sur Wayland. Nécessite un redémarrage.",
|
||||
"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 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",
|
||||
@@ -548,7 +558,6 @@ export const dict = {
|
||||
"settings.updates.action.checking": "Vérification...",
|
||||
"settings.updates.toast.latest.title": "Vous êtes à jour",
|
||||
"settings.updates.toast.latest.description": "Vous utilisez la dernière version d'OpenCode.",
|
||||
|
||||
"font.option.ibmPlexMono": "IBM Plex Mono",
|
||||
"font.option.cascadiaCode": "Cascadia Code",
|
||||
"font.option.firaCode": "Fira Code",
|
||||
@@ -614,14 +623,12 @@ export const dict = {
|
||||
"Afficher une notification système lorsqu'une permission est requise",
|
||||
"settings.general.notifications.errors.title": "Erreurs",
|
||||
"settings.general.notifications.errors.description": "Afficher une notification système lorsqu'une erreur se produit",
|
||||
|
||||
"settings.general.sounds.agent.title": "Agent",
|
||||
"settings.general.sounds.agent.description": "Jouer un son lorsque l'agent a terminé ou nécessite une attention",
|
||||
"settings.general.sounds.permissions.title": "Permissions",
|
||||
"settings.general.sounds.permissions.description": "Jouer un son lorsqu'une permission est requise",
|
||||
"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 défauts",
|
||||
"settings.shortcuts.reset.toast.title": "Raccourcis réinitialisés",
|
||||
@@ -632,14 +639,12 @@ export const dict = {
|
||||
"settings.shortcuts.pressKeys": "Appuyez sur les touches",
|
||||
"settings.shortcuts.search.placeholder": "Rechercher des raccourcis",
|
||||
"settings.shortcuts.search.empty": "Aucun raccourci trouvé",
|
||||
|
||||
"settings.shortcuts.group.general": "Général",
|
||||
"settings.shortcuts.group.session": "Session",
|
||||
"settings.shortcuts.group.navigation": "Navigation",
|
||||
"settings.shortcuts.group.modelAndAgent": "Modèle et agent",
|
||||
"settings.shortcuts.group.terminal": "Terminal",
|
||||
"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",
|
||||
@@ -657,16 +662,13 @@ export const dict = {
|
||||
"settings.commands.description": "Les paramètres des commandes seront configurables ici.",
|
||||
"settings.mcp.title": "MCP",
|
||||
"settings.mcp.description": "Les paramètres MCP seront configurables ici.",
|
||||
|
||||
"settings.permissions.title": "Permissions",
|
||||
"settings.permissions.description": "Contrôlez les outils que le serveur peut utiliser par défaut.",
|
||||
"settings.permissions.section.tools": "Outils",
|
||||
"settings.permissions.toast.updateFailed.title": "Échec de la mise à jour des permissions",
|
||||
|
||||
"settings.permissions.action.allow": "Autoriser",
|
||||
"settings.permissions.action.ask": "Demander",
|
||||
"settings.permissions.action.deny": "Refuser",
|
||||
|
||||
"settings.permissions.tool.read.title": "Lire",
|
||||
"settings.permissions.tool.read.description": "Lecture d'un fichier (correspond au chemin du fichier)",
|
||||
"settings.permissions.tool.edit.title": "Modifier",
|
||||
@@ -701,12 +703,10 @@ export const dict = {
|
||||
"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",
|
||||
"settings.permissions.tool.doom_loop.description": "Détecter les appels d'outils répétés avec une entrée identique",
|
||||
|
||||
"session.delete.failed.title": "Échec de la suppression de la session",
|
||||
"session.delete.title": "Supprimer la session",
|
||||
"session.delete.confirm": 'Supprimer la session "{{name}}" ?',
|
||||
"session.delete.button": "Supprimer la session",
|
||||
|
||||
"workspace.new": "Nouvel espace de travail",
|
||||
"workspace.type.local": "local",
|
||||
"workspace.type.sandbox": "bac à sable",
|
||||
|
||||
@@ -15,12 +15,10 @@ export const dict = {
|
||||
"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.provider.connect": "プロバイダーに接続",
|
||||
@@ -31,17 +29,13 @@ export const dict = {
|
||||
"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": "タブを閉じる",
|
||||
@@ -72,6 +66,7 @@ export const dict = {
|
||||
"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": "やり直す",
|
||||
@@ -84,32 +79,30 @@ export const dict = {
|
||||
"command.session.share.description": "このセッションを共有しURLをクリップボードにコピー",
|
||||
"command.session.unshare": "セッションの共有を停止",
|
||||
"command.session.unshare.description": "このセッションの共有を停止",
|
||||
|
||||
"palette.search.placeholder": "ファイル、コマンド、セッションを検索",
|
||||
"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.tag.recommended": "推奨",
|
||||
"dialog.provider.opencode.note": "Claude, GPT, Geminiなどを含む厳選されたモデル",
|
||||
"dialog.provider.anthropic.note": "Claude Pro/MaxまたはAPIキーで接続",
|
||||
"dialog.provider.openai.note": "ChatGPT Pro/Plusまたは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モデルへの統合アクセス",
|
||||
"dialog.model.select.title": "モデルを選択",
|
||||
"dialog.model.search.placeholder": "モデルを検索",
|
||||
"dialog.model.empty": "モデルが見つかりません",
|
||||
"dialog.model.manage": "モデルを管理",
|
||||
"dialog.model.manage.description": "モデルセレクターに表示するモデルをカスタマイズします。",
|
||||
|
||||
"dialog.model.unpaid.freeModels.title": "OpenCodeが提供する無料モデル",
|
||||
"dialog.model.unpaid.addMore.title": "人気のプロバイダーからモデルを追加",
|
||||
|
||||
"dialog.provider.viewAll": "さらにプロバイダーを表示",
|
||||
|
||||
"provider.connect.title": "{{provider}}を接続",
|
||||
"provider.connect.title.anthropicProMax": "Claude Pro/Maxでログイン",
|
||||
"provider.connect.selectMethod": "{{provider}}のログイン方法を選択してください。",
|
||||
@@ -143,12 +136,46 @@ export const dict = {
|
||||
"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": "My AI Provider",
|
||||
"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",
|
||||
@@ -165,6 +192,7 @@ export const dict = {
|
||||
"model.tooltip.context": "コンテキスト上限 {{limit}}",
|
||||
"common.search.placeholder": "検索",
|
||||
"common.goBack": "戻る",
|
||||
"common.goForward": "進む",
|
||||
"common.loading": "読み込み中",
|
||||
"common.loading.ellipsis": "...",
|
||||
"common.cancel": "キャンセル",
|
||||
@@ -175,14 +203,12 @@ export const dict = {
|
||||
"common.saving": "保存中...",
|
||||
"common.default": "デフォルト",
|
||||
"common.attachment": "添付ファイル",
|
||||
|
||||
"prompt.placeholder.shell": "シェルコマンドを入力...",
|
||||
"prompt.placeholder.normal": '何でも聞いてください... "{{example}}"',
|
||||
"prompt.placeholder.summarizeComments": "コメントを要約…",
|
||||
"prompt.placeholder.summarizeComment": "コメントを要約…",
|
||||
"prompt.mode.shell": "Shell",
|
||||
"prompt.mode.shell": "シェル",
|
||||
"prompt.mode.shell.exit": "escで終了",
|
||||
|
||||
"prompt.example.1": "コードベースのTODOを修正",
|
||||
"prompt.example.2": "このプロジェクトの技術スタックは何ですか?",
|
||||
"prompt.example.3": "壊れたテストを修正",
|
||||
@@ -208,7 +234,6 @@ export const dict = {
|
||||
"prompt.example.23": "このリストにページネーションを追加",
|
||||
"prompt.example.24": "〜のCLIコマンドを作成",
|
||||
"prompt.example.25": "ここでは環境変数はどう機能しますか?",
|
||||
|
||||
"prompt.popover.emptyResults": "一致する結果がありません",
|
||||
"prompt.popover.emptyCommands": "一致するコマンドがありません",
|
||||
"prompt.dropzone.label": "画像またはPDFをここにドロップ",
|
||||
@@ -224,7 +249,6 @@ export const dict = {
|
||||
"prompt.attachment.remove": "添付ファイルを削除",
|
||||
"prompt.action.send": "送信",
|
||||
"prompt.action.stop": "停止",
|
||||
|
||||
"prompt.toast.pasteUnsupported.title": "サポートされていない貼り付け",
|
||||
"prompt.toast.pasteUnsupported.description": "ここでは画像またはPDFのみ貼り付け可能です。",
|
||||
"prompt.toast.modelAgentRequired.title": "エージェントとモデルを選択",
|
||||
@@ -235,24 +259,18 @@ export const dict = {
|
||||
"prompt.toast.commandSendFailed.title": "コマンドの送信に失敗しました",
|
||||
"prompt.toast.promptSendFailed.title": "プロンプトの送信に失敗しました",
|
||||
"prompt.toast.promptSendFailed.description": "セッションを取得できませんでした",
|
||||
|
||||
"dialog.mcp.title": "MCP",
|
||||
"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": "無効",
|
||||
|
||||
"dialog.fork.empty": "フォーク元のメッセージがありません",
|
||||
|
||||
"dialog.directory.search.placeholder": "フォルダを検索",
|
||||
"dialog.directory.empty": "フォルダが見つかりません",
|
||||
|
||||
"dialog.server.title": "サーバー",
|
||||
"dialog.server.description": "このアプリが接続するOpenCodeサーバーを切り替えます。",
|
||||
"dialog.server.search.placeholder": "サーバーを検索",
|
||||
@@ -270,14 +288,12 @@ export const dict = {
|
||||
"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": "デフォルト",
|
||||
|
||||
"dialog.project.edit.title": "プロジェクトを編集",
|
||||
"dialog.project.edit.name": "名前",
|
||||
"dialog.project.edit.icon": "アイコン",
|
||||
@@ -286,7 +302,6 @@ 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.description":
|
||||
"新しいワークスペース (ワークツリー) を作成した後に実行されます。",
|
||||
@@ -298,10 +313,8 @@ export const dict = {
|
||||
"context.breakdown.assistant": "アシスタント",
|
||||
"context.breakdown.tool": "ツール呼び出し",
|
||||
"context.breakdown.other": "その他",
|
||||
|
||||
"context.systemPrompt.title": "システムプロンプト",
|
||||
"context.rawMessages.title": "生のメッセージ",
|
||||
|
||||
"context.stats.session": "セッション",
|
||||
"context.stats.messages": "メッセージ",
|
||||
"context.stats.provider": "プロバイダー",
|
||||
@@ -318,29 +331,42 @@ export const dict = {
|
||||
"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.th": "ไทย",
|
||||
"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": "まずファイルタブで行範囲を選択してください。",
|
||||
@@ -349,19 +375,15 @@ export const dict = {
|
||||
"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.update.title": "アップデートが利用可能です",
|
||||
"toast.update.description": "OpenCodeの新しいバージョン ({{version}}) がインストール可能です。",
|
||||
"toast.update.action.installRestart": "インストールして再起動",
|
||||
"toast.update.action.notYet": "今はしない",
|
||||
|
||||
"error.page.title": "問題が発生しました",
|
||||
"error.page.description": "アプリケーションの読み込み中にエラーが発生しました。",
|
||||
"error.page.details.label": "エラー詳細",
|
||||
@@ -372,12 +394,10 @@ export const dict = {
|
||||
"error.page.report.prefix": "このエラーをOpenCodeチームに報告してください: ",
|
||||
"error.page.report.discord": "Discord",
|
||||
"error.page.version": "バージョン: {{version}}",
|
||||
|
||||
"error.dev.rootNotFound":
|
||||
"ルート要素が見つかりません。index.htmlに追加するのを忘れていませんか?またはid属性のスペルが間違っていませんか?",
|
||||
|
||||
"error.globalSync.connectFailed": "サーバーに接続できませんでした。`{{url}}`でサーバーが実行されていますか?",
|
||||
|
||||
"directory.error.invalidUrl": "URL内のディレクトリが無効です。",
|
||||
"error.chain.unknown": "不明なエラー",
|
||||
"error.chain.causedBy": "原因:",
|
||||
"error.chain.apiError": "APIエラー",
|
||||
@@ -398,21 +418,17 @@ export const dict = {
|
||||
"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": "ローカルプロジェクトを開いて始めましょう",
|
||||
|
||||
"session.tab.session": "セッション",
|
||||
"session.tab.review": "レビュー",
|
||||
"session.tab.context": "コンテキスト",
|
||||
@@ -430,18 +446,19 @@ export const dict = {
|
||||
"session.messages.loadingEarlier": "以前のメッセージを読み込み中...",
|
||||
"session.messages.loadEarlier": "以前のメッセージを読み込む",
|
||||
"session.messages.loading": "メッセージを読み込み中...",
|
||||
|
||||
"session.messages.jumpToLatest": "最新へジャンプ",
|
||||
"session.context.addToContext": "{{selection}}をコンテキストに追加",
|
||||
|
||||
"session.new.worktree.main": "メインブランチ",
|
||||
"session.new.worktree.mainWithBranch": "メインブランチ ({{branch}})",
|
||||
"session.new.worktree.create": "新しいワークツリーを作成",
|
||||
"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": "パスをコピー",
|
||||
"status.popover.trigger": "ステータス",
|
||||
"status.popover.ariaLabel": "サーバー設定",
|
||||
"status.popover.tab.servers": "サーバー",
|
||||
@@ -449,7 +466,6 @@ export const dict = {
|
||||
"status.popover.tab.lsp": "LSP",
|
||||
"status.popover.tab.plugins": "プラグイン",
|
||||
"status.popover.action.manageServers": "サーバーを管理",
|
||||
|
||||
"session.share.popover.title": "ウェブで公開",
|
||||
"session.share.popover.description.shared":
|
||||
"このセッションはウェブで公開されています。リンクを知っている人なら誰でもアクセスできます。",
|
||||
@@ -463,16 +479,13 @@ export const dict = {
|
||||
"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.description":
|
||||
"ターミナルの接続が中断されました。これはサーバーが再起動したときに発生することがあります。",
|
||||
@@ -488,7 +501,6 @@ export const dict = {
|
||||
"common.close": "閉じる",
|
||||
"common.edit": "編集",
|
||||
"common.loadMore": "さらに読み込む",
|
||||
|
||||
"common.key.esc": "ESC",
|
||||
"sidebar.menu.toggle": "メニューを切り替え",
|
||||
"sidebar.nav.projectsAndSessions": "プロジェクトとセッション",
|
||||
@@ -501,18 +513,19 @@ export const dict = {
|
||||
"sidebar.gettingStarted.line2": "プロバイダーを接続して、Claude、GPT、Geminiなどのモデルを使用できます。",
|
||||
"sidebar.project.recentSessions": "最近のセッション",
|
||||
"sidebar.project.viewAllSessions": "すべてのセッションを表示",
|
||||
|
||||
"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.notifications": "システム通知",
|
||||
"settings.general.section.updates": "アップデート",
|
||||
"settings.general.section.sounds": "効果音",
|
||||
|
||||
"settings.general.section.display": "ディスプレイ",
|
||||
"settings.general.row.language.title": "言語",
|
||||
"settings.general.row.language.description": "OpenCodeの表示言語を変更します",
|
||||
"settings.general.row.appearance.title": "外観",
|
||||
@@ -521,10 +534,12 @@ export const dict = {
|
||||
"settings.general.row.theme.description": "OpenCodeのテーマをカスタマイズします。",
|
||||
"settings.general.row.font.title": "フォント",
|
||||
"settings.general.row.font.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": "アップデートを確認",
|
||||
@@ -533,7 +548,6 @@ export const dict = {
|
||||
"settings.updates.action.checking": "確認中...",
|
||||
"settings.updates.toast.latest.title": "最新です",
|
||||
"settings.updates.toast.latest.description": "OpenCode は最新バージョンです。",
|
||||
|
||||
"font.option.ibmPlexMono": "IBM Plex Mono",
|
||||
"font.option.cascadiaCode": "Cascadia Code",
|
||||
"font.option.firaCode": "Fira Code",
|
||||
@@ -598,14 +612,12 @@ export const dict = {
|
||||
"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": "ショートカットをリセットしました",
|
||||
@@ -616,14 +628,12 @@ export const dict = {
|
||||
"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": "接続済みプロバイダー",
|
||||
@@ -641,16 +651,13 @@ export const dict = {
|
||||
"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": "編集",
|
||||
@@ -673,22 +680,20 @@ export const dict = {
|
||||
"settings.permissions.tool.todoread.description": "Todoリストの読み込み",
|
||||
"settings.permissions.tool.todowrite.title": "Todo書き込み",
|
||||
"settings.permissions.tool.todowrite.description": "Todoリストの更新",
|
||||
"settings.permissions.tool.webfetch.title": "Web Fetch",
|
||||
"settings.permissions.tool.webfetch.title": "Web取得",
|
||||
"settings.permissions.tool.webfetch.description": "URLからコンテンツを取得",
|
||||
"settings.permissions.tool.websearch.title": "Web Search",
|
||||
"settings.permissions.tool.websearch.title": "Web検索",
|
||||
"settings.permissions.tool.websearch.description": "ウェブを検索",
|
||||
"settings.permissions.tool.codesearch.title": "Code Search",
|
||||
"settings.permissions.tool.codesearch.title": "コード検索",
|
||||
"settings.permissions.tool.codesearch.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.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": "サンドボックス",
|
||||
|
||||
@@ -19,12 +19,10 @@ export const dict = {
|
||||
"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.provider.connect": "공급자 연결",
|
||||
@@ -35,17 +33,13 @@ export const dict = {
|
||||
"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": "탭 닫기",
|
||||
@@ -76,6 +70,7 @@ export const dict = {
|
||||
"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": "다시 실행",
|
||||
@@ -88,32 +83,30 @@ export const dict = {
|
||||
"command.session.share.description": "이 세션을 공유하고 URL을 클립보드에 복사",
|
||||
"command.session.unshare": "세션 공유 중지",
|
||||
"command.session.unshare.description": "이 세션 공유 중지",
|
||||
|
||||
"palette.search.placeholder": "파일, 명령어 및 세션 검색",
|
||||
"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.tag.recommended": "추천",
|
||||
"dialog.provider.opencode.note": "Claude, GPT, Gemini 등을 포함한 엄선된 모델",
|
||||
"dialog.provider.anthropic.note": "Claude Pro/Max 또는 API 키로 연결",
|
||||
"dialog.provider.openai.note": "ChatGPT Pro/Plus 또는 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 모델 통합 액세스",
|
||||
"dialog.model.select.title": "모델 선택",
|
||||
"dialog.model.search.placeholder": "모델 검색",
|
||||
"dialog.model.empty": "모델 결과 없음",
|
||||
"dialog.model.manage": "모델 관리",
|
||||
"dialog.model.manage.description": "모델 선택기에 표시할 모델 사용자 지정",
|
||||
|
||||
"dialog.model.unpaid.freeModels.title": "OpenCode에서 제공하는 무료 모델",
|
||||
"dialog.model.unpaid.addMore.title": "인기 공급자의 모델 추가",
|
||||
|
||||
"dialog.provider.viewAll": "더 많은 공급자 보기",
|
||||
|
||||
"provider.connect.title": "{{provider}} 연결",
|
||||
"provider.connect.title.anthropicProMax": "Claude Pro/Max로 로그인",
|
||||
"provider.connect.selectMethod": "{{provider}} 로그인 방법 선택",
|
||||
@@ -129,10 +122,10 @@ export const dict = {
|
||||
"provider.connect.opencodeZen.line1":
|
||||
"OpenCode Zen은 코딩 에이전트를 위해 최적화된 신뢰할 수 있는 엄선된 모델에 대한 액세스를 제공합니다.",
|
||||
"provider.connect.opencodeZen.line2": "단일 API 키로 Claude, GPT, Gemini, GLM 등 다양한 모델에 액세스할 수 있습니다.",
|
||||
"provider.connect.opencodeZen.visit.prefix": "",
|
||||
"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.opencodeZen.visit.suffix": "을 방문하여 API 키를 받으세요.",
|
||||
"provider.connect.oauth.code.visit.prefix": "다음 ",
|
||||
"provider.connect.oauth.code.visit.link": "이 링크",
|
||||
"provider.connect.oauth.code.visit.suffix":
|
||||
"를 방문하여 인증 코드를 받아 계정을 연결하고 OpenCode에서 {{provider}} 모델을 사용하세요.",
|
||||
@@ -140,19 +133,53 @@ export const dict = {
|
||||
"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.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": "헤더 이름",
|
||||
"provider.custom.headers.value.label": "값",
|
||||
"provider.custom.headers.value.placeholder": "값",
|
||||
"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",
|
||||
@@ -169,6 +196,7 @@ export const dict = {
|
||||
"model.tooltip.context": "컨텍스트 제한 {{limit}}",
|
||||
"common.search.placeholder": "검색",
|
||||
"common.goBack": "뒤로 가기",
|
||||
"common.goForward": "앞으로 가기",
|
||||
"common.loading": "로딩 중",
|
||||
"common.loading.ellipsis": "...",
|
||||
"common.cancel": "취소",
|
||||
@@ -179,14 +207,12 @@ export const dict = {
|
||||
"common.saving": "저장 중...",
|
||||
"common.default": "기본값",
|
||||
"common.attachment": "첨부 파일",
|
||||
|
||||
"prompt.placeholder.shell": "셸 명령어 입력...",
|
||||
"prompt.placeholder.normal": '무엇이든 물어보세요... "{{example}}"',
|
||||
"prompt.placeholder.summarizeComments": "댓글 요약…",
|
||||
"prompt.placeholder.summarizeComment": "댓글 요약…",
|
||||
"prompt.mode.shell": "셸",
|
||||
"prompt.mode.shell.exit": "종료하려면 esc",
|
||||
|
||||
"prompt.example.1": "코드베이스의 TODO 수정",
|
||||
"prompt.example.2": "이 프로젝트의 기술 스택이 무엇인가요?",
|
||||
"prompt.example.3": "고장 난 테스트 수정",
|
||||
@@ -212,7 +238,6 @@ export const dict = {
|
||||
"prompt.example.23": "이 목록에 페이지네이션 추가",
|
||||
"prompt.example.24": "...를 위한 CLI 명령어 생성",
|
||||
"prompt.example.25": "여기서 환경 변수는 어떻게 작동하나요?",
|
||||
|
||||
"prompt.popover.emptyResults": "일치하는 결과 없음",
|
||||
"prompt.popover.emptyCommands": "일치하는 명령어 없음",
|
||||
"prompt.dropzone.label": "이미지나 PDF를 여기에 드롭하세요",
|
||||
@@ -228,7 +253,6 @@ export const dict = {
|
||||
"prompt.attachment.remove": "첨부 파일 제거",
|
||||
"prompt.action.send": "전송",
|
||||
"prompt.action.stop": "중지",
|
||||
|
||||
"prompt.toast.pasteUnsupported.title": "지원되지 않는 붙여넣기",
|
||||
"prompt.toast.pasteUnsupported.description": "이미지나 PDF만 붙여넣을 수 있습니다.",
|
||||
"prompt.toast.modelAgentRequired.title": "에이전트 및 모델 선택",
|
||||
@@ -239,24 +263,18 @@ export const dict = {
|
||||
"prompt.toast.commandSendFailed.title": "명령 전송 실패",
|
||||
"prompt.toast.promptSendFailed.title": "프롬프트 전송 실패",
|
||||
"prompt.toast.promptSendFailed.description": "세션을 가져올 수 없습니다",
|
||||
|
||||
"dialog.mcp.title": "MCP",
|
||||
"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": "비활성화됨",
|
||||
|
||||
"dialog.fork.empty": "분기할 메시지 없음",
|
||||
|
||||
"dialog.directory.search.placeholder": "폴더 검색",
|
||||
"dialog.directory.empty": "폴더 없음",
|
||||
|
||||
"dialog.server.title": "서버",
|
||||
"dialog.server.description": "이 앱이 연결할 OpenCode 서버를 전환합니다.",
|
||||
"dialog.server.search.placeholder": "서버 검색",
|
||||
@@ -274,14 +292,12 @@ export const dict = {
|
||||
"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": "기본값",
|
||||
|
||||
"dialog.project.edit.title": "프로젝트 편집",
|
||||
"dialog.project.edit.name": "이름",
|
||||
"dialog.project.edit.icon": "아이콘",
|
||||
@@ -290,7 +306,6 @@ 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.description": "새 작업 공간(작업 트리)을 만든 뒤 실행됩니다.",
|
||||
"dialog.project.edit.worktree.startup.placeholder": "예: bun install",
|
||||
@@ -301,10 +316,8 @@ export const dict = {
|
||||
"context.breakdown.assistant": "어시스턴트",
|
||||
"context.breakdown.tool": "도구 호출",
|
||||
"context.breakdown.other": "기타",
|
||||
|
||||
"context.systemPrompt.title": "시스템 프롬프트",
|
||||
"context.rawMessages.title": "원시 메시지",
|
||||
|
||||
"context.stats.session": "세션",
|
||||
"context.stats.messages": "메시지",
|
||||
"context.stats.provider": "공급자",
|
||||
@@ -321,34 +334,42 @@ export const dict = {
|
||||
"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.th": "ไทย",
|
||||
"toast.language.title": "언어",
|
||||
"toast.language.description": "{{language}}(으)로 전환됨",
|
||||
|
||||
"toast.theme.title": "테마 전환됨",
|
||||
"toast.scheme.title": "색상 테마",
|
||||
|
||||
"toast.permissions.autoaccept.on.title": "편집 자동 수락 중",
|
||||
"toast.permissions.autoaccept.on.description": "편집 및 쓰기 권한이 자동으로 승인됩니다",
|
||||
"toast.permissions.autoaccept.off.title": "편집 자동 수락 중지됨",
|
||||
"toast.permissions.autoaccept.off.description": "편집 및 쓰기 권한 승인이 필요합니다",
|
||||
|
||||
"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": "먼저 파일 탭에서 줄 범위를 선택하세요.",
|
||||
@@ -357,19 +378,15 @@ export const dict = {
|
||||
"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.update.title": "업데이트 가능",
|
||||
"toast.update.description": "OpenCode의 새 버전({{version}})을 설치할 수 있습니다.",
|
||||
"toast.update.action.installRestart": "설치 및 다시 시작",
|
||||
"toast.update.action.notYet": "나중에",
|
||||
|
||||
"error.page.title": "문제가 발생했습니다",
|
||||
"error.page.description": "애플리케이션을 로드하는 동안 오류가 발생했습니다.",
|
||||
"error.page.details.label": "오류 세부 정보",
|
||||
@@ -380,12 +397,10 @@ export const dict = {
|
||||
"error.page.report.prefix": "이 오류를 OpenCode 팀에 제보해 주세요: ",
|
||||
"error.page.report.discord": "Discord",
|
||||
"error.page.version": "버전: {{version}}",
|
||||
|
||||
"error.dev.rootNotFound":
|
||||
"루트 요소를 찾을 수 없습니다. index.html에 추가하는 것을 잊으셨나요? 또는 id 속성의 철자가 틀렸을 수 있습니다.",
|
||||
|
||||
"error.globalSync.connectFailed": "서버에 연결할 수 없습니다. `{{url}}`에서 서버가 실행 중인가요?",
|
||||
|
||||
"directory.error.invalidUrl": "URL에 유효하지 않은 디렉터리가 있습니다.",
|
||||
"error.chain.unknown": "알 수 없는 오류",
|
||||
"error.chain.causedBy": "원인:",
|
||||
"error.chain.apiError": "API 오류",
|
||||
@@ -405,21 +420,17 @@ export const dict = {
|
||||
"error.chain.configFrontmatterError": "{{path}}의 frontmatter 파싱 실패:\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": "로컬 프로젝트를 열어 시작하세요",
|
||||
|
||||
"session.tab.session": "세션",
|
||||
"session.tab.review": "검토",
|
||||
"session.tab.context": "컨텍스트",
|
||||
@@ -437,18 +448,19 @@ export const dict = {
|
||||
"session.messages.loadingEarlier": "이전 메시지 로드 중...",
|
||||
"session.messages.loadEarlier": "이전 메시지 로드",
|
||||
"session.messages.loading": "메시지 로드 중...",
|
||||
|
||||
"session.messages.jumpToLatest": "최신으로 이동",
|
||||
"session.context.addToContext": "컨텍스트에 {{selection}} 추가",
|
||||
|
||||
"session.new.worktree.main": "메인 브랜치",
|
||||
"session.new.worktree.mainWithBranch": "메인 브랜치 ({{branch}})",
|
||||
"session.new.worktree.create": "새 작업 트리 생성",
|
||||
"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": "경로 복사",
|
||||
"status.popover.trigger": "상태",
|
||||
"status.popover.ariaLabel": "서버 구성",
|
||||
"status.popover.tab.servers": "서버",
|
||||
@@ -456,7 +468,6 @@ export const dict = {
|
||||
"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":
|
||||
@@ -469,16 +480,13 @@ export const dict = {
|
||||
"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.description":
|
||||
"터미널 연결이 중단되었습니다. 서버가 재시작하면 이런 일이 발생할 수 있습니다.",
|
||||
@@ -494,7 +502,6 @@ export const dict = {
|
||||
"common.close": "닫기",
|
||||
"common.edit": "편집",
|
||||
"common.loadMore": "더 불러오기",
|
||||
|
||||
"common.key.esc": "ESC",
|
||||
"sidebar.menu.toggle": "메뉴 토글",
|
||||
"sidebar.nav.projectsAndSessions": "프로젝트 및 세션",
|
||||
@@ -507,18 +514,19 @@ export const dict = {
|
||||
"sidebar.gettingStarted.line2": "Claude, GPT, Gemini 등을 포함한 모델을 사용하려면 공급자를 연결하세요.",
|
||||
"sidebar.project.recentSessions": "최근 세션",
|
||||
"sidebar.project.viewAllSessions": "모든 세션 보기",
|
||||
|
||||
"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.notifications": "시스템 알림",
|
||||
"settings.general.section.updates": "업데이트",
|
||||
"settings.general.section.sounds": "효과음",
|
||||
|
||||
"settings.general.section.display": "디스플레이",
|
||||
"settings.general.row.language.title": "언어",
|
||||
"settings.general.row.language.description": "OpenCode 표시 언어 변경",
|
||||
"settings.general.row.appearance.title": "모양",
|
||||
@@ -527,10 +535,12 @@ export const dict = {
|
||||
"settings.general.row.theme.description": "OpenCode 테마 사용자 지정",
|
||||
"settings.general.row.font.title": "글꼴",
|
||||
"settings.general.row.font.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": "업데이트 확인",
|
||||
@@ -539,7 +549,6 @@ export const dict = {
|
||||
"settings.updates.action.checking": "확인 중...",
|
||||
"settings.updates.toast.latest.title": "최신 상태입니다",
|
||||
"settings.updates.toast.latest.description": "현재 최신 버전의 OpenCode를 사용 중입니다.",
|
||||
|
||||
"font.option.ibmPlexMono": "IBM Plex Mono",
|
||||
"font.option.cascadiaCode": "Cascadia Code",
|
||||
"font.option.firaCode": "Fira Code",
|
||||
@@ -603,14 +612,12 @@ export const dict = {
|
||||
"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": "단축키 초기화됨",
|
||||
@@ -621,14 +628,12 @@ export const dict = {
|
||||
"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": "연결된 공급자",
|
||||
@@ -646,16 +651,13 @@ export const dict = {
|
||||
"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": "편집",
|
||||
@@ -688,12 +690,10 @@ export const dict = {
|
||||
"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": "샌드박스",
|
||||
|
||||
@@ -75,6 +75,7 @@ export const dict = {
|
||||
"command.permissions.autoaccept.enable": "Godta endringer automatisk",
|
||||
"command.permissions.autoaccept.disable": "Slutt å godta endringer automatisk",
|
||||
"command.workspace.toggle": "Veksle arbeidsområder",
|
||||
"command.workspace.toggle.description": "Enable or disable multiple workspaces in the sidebar",
|
||||
"command.session.undo": "Angre",
|
||||
"command.session.undo.description": "Angre siste melding",
|
||||
"command.session.redo": "Gjør om",
|
||||
@@ -98,9 +99,13 @@ export const dict = {
|
||||
"dialog.provider.group.popular": "Populære",
|
||||
"dialog.provider.group.other": "Andre",
|
||||
"dialog.provider.tag.recommended": "Anbefalt",
|
||||
"dialog.provider.anthropic.note": "Koble til med Claude Pro/Max eller API-nøkkel",
|
||||
"dialog.provider.openai.note": "Koble til med ChatGPT Pro/Plus eller API-nøkkel",
|
||||
"dialog.provider.copilot.note": "Koble til med Copilot eller API-nøkkel",
|
||||
"dialog.provider.opencode.note": "Utvalgte modeller inkludert Claude, GPT, Gemini og mer",
|
||||
"dialog.provider.anthropic.note": "Direkte tilgang til Claude-modeller, inkludert Pro og Max",
|
||||
"dialog.provider.copilot.note": "Claude-modeller for kodeassistanse",
|
||||
"dialog.provider.openai.note": "GPT-modeller for raske, dyktige generelle AI-oppgaver",
|
||||
"dialog.provider.google.note": "Gemini-modeller for raske, strukturerte svar",
|
||||
"dialog.provider.openrouter.note": "Tilgang til alle støttede modeller fra én leverandør",
|
||||
"dialog.provider.vercel.note": "Enhetlig tilgang til AI-modeller med smart ruting",
|
||||
|
||||
"dialog.model.select.title": "Velg modell",
|
||||
"dialog.model.search.placeholder": "Søk etter modeller",
|
||||
@@ -148,8 +153,46 @@ export const dict = {
|
||||
"provider.connect.toast.connected.title": "{{provider}} tilkoblet",
|
||||
"provider.connect.toast.connected.description": "{{provider}}-modeller er nå tilgjengelige.",
|
||||
|
||||
"provider.custom.title": "Egendefinert leverandør",
|
||||
"provider.custom.description.prefix": "Konfigurer en OpenAI-kompatibel leverandør. Se ",
|
||||
"provider.custom.description.link": "dokumentasjon for leverandørkonfigurasjon",
|
||||
"provider.custom.description.suffix": ".",
|
||||
"provider.custom.field.providerID.label": "Leverandør-ID",
|
||||
"provider.custom.field.providerID.placeholder": "minleverandør",
|
||||
"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": "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 headers.",
|
||||
"provider.custom.models.label": "Modeller",
|
||||
"provider.custom.models.id.label": "ID",
|
||||
"provider.custom.models.id.placeholder": "modell-id",
|
||||
"provider.custom.models.name.label": "Navn",
|
||||
"provider.custom.models.name.placeholder": "Visningsnavn",
|
||||
"provider.custom.models.remove": "Fjern modell",
|
||||
"provider.custom.models.add": "Legg til modell",
|
||||
"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 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": "Den leverandør-IDen finnes allerede",
|
||||
"provider.custom.error.name.required": "Visningsnavn 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",
|
||||
|
||||
"provider.disconnect.toast.disconnected.title": "{{provider}} frakoblet",
|
||||
"provider.disconnect.toast.disconnected.description": "Modeller fra {{provider}} er ikke lenger tilgjengelige.",
|
||||
|
||||
"model.tag.free": "Gratis",
|
||||
"model.tag.latest": "Nyeste",
|
||||
"model.provider.anthropic": "Anthropic",
|
||||
@@ -169,6 +212,7 @@ export const dict = {
|
||||
|
||||
"common.search.placeholder": "Søk",
|
||||
"common.goBack": "Gå tilbake",
|
||||
"common.goForward": "Navigate forward",
|
||||
"common.loading": "Laster",
|
||||
"common.loading.ellipsis": "...",
|
||||
"common.cancel": "Avbryt",
|
||||
@@ -290,10 +334,10 @@ export const dict = {
|
||||
"dialog.project.edit.icon.recommended": "Anbefalt: 128x128px",
|
||||
"dialog.project.edit.color": "Farge",
|
||||
"dialog.project.edit.color.select": "Velg fargen {{color}}",
|
||||
|
||||
"dialog.project.edit.worktree.startup": "Oppstartsskript for arbeidsområde",
|
||||
"dialog.project.edit.worktree.startup.description": "Kjører etter at et nytt arbeidsområde (worktree) er opprettet.",
|
||||
"dialog.project.edit.worktree.startup.placeholder": "f.eks. bun install",
|
||||
|
||||
"context.breakdown.title": "Kontekstfordeling",
|
||||
"context.breakdown.note": 'Omtrentlig fordeling av input-tokens. "Annet" inkluderer verktøydefinisjoner og overhead.',
|
||||
"context.breakdown.system": "System",
|
||||
@@ -328,30 +372,48 @@ export const dict = {
|
||||
"context.usage.clickToView": "Klikk for å se kontekst",
|
||||
"context.usage.view": "Se kontekstforbruk",
|
||||
|
||||
"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.th": "ไทย",
|
||||
|
||||
"toast.language.title": "Språk",
|
||||
"toast.language.description": "Byttet til {{language}}",
|
||||
|
||||
"toast.theme.title": "Tema byttet",
|
||||
"toast.scheme.title": "Fargevalg",
|
||||
|
||||
"toast.permissions.autoaccept.on.title": "Godtar endringer automatisk",
|
||||
"toast.permissions.autoaccept.on.description": "Redigerings- og skrivetillatelser vil bli godkjent automatisk",
|
||||
"toast.permissions.autoaccept.off.title": "Sluttet å godta endringer automatisk",
|
||||
"toast.permissions.autoaccept.off.description": "Redigerings- og skrivetillatelser vil kreve godkjenning",
|
||||
|
||||
"toast.workspace.enabled.title": "Arbeidsområder aktivert",
|
||||
"toast.workspace.enabled.description": "Flere worktrees vises nå i sidefeltet",
|
||||
"toast.workspace.disabled.title": "Arbeidsområder deaktivert",
|
||||
"toast.workspace.disabled.description": "Kun hoved-worktree vises i sidefeltet",
|
||||
|
||||
"toast.permissions.autoaccept.on.title": "Godtar endringer automatisk",
|
||||
"toast.permissions.autoaccept.on.description": "Redigerings- og skrivetillatelser vil bli godkjent automatisk",
|
||||
"toast.permissions.autoaccept.off.title": "Sluttet å godta endringer automatisk",
|
||||
"toast.permissions.autoaccept.off.description": "Redigerings- og skrivetillatelser vil kreve godkjenning",
|
||||
|
||||
"toast.model.none.title": "Ingen modell valgt",
|
||||
"toast.model.none.description": "Koble til en leverandør for å oppsummere denne sesjonen",
|
||||
|
||||
"toast.file.loadFailed.title": "Kunne ikke laste fil",
|
||||
|
||||
"toast.file.listFailed.title": "Kunne ikke liste filer",
|
||||
|
||||
"toast.context.noLineSelection.title": "Ingen linjevalg",
|
||||
"toast.context.noLineSelection.description": "Velg først et linjeområde i en filfane.",
|
||||
|
||||
"toast.session.share.copyFailed.title": "Kunne ikke kopiere URL til utklippstavlen",
|
||||
"toast.session.share.success.title": "Sesjon delt",
|
||||
"toast.session.share.success.description": "Delings-URL kopiert til utklippstavlen!",
|
||||
@@ -385,6 +447,7 @@ export const dict = {
|
||||
"Rotelement ikke funnet. Glemte du å legge det til i index.html? Eller kanskje id-attributten er feilstavet?",
|
||||
|
||||
"error.globalSync.connectFailed": "Kunne ikke koble til server. Kjører det en server på `{{url}}`?",
|
||||
"directory.error.invalidUrl": "Invalid directory in URL.",
|
||||
|
||||
"error.chain.unknown": "Ukjent feil",
|
||||
"error.chain.causedBy": "Forårsaket av:",
|
||||
@@ -431,9 +494,11 @@ export const dict = {
|
||||
"session.review.loadingChanges": "Laster endringer...",
|
||||
"session.review.empty": "Ingen endringer i denne sesjonen ennå",
|
||||
"session.review.noChanges": "Ingen endringer",
|
||||
|
||||
"session.files.selectToOpen": "Velg en fil å åpne",
|
||||
"session.files.all": "Alle filer",
|
||||
"session.files.binaryContent": "Binær fil (innhold kan ikke vises)",
|
||||
|
||||
"session.messages.renderEarlier": "Vis tidligere meldinger",
|
||||
"session.messages.loadingEarlier": "Laster inn tidligere meldinger...",
|
||||
"session.messages.loadEarlier": "Last inn tidligere meldinger",
|
||||
@@ -449,6 +514,11 @@ export const dict = {
|
||||
|
||||
"session.header.search.placeholder": "Søk i {{project}}",
|
||||
"session.header.searchFiles": "Søk etter filer",
|
||||
"session.header.openIn": "Åpne i",
|
||||
"session.header.open.action": "Åpne {{app}}",
|
||||
"session.header.open.ariaLabel": "Åpne i {{app}}",
|
||||
"session.header.open.menu": "Åpne alternativer",
|
||||
"session.header.open.copyPath": "Kopier bane",
|
||||
|
||||
"status.popover.trigger": "Status",
|
||||
"status.popover.ariaLabel": "Serverkonfigurasjoner",
|
||||
@@ -511,15 +581,20 @@ export const dict = {
|
||||
"sidebar.project.viewAllSessions": "Vis alle sesjoner",
|
||||
|
||||
"app.name.desktop": "OpenCode Desktop",
|
||||
|
||||
"settings.section.desktop": "Skrivebord",
|
||||
"settings.section.server": "Server",
|
||||
"settings.tab.general": "Generelt",
|
||||
"settings.tab.shortcuts": "Snarveier",
|
||||
"settings.desktop.section.wsl": "WSL",
|
||||
"settings.desktop.wsl.title": "WSL-integrasjon",
|
||||
"settings.desktop.wsl.description": "Kjør OpenCode-serveren i WSL på Windows.",
|
||||
|
||||
"settings.general.section.appearance": "Utseende",
|
||||
"settings.general.section.notifications": "Systemvarsler",
|
||||
"settings.general.section.updates": "Oppdateringer",
|
||||
"settings.general.section.sounds": "Lydeffekter",
|
||||
"settings.general.section.display": "Skjerm",
|
||||
|
||||
"settings.general.row.language.title": "Språk",
|
||||
"settings.general.row.language.description": "Endre visningsspråket for OpenCode",
|
||||
@@ -530,6 +605,11 @@ export const dict = {
|
||||
"settings.general.row.font.title": "Skrift",
|
||||
"settings.general.row.font.description": "Tilpass mono-skriften som brukes i kodeblokker",
|
||||
|
||||
"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 innebygd Wayland være mer stabilt.",
|
||||
|
||||
"settings.general.row.releaseNotes.title": "Utgivelsesnotater",
|
||||
"settings.general.row.releaseNotes.description": 'Vis "Hva er nytt"-vinduer etter oppdateringer',
|
||||
|
||||
@@ -541,7 +621,6 @@ export const dict = {
|
||||
"settings.updates.action.checking": "Sjekker...",
|
||||
"settings.updates.toast.latest.title": "Du er oppdatert",
|
||||
"settings.updates.toast.latest.description": "Du bruker den nyeste versjonen av OpenCode.",
|
||||
|
||||
"font.option.ibmPlexMono": "IBM Plex Mono",
|
||||
"font.option.cascadiaCode": "Cascadia Code",
|
||||
"font.option.firaCode": "Fira Code",
|
||||
@@ -599,6 +678,7 @@ export const dict = {
|
||||
"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":
|
||||
"Vis systemvarsel når agenten er ferdig eller trenger oppmerksomhet",
|
||||
@@ -697,6 +777,7 @@ export const dict = {
|
||||
"session.delete.title": "Slett sesjon",
|
||||
"session.delete.confirm": 'Slette sesjonen "{{name}}"?',
|
||||
"session.delete.button": "Slett sesjon",
|
||||
|
||||
"workspace.new": "Nytt arbeidsområde",
|
||||
"workspace.type.local": "lokal",
|
||||
"workspace.type.sandbox": "sandkasse",
|
||||
|
||||
@@ -16,11 +16,9 @@ export const dict = {
|
||||
"command.category.permissions": "Uprawnienia",
|
||||
"command.category.workspace": "Przestrzeń robocza",
|
||||
"command.category.settings": "Ustawienia",
|
||||
|
||||
"theme.scheme.system": "Systemowy",
|
||||
"theme.scheme.light": "Jasny",
|
||||
"theme.scheme.dark": "Ciemny",
|
||||
|
||||
"command.sidebar.toggle": "Przełącz pasek boczny",
|
||||
"command.project.open": "Otwórz projekt",
|
||||
"command.provider.connect": "Połącz dostawcę",
|
||||
@@ -31,17 +29,13 @@ export const dict = {
|
||||
"command.session.previous.unseen": "Poprzednia nieprzeczytana sesja",
|
||||
"command.session.next.unseen": "Następna nieprzeczytana sesja",
|
||||
"command.session.archive": "Zarchiwizuj sesję",
|
||||
|
||||
"command.palette": "Paleta poleceń",
|
||||
|
||||
"command.theme.cycle": "Przełącz motyw",
|
||||
"command.theme.set": "Użyj motywu: {{theme}}",
|
||||
"command.theme.scheme.cycle": "Przełącz schemat kolorów",
|
||||
"command.theme.scheme.set": "Użyj schematu kolorów: {{scheme}}",
|
||||
|
||||
"command.language.cycle": "Przełącz język",
|
||||
"command.language.set": "Użyj języka: {{language}}",
|
||||
|
||||
"command.session.new": "Nowa sesja",
|
||||
"command.file.open": "Otwórz plik",
|
||||
"command.tab.close": "Zamknij kartę",
|
||||
@@ -72,6 +66,7 @@ export const dict = {
|
||||
"command.permissions.autoaccept.enable": "Automatyczne akceptowanie edycji",
|
||||
"command.permissions.autoaccept.disable": "Zatrzymaj automatyczne akceptowanie edycji",
|
||||
"command.workspace.toggle": "Przełącz przestrzenie robocze",
|
||||
"command.workspace.toggle.description": "Włącz lub wyłącz wiele przestrzeni roboczych na pasku bocznym",
|
||||
"command.session.undo": "Cofnij",
|
||||
"command.session.undo.description": "Cofnij ostatnią wiadomość",
|
||||
"command.session.redo": "Ponów",
|
||||
@@ -84,32 +79,30 @@ export const dict = {
|
||||
"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",
|
||||
"palette.empty": "Brak wyników",
|
||||
"palette.group.commands": "Polecenia",
|
||||
"palette.group.files": "Pliki",
|
||||
|
||||
"dialog.provider.search.placeholder": "Szukaj dostawców",
|
||||
"dialog.provider.empty": "Nie znaleziono dostawców",
|
||||
"dialog.provider.group.popular": "Popularne",
|
||||
"dialog.provider.group.other": "Inne",
|
||||
"dialog.provider.tag.recommended": "Zalecane",
|
||||
"dialog.provider.anthropic.note": "Połącz z Claude Pro/Max lub kluczem API",
|
||||
"dialog.provider.openai.note": "Połącz z ChatGPT Pro/Plus lub kluczem API",
|
||||
"dialog.provider.copilot.note": "Połącz z Copilot lub kluczem API",
|
||||
|
||||
"dialog.provider.opencode.note": "Wyselekcjonowane modele, w tym Claude, GPT, Gemini i inne",
|
||||
"dialog.provider.anthropic.note": "Bezpośredni dostęp do modeli Claude, w tym Pro i Max",
|
||||
"dialog.provider.copilot.note": "Modele Claude do pomocy w kodowaniu",
|
||||
"dialog.provider.openai.note": "Modele GPT do szybkich i wszechstronnych zadań AI",
|
||||
"dialog.provider.google.note": "Modele Gemini do szybkich i ustrukturyzowanych odpowiedzi",
|
||||
"dialog.provider.openrouter.note": "Dostęp do wszystkich obsługiwanych modeli od jednego dostawcy",
|
||||
"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": "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.unpaid.freeModels.title": "Darmowe modele dostarczane przez OpenCode",
|
||||
"dialog.model.unpaid.addMore.title": "Dodaj więcej modeli od popularnych dostawców",
|
||||
|
||||
"dialog.provider.viewAll": "Zobacz więcej dostawców",
|
||||
|
||||
"provider.connect.title": "Połącz {{provider}}",
|
||||
"provider.connect.title.anthropicProMax": "Zaloguj się z Claude Pro/Max",
|
||||
"provider.connect.selectMethod": "Wybierz metodę logowania dla {{provider}}.",
|
||||
@@ -144,7 +137,43 @@ export const dict = {
|
||||
"provider.connect.oauth.auto.confirmationCode": "Kod potwierdzający",
|
||||
"provider.connect.toast.connected.title": "Połączono {{provider}}",
|
||||
"provider.connect.toast.connected.description": "Modele {{provider}} są teraz dostępne do użycia.",
|
||||
|
||||
"provider.custom.title": "Dostawca niestandardowy",
|
||||
"provider.custom.description.prefix": "Skonfiguruj dostawcę zgodnego z OpenAI. Zobacz ",
|
||||
"provider.custom.description.link": "dokumentację konfiguracji dostawcy",
|
||||
"provider.custom.description.suffix": ".",
|
||||
"provider.custom.field.providerID.label": "ID dostawcy",
|
||||
"provider.custom.field.providerID.placeholder": "mojdostawca",
|
||||
"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 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",
|
||||
"provider.custom.field.apiKey.description":
|
||||
"Opcjonalne. Pozostaw puste, jeśli zarządzasz autoryzacją przez nagłówki.",
|
||||
"provider.custom.models.label": "Modele",
|
||||
"provider.custom.models.id.label": "ID",
|
||||
"provider.custom.models.id.placeholder": "model-id",
|
||||
"provider.custom.models.name.label": "Nazwa",
|
||||
"provider.custom.models.name.placeholder": "Nazwa wyświetlana",
|
||||
"provider.custom.models.remove": "Usuń model",
|
||||
"provider.custom.models.add": "Dodaj model",
|
||||
"provider.custom.headers.label": "Nagłówki (opcjonalne)",
|
||||
"provider.custom.headers.key.label": "Nagłówek",
|
||||
"provider.custom.headers.key.placeholder": "Nazwa-Naglowka",
|
||||
"provider.custom.headers.value.label": "Wartość",
|
||||
"provider.custom.headers.value.placeholder": "wartość",
|
||||
"provider.custom.headers.remove": "Usuń nagłówek",
|
||||
"provider.custom.headers.add": "Dodaj nagłówek",
|
||||
"provider.custom.error.providerID.required": "ID dostawcy jest wymagane",
|
||||
"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 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",
|
||||
"provider.disconnect.toast.disconnected.title": "Rozłączono {{provider}}",
|
||||
"provider.disconnect.toast.disconnected.description": "Modele {{provider}} nie są już dostępne.",
|
||||
"model.tag.free": "Darmowy",
|
||||
@@ -163,9 +192,9 @@ export const dict = {
|
||||
"model.tooltip.reasoning.allowed": "Obsługuje wnioskowanie",
|
||||
"model.tooltip.reasoning.none": "Brak wnioskowania",
|
||||
"model.tooltip.context": "Limit kontekstu {{limit}}",
|
||||
|
||||
"common.search.placeholder": "Szukaj",
|
||||
"common.goBack": "Wstecz",
|
||||
"common.goForward": "Dalej",
|
||||
"common.loading": "Ładowanie",
|
||||
"common.loading.ellipsis": "...",
|
||||
"common.cancel": "Anuluj",
|
||||
@@ -176,14 +205,12 @@ export const dict = {
|
||||
"common.saving": "Zapisywanie...",
|
||||
"common.default": "Domyślny",
|
||||
"common.attachment": "załącznik",
|
||||
|
||||
"prompt.placeholder.shell": "Wpisz polecenie terminala...",
|
||||
"prompt.placeholder.normal": 'Zapytaj o cokolwiek... "{{example}}"',
|
||||
"prompt.placeholder.summarizeComments": "Podsumuj komentarze…",
|
||||
"prompt.placeholder.summarizeComment": "Podsumuj komentarz…",
|
||||
"prompt.mode.shell": "Terminal",
|
||||
"prompt.mode.shell.exit": "esc aby wyjść",
|
||||
|
||||
"prompt.example.1": "Napraw TODO w bazie kodu",
|
||||
"prompt.example.2": "Jaki jest stos technologiczny tego projektu?",
|
||||
"prompt.example.3": "Napraw zepsute testy",
|
||||
@@ -209,7 +236,6 @@ export const dict = {
|
||||
"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ść obrazy lub pliki PDF tutaj",
|
||||
@@ -225,7 +251,6 @@ export const dict = {
|
||||
"prompt.attachment.remove": "Usuń załącznik",
|
||||
"prompt.action.send": "Wyślij",
|
||||
"prompt.action.stop": "Zatrzymaj",
|
||||
|
||||
"prompt.toast.pasteUnsupported.title": "Nieobsługiwane wklejanie",
|
||||
"prompt.toast.pasteUnsupported.description": "Tylko obrazy lub pliki PDF mogą być tutaj wklejane.",
|
||||
"prompt.toast.modelAgentRequired.title": "Wybierz agenta i model",
|
||||
@@ -236,24 +261,18 @@ export const dict = {
|
||||
"prompt.toast.commandSendFailed.title": "Nie udało się wysłać polecenia",
|
||||
"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": "{{enabled}} z {{total}} włączone",
|
||||
"dialog.mcp.empty": "Brak skonfigurowanych MCP",
|
||||
|
||||
"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": "niepowodzenie",
|
||||
"mcp.status.needs_auth": "wymaga autoryzacji",
|
||||
"mcp.status.disabled": "wyłączone",
|
||||
|
||||
"dialog.fork.empty": "Brak wiadomości do rozwidlenia",
|
||||
|
||||
"dialog.directory.search.placeholder": "Szukaj folderów",
|
||||
"dialog.directory.empty": "Nie znaleziono folderów",
|
||||
|
||||
"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",
|
||||
@@ -271,14 +290,12 @@ export const dict = {
|
||||
"dialog.server.default.set": "Ustaw bieżący serwer jako domyślny",
|
||||
"dialog.server.default.clear": "Wyczyść",
|
||||
"dialog.server.action.remove": "Usuń serwer",
|
||||
|
||||
"dialog.server.menu.edit": "Edytuj",
|
||||
"dialog.server.menu.default": "Ustaw jako domyślny",
|
||||
"dialog.server.menu.defaultRemove": "Usuń domyślny",
|
||||
"dialog.server.menu.delete": "Usuń",
|
||||
"dialog.server.current": "Obecny serwer",
|
||||
"dialog.server.status.default": "Domyślny",
|
||||
|
||||
"dialog.project.edit.title": "Edytuj projekt",
|
||||
"dialog.project.edit.name": "Nazwa",
|
||||
"dialog.project.edit.icon": "Ikona",
|
||||
@@ -287,10 +304,8 @@ export const dict = {
|
||||
"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",
|
||||
"dialog.project.edit.worktree.startup.description":
|
||||
"Uruchamiany po utworzeniu nowej przestrzeni roboczej (drzewa roboczego).",
|
||||
"dialog.project.edit.worktree.startup.description": "Runs after creating a new workspace (worktree).",
|
||||
"dialog.project.edit.worktree.startup.placeholder": "np. bun install",
|
||||
"context.breakdown.title": "Podział kontekstu",
|
||||
"context.breakdown.note": 'Przybliżony podział tokenów wejściowych. "Inne" obejmuje definicje narzędzi i narzut.',
|
||||
@@ -299,10 +314,8 @@ export const dict = {
|
||||
"context.breakdown.assistant": "Asystent",
|
||||
"context.breakdown.tool": "Wywołania narzędzi",
|
||||
"context.breakdown.other": "Inne",
|
||||
|
||||
"context.systemPrompt.title": "Prompt systemowy",
|
||||
"context.rawMessages.title": "Surowe wiadomości",
|
||||
|
||||
"context.stats.session": "Sesja",
|
||||
"context.stats.messages": "Wiadomości",
|
||||
"context.stats.provider": "Dostawca",
|
||||
@@ -319,34 +332,42 @@ export const dict = {
|
||||
"context.stats.totalCost": "Całkowity koszt",
|
||||
"context.stats.sessionCreated": "Utworzono sesję",
|
||||
"context.stats.lastActivity": "Ostatnia aktywność",
|
||||
|
||||
"context.usage.tokens": "Tokeny",
|
||||
"context.usage.usage": "Użycie",
|
||||
"context.usage.cost": "Koszt",
|
||||
"context.usage.clickToView": "Kliknij, aby zobaczyć kontekst",
|
||||
"context.usage.view": "Pokaż użycie kontekstu",
|
||||
|
||||
"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.th": "ไทย",
|
||||
"toast.language.title": "Język",
|
||||
"toast.language.description": "Przełączono na {{language}}",
|
||||
|
||||
"toast.theme.title": "Przełączono motyw",
|
||||
"toast.scheme.title": "Schemat kolorów",
|
||||
|
||||
"toast.permissions.autoaccept.on.title": "Automatyczne akceptowanie edycji",
|
||||
"toast.permissions.autoaccept.on.description": "Uprawnienia do edycji i zapisu będą automatycznie zatwierdzane",
|
||||
"toast.permissions.autoaccept.off.title": "Zatrzymano automatyczne akceptowanie edycji",
|
||||
"toast.permissions.autoaccept.off.description": "Uprawnienia do edycji i zapisu będą wymagały zatwierdzenia",
|
||||
|
||||
"toast.workspace.enabled.title": "Przestrzenie robocze włączone",
|
||||
"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łówny worktree jest wyświetlany na pasku bocznym",
|
||||
|
||||
"toast.permissions.autoaccept.on.title": "Automatyczne akceptowanie edycji",
|
||||
"toast.permissions.autoaccept.on.description": "Uprawnienia do edycji i zapisu będą automatycznie zatwierdzane",
|
||||
"toast.permissions.autoaccept.off.title": "Zatrzymano automatyczne akceptowanie edycji",
|
||||
"toast.permissions.autoaccept.off.description": "Uprawnienia do edycji i zapisu będą wymagały zatwierdzenia",
|
||||
"toast.model.none.title": "Nie wybrano modelu",
|
||||
"toast.model.none.description": "Połącz dostawcę, aby podsumować tę sesję",
|
||||
|
||||
"toast.file.loadFailed.title": "Nie udało się załadować pliku",
|
||||
|
||||
"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.",
|
||||
@@ -355,19 +376,15 @@ export const dict = {
|
||||
"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",
|
||||
"toast.session.unshare.success.description": "Udostępnianie sesji zostało pomyślnie zatrzymane!",
|
||||
"toast.session.unshare.failed.title": "Nie udało się zatrzymać udostępniania sesji",
|
||||
"toast.session.unshare.failed.description": "Wystąpił błąd podczas zatrzymywania udostępniania sesji",
|
||||
|
||||
"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 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.details.label": "Szczegóły błędu",
|
||||
@@ -378,12 +395,10 @@ export const dict = {
|
||||
"error.page.report.prefix": "Proszę zgłosić ten błąd do zespołu OpenCode",
|
||||
"error.page.report.discord": "na Discordzie",
|
||||
"error.page.version": "Wersja: {{version}}",
|
||||
|
||||
"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.globalSync.connectFailed": "Nie można połączyć się z serwerem. Czy serwer działa pod adresem `{{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",
|
||||
@@ -393,8 +408,7 @@ export const dict = {
|
||||
"error.chain.didYouMean": "Czy miałeś na myśli: {{suggestions}}",
|
||||
"error.chain.modelNotFound": "Model nie znaleziony: {{provider}}/{{model}}",
|
||||
"error.chain.checkConfig": "Sprawdź swoją konfigurację (opencode.json) nazwy dostawców/modeli",
|
||||
"error.chain.mcpFailed":
|
||||
'Serwer MCP "{{name}}" nie powiódł się. Uwaga, OpenCode nie obsługuje jeszcze uwierzytelniania MCP.',
|
||||
"error.chain.mcpFailed": 'MCP server "{{name}}" failed. Note, OpenCode does not support MCP authentication yet.',
|
||||
"error.chain.providerAuthFailed": "Uwierzytelnianie dostawcy nie powiodło się ({{provider}}): {{message}}",
|
||||
"error.chain.providerInitFailed":
|
||||
'Nie udało się zainicjować dostawcy "{{provider}}". Sprawdź poświadczenia i konfigurację.',
|
||||
@@ -405,21 +419,17 @@ export const dict = {
|
||||
"error.chain.configFrontmatterError": "Nie udało się przetworzyć frontmatter w {{path}}:\n{{message}}",
|
||||
"error.chain.configInvalid": "Plik konfiguracyjny w {{path}} jest nieprawidłowy",
|
||||
"error.chain.configInvalidWithMessage": "Plik konfiguracyjny w {{path}} jest nieprawidłowy: {{message}}",
|
||||
|
||||
"notification.permission.title": "Wymagane uprawnienie",
|
||||
"notification.permission.description": "{{sessionTitle}} w {{projectName}} potrzebuje uprawnienia",
|
||||
"notification.question.title": "Pytanie",
|
||||
"notification.question.description": "{{sessionTitle}} w {{projectName}} ma pytanie",
|
||||
"notification.action.goToSession": "Przejdź do sesji",
|
||||
|
||||
"notification.session.responseReady.title": "Odpowiedź gotowa",
|
||||
"notification.session.error.title": "Błąd sesji",
|
||||
"notification.session.error.fallbackDescription": "Wystąpił błąd",
|
||||
|
||||
"home.recentProjects": "Ostatnie projekty",
|
||||
"home.empty.title": "Brak ostatnich projektów",
|
||||
"home.empty.description": "Zacznij od otwarcia lokalnego projektu",
|
||||
|
||||
"session.tab.session": "Sesja",
|
||||
"session.tab.review": "Przegląd",
|
||||
"session.tab.context": "Kontekst",
|
||||
@@ -438,17 +448,18 @@ export const dict = {
|
||||
"session.messages.loadEarlier": "Załaduj wcześniejsze wiadomości",
|
||||
"session.messages.loading": "Ładowanie wiadomości...",
|
||||
"session.messages.jumpToLatest": "Przejdź do najnowszych",
|
||||
|
||||
"session.context.addToContext": "Dodaj {{selection}} do kontekstu",
|
||||
|
||||
"session.new.worktree.main": "Główna gałąź",
|
||||
"session.new.worktree.mainWithBranch": "Główna gałąź ({{branch}})",
|
||||
"session.new.worktree.create": "Utwórz nowe drzewo robocze",
|
||||
"session.new.lastModified": "Ostatnio zmodyfikowano",
|
||||
|
||||
"session.header.search.placeholder": "Szukaj {{project}}",
|
||||
"session.header.searchFiles": "Szukaj plików",
|
||||
|
||||
"session.header.openIn": "Otwórz w",
|
||||
"session.header.open.action": "Otwórz {{app}}",
|
||||
"session.header.open.ariaLabel": "Otwórz w {{app}}",
|
||||
"session.header.open.menu": "Opcje otwierania",
|
||||
"session.header.open.copyPath": "Kopiuj ścieżkę",
|
||||
"status.popover.trigger": "Status",
|
||||
"status.popover.ariaLabel": "Konfiguracje serwerów",
|
||||
"status.popover.tab.servers": "Serwery",
|
||||
@@ -456,7 +467,6 @@ export const dict = {
|
||||
"status.popover.tab.lsp": "LSP",
|
||||
"status.popover.tab.plugins": "Wtyczki",
|
||||
"status.popover.action.manageServers": "Zarządzaj serwerami",
|
||||
|
||||
"session.share.popover.title": "Opublikuj w sieci",
|
||||
"session.share.popover.description.shared":
|
||||
"Ta sesja jest publiczna w sieci. Jest dostępna dla każdego, kto posiada link.",
|
||||
@@ -470,10 +480,8 @@ export const dict = {
|
||||
"session.share.action.view": "Widok",
|
||||
"session.share.copy.copied": "Skopiowano",
|
||||
"session.share.copy.copyLink": "Kopiuj link",
|
||||
|
||||
"lsp.tooltip.none": "Brak serwerów LSP",
|
||||
"lsp.label.connected": "{{count}} LSP",
|
||||
|
||||
"prompt.loading": "Ładowanie promptu...",
|
||||
"terminal.loading": "Ładowanie terminala...",
|
||||
"terminal.title": "Terminal",
|
||||
@@ -482,7 +490,6 @@ export const dict = {
|
||||
"terminal.connectionLost.title": "Utracono połączenie",
|
||||
"terminal.connectionLost.description":
|
||||
"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ę",
|
||||
@@ -496,7 +503,6 @@ export const dict = {
|
||||
"common.edit": "Edytuj",
|
||||
"common.loadMore": "Załaduj więcej",
|
||||
"common.key.esc": "ESC",
|
||||
|
||||
"sidebar.menu.toggle": "Przełącz menu",
|
||||
"sidebar.nav.projectsAndSessions": "Projekty i sesje",
|
||||
"sidebar.settings": "Ustawienia",
|
||||
@@ -508,18 +514,19 @@ export const dict = {
|
||||
"sidebar.gettingStarted.line2": "Połącz dowolnego dostawcę, aby używać modeli, w tym Claude, GPT, Gemini itp.",
|
||||
"sidebar.project.recentSessions": "Ostatnie sesje",
|
||||
"sidebar.project.viewAllSessions": "Zobacz wszystkie sesje",
|
||||
|
||||
"app.name.desktop": "OpenCode Desktop",
|
||||
"settings.section.desktop": "Pulpit",
|
||||
"settings.section.server": "Serwer",
|
||||
"settings.tab.general": "Ogólne",
|
||||
"settings.tab.shortcuts": "Skróty",
|
||||
|
||||
"settings.desktop.section.wsl": "WSL",
|
||||
"settings.desktop.wsl.title": "WSL integration",
|
||||
"settings.desktop.wsl.description": "Run the OpenCode server inside WSL on Windows.",
|
||||
"settings.general.section.appearance": "Wygląd",
|
||||
"settings.general.section.notifications": "Powiadomienia systemowe",
|
||||
"settings.general.section.updates": "Aktualizacje",
|
||||
"settings.general.section.sounds": "Efekty dźwiękowe",
|
||||
|
||||
"settings.general.section.display": "Ekran",
|
||||
"settings.general.row.language.title": "Język",
|
||||
"settings.general.row.language.description": "Zmień język wyświetlania dla OpenCode",
|
||||
"settings.general.row.appearance.title": "Wygląd",
|
||||
@@ -528,10 +535,12 @@ export const dict = {
|
||||
"settings.general.row.theme.description": "Dostosuj motyw OpenCode.",
|
||||
"settings.general.row.font.title": "Czcionka",
|
||||
"settings.general.row.font.description": "Dostosuj czcionkę mono używaną w blokach kodu",
|
||||
|
||||
"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":
|
||||
"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.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",
|
||||
@@ -597,7 +606,6 @@ export const dict = {
|
||||
"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":
|
||||
"Pokaż powiadomienie systemowe, gdy agent zakończy pracę lub wymaga uwagi",
|
||||
@@ -606,14 +614,12 @@ export const dict = {
|
||||
"Pokaż powiadomienie systemowe, gdy wymagane jest uprawnienie",
|
||||
"settings.general.notifications.errors.title": "Błędy",
|
||||
"settings.general.notifications.errors.description": "Pokaż powiadomienie systemowe, gdy wystąpi błąd",
|
||||
|
||||
"settings.general.sounds.agent.title": "Agent",
|
||||
"settings.general.sounds.agent.description": "Odtwórz dźwięk, gdy agent zakończy pracę lub wymaga uwagi",
|
||||
"settings.general.sounds.permissions.title": "Uprawnienia",
|
||||
"settings.general.sounds.permissions.description": "Odtwórz dźwięk, gdy wymagane jest uprawnienie",
|
||||
"settings.general.sounds.errors.title": "Błędy",
|
||||
"settings.general.sounds.errors.description": "Odtwórz dźwięk, gdy wystąpi błąd",
|
||||
|
||||
"settings.shortcuts.title": "Skróty klawiszowe",
|
||||
"settings.shortcuts.reset.button": "Przywróć domyślne",
|
||||
"settings.shortcuts.reset.toast.title": "Zresetowano skróty",
|
||||
@@ -624,14 +630,12 @@ export const dict = {
|
||||
"settings.shortcuts.pressKeys": "Naciśnij klawisze",
|
||||
"settings.shortcuts.search.placeholder": "Szukaj skrótów",
|
||||
"settings.shortcuts.search.empty": "Nie znaleziono skrótów",
|
||||
|
||||
"settings.shortcuts.group.general": "Ogólne",
|
||||
"settings.shortcuts.group.session": "Sesja",
|
||||
"settings.shortcuts.group.navigation": "Nawigacja",
|
||||
"settings.shortcuts.group.modelAndAgent": "Model i agent",
|
||||
"settings.shortcuts.group.terminal": "Terminal",
|
||||
"settings.shortcuts.group.prompt": "Prompt",
|
||||
|
||||
"settings.providers.title": "Dostawcy",
|
||||
"settings.providers.description": "Ustawienia dostawców będą tutaj konfigurowalne.",
|
||||
"settings.providers.section.connected": "Połączeni dostawcy",
|
||||
@@ -649,16 +653,13 @@ export const dict = {
|
||||
"settings.commands.description": "Ustawienia poleceń będą tutaj konfigurowalne.",
|
||||
"settings.mcp.title": "MCP",
|
||||
"settings.mcp.description": "Ustawienia MCP będą tutaj konfigurowalne.",
|
||||
|
||||
"settings.permissions.title": "Uprawnienia",
|
||||
"settings.permissions.description": "Kontroluj, jakich narzędzi serwer może używać domyślnie.",
|
||||
"settings.permissions.section.tools": "Narzędzia",
|
||||
"settings.permissions.toast.updateFailed.title": "Nie udało się zaktualizować uprawnień",
|
||||
|
||||
"settings.permissions.action.allow": "Zezwól",
|
||||
"settings.permissions.action.ask": "Pytaj",
|
||||
"settings.permissions.action.deny": "Odmów",
|
||||
|
||||
"settings.permissions.tool.read.title": "Odczyt",
|
||||
"settings.permissions.tool.read.description": "Odczyt pliku (pasuje do ścieżki pliku)",
|
||||
"settings.permissions.tool.edit.title": "Edycja",
|
||||
@@ -691,12 +692,10 @@ export const dict = {
|
||||
"settings.permissions.tool.external_directory.description": "Dostęp do plików poza katalogiem projektu",
|
||||
"settings.permissions.tool.doom_loop.title": "Zapętlenie",
|
||||
"settings.permissions.tool.doom_loop.description": "Wykrywanie powtarzających się wywołań narzędzi (doom loop)",
|
||||
|
||||
"session.delete.failed.title": "Nie udało się usunąć sesji",
|
||||
"session.delete.title": "Usuń sesję",
|
||||
"session.delete.confirm": 'Usunąć sesję "{{name}}"?',
|
||||
"session.delete.button": "Usuń sesję",
|
||||
|
||||
"workspace.new": "Nowa przestrzeń robocza",
|
||||
"workspace.type.local": "lokalna",
|
||||
"workspace.type.sandbox": "piaskownica",
|
||||
|
||||
@@ -72,6 +72,7 @@ export const dict = {
|
||||
"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": "Повторить",
|
||||
@@ -95,9 +96,13 @@ export const dict = {
|
||||
"dialog.provider.group.popular": "Популярные",
|
||||
"dialog.provider.group.other": "Другие",
|
||||
"dialog.provider.tag.recommended": "Рекомендуемые",
|
||||
"dialog.provider.anthropic.note": "Подключитесь с помощью Claude Pro/Max или API ключа",
|
||||
"dialog.provider.openai.note": "Подключитесь с помощью ChatGPT Pro/Plus или API ключа",
|
||||
"dialog.provider.copilot.note": "Подключитесь с помощью Copilot или API ключа",
|
||||
"dialog.provider.opencode.note": "Отобранные модели, включая Claude, GPT, Gemini и другие",
|
||||
"dialog.provider.anthropic.note": "Прямой доступ к моделям Claude, включая Pro и Max",
|
||||
"dialog.provider.copilot.note": "Модели Claude для помощи в кодировании",
|
||||
"dialog.provider.openai.note": "Модели GPT для быстрых и мощных задач общего ИИ",
|
||||
"dialog.provider.google.note": "Модели Gemini для быстрых и структурированных ответов",
|
||||
"dialog.provider.openrouter.note": "Доступ ко всем поддерживаемым моделям через одного провайдера",
|
||||
"dialog.provider.vercel.note": "Единый доступ к ИИ-моделям с умной маршрутизацией",
|
||||
|
||||
"dialog.model.select.title": "Выбрать модель",
|
||||
"dialog.model.search.placeholder": "Поиск моделей",
|
||||
@@ -145,6 +150,44 @@ 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.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": "значение",
|
||||
"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": "Бесплатно",
|
||||
@@ -166,6 +209,7 @@ export const dict = {
|
||||
|
||||
"common.search.placeholder": "Поиск",
|
||||
"common.goBack": "Назад",
|
||||
"common.goForward": "Вперёд",
|
||||
"common.loading": "Загрузка",
|
||||
"common.loading.ellipsis": "...",
|
||||
"common.cancel": "Отмена",
|
||||
@@ -327,6 +371,23 @@ export const dict = {
|
||||
"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.th": "ไทย",
|
||||
|
||||
"toast.language.title": "Язык",
|
||||
"toast.language.description": "Переключено на {{language}}",
|
||||
|
||||
@@ -384,6 +445,7 @@ export const dict = {
|
||||
"Корневой элемент не найден. Вы забыли добавить его в index.html? Или, может быть, атрибут id был написан неправильно?",
|
||||
|
||||
"error.globalSync.connectFailed": "Не удалось подключиться к серверу. Запущен ли сервер по адресу `{{url}}`?",
|
||||
"directory.error.invalidUrl": "Недопустимая директория в URL.",
|
||||
|
||||
"error.chain.unknown": "Неизвестная ошибка",
|
||||
"error.chain.causedBy": "Причина:",
|
||||
@@ -450,6 +512,11 @@ export const dict = {
|
||||
|
||||
"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": "Копировать путь",
|
||||
|
||||
"status.popover.trigger": "Статус",
|
||||
"status.popover.ariaLabel": "Настройки серверов",
|
||||
@@ -517,11 +584,15 @@ export const dict = {
|
||||
"settings.section.server": "Сервер",
|
||||
"settings.tab.general": "Основные",
|
||||
"settings.tab.shortcuts": "Горячие клавиши",
|
||||
"settings.desktop.section.wsl": "WSL",
|
||||
"settings.desktop.wsl.title": "Интеграция с WSL",
|
||||
"settings.desktop.wsl.description": "Запускать сервер OpenCode внутри WSL на Windows.",
|
||||
|
||||
"settings.general.section.appearance": "Внешний вид",
|
||||
"settings.general.section.notifications": "Системные уведомления",
|
||||
"settings.general.section.updates": "Обновления",
|
||||
"settings.general.section.sounds": "Звуковые эффекты",
|
||||
"settings.general.section.display": "Дисплей",
|
||||
|
||||
"settings.general.row.language.title": "Язык",
|
||||
"settings.general.row.language.description": "Изменить язык отображения OpenCode",
|
||||
@@ -532,6 +603,11 @@ export const dict = {
|
||||
"settings.general.row.font.title": "Шрифт",
|
||||
"settings.general.row.font.description": "Настройте моноширинный шрифт для блоков кода",
|
||||
|
||||
"settings.general.row.wayland.title": "Использовать нативный Wayland",
|
||||
"settings.general.row.wayland.description": "Отключить X11 fallback на Wayland. Требуется перезапуск.",
|
||||
"settings.general.row.wayland.tooltip":
|
||||
"На Linux с мониторами разной частоты обновления нативный Wayland может быть стабильнее.",
|
||||
|
||||
"settings.general.row.releaseNotes.title": "Примечания к выпуску",
|
||||
"settings.general.row.releaseNotes.description": 'Показывать всплывающие окна "Что нового" после обновлений',
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@ export const dict = {
|
||||
"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": "ทำซ้ำ",
|
||||
@@ -149,6 +150,43 @@ 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.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": "My AI Provider",
|
||||
"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": "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": "รหัสผู้ให้บริการนั้นมีอยู่แล้ว",
|
||||
"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}} ไม่พร้อมใช้งานอีกต่อไป",
|
||||
|
||||
@@ -163,7 +201,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": "ไม่มีการใช้เหตุผล",
|
||||
@@ -171,6 +209,7 @@ export const dict = {
|
||||
|
||||
"common.search.placeholder": "ค้นหา",
|
||||
"common.goBack": "ย้อนกลับ",
|
||||
"common.goForward": "นำทางไปข้างหน้า",
|
||||
"common.loading": "กำลังโหลด",
|
||||
"common.loading.ellipsis": "...",
|
||||
"common.cancel": "ยกเลิก",
|
||||
@@ -220,8 +259,8 @@ export const dict = {
|
||||
"prompt.dropzone.label": "วางรูปภาพหรือ PDF ที่นี่",
|
||||
"prompt.dropzone.file.label": "วางเพื่อ @กล่าวถึงไฟล์",
|
||||
"prompt.slash.badge.custom": "กำหนดเอง",
|
||||
"prompt.slash.badge.skill": "skill",
|
||||
"prompt.slash.badge.mcp": "mcp",
|
||||
"prompt.slash.badge.skill": "ทักษะ",
|
||||
"prompt.slash.badge.mcp": "MCP",
|
||||
"prompt.context.active": "ใช้งานอยู่",
|
||||
"prompt.context.includeActiveFile": "รวมไฟล์ที่ใช้งานอยู่",
|
||||
"prompt.context.removeActiveFile": "เอาไฟล์ที่ใช้งานอยู่ออกจากบริบท",
|
||||
@@ -330,22 +369,39 @@ export const dict = {
|
||||
"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.th": "ไทย",
|
||||
|
||||
"toast.language.title": "ภาษา",
|
||||
"toast.language.description": "สลับไปที่ {{language}}",
|
||||
|
||||
"toast.theme.title": "สลับธีมแล้ว",
|
||||
"toast.scheme.title": "โทนสี",
|
||||
|
||||
"toast.permissions.autoaccept.on.title": "กำลังยอมรับการแก้ไขโดยอัตโนมัติ",
|
||||
"toast.permissions.autoaccept.on.description": "สิทธิ์การแก้ไขและจะได้รับเขียนการอนุมัติโดยอัตโนมัติ",
|
||||
"toast.permissions.autoaccept.off.title": "หยุดยอมรับการแก้ไขโดยอัตโนมัติ",
|
||||
"toast.permissions.autoaccept.off.description": "สิทธิ์การแก้ไขและเขียนจะต้องได้รับการอนุมัติ",
|
||||
|
||||
"toast.workspace.enabled.title": "เปิดใช้งานพื้นที่ทำงานแล้ว",
|
||||
"toast.workspace.enabled.description": "ตอนนี้จะแสดง worktree หลายรายการในแถบด้านข้าง",
|
||||
"toast.workspace.disabled.title": "ปิดใช้งานพื้นที่ทำงานแล้ว",
|
||||
"toast.workspace.disabled.description": "จะแสดงเฉพาะ worktree หลักในแถบด้านข้าง",
|
||||
|
||||
"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": "เชื่อมต่อผู้ให้บริการเพื่อสรุปเซสชันนี้",
|
||||
|
||||
@@ -387,6 +443,7 @@ export const dict = {
|
||||
"error.dev.rootNotFound": "ไม่พบองค์ประกอบรูท คุณลืมเพิ่มใน index.html หรือบางทีแอตทริบิวต์ id อาจสะกดผิด?",
|
||||
|
||||
"error.globalSync.connectFailed": "ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ มีเซิร์ฟเวอร์ทำงานอยู่ที่ `{{url}}` หรือไม่?",
|
||||
"directory.error.invalidUrl": "ไดเรกทอรีใน URL ไม่ถูกต้อง",
|
||||
|
||||
"error.chain.unknown": "ข้อผิดพลาดที่ไม่รู้จัก",
|
||||
"error.chain.causedBy": "สาเหตุ:",
|
||||
@@ -452,6 +509,11 @@ export const dict = {
|
||||
|
||||
"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": "คัดลอกเส้นทาง",
|
||||
|
||||
"status.popover.trigger": "สถานะ",
|
||||
"status.popover.ariaLabel": "การกำหนดค่าเซิร์ฟเวอร์",
|
||||
@@ -516,11 +578,15 @@ export const dict = {
|
||||
"settings.section.server": "เซิร์ฟเวอร์",
|
||||
"settings.tab.general": "ทั่วไป",
|
||||
"settings.tab.shortcuts": "ทางลัด",
|
||||
"settings.desktop.section.wsl": "WSL",
|
||||
"settings.desktop.wsl.title": "การรวม WSL",
|
||||
"settings.desktop.wsl.description": "เรียกใช้เซิร์ฟเวอร์ OpenCode ภายใน WSL บน Windows",
|
||||
|
||||
"settings.general.section.appearance": "รูปลักษณ์",
|
||||
"settings.general.section.notifications": "การแจ้งเตือนระบบ",
|
||||
"settings.general.section.updates": "การอัปเดต",
|
||||
"settings.general.section.sounds": "เสียงเอฟเฟกต์",
|
||||
"settings.general.section.display": "การแสดงผล",
|
||||
|
||||
"settings.general.row.language.title": "ภาษา",
|
||||
"settings.general.row.language.description": "เปลี่ยนภาษาที่แสดงสำหรับ OpenCode",
|
||||
@@ -531,8 +597,22 @@ export const dict = {
|
||||
"settings.general.row.font.title": "ฟอนต์",
|
||||
"settings.general.row.font.description": "ปรับแต่งฟอนต์โมโนที่ใช้ในบล็อกโค้ด",
|
||||
|
||||
"settings.general.row.wayland.title": "ใช้ Wayland แบบเนทีฟ",
|
||||
"settings.general.row.wayland.description": "ปิดใช้งาน X11 fallback บน Wayland ต้องรีสตาร์ท",
|
||||
"settings.general.row.wayland.tooltip": "บน Linux ที่มีจอภาพรีเฟรชเรตแบบผสม Wayland แบบเนทีฟอาจเสถียรกว่า",
|
||||
|
||||
"settings.general.row.releaseNotes.title": "บันทึกการอัปเดต",
|
||||
"settings.general.row.releaseNotes.description": "แสดงป๊อปอัพ What's New หลังจากอัปเดต",
|
||||
|
||||
"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.toast.latest.title": "คุณเป็นเวอร์ชันล่าสุดแล้ว",
|
||||
"settings.updates.toast.latest.description": "คุณกำลังใช้งาน OpenCode เวอร์ชันล่าสุด",
|
||||
|
||||
"font.option.ibmPlexMono": "IBM Plex Mono",
|
||||
"font.option.cascadiaCode": "Cascadia Code",
|
||||
"font.option.firaCode": "Fira Code",
|
||||
|
||||
@@ -19,17 +19,22 @@ export const dict = {
|
||||
"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.provider.connect": "连接提供商",
|
||||
|
||||
"command.server.switch": "切换服务器",
|
||||
|
||||
"command.settings.open": "打开设置",
|
||||
|
||||
"command.session.previous": "上一个会话",
|
||||
"command.session.next": "下一个会话",
|
||||
"command.session.previous.unseen": "上一个未读会话",
|
||||
@@ -47,35 +52,53 @@ export const dict = {
|
||||
"command.language.set": "使用语言:{{language}}",
|
||||
|
||||
"command.session.new": "新建会话",
|
||||
|
||||
"command.file.open": "打开文件",
|
||||
|
||||
"command.tab.close": "关闭标签页",
|
||||
|
||||
"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.permissions.autoaccept.enable": "自动接受编辑",
|
||||
"command.permissions.autoaccept.disable": "停止自动接受编辑",
|
||||
|
||||
"command.workspace.toggle": "切换工作区",
|
||||
"command.workspace.toggle.description": "在侧边栏启用或禁用多个工作区",
|
||||
|
||||
"command.session.undo": "撤销",
|
||||
"command.session.undo.description": "撤销上一条消息",
|
||||
"command.session.redo": "重做",
|
||||
@@ -99,10 +122,10 @@ export const dict = {
|
||||
"dialog.provider.group.popular": "热门",
|
||||
"dialog.provider.group.other": "其他",
|
||||
"dialog.provider.tag.recommended": "推荐",
|
||||
"dialog.provider.anthropic.note": "使用 Claude Pro/Max 或 API 密钥连接",
|
||||
"dialog.provider.openai.note": "使用 ChatGPT Pro/Plus 或 API 密钥连接",
|
||||
"dialog.provider.copilot.note": "使用 Copilot 或 API 密钥连接",
|
||||
"dialog.provider.opencode.note": "使用 OpenCode Zen 或 API 密钥连接",
|
||||
"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 密钥连接",
|
||||
@@ -112,7 +135,6 @@ export const dict = {
|
||||
"dialog.model.empty": "未找到模型",
|
||||
"dialog.model.manage": "管理模型",
|
||||
"dialog.model.manage.description": "自定义模型选择器中显示的模型。",
|
||||
|
||||
"dialog.model.unpaid.freeModels.title": "OpenCode 提供的免费模型",
|
||||
"dialog.model.unpaid.addMore.title": "从热门提供商添加更多模型",
|
||||
|
||||
@@ -188,9 +210,9 @@ export const dict = {
|
||||
|
||||
"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",
|
||||
@@ -205,8 +227,10 @@ export const dict = {
|
||||
"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": "取消",
|
||||
@@ -224,7 +248,6 @@ export const dict = {
|
||||
"prompt.placeholder.summarizeComment": "总结该评论…",
|
||||
"prompt.mode.shell": "Shell",
|
||||
"prompt.mode.shell.exit": "按 esc 退出",
|
||||
|
||||
"prompt.example.1": "修复代码库中的一个 TODO",
|
||||
"prompt.example.2": "这个项目的技术栈是什么?",
|
||||
"prompt.example.3": "修复失败的测试",
|
||||
@@ -250,7 +273,6 @@ export const dict = {
|
||||
"prompt.example.23": "给这个列表添加分页",
|
||||
"prompt.example.24": "创建一个 CLI 命令用于...",
|
||||
"prompt.example.25": "这里的环境变量是怎么工作的?",
|
||||
|
||||
"prompt.popover.emptyResults": "没有匹配的结果",
|
||||
"prompt.popover.emptyCommands": "没有匹配的命令",
|
||||
"prompt.dropzone.label": "将图片或 PDF 拖到这里",
|
||||
@@ -266,7 +288,6 @@ export const dict = {
|
||||
"prompt.attachment.remove": "移除附件",
|
||||
"prompt.action.send": "发送",
|
||||
"prompt.action.stop": "停止",
|
||||
|
||||
"prompt.toast.pasteUnsupported.title": "不支持的粘贴",
|
||||
"prompt.toast.pasteUnsupported.description": "这里只能粘贴图片或 PDF 文件。",
|
||||
"prompt.toast.modelAgentRequired.title": "请选择智能体和模型",
|
||||
@@ -283,6 +304,7 @@ export const dict = {
|
||||
"dialog.mcp.empty": "未配置 MCPs",
|
||||
|
||||
"dialog.lsp.empty": "已从文件类型自动检测到 LSPs",
|
||||
|
||||
"dialog.plugins.empty": "在 opencode.json 中配置的插件",
|
||||
|
||||
"mcp.status.connected": "已连接",
|
||||
@@ -311,7 +333,6 @@ export const dict = {
|
||||
"dialog.server.default.set": "将当前服务器设为默认",
|
||||
"dialog.server.default.clear": "清除",
|
||||
"dialog.server.action.remove": "移除服务器",
|
||||
|
||||
"dialog.server.menu.edit": "编辑",
|
||||
"dialog.server.menu.default": "设为默认",
|
||||
"dialog.server.menu.defaultRemove": "取消默认",
|
||||
@@ -327,10 +348,10 @@ 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.description": "在创建新的工作区 (worktree) 后运行。",
|
||||
"dialog.project.edit.worktree.startup.placeholder": "例如 bun install",
|
||||
|
||||
"context.breakdown.title": "上下文拆分",
|
||||
"context.breakdown.note": "输入 token 的大致拆分。“其他”包含工具定义和开销。",
|
||||
"context.breakdown.system": "系统",
|
||||
@@ -338,10 +359,8 @@ export const dict = {
|
||||
"context.breakdown.assistant": "助手",
|
||||
"context.breakdown.tool": "工具调用",
|
||||
"context.breakdown.other": "其他",
|
||||
|
||||
"context.systemPrompt.title": "系统提示词",
|
||||
"context.rawMessages.title": "原始消息",
|
||||
|
||||
"context.stats.session": "会话",
|
||||
"context.stats.messages": "消息数",
|
||||
"context.stats.provider": "提供商",
|
||||
@@ -358,34 +377,44 @@ export const dict = {
|
||||
"context.stats.totalCost": "总成本",
|
||||
"context.stats.sessionCreated": "创建时间",
|
||||
"context.stats.lastActivity": "最后活动",
|
||||
|
||||
"context.usage.tokens": "Token",
|
||||
"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.th": "ไทย",
|
||||
|
||||
"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": "请先在文件标签中选择行范围。",
|
||||
@@ -394,14 +423,11 @@ export const dict = {
|
||||
"toast.session.share.success.description": "分享链接已复制到剪贴板",
|
||||
"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.update.title": "有可用更新",
|
||||
"toast.update.description": "OpenCode 有新版本 ({{version}}) 可安装。",
|
||||
"toast.update.action.installRestart": "安装并重启",
|
||||
@@ -417,10 +443,9 @@ export const dict = {
|
||||
"error.page.report.prefix": "请将此错误报告给 OpenCode 团队",
|
||||
"error.page.report.discord": "在 Discord 上",
|
||||
"error.page.version": "版本:{{version}}",
|
||||
|
||||
"error.dev.rootNotFound": "未找到根元素。你是不是忘了把它添加到 index.html?或者 id 属性拼写错了?",
|
||||
|
||||
"error.globalSync.connectFailed": "无法连接到服务器。是否有服务器正在 `{{url}}` 运行?",
|
||||
|
||||
"directory.error.invalidUrl": "URL 中的目录无效。",
|
||||
|
||||
"error.chain.unknown": "未知错误",
|
||||
@@ -448,7 +473,6 @@ export const dict = {
|
||||
"notification.question.title": "问题",
|
||||
"notification.question.description": "{{sessionTitle}}({{projectName}})有一个问题",
|
||||
"notification.action.goToSession": "前往会话",
|
||||
|
||||
"notification.session.responseReady.title": "回复已就绪",
|
||||
"notification.session.error.title": "会话错误",
|
||||
"notification.session.error.fallbackDescription": "发生错误",
|
||||
@@ -474,17 +498,19 @@ export const dict = {
|
||||
"session.messages.loadingEarlier": "正在加载更早的消息...",
|
||||
"session.messages.loadEarlier": "加载更早的消息",
|
||||
"session.messages.loading": "正在加载消息...",
|
||||
|
||||
"session.messages.jumpToLatest": "跳转到最新",
|
||||
"session.context.addToContext": "将 {{selection}} 添加到上下文",
|
||||
|
||||
"session.new.worktree.main": "主分支",
|
||||
"session.new.worktree.mainWithBranch": "主分支({{branch}})",
|
||||
"session.new.worktree.create": "创建新的 worktree",
|
||||
"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": "复制路径",
|
||||
|
||||
"status.popover.trigger": "状态",
|
||||
"status.popover.ariaLabel": "服务器配置",
|
||||
@@ -510,13 +536,14 @@ export const dict = {
|
||||
"lsp.label.connected": "{{count}} LSP",
|
||||
|
||||
"prompt.loading": "正在加载提示...",
|
||||
|
||||
"terminal.loading": "正在加载终端...",
|
||||
"terminal.title": "终端",
|
||||
"terminal.title.numbered": "终端 {{number}}",
|
||||
"terminal.close": "关闭终端",
|
||||
|
||||
"terminal.connectionLost.title": "连接已丢失",
|
||||
"terminal.connectionLost.description": "终端连接已中断。这可能发生在服务器重启时。",
|
||||
|
||||
"common.closeTab": "关闭标签页",
|
||||
"common.dismiss": "忽略",
|
||||
"common.requestFailed": "请求失败",
|
||||
@@ -529,8 +556,8 @@ export const dict = {
|
||||
"common.close": "关闭",
|
||||
"common.edit": "编辑",
|
||||
"common.loadMore": "加载更多",
|
||||
|
||||
"common.key.esc": "ESC",
|
||||
|
||||
"sidebar.menu.toggle": "切换菜单",
|
||||
"sidebar.nav.projectsAndSessions": "项目和会话",
|
||||
"sidebar.settings": "设置",
|
||||
@@ -544,16 +571,22 @@ export const dict = {
|
||||
"sidebar.project.viewAllSessions": "查看全部会话",
|
||||
|
||||
"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.notifications": "系统通知",
|
||||
"settings.general.section.updates": "更新",
|
||||
"settings.general.section.sounds": "音效",
|
||||
|
||||
"settings.general.section.display": "显示",
|
||||
"settings.general.row.language.title": "语言",
|
||||
"settings.general.row.language.description": "更改 OpenCode 的显示语言",
|
||||
"settings.general.row.appearance.title": "外观",
|
||||
@@ -562,6 +595,9 @@ export const dict = {
|
||||
"settings.general.row.theme.description": "自定义 OpenCode 的主题。",
|
||||
"settings.general.row.font.title": "字体",
|
||||
"settings.general.row.font.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": "更新后显示“新功能”弹窗",
|
||||
|
||||
@@ -586,6 +622,7 @@ export const dict = {
|
||||
"font.option.robotoMono": "Roboto Mono",
|
||||
"font.option.sourceCodePro": "Source Code Pro",
|
||||
"font.option.ubuntuMono": "Ubuntu Mono",
|
||||
|
||||
"sound.option.alert01": "警报 01",
|
||||
"sound.option.alert02": "警报 02",
|
||||
"sound.option.alert03": "警报 03",
|
||||
@@ -631,13 +668,13 @@ export const dict = {
|
||||
"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": "权限",
|
||||
"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": "权限",
|
||||
@@ -655,7 +692,6 @@ export const dict = {
|
||||
"settings.shortcuts.pressKeys": "按下按键",
|
||||
"settings.shortcuts.search.placeholder": "搜索快捷键",
|
||||
"settings.shortcuts.search.empty": "未找到快捷键",
|
||||
|
||||
"settings.shortcuts.group.general": "通用",
|
||||
"settings.shortcuts.group.session": "会话",
|
||||
"settings.shortcuts.group.navigation": "导航",
|
||||
@@ -672,12 +708,16 @@ export const dict = {
|
||||
"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 设置将在此处可配置。",
|
||||
|
||||
@@ -685,11 +725,9 @@ 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.tool.read.title": "读取",
|
||||
"settings.permissions.tool.read.description": "读取文件(匹配文件路径)",
|
||||
"settings.permissions.tool.edit.title": "编辑",
|
||||
@@ -702,9 +740,9 @@ export const dict = {
|
||||
"settings.permissions.tool.list.description": "列出目录中的文件",
|
||||
"settings.permissions.tool.bash.title": "Bash",
|
||||
"settings.permissions.tool.bash.description": "运行 shell 命令",
|
||||
"settings.permissions.tool.task.title": "Task",
|
||||
"settings.permissions.tool.task.title": "任务",
|
||||
"settings.permissions.tool.task.description": "启动子智能体",
|
||||
"settings.permissions.tool.skill.title": "Skill",
|
||||
"settings.permissions.tool.skill.title": "技能",
|
||||
"settings.permissions.tool.skill.description": "按名称加载技能",
|
||||
"settings.permissions.tool.lsp.title": "LSP",
|
||||
"settings.permissions.tool.lsp.description": "运行语言服务器查询",
|
||||
@@ -712,15 +750,15 @@ export const dict = {
|
||||
"settings.permissions.tool.todoread.description": "读取待办列表",
|
||||
"settings.permissions.tool.todowrite.title": "更新待办",
|
||||
"settings.permissions.tool.todowrite.description": "更新待办列表",
|
||||
"settings.permissions.tool.webfetch.title": "Web Fetch",
|
||||
"settings.permissions.tool.webfetch.title": "网页获取",
|
||||
"settings.permissions.tool.webfetch.description": "从 URL 获取内容",
|
||||
"settings.permissions.tool.websearch.title": "Web Search",
|
||||
"settings.permissions.tool.websearch.title": "网页搜索",
|
||||
"settings.permissions.tool.websearch.description": "搜索网页",
|
||||
"settings.permissions.tool.codesearch.title": "Code Search",
|
||||
"settings.permissions.tool.codesearch.title": "代码搜索",
|
||||
"settings.permissions.tool.codesearch.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.title": "死循环",
|
||||
"settings.permissions.tool.doom_loop.description": "检测具有相同输入的重复工具调用",
|
||||
|
||||
"session.delete.failed.title": "删除会话失败",
|
||||
|
||||
@@ -76,6 +76,7 @@ export const dict = {
|
||||
"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": "重做",
|
||||
@@ -99,9 +100,13 @@ export const dict = {
|
||||
"dialog.provider.group.popular": "熱門",
|
||||
"dialog.provider.group.other": "其他",
|
||||
"dialog.provider.tag.recommended": "推薦",
|
||||
"dialog.provider.opencode.note": "精選模型,包含 Claude、GPT、Gemini 等等",
|
||||
"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 模型",
|
||||
|
||||
"dialog.model.select.title": "選擇模型",
|
||||
"dialog.model.search.placeholder": "搜尋模型",
|
||||
@@ -204,6 +209,7 @@ export const dict = {
|
||||
"model.tooltip.context": "上下文上限 {{limit}}",
|
||||
"common.search.placeholder": "搜尋",
|
||||
"common.goBack": "返回",
|
||||
"common.goForward": "前進",
|
||||
"common.loading": "載入中",
|
||||
"common.loading.ellipsis": "...",
|
||||
"common.cancel": "取消",
|
||||
@@ -362,6 +368,23 @@ export const dict = {
|
||||
"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.th": "ไทย",
|
||||
|
||||
"toast.language.title": "語言",
|
||||
"toast.language.description": "已切換到 {{language}}",
|
||||
|
||||
@@ -482,6 +505,11 @@ export const dict = {
|
||||
|
||||
"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": "複製路徑",
|
||||
|
||||
"status.popover.trigger": "狀態",
|
||||
"status.popover.ariaLabel": "伺服器設定",
|
||||
@@ -545,11 +573,15 @@ export const dict = {
|
||||
"settings.section.server": "伺服器",
|
||||
"settings.tab.general": "一般",
|
||||
"settings.tab.shortcuts": "快速鍵",
|
||||
"settings.desktop.section.wsl": "WSL",
|
||||
"settings.desktop.wsl.title": "WSL integration",
|
||||
"settings.desktop.wsl.description": "Run the OpenCode server inside WSL on Windows.",
|
||||
|
||||
"settings.general.section.appearance": "外觀",
|
||||
"settings.general.section.notifications": "系統通知",
|
||||
"settings.general.section.updates": "更新",
|
||||
"settings.general.section.sounds": "音效",
|
||||
"settings.general.section.display": "顯示",
|
||||
|
||||
"settings.general.row.language.title": "語言",
|
||||
"settings.general.row.language.description": "變更 OpenCode 的顯示語言",
|
||||
@@ -560,6 +592,10 @@ export const dict = {
|
||||
"settings.general.row.font.title": "字型",
|
||||
"settings.general.row.font.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": "更新後顯示「新功能」彈出視窗",
|
||||
|
||||
|
||||
@@ -54,6 +54,13 @@ export default function Layout(props: ParentProps) {
|
||||
navigate(`/${params.dir}/session/${sessionID}`)
|
||||
}
|
||||
|
||||
const sessionHref = (sessionID: string) => {
|
||||
if (params.dir) return `/${params.dir}/session/${sessionID}`
|
||||
return `/session/${sessionID}`
|
||||
}
|
||||
|
||||
const syncSession = (sessionID: string) => sync.session.sync(sessionID)
|
||||
|
||||
return (
|
||||
<DataProvider
|
||||
data={sync.data}
|
||||
@@ -62,6 +69,8 @@ export default function Layout(props: ParentProps) {
|
||||
onQuestionReply={replyToQuestion}
|
||||
onQuestionReject={rejectQuestion}
|
||||
onNavigateToSession={navigateToSession}
|
||||
onSessionHref={sessionHref}
|
||||
onSyncSession={syncSession}
|
||||
>
|
||||
<LocalProvider>{props.children}</LocalProvider>
|
||||
</DataProvider>
|
||||
|
||||
@@ -34,6 +34,7 @@ import type { DragEvent } from "@thisbeyond/solid-dnd"
|
||||
import { useProviders } from "@/hooks/use-providers"
|
||||
import { showToast, Toast, toaster } from "@opencode-ai/ui/toast"
|
||||
import { useGlobalSDK } from "@/context/global-sdk"
|
||||
import { clearWorkspaceTerminals } from "@/context/terminal"
|
||||
import { useNotification } from "@/context/notification"
|
||||
import { usePermission } from "@/context/permission"
|
||||
import { Binary } from "@opencode-ai/util/binary"
|
||||
@@ -181,20 +182,6 @@ export default function Layout(props: ParentProps) {
|
||||
aim.reset()
|
||||
})
|
||||
|
||||
createEffect(
|
||||
on(
|
||||
() => ({ dir: params.dir, id: params.id }),
|
||||
() => {
|
||||
if (layout.sidebar.opened()) return
|
||||
if (!state.hoverProject) return
|
||||
aim.reset()
|
||||
setState("hoverSession", undefined)
|
||||
setState("hoverProject", undefined)
|
||||
},
|
||||
{ defer: true },
|
||||
),
|
||||
)
|
||||
|
||||
const autoselecting = createMemo(() => {
|
||||
if (params.dir) return false
|
||||
if (!state.autoselect) return false
|
||||
@@ -1216,6 +1203,16 @@ export default function Layout(props: ParentProps) {
|
||||
|
||||
if (!result) return
|
||||
|
||||
globalSync.set(
|
||||
"project",
|
||||
produce((draft) => {
|
||||
const project = draft.find((item) => item.worktree === root)
|
||||
if (!project) return
|
||||
project.sandboxes = (project.sandboxes ?? []).filter((sandbox) => sandbox !== directory)
|
||||
}),
|
||||
)
|
||||
setStore("workspaceOrder", root, (order) => (order ?? []).filter((workspace) => workspace !== directory))
|
||||
|
||||
layout.projects.close(directory)
|
||||
layout.projects.open(root)
|
||||
|
||||
@@ -1235,11 +1232,18 @@ export default function Layout(props: ParentProps) {
|
||||
})
|
||||
const dismiss = () => toaster.dismiss(progress)
|
||||
|
||||
const sessions = await globalSDK.client.session
|
||||
const sessions: Session[] = await globalSDK.client.session
|
||||
.list({ directory })
|
||||
.then((x) => x.data ?? [])
|
||||
.catch(() => [])
|
||||
|
||||
clearWorkspaceTerminals(
|
||||
directory,
|
||||
sessions.map((s) => s.id),
|
||||
platform,
|
||||
)
|
||||
await globalSDK.client.instance.dispose({ directory }).catch(() => undefined)
|
||||
|
||||
const result = await globalSDK.client.worktree
|
||||
.reset({ directory: root, worktreeResetInput: { directory } })
|
||||
.then((x) => x.data)
|
||||
@@ -1924,10 +1928,10 @@ export default function Layout(props: ParentProps) {
|
||||
renderPanel={() => <SidebarPanel project={currentProject()} />}
|
||||
/>
|
||||
</div>
|
||||
<Show when={!layout.sidebar.opened() ? hoverProjectData() : undefined} keyed>
|
||||
{(project) => (
|
||||
<Show when={!layout.sidebar.opened() ? hoverProjectData()?.worktree : undefined} keyed>
|
||||
{(worktree) => (
|
||||
<div class="absolute inset-y-0 left-16 z-50 flex" onMouseEnter={aim.reset}>
|
||||
<SidebarPanel project={project} />
|
||||
<SidebarPanel project={hoverProjectData()} />
|
||||
</div>
|
||||
)}
|
||||
</Show>
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { uuid } from "@/utils/uuid"
|
||||
|
||||
type Nav = {
|
||||
id: string
|
||||
dir?: string
|
||||
@@ -16,8 +18,6 @@ const key = (dir: string | undefined, to: string) => `${dir ?? ""}:${to}`
|
||||
|
||||
const now = () => performance.now()
|
||||
|
||||
const uid = () => crypto.randomUUID?.() ?? Math.random().toString(16).slice(2)
|
||||
|
||||
const navs = new Map<string, Nav>()
|
||||
const pending = new Map<string, string>()
|
||||
const active = new Map<string, string>()
|
||||
@@ -94,7 +94,7 @@ function ensure(id: string, data: Omit<Nav, "marks" | "logged" | "timer">) {
|
||||
export function navStart(input: { dir?: string; from?: string; to: string; trigger?: string }) {
|
||||
if (!dev) return
|
||||
|
||||
const id = uid()
|
||||
const id = uuid()
|
||||
const start = now()
|
||||
const nav = ensure(id, { ...input, id, start })
|
||||
nav.marks["navigate:start"] = start
|
||||
@@ -109,7 +109,7 @@ export function navParams(input: { dir?: string; from?: string; to: string }) {
|
||||
const k = key(input.dir, input.to)
|
||||
const pendingId = pending.get(k)
|
||||
if (pendingId) pending.delete(k)
|
||||
const id = pendingId ?? uid()
|
||||
const id = pendingId ?? uuid()
|
||||
|
||||
const start = now()
|
||||
const nav = ensure(id, { ...input, id, start, trigger: pendingId ? "key" : "route" })
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { usePlatform } from "@/context/platform"
|
||||
import { Platform, usePlatform } from "@/context/platform"
|
||||
import { makePersisted, type AsyncStorage, type SyncStorage } from "@solid-primitives/storage"
|
||||
import { checksum } from "@opencode-ai/util/encode"
|
||||
import { createResource, type Accessor } from "solid-js"
|
||||
@@ -318,9 +318,8 @@ export const Persist = {
|
||||
},
|
||||
}
|
||||
|
||||
export function removePersisted(target: { storage?: string; key: string }) {
|
||||
const platform = usePlatform()
|
||||
const isDesktop = platform.platform === "desktop" && !!platform.storage
|
||||
export function removePersisted(target: { storage?: string; key: string }, platform?: Platform) {
|
||||
const isDesktop = platform?.platform === "desktop" && !!platform.storage
|
||||
|
||||
if (isDesktop) {
|
||||
return platform.storage?.(target.storage)?.removeItem(target.key)
|
||||
|
||||
78
packages/app/src/utils/uuid.test.ts
Normal file
78
packages/app/src/utils/uuid.test.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
import { afterEach, describe, expect, test } from "bun:test"
|
||||
import { uuid } from "./uuid"
|
||||
|
||||
const cryptoDescriptor = Object.getOwnPropertyDescriptor(globalThis, "crypto")
|
||||
const secureDescriptor = Object.getOwnPropertyDescriptor(globalThis, "isSecureContext")
|
||||
const randomDescriptor = Object.getOwnPropertyDescriptor(Math, "random")
|
||||
|
||||
const setCrypto = (value: Partial<Crypto>) => {
|
||||
Object.defineProperty(globalThis, "crypto", {
|
||||
configurable: true,
|
||||
value: value as Crypto,
|
||||
})
|
||||
}
|
||||
|
||||
const setSecure = (value: boolean) => {
|
||||
Object.defineProperty(globalThis, "isSecureContext", {
|
||||
configurable: true,
|
||||
value,
|
||||
})
|
||||
}
|
||||
|
||||
const setRandom = (value: () => number) => {
|
||||
Object.defineProperty(Math, "random", {
|
||||
configurable: true,
|
||||
value,
|
||||
})
|
||||
}
|
||||
|
||||
afterEach(() => {
|
||||
if (cryptoDescriptor) {
|
||||
Object.defineProperty(globalThis, "crypto", cryptoDescriptor)
|
||||
}
|
||||
|
||||
if (secureDescriptor) {
|
||||
Object.defineProperty(globalThis, "isSecureContext", secureDescriptor)
|
||||
}
|
||||
|
||||
if (!secureDescriptor) {
|
||||
delete (globalThis as { isSecureContext?: boolean }).isSecureContext
|
||||
}
|
||||
|
||||
if (randomDescriptor) {
|
||||
Object.defineProperty(Math, "random", randomDescriptor)
|
||||
}
|
||||
})
|
||||
|
||||
describe("uuid", () => {
|
||||
test("uses randomUUID in secure contexts", () => {
|
||||
setCrypto({ randomUUID: () => "00000000-0000-0000-0000-000000000000" })
|
||||
setSecure(true)
|
||||
expect(uuid()).toBe("00000000-0000-0000-0000-000000000000")
|
||||
})
|
||||
|
||||
test("falls back in insecure contexts", () => {
|
||||
setCrypto({ randomUUID: () => "00000000-0000-0000-0000-000000000000" })
|
||||
setSecure(false)
|
||||
setRandom(() => 0.5)
|
||||
expect(uuid()).toBe("8")
|
||||
})
|
||||
|
||||
test("falls back when randomUUID throws", () => {
|
||||
setCrypto({
|
||||
randomUUID: () => {
|
||||
throw new DOMException("Failed", "OperationError")
|
||||
},
|
||||
})
|
||||
setSecure(true)
|
||||
setRandom(() => 0.5)
|
||||
expect(uuid()).toBe("8")
|
||||
})
|
||||
|
||||
test("falls back when randomUUID is unavailable", () => {
|
||||
setCrypto({})
|
||||
setSecure(true)
|
||||
setRandom(() => 0.5)
|
||||
expect(uuid()).toBe("8")
|
||||
})
|
||||
})
|
||||
12
packages/app/src/utils/uuid.ts
Normal file
12
packages/app/src/utils/uuid.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
const fallback = () => Math.random().toString(16).slice(2)
|
||||
|
||||
export function uuid() {
|
||||
const c = globalThis.crypto
|
||||
if (!c || typeof c.randomUUID !== "function") return fallback()
|
||||
if (typeof globalThis.isSecureContext === "boolean" && !globalThis.isSecureContext) return fallback()
|
||||
try {
|
||||
return c.randomUUID()
|
||||
} catch {
|
||||
return fallback()
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@opencode-ai/console-app",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 697 B |
@@ -0,0 +1,18 @@
|
||||
<svg width="300" height="300" viewBox="0 0 300 300" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="translate(30, 0)">
|
||||
<g clip-path="url(#clip0_1401_86283)">
|
||||
<mask id="mask0_1401_86283" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="240" height="300">
|
||||
<path d="M240 0H0V300H240V0Z" fill="white"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0_1401_86283)">
|
||||
<path d="M180 240H60V120H180V240Z" fill="#4B4646"/>
|
||||
<path d="M180 60H60V240H180V60ZM240 300H0V0H240V300Z" fill="#F1ECEC"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_1401_86283">
|
||||
<rect width="240" height="300" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 631 B |
Binary file not shown.
|
After Width: | Height: | Size: 697 B |
@@ -0,0 +1,18 @@
|
||||
<svg width="300" height="300" viewBox="0 0 300 300" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="translate(30, 0)">
|
||||
<g clip-path="url(#clip0_1401_86274)">
|
||||
<mask id="mask0_1401_86274" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="240" height="300">
|
||||
<path d="M240 0H0V300H240V0Z" fill="white"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0_1401_86274)">
|
||||
<path d="M180 240H60V120H180V240Z" fill="#CFCECD"/>
|
||||
<path d="M180 60H60V240H180V60ZM240 300H0V0H240V300Z" fill="#211E1E"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_1401_86274">
|
||||
<rect width="240" height="300" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 631 B |
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
@@ -9,8 +9,8 @@ export const config = {
|
||||
github: {
|
||||
repoUrl: "https://github.com/anomalyco/opencode",
|
||||
starsFormatted: {
|
||||
compact: "95K",
|
||||
full: "95,000",
|
||||
compact: "100K",
|
||||
full: "100,000",
|
||||
},
|
||||
},
|
||||
|
||||
@@ -22,8 +22,8 @@ export const config = {
|
||||
|
||||
// Static stats (used on landing page)
|
||||
stats: {
|
||||
contributors: "650",
|
||||
commits: "8,500",
|
||||
contributors: "700",
|
||||
commits: "9,000",
|
||||
monthlyUsers: "2.5M",
|
||||
},
|
||||
} as const
|
||||
|
||||
@@ -4,407 +4,346 @@ import { dict as en } from "./en"
|
||||
export const dict = {
|
||||
...en,
|
||||
"nav.github": "GitHub",
|
||||
"nav.docs": "\u0627\u0644\u0648\u062b\u0627\u0626\u0642",
|
||||
"nav.changelog": "\u0633\u062c\u0644 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a",
|
||||
"nav.docs": "الوثائق",
|
||||
"nav.changelog": "سجل التغييرات",
|
||||
"nav.discord": "Discord",
|
||||
"nav.x": "X",
|
||||
"nav.enterprise": "\u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062a",
|
||||
"nav.enterprise": "المؤسسات",
|
||||
"nav.zen": "Zen",
|
||||
"nav.login": "\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644",
|
||||
"nav.free": "\u0645\u062c\u0627\u0646\u0627",
|
||||
"nav.home": "\u0627\u0644\u0631\u0626\u064a\u0633\u064a\u0629",
|
||||
"nav.openMenu": "\u0641\u062a\u062d \u0627\u0644\u0642\u0627\u0626\u0645\u0629",
|
||||
"nav.getStartedFree": "\u0627\u0628\u062f\u0623 \u0645\u062c\u0627\u0646\u0627",
|
||||
"nav.login": "تسجيل الدخول",
|
||||
"nav.free": "مجانا",
|
||||
"nav.home": "الرئيسية",
|
||||
"nav.openMenu": "فتح القائمة",
|
||||
"nav.getStartedFree": "ابدأ مجانا",
|
||||
|
||||
"nav.context.copyLogo": "\u0646\u0633\u062e \u0627\u0644\u0634\u0639\u0627\u0631 \u0643\u0640 SVG",
|
||||
"nav.context.copyWordmark":
|
||||
"\u0646\u0633\u062e \u0627\u0633\u0645 \u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0643\u0640 SVG",
|
||||
"nav.context.brandAssets": "\u0645\u0644\u0641\u0627\u062a \u0627\u0644\u0639\u0644\u0627\u0645\u0629",
|
||||
"nav.context.copyLogo": "نسخ الشعار كـ SVG",
|
||||
"nav.context.copyWordmark": "نسخ اسم العلامة كـ SVG",
|
||||
"nav.context.brandAssets": "أصول العلامة التجارية",
|
||||
|
||||
"footer.github": "GitHub",
|
||||
"footer.docs": "\u0627\u0644\u0648\u062b\u0627\u0626\u0642",
|
||||
"footer.changelog": "\u0633\u062c\u0644 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a",
|
||||
"footer.docs": "الوثائق",
|
||||
"footer.changelog": "سجل التغييرات",
|
||||
"footer.discord": "Discord",
|
||||
"footer.x": "X",
|
||||
|
||||
"legal.brand": "\u0627\u0644\u0639\u0644\u0627\u0645\u0629",
|
||||
"legal.privacy": "\u0627\u0644\u062e\u0635\u0648\u0635\u064a\u0629",
|
||||
"legal.terms": "\u0627\u0644\u0634\u0631\u0648\u0637",
|
||||
"legal.brand": "العلامة التجارية",
|
||||
"legal.privacy": "الخصوصية",
|
||||
"legal.terms": "الشروط",
|
||||
|
||||
"email.title":
|
||||
"\u0643\u0646 \u0627\u0644\u0623\u0648\u0644 \u0644\u0645\u0639\u0631\u0641\u0629 \u0639\u0646\u062f \u0625\u0637\u0644\u0627\u0642 \u0645\u0646\u062a\u062c\u0627\u062a \u062c\u062f\u064a\u062f\u0629",
|
||||
"email.subtitle":
|
||||
"\u0627\u0646\u0636\u0645 \u0625\u0644\u0649 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631 \u0644\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0648\u0635\u0648\u0644 \u0645\u0628\u0643\u0631.",
|
||||
"email.placeholder":
|
||||
"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a",
|
||||
"email.subscribe": "\u0627\u0634\u062a\u0631\u0627\u0643",
|
||||
"email.success":
|
||||
"\u062a\u0628\u0642\u0649 \u062e\u0637\u0648\u0629 \u0648\u0627\u062d\u062f\u0629: \u062a\u062d\u0642\u0642 \u0645\u0646 \u0628\u0631\u064a\u062f\u0643 \u0648\u0623\u0643\u062f \u0639\u0646\u0648\u0627\u0646\u0643",
|
||||
"email.title": "كن الأول في المعرفة عند إطلاق منتجات جديدة",
|
||||
"email.subtitle": "انضم إلى قائمة الانتظار للحصول على وصول مبكر.",
|
||||
"email.placeholder": "عنوان البريد الإلكتروني",
|
||||
"email.subscribe": "اشتراك",
|
||||
"email.success": "تبقّت خطوة واحدة: تحقق من بريدك وأكّد عنوانك",
|
||||
|
||||
"notFound.title": "\u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f | opencode",
|
||||
"notFound.heading":
|
||||
"404 - \u0627\u0644\u0635\u0641\u062d\u0629 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f\u0629",
|
||||
"notFound.home": "\u0627\u0644\u0631\u0626\u064a\u0633\u064a\u0629",
|
||||
"notFound.docs": "\u0627\u0644\u0648\u062b\u0627\u0626\u0642",
|
||||
"notFound.title": "غير موجود | opencode",
|
||||
"notFound.heading": "404 - الصفحة غير موجودة",
|
||||
"notFound.home": "الرئيسية",
|
||||
"notFound.docs": "الوثائق",
|
||||
"notFound.github": "GitHub",
|
||||
"notFound.discord": "Discord",
|
||||
|
||||
"user.logout": "\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062e\u0631\u0648\u062c",
|
||||
"user.logout": "تسجيل الخروج",
|
||||
|
||||
"workspace.select": "\u0627\u062e\u062a\u0631 \u0645\u0633\u0627\u062d\u0629 \u0627\u0644\u0639\u0645\u0644",
|
||||
"workspace.createNew":
|
||||
"+ \u0625\u0646\u0634\u0627\u0621 \u0645\u0633\u0627\u062d\u0629 \u0639\u0645\u0644 \u062c\u062f\u064a\u062f\u0629",
|
||||
"workspace.modal.title":
|
||||
"\u0625\u0646\u0634\u0627\u0621 \u0645\u0633\u0627\u062d\u0629 \u0639\u0645\u0644 \u062c\u062f\u064a\u062f\u0629",
|
||||
"workspace.modal.placeholder":
|
||||
"\u0623\u062f\u062e\u0644 \u0627\u0633\u0645 \u0645\u0633\u0627\u062d\u0629 \u0627\u0644\u0639\u0645\u0644",
|
||||
"workspace.select": "اختر مساحة العمل",
|
||||
"workspace.createNew": "+ إنشاء مساحة عمل جديدة",
|
||||
"workspace.modal.title": "إنشاء مساحة عمل جديدة",
|
||||
"workspace.modal.placeholder": "أدخل اسم مساحة العمل",
|
||||
|
||||
"common.cancel": "\u0625\u0644\u063a\u0627\u0621",
|
||||
"common.creating": "\u062c\u0627\u0631\u064a \u0627\u0644\u0625\u0646\u0634\u0627\u0621...",
|
||||
"common.create": "\u0625\u0646\u0634\u0627\u0621",
|
||||
"common.cancel": "إلغاء",
|
||||
"common.creating": "جارٍ الإنشاء...",
|
||||
"common.create": "إنشاء",
|
||||
|
||||
"common.videoUnsupported":
|
||||
"\u0645\u062a\u0635\u0641\u062d\u0643 \u0644\u0627 \u064a\u062f\u0639\u0645 \u0648\u0633\u0645 \u0627\u0644\u0641\u064a\u062f\u064a\u0648.",
|
||||
"common.figure": "\u0634\u0643\u0644 {{n}}.",
|
||||
"common.faq": "\u0627\u0644\u0623\u0633\u0626\u0644\u0629 \u0627\u0644\u0634\u0627\u0626\u0639\u0629",
|
||||
"common.learnMore": "\u0627\u0639\u0631\u0641 \u0627\u0644\u0645\u0632\u064a\u062f",
|
||||
"common.videoUnsupported": "متصفحك لا يدعم وسم الفيديو.",
|
||||
"common.figure": "شكل {{n}}.",
|
||||
"common.faq": "الأسئلة الشائعة",
|
||||
"common.learnMore": "اعرف المزيد",
|
||||
|
||||
"home.title":
|
||||
"OpenCode | \u0648\u0643\u064a\u0644 \u0628\u0631\u0645\u062c\u0629 \u0628\u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0645\u0641\u062a\u0648\u062d \u0627\u0644\u0645\u0635\u062f\u0631",
|
||||
"error.invalidPlan": "خطة غير صالحة",
|
||||
"error.workspaceRequired": "معرف مساحة العمل مطلوب",
|
||||
"error.alreadySubscribed": "مساحة العمل هذه لديها اشتراك بالفعل",
|
||||
"error.limitRequired": "الحد مطلوب.",
|
||||
"error.monthlyLimitInvalid": "قم بتعيين حد شهري صالح.",
|
||||
"error.workspaceNameRequired": "اسم مساحة العمل مطلوب.",
|
||||
"error.nameTooLong": "يجب أن يكون الاسم 255 حرفًا أو أقل.",
|
||||
"error.emailRequired": "البريد الإلكتروني مطلوب",
|
||||
"error.roleRequired": "الدور مطلوب",
|
||||
"error.idRequired": "المعرف مطلوب",
|
||||
"error.nameRequired": "الاسم مطلوب",
|
||||
"error.providerRequired": "المزود مطلوب",
|
||||
"error.apiKeyRequired": "مفتاح API مطلوب",
|
||||
"error.modelRequired": "النموذج مطلوب",
|
||||
"error.reloadAmountMin": "يجب أن يكون مبلغ الشحن ${{amount}} على الأقل",
|
||||
"error.reloadTriggerMin": "يجب أن يكون حد الرصيد ${{amount}} على الأقل",
|
||||
|
||||
"home.banner.badge": "\u062c\u062f\u064a\u062f",
|
||||
"home.banner.text":
|
||||
"\u062a\u0637\u0628\u064a\u0642 \u0633\u0637\u062d \u0627\u0644\u0645\u0643\u062a\u0628 \u0645\u062a\u0627\u062d \u0628\u0646\u0633\u062e\u0629 \u062a\u062c\u0631\u064a\u0628\u064a\u0629",
|
||||
"home.banner.platforms": "\u0639\u0644\u0649 macOS\u060c Windows\u060c \u0648Linux",
|
||||
"home.banner.downloadNow": "\u062d\u0645\u0651\u0644 \u0627\u0644\u0622\u0646",
|
||||
"home.banner.downloadBetaNow":
|
||||
"\u062d\u0645\u0651\u0644 \u0627\u0644\u0622\u0646 \u0627\u0644\u0646\u0633\u062e\u0629 \u0627\u0644\u062a\u062c\u0631\u064a\u0628\u064a\u0629 \u0644\u062a\u0637\u0628\u064a\u0642 \u0633\u0637\u062d \u0627\u0644\u0645\u0643\u062a\u0628",
|
||||
"home.title": "OpenCode | وكيل برمجة بالذكاء الاصطناعي مفتوح المصدر",
|
||||
|
||||
"home.hero.title":
|
||||
"\u0648\u0643\u064a\u0644 \u0628\u0631\u0645\u062c\u0629 \u0628\u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0645\u0641\u062a\u0648\u062d \u0627\u0644\u0645\u0635\u062f\u0631",
|
||||
"home.hero.subtitle.a":
|
||||
"\u0646\u0645\u0627\u0630\u062c \u0645\u062c\u0627\u0646\u064a\u0629 \u0645\u0636\u0645\u0651\u0646\u0629 \u0623\u0648 \u0627\u0631\u0628\u0637 \u0623\u064a \u0646\u0645\u0648\u0630\u062c \u0645\u0646 \u0623\u064a \u0645\u0632\u0648\u0651\u062f\u060c",
|
||||
"home.hero.subtitle.b":
|
||||
"\u0628\u0645\u0627 \u0641\u064a \u0630\u0644\u0643 Claude\u060c GPT\u060c Gemini \u0648\u063a\u064a\u0631\u0647\u0627.",
|
||||
"temp.title": "opencode | وكيل برمجة بالذكاء الاصطناعي مبني للطرفية",
|
||||
"temp.hero.title": "وكيل البرمجة بالذكاء الاصطناعي المبني للطرفية",
|
||||
"temp.zen": "opencode zen",
|
||||
"temp.getStarted": "ابدأ",
|
||||
"temp.feature.native.title": "واجهة طرفية أصلية",
|
||||
"temp.feature.native.body": "واجهة مستخدم طرفية سريعة الاستجابة، أصلية، وقابلة للتخصيص",
|
||||
"temp.feature.zen.beforeLink": "قائمة",
|
||||
"temp.feature.zen.link": "منسقة من النماذج",
|
||||
"temp.feature.zen.afterLink": "مقدمة من opencode",
|
||||
"temp.feature.models.beforeLink": "يدعم أكثر من 75 مزود LLM من خلال",
|
||||
"temp.feature.models.afterLink": "، بما في ذلك النماذج المحلية",
|
||||
"temp.screenshot.caption": "واجهة OpenCode الطرفية مع سمة tokyonight",
|
||||
"temp.screenshot.alt": "واجهة OpenCode الطرفية بسمة tokyonight",
|
||||
|
||||
"home.install.ariaLabel": "\u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u062a\u062b\u0628\u064a\u062a",
|
||||
"home.banner.badge": "جديد",
|
||||
"home.banner.text": "تطبيق سطح المكتب متاح بنسخة تجريبية",
|
||||
"home.banner.platforms": "على macOS، Windows، وLinux",
|
||||
"home.banner.downloadNow": "حمّل الآن",
|
||||
"home.banner.downloadBetaNow": "حمّل النسخة التجريبية لتطبيق سطح المكتب الآن",
|
||||
|
||||
"home.what.title": "\u0645\u0627 \u0647\u0648 OpenCode\u061f",
|
||||
"home.what.body":
|
||||
"OpenCode \u0648\u0643\u064a\u0644 \u0645\u0641\u062a\u0648\u062d \u0627\u0644\u0645\u0635\u062f\u0631 \u064a\u0633\u0627\u0639\u062f\u0643 \u0639\u0644\u0649 \u0643\u062a\u0627\u0628\u0629 \u0627\u0644\u0643\u0648\u062f \u0641\u064a \u0627\u0644\u0637\u0631\u0641\u064a\u0629\u060c IDE\u060c \u0623\u0648 \u0633\u0637\u062d \u0627\u0644\u0645\u0643\u062a\u0628.",
|
||||
"home.what.lsp.title": "\u062f\u0639\u0645 LSP",
|
||||
"home.what.lsp.body":
|
||||
"\u064a\u062d\u0645\u0651\u0644 \u062a\u0644\u0642\u0627\u0626\u064a\u064b\u0627 \u0645\u0648\u0627\u0641\u0642\u0627\u062a LSP \u0627\u0644\u0645\u0646\u0627\u0633\u0628\u0629 \u0644\u0644\u0640 LLM",
|
||||
"home.what.multiSession.title": "\u062c\u0644\u0633\u0627\u062a \u0645\u062a\u0639\u062f\u062f\u0629",
|
||||
"home.what.multiSession.body":
|
||||
"\u0627\u0628\u062f\u0623 \u0639\u062f\u0629 \u0648\u0643\u0644\u0627\u0621 \u0628\u0627\u0644\u062a\u0648\u0627\u0632\u064a \u0639\u0644\u0649 \u0646\u0641\u0633 \u0627\u0644\u0645\u0634\u0631\u0648\u0639",
|
||||
"home.what.shareLinks.title": "\u0631\u0648\u0627\u0628\u0637 \u0645\u0634\u0627\u0631\u0643\u0629",
|
||||
"home.what.shareLinks.body":
|
||||
"\u0634\u0627\u0631\u0643 \u0631\u0627\u0628\u0637\u064b\u0627 \u0644\u0623\u064a \u062c\u0644\u0633\u0629 \u0644\u0644\u0631\u062c\u0648\u0639 \u0625\u0644\u064a\u0647\u0627 \u0623\u0648 \u0644\u0644\u062a\u0635\u062d\u064a\u062d",
|
||||
"home.hero.title": "وكيل برمجة بالذكاء الاصطناعي مفتوح المصدر",
|
||||
"home.hero.subtitle.a": "نماذج مجانية مضمّنة أو اربط أي نموذج من أي مزوّد،",
|
||||
"home.hero.subtitle.b": "بما في ذلك Claude، GPT، Gemini وغيرها.",
|
||||
|
||||
"home.install.ariaLabel": "خيارات التثبيت",
|
||||
|
||||
"home.what.title": "ما هو OpenCode؟",
|
||||
"home.what.body": "OpenCode وكيل مفتوح المصدر يساعدك على كتابة الكود في الطرفية، IDE، أو سطح المكتب.",
|
||||
"home.what.lsp.title": "دعم LSP",
|
||||
"home.what.lsp.body": "يحمّل تلقائيًا موافقات LSP المناسبة للـ LLM",
|
||||
"home.what.multiSession.title": "جلسات متعددة",
|
||||
"home.what.multiSession.body": "ابدأ عدة وكلاء بالتوازي على نفس المشروع",
|
||||
"home.what.shareLinks.title": "روابط المشاركة",
|
||||
"home.what.shareLinks.body": "شارك رابطًا لأي جلسة للرجوع إليها أو لتصحيح الأخطاء",
|
||||
"home.what.copilot.title": "GitHub Copilot",
|
||||
"home.what.copilot.body":
|
||||
"\u0633\u062c\u0651\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 \u0628\u0640 GitHub \u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062d\u0633\u0627\u0628\u0643 \u0641\u064a Copilot",
|
||||
"home.what.copilot.body": "سجّل الدخول بـ GitHub لاستخدام حسابك في Copilot",
|
||||
"home.what.chatgptPlus.title": "ChatGPT Plus/Pro",
|
||||
"home.what.chatgptPlus.body":
|
||||
"\u0633\u062c\u0651\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 \u0628\u0640 OpenAI \u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u062d\u0633\u0627\u0628\u0643 \u0641\u064a ChatGPT Plus \u0623\u0648 Pro",
|
||||
"home.what.anyModel.title": "\u0623\u064a \u0646\u0645\u0648\u0630\u062c",
|
||||
"home.what.anyModel.body":
|
||||
"75+ \u0645\u0632\u0648\u0651\u062f LLM \u0639\u0628\u0631 Models.dev\u060c \u0628\u0645\u0627 \u0641\u064a \u0630\u0644\u0643 \u0627\u0644\u0646\u0645\u0627\u0630\u062c \u0627\u0644\u0645\u062d\u0644\u064a\u0629",
|
||||
"home.what.anyEditor.title": "\u0623\u064a \u0645\u062d\u0631\u0631",
|
||||
"home.what.anyEditor.body":
|
||||
"\u0645\u062a\u0627\u062d \u0643\u0648\u0627\u062c\u0647\u0629 \u0637\u0631\u0641\u064a\u0629\u060c \u0648\u062a\u0637\u0628\u064a\u0642 \u0633\u0637\u062d \u0645\u0643\u062a\u0628\u060c \u0648\u0627\u0645\u062a\u062f\u0627\u062f IDE",
|
||||
"home.what.readDocs": "\u0627\u0642\u0631\u0623 \u0627\u0644\u0648\u062b\u0627\u0626\u0642",
|
||||
"home.what.chatgptPlus.body": "سجّل الدخول بـ OpenAI لاستخدام حسابك في ChatGPT Plus أو Pro",
|
||||
"home.what.anyModel.title": "أي نموذج",
|
||||
"home.what.anyModel.body": "75+ مزوّد LLM عبر Models.dev، بما في ذلك النماذج المحلية",
|
||||
"home.what.anyEditor.title": "أي محرر",
|
||||
"home.what.anyEditor.body": "متاح كواجهة طرفية، وتطبيق سطح مكتب، وامتداد IDE",
|
||||
"home.what.readDocs": "اقرأ الوثائق",
|
||||
|
||||
"home.growth.title":
|
||||
"\u0648\u0643\u064a\u0644 \u0628\u0631\u0645\u062c\u0629 \u0628\u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0645\u0641\u062a\u0648\u062d \u0627\u0644\u0645\u0635\u062f\u0631",
|
||||
"home.growth.title": "وكيل برمجة بالذكاء الاصطناعي مفتوح المصدر",
|
||||
"home.growth.body":
|
||||
"\u0645\u0639 \u0623\u0643\u062b\u0631 \u0645\u0646 <strong>{{stars}}</strong> \u0646\u062c\u0645\u0629 \u0639\u0644\u0649 GitHub\u060c \u0648<strong>{{contributors}}</strong> \u0645\u0633\u0627\u0647\u0645\u064b\u0627\u060c \u0648\u0623\u0643\u062b\u0631 \u0645\u0646 <strong>{{commits}}</strong> \u062a\u0639\u0647\u062f\u064b\u0627\u060c \u064a\u0633\u062a\u062e\u062f\u0645 OpenCode \u0648\u064a\u062b\u0642 \u0628\u0647 \u0623\u0643\u062b\u0631 \u0645\u0646 <strong>{{monthlyUsers}}</strong> \u0645\u0637\u0648\u0651\u0631 \u0643\u0644 \u0634\u0647\u0631.",
|
||||
"home.growth.githubStars": "\u0646\u062c\u0648\u0645 GitHub",
|
||||
"home.growth.contributors": "\u0627\u0644\u0645\u0633\u0627\u0647\u0645\u0648\u0646",
|
||||
"home.growth.monthlyDevs": "\u0645\u0637\u0648\u0631\u0648\u0646 \u0634\u0647\u0631\u064a\u064b\u0627",
|
||||
"مع أكثر من <strong>{{stars}}</strong> نجمة على GitHub، و<strong>{{contributors}}</strong> مساهمًا، وأكثر من <strong>{{commits}}</strong> Commit، يستخدم OpenCode ويثق به أكثر من <strong>{{monthlyUsers}}</strong> مطوّر كل شهر.",
|
||||
"home.growth.githubStars": "نجوم GitHub",
|
||||
"home.growth.contributors": "المساهمون",
|
||||
"home.growth.monthlyDevs": "مطورون شهريًا",
|
||||
|
||||
"home.privacy.title":
|
||||
"\u0645\u0635\u0645\u0645 \u0644\u0644\u062e\u0635\u0648\u0635\u064a\u0629 \u0623\u0648\u0644\u0627\u064b",
|
||||
"home.privacy.body":
|
||||
"\u0644\u0627 \u064a\u062e\u0632\u0651\u0646 OpenCode \u0623\u064a \u0643\u0648\u062f \u0623\u0648 \u0628\u064a\u0627\u0646\u0627\u062a \u0633\u064a\u0627\u0642\u060c \u0644\u064a\u062a\u0645\u0643\u0646 \u0645\u0646 \u0627\u0644\u0639\u0645\u0644 \u0641\u064a \u0628\u064a\u0626\u0627\u062a \u062d\u0633\u0627\u0633\u0629 \u0644\u0644\u062e\u0635\u0648\u0635\u064a\u0629.",
|
||||
"home.privacy.learnMore": "\u0627\u0639\u0631\u0641 \u0627\u0644\u0645\u0632\u064a\u062f \u0639\u0646",
|
||||
"home.privacy.link": "\u0627\u0644\u062e\u0635\u0648\u0635\u064a\u0629",
|
||||
"home.privacy.title": "مصمم للخصوصية أولاً",
|
||||
"home.privacy.body": "لا يخزّن OpenCode أي كود أو بيانات سياق، ليتمكن من العمل في بيئات حساسة للخصوصية.",
|
||||
"home.privacy.learnMore": "اعرف المزيد عن",
|
||||
"home.privacy.link": "الخصوصية",
|
||||
|
||||
"home.faq.q1": "\u0645\u0627 \u0647\u0648 OpenCode\u061f",
|
||||
"home.faq.q1": "ما هو OpenCode؟",
|
||||
"home.faq.a1":
|
||||
"OpenCode \u0648\u0643\u064a\u0644 \u0645\u0641\u062a\u0648\u062d \u0627\u0644\u0645\u0635\u062f\u0631 \u064a\u0633\u0627\u0639\u062f\u0643 \u0639\u0644\u0649 \u0643\u062a\u0627\u0628\u0629 \u0648\u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0643\u0648\u062f \u0645\u0639 \u0623\u064a \u0646\u0645\u0648\u0630\u062c \u0630\u0643\u0627\u0621 \u0627\u0635\u0637\u0646\u0627\u0639\u064a. \u0645\u062a\u0627\u062d \u0643\u0648\u0627\u062c\u0647\u0629 \u0637\u0631\u0641\u064a\u0629\u060c \u0648\u062a\u0637\u0628\u064a\u0642 \u0633\u0637\u062d \u0645\u0643\u062a\u0628\u060c \u0623\u0648 \u0627\u0645\u062a\u062f\u0627\u062f IDE.",
|
||||
"home.faq.q2": "\u0643\u064a\u0641 \u0623\u0633\u062a\u062e\u062f\u0645 OpenCode\u061f",
|
||||
"home.faq.a2.before":
|
||||
"\u0623\u0633\u0647\u0644 \u0637\u0631\u064a\u0642\u0629 \u0644\u0644\u0628\u062f\u0621 \u0647\u064a \u0642\u0631\u0627\u0621\u0629",
|
||||
"home.faq.a2.link": "\u0627\u0644\u0645\u0642\u062f\u0645\u0629",
|
||||
"home.faq.q3":
|
||||
"\u0647\u0644 \u0623\u062d\u062a\u0627\u062c \u0644\u0627\u0634\u062a\u0631\u0627\u0643\u0627\u062a \u0630\u0643\u0627\u0621 \u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0625\u0636\u0627\u0641\u064a\u0629 \u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 OpenCode\u061f",
|
||||
"OpenCode وكيل مفتوح المصدر يساعدك على كتابة وتشغيل الكود مع أي نموذج ذكاء اصطناعي. متاح كواجهة طرفية، وتطبيق سطح مكتب، أو امتداد IDE.",
|
||||
"home.faq.q2": "كيف أستخدم OpenCode؟",
|
||||
"home.faq.a2.before": "أسهل طريقة للبدء هي قراءة",
|
||||
"home.faq.a2.link": "المقدمة",
|
||||
"home.faq.q3": "هل أحتاج لاشتراكات ذكاء اصطناعي إضافية لاستخدام OpenCode؟",
|
||||
"home.faq.a3.p1":
|
||||
"\u0644\u064a\u0633 \u0628\u0627\u0644\u0636\u0631\u0648\u0631\u0629\u060c \u0641\u0640 OpenCode \u064a\u0623\u062a\u064a \u0645\u0639 \u0645\u062c\u0645\u0648\u0639\u0629 \u0645\u0646 \u0627\u0644\u0646\u0645\u0627\u0630\u062c \u0627\u0644\u0645\u062c\u0627\u0646\u064a\u0629 \u0627\u0644\u062a\u064a \u062a\u0633\u062a\u0637\u064a\u0639 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u0627 \u062f\u0648\u0646 \u0625\u0646\u0634\u0627\u0621 \u062d\u0633\u0627\u0628.",
|
||||
"home.faq.a3.p2.beforeZen":
|
||||
"\u0648\u0628\u062e\u0644\u0627\u0641 \u0630\u0644\u0643\u060c \u064a\u0645\u0643\u0646\u0643 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0646\u0645\u0627\u0630\u062c \u0627\u0644\u0628\u0631\u0645\u062c\u0629 \u0627\u0644\u0634\u0627\u0626\u0639\u0629 \u0628\u0625\u0646\u0634\u0627\u0621 \u062d\u0633\u0627\u0628",
|
||||
"ليس بالضرورة، فـ OpenCode يأتي مع مجموعة من النماذج المجانية التي تستطيع استخدامها دون إنشاء حساب.",
|
||||
"home.faq.a3.p2.beforeZen": "وبخلاف ذلك، يمكنك استخدام أي من نماذج البرمجة الشائعة بإنشاء حساب",
|
||||
"home.faq.a3.p2.afterZen": ".",
|
||||
"home.faq.a3.p3":
|
||||
"\u0645\u0639 \u0623\u0646\u0646\u0627 \u0646\u0634\u062c\u0651\u0639 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646 \u0639\u0644\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 Zen\u060c \u0641\u0625\u0646 OpenCode \u064a\u0639\u0645\u0644 \u0623\u064a\u0636\u064b\u0627 \u0645\u0639 \u0627\u0644\u0645\u0632\u0648\u0651\u062f\u064a\u0646 \u0627\u0644\u0634\u0627\u0626\u0639\u064a\u0646 \u0645\u062b\u0644 OpenAI\u060c Anthropic\u060c xAI\u060c \u0625\u0644\u062e.",
|
||||
"home.faq.a3.p4.beforeLocal":
|
||||
"\u0648\u064a\u0645\u0643\u0646\u0643 \u0623\u064a\u0636\u064b\u0627 \u0631\u0628\u0637",
|
||||
"home.faq.a3.p4.localLink": "\u0627\u0644\u0646\u0645\u0627\u0630\u062c \u0627\u0644\u0645\u062d\u0644\u064a\u0629",
|
||||
"home.faq.q4":
|
||||
"\u0647\u0644 \u064a\u0645\u0643\u0646\u0646\u064a \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0634\u062a\u0631\u0627\u0643\u0627\u062a\u064a \u0627\u0644\u062d\u0627\u0644\u064a\u0629 \u0645\u0639 OpenCode\u061f",
|
||||
"مع أننا نشجّع المستخدمين على استخدام Zen، فإن OpenCode يعمل أيضًا مع كل المزودين الشائعين مثل OpenAI، Anthropic، xAI إلخ.",
|
||||
"home.faq.a3.p4.beforeLocal": "ويمكنك أيضًا ربط",
|
||||
"home.faq.a3.p4.localLink": "النماذج المحلية",
|
||||
"home.faq.q4": "هل يمكنني استخدام اشتراكاتي الحالية مع OpenCode؟",
|
||||
"home.faq.a4.p1":
|
||||
"\u0646\u0639\u0645\u060c \u064a\u062f\u0639\u0645 OpenCode \u062e\u0637\u0637 \u0627\u0644\u0627\u0634\u062a\u0631\u0627\u0643 \u0645\u0646 \u0643\u0644 \u0627\u0644\u0645\u0632\u0648\u0651\u062f\u064a\u0646 \u0627\u0644\u0631\u0626\u064a\u0633\u064a\u064a\u0646. \u064a\u0645\u0643\u0646\u0643 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0634\u062a\u0631\u0627\u0643\u0627\u062a Claude Pro/Max\u060c ChatGPT Plus/Pro\u060c \u0623\u0648 GitHub Copilot.",
|
||||
"home.faq.q5":
|
||||
"\u0647\u0644 \u064a\u0645\u0643\u0646\u0646\u064a \u0627\u0633\u062a\u062e\u062f\u0627\u0645 OpenCode \u0641\u064a \u0627\u0644\u0637\u0631\u0641\u064a\u0629 \u0641\u0642\u0637\u061f",
|
||||
"home.faq.a5.beforeDesktop":
|
||||
"\u0644\u0627 \u0628\u0639\u062f \u0627\u0644\u0622\u0646! OpenCode \u0645\u062a\u0627\u062d \u0627\u0644\u0622\u0646 \u0643\u062a\u0637\u0628\u064a\u0642 \u0644\u0640",
|
||||
"home.faq.a5.desktop": "\u0633\u0637\u062d \u0627\u0644\u0645\u0643\u062a\u0628",
|
||||
"home.faq.a5.and": "\u0648",
|
||||
"home.faq.a5.web": "\u0627\u0644\u0648\u064a\u0628",
|
||||
"home.faq.q6": "\u0643\u0645 \u062a\u0643\u0644\u0641\u0629 OpenCode\u061f",
|
||||
"نعم، يدعم OpenCode خطط الاشتراك من كل المزودين الرئيسيين. يمكنك استخدام اشتراكات Claude Pro/Max، ChatGPT Plus/Pro، أو GitHub Copilot.",
|
||||
"home.faq.q5": "هل يمكنني استخدام OpenCode في الطرفية فقط؟",
|
||||
"home.faq.a5.beforeDesktop": "ليس بعد الآن! OpenCode متاح الآن كتطبيق لـ",
|
||||
"home.faq.a5.desktop": "سطح المكتب",
|
||||
"home.faq.a5.and": "و",
|
||||
"home.faq.a5.web": "الويب",
|
||||
"home.faq.q6": "كم تكلفة OpenCode؟",
|
||||
"home.faq.a6":
|
||||
"OpenCode \u0645\u062c\u0627\u0646\u064a 100% \u0644\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645. \u0643\u0645\u0627 \u064a\u0623\u062a\u064a \u0645\u0639 \u0645\u062c\u0645\u0648\u0639\u0629 \u0645\u0646 \u0627\u0644\u0646\u0645\u0627\u0630\u062c \u0627\u0644\u0645\u062c\u0627\u0646\u064a\u0629. \u0642\u062f \u062a\u0648\u062c\u062f \u062a\u0643\u0627\u0644\u064a\u0641 \u0625\u0636\u0627\u0641\u064a\u0629 \u0625\u0630\u0627 \u0631\u0628\u0637\u062a \u0645\u0632\u0648\u0651\u062f\u064b\u0627 \u0622\u062e\u0631.",
|
||||
"home.faq.q7":
|
||||
"\u0645\u0627\u0630\u0627 \u0639\u0646 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0648\u0627\u0644\u062e\u0635\u0648\u0635\u064a\u0629\u061f",
|
||||
"home.faq.a7.p1":
|
||||
"\u0644\u0627 \u064a\u062a\u0645 \u062a\u062e\u0632\u064a\u0646 \u0628\u064a\u0627\u0646\u0627\u062a\u0643 \u0625\u0644\u0627 \u0639\u0646\u062f\u0645\u0627 \u062a\u0633\u062a\u062e\u062f\u0645 \u0646\u0645\u0627\u0630\u062c\u0646\u0627 \u0627\u0644\u0645\u062c\u0627\u0646\u064a\u0629 \u0623\u0648 \u062a\u0646\u0634\u0626 \u0631\u0648\u0627\u0628\u0637 \u0642\u0627\u0628\u0644\u0629 \u0644\u0644\u0645\u0634\u0627\u0631\u0643\u0629.",
|
||||
"home.faq.a7.p2.beforeModels": "\u0627\u0639\u0631\u0641 \u0627\u0644\u0645\u0632\u064a\u062f \u0639\u0646",
|
||||
"home.faq.a7.p2.modelsLink": "\u0646\u0645\u0627\u0630\u062c\u0646\u0627",
|
||||
"home.faq.a7.p2.and": "\u0648",
|
||||
"home.faq.a7.p2.shareLink": "\u0635\u0641\u062d\u0627\u062a \u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0629",
|
||||
"home.faq.q8": "\u0647\u0644 OpenCode \u0645\u0641\u062a\u0648\u062d \u0627\u0644\u0645\u0635\u062f\u0631\u061f",
|
||||
"home.faq.a8.p1":
|
||||
"\u0646\u0639\u0645\u060c OpenCode \u0645\u0641\u062a\u0648\u062d \u0627\u0644\u0645\u0635\u062f\u0631 \u0628\u0627\u0644\u0643\u0627\u0645\u0644. \u0627\u0644\u0643\u0648\u062f \u0627\u0644\u0645\u0635\u062f\u0631\u064a \u0645\u062a\u0627\u062d \u0639\u0644\u0646\u064b\u0627 \u0639\u0644\u0649",
|
||||
"home.faq.a8.p2": "\u0628\u0645\u0648\u062c\u0628",
|
||||
"home.faq.a8.mitLicense": "\u0631\u062e\u0635\u0629 MIT",
|
||||
"OpenCode مجاني 100% للاستخدام. كما يأتي مع مجموعة من النماذج المجانية. قد توجد تكاليف إضافية إذا ربطت مزوّدًا آخر.",
|
||||
"home.faq.q7": "ماذا عن البيانات والخصوصية؟",
|
||||
"home.faq.a7.p1": "لا يتم تخزين بياناتك ومعلوماتك إلا عندما تستخدم نماذجنا المجانية أو تنشئ روابط قابلة للمشاركة.",
|
||||
"home.faq.a7.p2.beforeModels": "اعرف المزيد عن",
|
||||
"home.faq.a7.p2.modelsLink": "نماذجنا",
|
||||
"home.faq.a7.p2.and": "و",
|
||||
"home.faq.a7.p2.shareLink": "صفحات المشاركة",
|
||||
"home.faq.q8": "هل OpenCode مفتوح المصدر؟",
|
||||
"home.faq.a8.p1": "نعم، OpenCode مفتوح المصدر بالكامل. الكود المصدري متاح علنًا على",
|
||||
"home.faq.a8.p2": "بموجب",
|
||||
"home.faq.a8.mitLicense": "رخصة MIT",
|
||||
"home.faq.a8.p3":
|
||||
", \u0645\u0645\u0627 \u064a\u0639\u0646\u064a \u0623\u0646 \u0623\u064a \u0634\u062e\u0635 \u064a\u0633\u062a\u0637\u064a\u0639 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647 \u0623\u0648 \u062a\u0639\u062f\u064a\u0644\u0647 \u0623\u0648 \u0627\u0644\u0645\u0633\u0627\u0647\u0645\u0629 \u0641\u064a \u062a\u0637\u0648\u064a\u0631\u0647. \u064a\u0645\u0643\u0646 \u0644\u0623\u064a \u0634\u062e\u0635 \u0645\u0646 \u0627\u0644\u0645\u062c\u062a\u0645\u0639 \u0641\u062a\u062d \u0642\u0636\u0627\u064a\u0627\u060c \u0648\u062a\u0642\u062f\u064a\u0645 \u0637\u0644\u0628\u0627\u062a \u0627\u0644\u0633\u062d\u0628\u060c \u0648\u062a\u0648\u0633\u064a\u0639 \u0627\u0644\u0648\u0638\u0627\u0626\u0641.",
|
||||
"، مما يعني أن أي شخص يستطيع استخدامه أو تعديله أو المساهمة في تطويره. يمكن لأي شخص من المجتمع فتح قضايا، وتقديم طلبات سحب، وتوسيع الوظائف.",
|
||||
|
||||
"home.zenCta.title":
|
||||
"\u0646\u0645\u0627\u0630\u062c \u0645\u0648\u062b\u0648\u0642\u0629 \u0648\u0645\u062d\u0633\u0646\u0629 \u0644\u0648\u0643\u0644\u0627\u0621 \u0627\u0644\u0628\u0631\u0645\u062c\u0629",
|
||||
"home.zenCta.title": "وصول لنماذج محسنة وموثوقة لوكلاء البرمجة",
|
||||
"home.zenCta.body":
|
||||
"\u064a\u0645\u0646\u062d\u0643 Zen \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0645\u062c\u0645\u0648\u0639\u0629 \u0645\u062e\u062a\u0627\u0631\u0629 \u0628\u0639\u0646\u0627\u064a\u0629 \u0645\u0646 \u0646\u0645\u0627\u0630\u062c \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0627\u0644\u062a\u064a \u0627\u062e\u062a\u0628\u0631\u0647\u0627 OpenCode \u0648\u0642\u0627\u0633 \u0623\u062f\u0627\u0621\u0647\u0627 \u062e\u0635\u064a\u0635\u064b\u0627 \u0644\u0648\u0643\u0644\u0627\u0621 \u0627\u0644\u0628\u0631\u0645\u062c\u0629. \u0644\u0627 \u062d\u0627\u062c\u0629 \u0644\u0644\u0642\u0644\u0642 \u0628\u0634\u0623\u0646 \u0627\u062e\u062a\u0644\u0627\u0641 \u0627\u0644\u0623\u062f\u0627\u0621 \u0648\u0627\u0644\u062c\u0648\u062f\u0629 \u0628\u064a\u0646 \u0627\u0644\u0645\u0632\u0648\u0651\u062f\u064a\u0646\u061b \u0627\u0633\u062a\u062e\u062f\u0645 \u0646\u0645\u0627\u0630\u062c \u0645\u062d\u0642\u0642\u0629 \u062a\u0639\u0645\u0644.",
|
||||
"home.zenCta.link": "\u062a\u0639\u0631\u0641 \u0639\u0644\u0649 Zen",
|
||||
"يمنحك Zen الوصول إلى مجموعة مختارة بعناية من نماذج الذكاء الاصطناعي التي اختبرها OpenCode وقاس أداءها خصيصًا لوكلاء البرمجة. لا حاجة للقلق بشأن اختلاف الأداء والجودة بين المزودين، استخدم نماذج محققة تعمل بكفاءة.",
|
||||
"home.zenCta.link": "تعرف على Zen",
|
||||
|
||||
"download.title": "OpenCode | \u062a\u0646\u0632\u064a\u0644",
|
||||
|
||||
"zen.title":
|
||||
"OpenCode Zen | \u0645\u062c\u0645\u0648\u0639\u0629 \u0645\u062e\u062a\u0627\u0631\u0629 \u0645\u0646 \u0646\u0645\u0627\u0630\u062c \u0645\u0648\u062b\u0648\u0642\u0629 \u0648\u0645\u062d\u0633\u0646\u0629 \u0644\u0648\u0643\u0644\u0627\u0621 \u0627\u0644\u0628\u0631\u0645\u062c\u0629",
|
||||
"zen.hero.title":
|
||||
"\u0646\u0645\u0627\u0630\u062c \u0645\u0648\u062b\u0648\u0642\u0629 \u0648\u0645\u062d\u0633\u0646\u0629 \u0644\u0648\u0643\u0644\u0627\u0621 \u0627\u0644\u0628\u0631\u0645\u062c\u0629",
|
||||
"zen.title": "OpenCode Zen | مجموعة منسقة من النماذج المحسنة والموثوقة لوكلاء البرمجة",
|
||||
"zen.hero.title": "نماذج محسنة وموثوقة لوكلاء البرمجة",
|
||||
"zen.hero.body":
|
||||
"\u064a\u0645\u0646\u062d\u0643 Zen \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0645\u062c\u0645\u0648\u0639\u0629 \u0645\u062e\u062a\u0627\u0631\u0629 \u0628\u0639\u0646\u0627\u064a\u0629 \u0645\u0646 \u0646\u0645\u0627\u0630\u062c \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0627\u0644\u062a\u064a \u0627\u062e\u062a\u0628\u0631\u0647\u0627 OpenCode \u0648\u0642\u0627\u0633 \u0623\u062f\u0627\u0621\u0647\u0627 \u062e\u0635\u064a\u0635\u064b\u0627 \u0644\u0648\u0643\u0644\u0627\u0621 \u0627\u0644\u0628\u0631\u0645\u062c\u0629. \u0644\u0627 \u062d\u0627\u062c\u0629 \u0644\u0644\u0642\u0644\u0642 \u0628\u0634\u0623\u0646 \u0627\u062e\u062a\u0644\u0627\u0641 \u0627\u0644\u0623\u062f\u0627\u0621 \u0648\u0627\u0644\u062c\u0648\u062f\u0629 \u0628\u064a\u0646 \u0627\u0644\u0645\u0632\u0648\u0651\u062f\u064a\u0646\u061b \u0627\u0633\u062a\u062e\u062f\u0645 \u0646\u0645\u0627\u0630\u062c \u0645\u062d\u0642\u0642\u0629 \u062a\u0639\u0645\u0644.",
|
||||
"يمنحك Zen الوصول إلى مجموعة منسقة من نماذج الذكاء الاصطناعي التي اختبرها OpenCode وقاس أداءها خصيصًا لوكلاء البرمجة. لا حاجة للقلق بشأن اختلاف الأداء والجودة، استخدم نماذج محققة تعمل بكفاءة.",
|
||||
|
||||
"zen.faq.q1": "\u0645\u0627 \u0647\u0648 OpenCode Zen\u061f",
|
||||
"zen.faq.q1": "ما هو OpenCode Zen؟",
|
||||
"zen.faq.a1":
|
||||
"Zen \u0647\u0648 \u0645\u062c\u0645\u0648\u0639\u0629 \u0645\u062e\u062a\u0627\u0631\u0629 \u0645\u0646 \u0646\u0645\u0627\u0630\u062c \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0627\u0644\u062a\u064a \u062a\u0645 \u0627\u062e\u062a\u0628\u0627\u0631\u0647\u0627 \u0648\u0642\u064a\u0627\u0633 \u0627\u062f\u0627\u0626\u0647\u0627 \u0644\u0648\u0643\u0644\u0627\u0621 \u0627\u0644\u0628\u0631\u0645\u062c\u0629\u060c \u0648\u0642\u062f \u0627\u0646\u0634\u0623\u0647\u0627 \u0627\u0644\u0641\u0631\u064a\u0642 \u0648\u0631\u0627\u0621 OpenCode.",
|
||||
"zen.faq.q2": "\u0645\u0627 \u0627\u0644\u0630\u064a \u064a\u062c\u0639\u0644 Zen \u0627\u062f\u0642\u061f",
|
||||
"Zen هو مجموعة منسقة من نماذج الذكاء الاصطناعي التي تم اختبارها وقياس أدائها لوكلاء البرمجة، أنشأها الفريق المطور لـ OpenCode.",
|
||||
"zen.faq.q2": "ما الذي يجعل Zen أكثر دقة؟",
|
||||
"zen.faq.a2":
|
||||
"Zen \u064a\u0648\u0641\u0631 \u0641\u0642\u0637 \u0627\u0644\u0646\u0645\u0627\u0630\u062c \u0627\u0644\u062a\u064a \u062a\u0645 \u0627\u062e\u062a\u0628\u0627\u0631\u0647\u0627 \u0648\u0642\u064a\u0627\u0633 \u0627\u062f\u0627\u0626\u0647\u0627 \u062e\u0635\u064a\u0635\u0627 \u0644\u0648\u0643\u0644\u0627\u0621 \u0627\u0644\u0628\u0631\u0645\u062c\u0629. \u0644\u0646 \u062a\u0633\u062a\u062e\u062f\u0645 \u0633\u0643\u064a\u0646 \u0632\u0628\u062f\u0629 \u0644\u0642\u0637\u0639 \u0634\u0631\u064a\u062d\u0629 \u0644\u062d\u0645\u060c \u0644\u0627 \u062a\u0633\u062a\u062e\u062f\u0645 \u0646\u0645\u0627\u0630\u062c \u0633\u064a\u0626\u0629 \u0644\u0644\u0628\u0631\u0645\u062c\u0629.",
|
||||
"zen.faq.q3": "\u0647\u0644 Zen \u0627\u0631\u062e\u0635\u061f",
|
||||
"يوفر Zen فقط النماذج التي تم اختبارها وقياس أدائها خصيصًا لوكلاء البرمجة. لن تستخدم سكين زبدة لقطع شريحة لحم، فلا تستخدم نماذج ضعيفة للبرمجة.",
|
||||
"zen.faq.q3": "هل Zen أرخص؟",
|
||||
"zen.faq.a3":
|
||||
"Zen \u0644\u064a\u0633 \u0644\u0644\u0631\u0628\u062d. Zen \u064a\u0646\u0642\u0644 \u062a\u0643\u0627\u0644\u064a\u0641 \u0645\u0632\u0648\u062f\u064a \u0627\u0644\u0646\u0645\u0627\u0630\u062c \u0627\u0644\u064a\u0643 \u0645\u0628\u0627\u0634\u0631\u0629. \u0643\u0644\u0645\u0627 \u0632\u0627\u062f \u0627\u0633\u062a\u062e\u062f\u0627\u0645 Zen\u060c \u062a\u0645\u0643\u0646 OpenCode \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0648\u0636 \u0639\u0644\u0649 \u0627\u0633\u0639\u0627\u0631 \u0627\u0641\u0636\u0644 \u0648\u062a\u0645\u0631\u064a\u0631\u0647\u0627 \u0627\u0644\u064a\u0643.",
|
||||
"zen.faq.q4": "\u0643\u0645 \u062a\u0643\u0644\u0641 Zen\u061f",
|
||||
"Zen ليس للربح. يمرر Zen التكاليف من مزودي النماذج إليك مباشرة. كلما زاد استخدام Zen، تمكن OpenCode من التفاوض على أسعار أفضل وتمريرها إليك.",
|
||||
"zen.faq.q4": "كم تكلفة Zen؟",
|
||||
"zen.faq.a4.p1.beforePricing": "Zen",
|
||||
"zen.faq.a4.p1.pricingLink": "\u064a\u062d\u0627\u0633\u0628 \u0644\u0643\u0644 \u0637\u0644\u0628",
|
||||
"zen.faq.a4.p1.afterPricing":
|
||||
"\u0628\u062f\u0648\u0646 \u0627\u064a \u0632\u064a\u0627\u062f\u0627\u062a\u060c \u0644\u0630\u0627 \u062a\u062f\u0641\u0639 \u0628\u0627\u0644\u0636\u0628\u0637 \u0645\u0627 \u064a\u0641\u0631\u0636\u0647 \u0645\u0632\u0648\u062f \u0627\u0644\u0646\u0645\u0648\u0630\u062c.",
|
||||
"zen.faq.a4.p2.beforeAccount":
|
||||
"\u062a\u0639\u062a\u0645\u062f \u062a\u0643\u0644\u0641\u062a\u0643 \u0627\u0644\u0627\u062c\u0645\u0627\u0644\u064a\u0629 \u0639\u0644\u0649 \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645\u060c \u0648\u064a\u0645\u0643\u0646\u0643 \u062a\u0639\u064a\u064a\u0646 \u062d\u062f\u0648\u062f \u0627\u0646\u0641\u0627\u0642 \u0634\u0647\u0631\u064a\u0629 \u0641\u064a",
|
||||
"zen.faq.a4.p2.accountLink": "\u062d\u0633\u0627\u0628\u0643",
|
||||
"zen.faq.a4.p1.pricingLink": "يحاسب لكل طلب",
|
||||
"zen.faq.a4.p1.afterPricing": "بدون أي هوامش ربح، لذا تدفع بالضبط ما يفرضه مزود النموذج.",
|
||||
"zen.faq.a4.p2.beforeAccount": "تعتمد تكلفتك الإجمالية على الاستخدام، ويمكنك تعيين حدود إنفاق شهرية في",
|
||||
"zen.faq.a4.p2.accountLink": "حسابك",
|
||||
"zen.faq.a4.p3":
|
||||
"\u0644\u062a\u063a\u0637\u064a\u0629 \u0627\u0644\u062a\u0643\u0627\u0644\u064a\u0641\u060c \u062a\u0636\u064a\u0641 OpenCode \u0641\u0642\u0637 \u0631\u0633\u0648\u0645\u0627 \u0635\u063a\u064a\u0631\u0629 \u0644\u0645\u0639\u0627\u0644\u062c\u0629 \u0627\u0644\u062f\u0641\u0639 \u0642\u062f\u0631\u0647\u0627 $1.23 \u0644\u0643\u0644 \u0627\u0639\u0627\u062f\u0629 \u0634\u062d\u0646 \u0631\u0635\u064a\u062f \u0628\u0642\u064a\u0645\u0629 $20.",
|
||||
"zen.faq.q5":
|
||||
"\u0645\u0627\u0630\u0627 \u0639\u0646 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0648\u0627\u0644\u062e\u0635\u0648\u0635\u064a\u0629\u061f",
|
||||
"لتغطية التكاليف، يضيف OpenCode فقط رسومًا صغيرة لمعالجة الدفع قدرها 1.23 دولار لكل إعادة شحن رصيد بقيمة 20 دولارًا.",
|
||||
"zen.faq.q5": "ماذا عن البيانات والخصوصية؟",
|
||||
"zen.faq.a5.beforeExceptions":
|
||||
"\u064a\u062a\u0645 \u0627\u0633\u062a\u0636\u0627\u0641\u0629 \u062c\u0645\u064a\u0639 \u0646\u0645\u0627\u0630\u062c Zen \u0641\u064a \u0627\u0644\u0648\u0644\u0627\u064a\u0627\u062a \u0627\u0644\u0645\u062a\u062d\u062f\u0629. \u064a\u0644\u062a\u0632\u0645 \u0627\u0644\u0645\u0632\u0648\u062f\u0648\u0646 \u0628\u0633\u064a\u0627\u0633\u0629 \u0639\u062f\u0645 \u0627\u0644\u0627\u062d\u062a\u0641\u0627\u0638 \u0628\u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0648\u0644\u0627 \u064a\u0633\u062a\u062e\u062f\u0645\u0648\u0646 \u0628\u064a\u0627\u0646\u0627\u062a\u0643 \u0644\u062a\u062f\u0631\u064a\u0628 \u0627\u0644\u0646\u0645\u0627\u0630\u062c\u060c \u0645\u0639",
|
||||
"zen.faq.a5.exceptionsLink":
|
||||
"\u0627\u0644\u0627\u0633\u062a\u062b\u0646\u0627\u0621\u0627\u062a \u0627\u0644\u062a\u0627\u0644\u064a\u0629",
|
||||
"zen.faq.q6":
|
||||
"\u0647\u0644 \u064a\u0645\u0643\u0646\u0646\u064a \u062a\u0639\u064a\u064a\u0646 \u062d\u062f\u0648\u062f \u0627\u0646\u0641\u0627\u0642\u061f",
|
||||
"zen.faq.a6":
|
||||
"\u0646\u0639\u0645\u060c \u064a\u0645\u0643\u0646\u0643 \u062a\u0639\u064a\u064a\u0646 \u062d\u062f\u0648\u062f \u0627\u0646\u0641\u0627\u0642 \u0634\u0647\u0631\u064a\u0629 \u0641\u064a \u062d\u0633\u0627\u0628\u0643.",
|
||||
"zen.faq.q7": "\u0647\u0644 \u064a\u0645\u0643\u0646\u0646\u064a \u0627\u0644\u0627\u0644\u063a\u0627\u0621\u061f",
|
||||
"zen.faq.a7":
|
||||
"\u0646\u0639\u0645\u060c \u064a\u0645\u0643\u0646\u0643 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0641\u0648\u062a\u0631\u0629 \u0641\u064a \u0627\u064a \u0648\u0642\u062a \u0648\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0631\u0635\u064a\u062f\u0643 \u0627\u0644\u0645\u062a\u0628\u0642\u064a.",
|
||||
"zen.faq.q8":
|
||||
"\u0647\u0644 \u064a\u0645\u0643\u0646\u0646\u064a \u0627\u0633\u062a\u062e\u062f\u0627\u0645 Zen \u0645\u0639 \u0648\u0643\u0644\u0627\u0621 \u0628\u0631\u0645\u062c\u0629 \u0627\u062e\u0631\u064a\u0646\u061f",
|
||||
"تتم استضافة جميع نماذج Zen في الولايات المتحدة. يتبع المزودون سياسة عدم الاحتفاظ بالبيانات ولا يستخدمون بياناتك لتدريب النماذج، مع",
|
||||
"zen.faq.a5.exceptionsLink": "الاستثناءات التالية",
|
||||
"zen.faq.q6": "هل يمكنني تعيين حدود للإنفاق؟",
|
||||
"zen.faq.a6": "نعم، يمكنك تعيين حدود إنفاق شهرية في حسابك.",
|
||||
"zen.faq.q7": "هل يمكنني الإلغاء؟",
|
||||
"zen.faq.a7": "نعم، يمكنك تعطيل الفوترة في أي وقت واستخدام رصيدك المتبقي.",
|
||||
"zen.faq.q8": "هل يمكنني استخدام Zen مع وكلاء برمجة آخرين؟",
|
||||
"zen.faq.a8":
|
||||
"\u0628\u064a\u0646\u0645\u0627 \u064a\u0639\u0645\u0644 Zen \u0628\u0634\u0643\u0644 \u0631\u0627\u0626\u0639 \u0645\u0639 OpenCode\u060c \u064a\u0645\u0643\u0646\u0643 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 Zen \u0645\u0639 \u0627\u064a \u0648\u0643\u064a\u0644. \u0627\u062a\u0628\u0639 \u062a\u0639\u0644\u064a\u0645\u0627\u062a \u0627\u0644\u0627\u0639\u062f\u0627\u062f \u0641\u064a \u0648\u0643\u064a\u0644 \u0627\u0644\u0628\u0631\u0645\u062c\u0629 \u0627\u0644\u0645\u0641\u0636\u0644 \u0644\u062f\u064a\u0643.",
|
||||
"بينما يعمل Zen بشكل رائع مع OpenCode، يمكنك استخدام Zen مع أي وكيل. اتبع تعليمات الإعداد في وكيل البرمجة المفضل لديك.",
|
||||
|
||||
"zen.cta.start": "ابدأ مع Zen",
|
||||
"zen.pricing.title": "أضف 20 دولارًا ادفع حسب رصيدك",
|
||||
"zen.pricing.title": "أضف رصيد 20 دولار (دفع حسب الاستخدام)",
|
||||
"zen.pricing.fee": "(+1.23 دولار رسوم معالجة البطاقة)",
|
||||
"zen.pricing.body": "استخدم مع أي وكيل. ضبط حدود الإنفاق الشهري. قم بالإلغاء في أي وقت.",
|
||||
"zen.problem.title": "ما هي المشكلة التي يحلها Zen؟",
|
||||
"zen.pricing.body": "استخدمه مع أي وكيل. عيّن حدود الإنفاق الشهري. ألغِ في أي وقت.",
|
||||
"zen.problem.title": "ما المشكلة التي يحلها Zen؟",
|
||||
"zen.problem.body":
|
||||
"هناك العديد من النماذج المتاحة، ولكن القليل منها فقط يعمل بشكل جيد مع وكلاء البرمجة. يقوم معظم مقدمي الخدمة بتكوينها بشكل مختلف وبنتائج مختلفة.",
|
||||
"zen.problem.subtitle": "نحن نعمل على إصلاح هذه المشكلة للجميع، وليس فقط لمستخدمي OpenCode.",
|
||||
"zen.problem.item1": "اختبار نماذج مختارة واستشارة فرقهم",
|
||||
"zen.problem.item2": "العمل مع مقدمي الخدمة لضمان تسليمهم بشكل صحيح",
|
||||
"zen.problem.item3": "نوصي بقياس جميع مجموعات موفري النماذج",
|
||||
"هناك العديد من النماذج المتاحة، ولكن القليل منها فقط يعمل بشكل جيد مع وكلاء البرمجة. يقوم معظم مقدمي الخدمة بتكوينها بشكل مختلف مما يعطي نتائج متفاوتة.",
|
||||
"zen.problem.subtitle": "نحن نعمل على إصلاح هذا للجميع، وليس فقط لمستخدمي OpenCode.",
|
||||
"zen.problem.item1": "اختبار نماذج مختارة واستشارة فرقها",
|
||||
"zen.problem.item2": "العمل مع مقدمي الخدمة لضمان تسليمها بشكل صحيح",
|
||||
"zen.problem.item3": "قياس أداء جميع مجموعات النماذج والمزودين التي نوصي بها",
|
||||
"zen.how.title": "كيف يعمل Zen",
|
||||
"zen.how.body": "بينما نقترح عليك استخدام Zen مع OpenCode، يمكنك استخدام Zen مع أي وكيل.",
|
||||
"zen.how.step1.title": "قم بالتسجيل وأضف رصيدًا بقيمة 20 دولارًا",
|
||||
"zen.how.step1.title": "سجّل وأضف رصيدًا بقيمة 20 دولارًا",
|
||||
"zen.how.step1.beforeLink": "اتبع",
|
||||
"zen.how.step1.link": "تعليمات الإعداد",
|
||||
"zen.how.step2.title": "استخدم Zen بسعر شفاف",
|
||||
"zen.how.step2.link": "الدفع لكل طلب",
|
||||
"zen.how.step2.afterLink": "مع صفر هوامش الربح",
|
||||
"zen.how.step3.title": "التعبئة التلقائية",
|
||||
"zen.how.step2.title": "استخدم Zen بتسعير شفاف",
|
||||
"zen.how.step2.link": "ادفع لكل طلب",
|
||||
"zen.how.step2.afterLink": "بدون أي هوامش ربح",
|
||||
"zen.how.step3.title": "شحن تلقائي",
|
||||
"zen.how.step3.body": "عندما يصل رصيدك إلى 5 دولارات، سنضيف تلقائيًا 20 دولارًا",
|
||||
"zen.privacy.title": "خصوصيتك مهمة بالنسبة لنا",
|
||||
"zen.privacy.beforeExceptions":
|
||||
"جميع موديلات Zen مستضافة في الولايات المتحدة. يتبع مقدمو الخدمة سياسة عدم الاحتفاظ بالبيانات ولا يستخدمون بياناتك للتدريب النموذجي",
|
||||
"تتم استضافة جميع نماذج Zen في الولايات المتحدة. يتبع المزودون سياسة عدم الاحتفاظ بالبيانات ولا يستخدمون بياناتك لتدريب النماذج، مع",
|
||||
"zen.privacy.exceptionsLink": "الاستثناءات التالية",
|
||||
"download.meta.description":
|
||||
"\u0642\u0645 \u0628\u062a\u0646\u0632\u064a\u0644 OpenCode \u0644\u0640 macOS\u060c Windows\u060c \u0648Linux",
|
||||
"download.hero.title": "\u062a\u0646\u0632\u064a\u0644 OpenCode",
|
||||
"download.hero.subtitle":
|
||||
"\u0645\u062a\u0627\u062d \u0628\u0646\u0633\u062e\u0629 \u062a\u062c\u0631\u064a\u0628\u064a\u0629 \u0644\u0640 macOS\u060c Windows\u060c \u0648Linux",
|
||||
"download.hero.button": "\u062a\u0646\u0632\u064a\u0644 \u0644\u0640 {{os}}",
|
||||
"download.section.terminal": "OpenCode \u0644\u0644\u0637\u0631\u0641\u064a\u0629",
|
||||
"download.section.desktop": "OpenCode \u0644\u0633\u0637\u062d \u0627\u0644\u0645\u0643\u062a\u0628 (Beta)",
|
||||
"download.section.extensions": "\u0627\u0645\u062a\u062f\u0627\u062f\u0627\u062a OpenCode",
|
||||
"download.section.integrations": "\u062a\u0643\u0627\u0645\u0644\u0627\u062a OpenCode",
|
||||
"download.action.download": "\u062a\u0646\u0632\u064a\u0644",
|
||||
"download.action.install": "\u062a\u062b\u0628\u064a\u062a",
|
||||
|
||||
"download.platform.macosAppleSilicon": "macOS (Apple Silicon)",
|
||||
"download.platform.macosIntel": "macOS (Intel)",
|
||||
"download.platform.windowsX64": "Windows (x64)",
|
||||
"download.platform.linuxDeb": "Linux (.deb)",
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
"download.faq.a3.beforeLocal":
|
||||
"\u0644\u064a\u0633 \u0628\u0627\u0644\u0636\u0631\u0648\u0631\u0629\u060c \u0644\u0643\u0646 \u0639\u0644\u0649 \u0627\u0644\u0627\u0631\u062c\u062d. \u0633\u062a\u062d\u062a\u0627\u062c \u0627\u0644\u0649 \u0627\u0634\u062a\u0631\u0627\u0643 \u0628\u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0627\u0630\u0627 \u0643\u0646\u062a \u062a\u0631\u064a\u062f \u0631\u0628\u0637 OpenCode \u0628\u0645\u0632\u0648\u062f \u0645\u062f\u0641\u0648\u0639\u060c \u0644\u0643\u0646 \u064a\u0645\u0643\u0646\u0643 \u0627\u0644\u0639\u0645\u0644 \u0645\u0639",
|
||||
"download.faq.a3.localLink": "\u0646\u0645\u0627\u0630\u062c \u0645\u062d\u0644\u064a\u0629",
|
||||
"download.faq.a3.afterLocal.beforeZen":
|
||||
"\u0645\u062c\u0627\u0646\u0627. \u0628\u064a\u0646\u0645\u0627 \u0646\u0634\u062c\u0639 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646 \u0639\u0644\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645",
|
||||
"download.faq.a3.afterZen":
|
||||
"\u060c \u0641\u0627\u0646 OpenCode \u064a\u0639\u0645\u0644 \u0645\u0639 \u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0632\u0648\u062f\u064a\u0646 \u0627\u0644\u0634\u0627\u0626\u0639\u064a\u0646 \u0645\u062b\u0644 OpenAI \u0648Anthropic \u0648xAI \u0648\u063a\u064a\u0631\u0647\u0627.",
|
||||
"download.faq.a5.p1":
|
||||
"OpenCode \u0645\u062c\u0627\u0646\u064a 100% \u0644\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645.",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"\u0627\u064a \u062a\u0643\u0627\u0644\u064a\u0641 \u0627\u0636\u0627\u0641\u064a\u0629 \u0633\u062a\u0627\u062a\u064a \u0645\u0646 \u0627\u0634\u062a\u0631\u0627\u0643\u0643 \u0644\u062f\u0649 \u0645\u0632\u0648\u062f \u0627\u0644\u0646\u0645\u0627\u0630\u062c. \u0631\u063a\u0645 \u0627\u0646 OpenCode \u064a\u0639\u0645\u0644 \u0645\u0639 \u0627\u064a \u0645\u0632\u0648\u062f \u0646\u0645\u0627\u0630\u062c\u060c \u0646\u0648\u0635\u064a \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645",
|
||||
"download.faq.a5.p2.afterZen": ".",
|
||||
"download.faq.a6.p1":
|
||||
"\u064a\u062a\u0645 \u062d\u0641\u0638 \u0628\u064a\u0627\u0646\u0627\u062a\u0643 \u0648\u0645\u0639\u0644\u0648\u0645\u0627\u062a\u0643 \u0641\u0642\u0637 \u0639\u0646\u062f \u0627\u0646\u0634\u0627\u0621 \u0631\u0648\u0627\u0628\u0637 \u0642\u0627\u0628\u0644\u0629 \u0644\u0644\u0645\u0634\u0627\u0631\u0643\u0629 \u0641\u064a OpenCode.",
|
||||
"download.faq.a6.p2.beforeShare": "\u0627\u0639\u0631\u0641 \u0627\u0644\u0645\u0632\u064a\u062f \u0639\u0646",
|
||||
"download.faq.a6.shareLink": "\u0635\u0641\u062d\u0627\u062a \u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0629",
|
||||
"black.meta.title": "OpenCode Black | الوصول إلى أفضل نماذج البرمجة في العالم",
|
||||
"black.meta.description": "احصل على وصول إلى Claude، GPT، Gemini والمزيد مع خطط اشتراك OpenCode Black.",
|
||||
"black.hero.title": "الوصول إلى أفضل نماذج البرمجة في العالم",
|
||||
"black.hero.subtitle": "بما في ذلك Claude، GPT، Gemini والمزيد",
|
||||
"black.title": "OpenCode Black | الأسعار",
|
||||
"black.plan.icon20": "خطة Black 20",
|
||||
"black.plan.icon100": "خطة Black 100",
|
||||
"black.plan.icon200": "خطة Black 200",
|
||||
"black.plan.multiplier100": "استخدام أكثر بـ 5 أضعاف من Black 20",
|
||||
"black.plan.multiplier200": "استخدام أكثر بـ 20 ضعفًا من Black 20",
|
||||
"black.price.perMonth": "شهريًا",
|
||||
"black.price.perPersonBilledMonthly": "للشخص الواحد، يُفوتر شهريًا",
|
||||
"black.terms.1": "لن يبدأ اشتراكك على الفور",
|
||||
"black.terms.2": "ستتم إضافتك إلى قائمة الانتظار وتفعيلك قريبًا",
|
||||
"black.terms.3": "لن يتم خصم المبلغ من بطاقتك إلا عند تفعيل اشتراكك",
|
||||
"black.terms.4": "تطبق حدود الاستخدام، وقد يصل الاستخدام المؤتمت بكثافة إلى الحدود بشكل أسرع",
|
||||
"black.terms.5": "الاشتراكات للأفراد، تواصل مع قسم المؤسسات للفرق",
|
||||
"black.terms.6": "قد يتم تعديل الحدود وقد يتم إيقاف الخطط في المستقبل",
|
||||
"black.terms.7": "ألغِ اشتراكك في أي وقت",
|
||||
"black.action.continue": "متابعة",
|
||||
"black.finePrint.beforeTerms": "الأسعار المعروضة لا تشمل الضرائب المطبقة",
|
||||
"black.finePrint.terms": "شروط الخدمة",
|
||||
"black.workspace.title": "OpenCode Black | اختر مساحة العمل",
|
||||
"black.workspace.selectPlan": "اختر مساحة عمل لهذه الخطة",
|
||||
"black.workspace.name": "مساحة العمل {{n}}",
|
||||
"black.subscribe.title": "اشترك في OpenCode Black",
|
||||
"black.subscribe.paymentMethod": "طريقة الدفع",
|
||||
"black.subscribe.loadingPaymentForm": "جارٍ تحميل نموذج الدفع...",
|
||||
"black.subscribe.selectWorkspaceToContinue": "اختر مساحة عمل للمتابعة",
|
||||
"black.subscribe.failurePrefix": "أوه لا!",
|
||||
"black.subscribe.error.generic": "حدث خطأ",
|
||||
"black.subscribe.error.invalidPlan": "خطة غير صالحة",
|
||||
"black.subscribe.error.workspaceRequired": "معرف مساحة العمل مطلوب",
|
||||
"black.subscribe.error.alreadySubscribed": "مساحة العمل هذه لديها اشتراك بالفعل",
|
||||
"black.subscribe.processing": "جارٍ المعالجة...",
|
||||
"black.subscribe.submit": "اشترك بمبلغ ${{plan}}",
|
||||
"black.subscribe.form.chargeNotice": "لن يتم خصم المبلغ إلا عند تفعيل اشتراكك",
|
||||
"black.subscribe.success.title": "أنت في قائمة انتظار OpenCode Black",
|
||||
"black.subscribe.success.subscriptionPlan": "خطة الاشتراك",
|
||||
"black.subscribe.success.planName": "OpenCode Black {{plan}}",
|
||||
"black.subscribe.success.amount": "المبلغ",
|
||||
"black.subscribe.success.amountValue": "${{plan}} شهريًا",
|
||||
"black.subscribe.success.paymentMethod": "طريقة الدفع",
|
||||
"black.subscribe.success.dateJoined": "تاريخ الانضمام",
|
||||
"black.subscribe.success.chargeNotice": "سيتم خصم المبلغ من بطاقتك عند تفعيل اشتراكك",
|
||||
|
||||
"enterprise.title":
|
||||
"OpenCode | \u062d\u0644\u0648\u0644 \u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062a \u0644\u0645\u0624\u0633\u0633\u062a\u0643",
|
||||
"enterprise.meta.description":
|
||||
"\u062a\u0648\u0627\u0635\u0644 \u0645\u0639 OpenCode \u0644\u062d\u0644\u0648\u0644 \u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062a",
|
||||
"enterprise.hero.title": "\u0643\u0648\u062f\u0643 \u0645\u0644\u0643\u0643",
|
||||
"enterprise.hero.body1":
|
||||
"\u064a\u0639\u0645\u0644 OpenCode \u0628\u0623\u0645\u0627\u0646 \u062f\u0627\u062e\u0644 \u0645\u0624\u0633\u0633\u062a\u0643 \u062f\u0648\u0646 \u062a\u062e\u0632\u064a\u0646 \u0623\u064a \u0628\u064a\u0627\u0646\u0627\u062a \u0623\u0648 \u0633\u064a\u0627\u0642\u060c \u0648\u062f\u0648\u0646 \u0642\u064a\u0648\u062f \u062a\u0631\u062e\u064a\u0635 \u0623\u0648 \u0627\u062f\u0639\u0627\u0621\u0627\u062a \u0645\u0644\u0643\u064a\u0629. \u0627\u0628\u062f\u0623 \u062a\u062c\u0631\u0628\u0629 \u0645\u0639 \u0641\u0631\u064a\u0642\u0643\u060c \u062b\u0645 \u0627\u0646\u0634\u0631\u0647 \u0639\u0644\u0649 \u0645\u0633\u062a\u0648\u0649 \u0627\u0644\u0645\u0624\u0633\u0633\u0629 \u0639\u0628\u0631 \u062f\u0645\u062c\u0647 \u0645\u0639 SSO \u0648\u0628\u0648\u0627\u0628\u0629 \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0627\u0644\u062f\u0627\u062e\u0644\u064a\u0629 \u0644\u062f\u064a\u0643.",
|
||||
"enterprise.hero.body2":
|
||||
"\u0623\u062e\u0628\u0631\u0646\u0627 \u0643\u064a\u0641 \u064a\u0645\u0643\u0646\u0646\u0627 \u0627\u0644\u0645\u0633\u0627\u0639\u062f\u0629.",
|
||||
"enterprise.form.name.label": "\u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u0643\u0627\u0645\u0644",
|
||||
"enterprise.form.name.placeholder": "\u062c\u064a\u0641 \u0628\u064a\u0632\u0648\u0633",
|
||||
"enterprise.form.role.label": "\u0627\u0644\u0645\u0646\u0635\u0628",
|
||||
"enterprise.form.role.placeholder":
|
||||
"\u0631\u0626\u064a\u0633 \u0645\u062c\u0644\u0633 \u0627\u0644\u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u062a\u0646\u0641\u064a\u0630\u064a",
|
||||
"enterprise.form.email.label":
|
||||
"\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0644\u0644\u0634\u0631\u0643\u0629",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label":
|
||||
"\u0645\u0627 \u0627\u0644\u0645\u0634\u0643\u0644\u0629 \u0627\u0644\u062a\u064a \u062a\u062d\u0627\u0648\u0644 \u062d\u0644\u0647\u0627\u061f",
|
||||
"enterprise.form.message.placeholder":
|
||||
"\u0646\u062d\u062a\u0627\u062c \u0645\u0633\u0627\u0639\u062f\u0629 \u0641\u064a...",
|
||||
"enterprise.form.send": "\u0625\u0631\u0633\u0627\u0644",
|
||||
"enterprise.form.sending": "\u062c\u0627\u0631\u064d \u0627\u0644\u0625\u0631\u0633\u0627\u0644...",
|
||||
"enterprise.form.success":
|
||||
"\u062a\u0645 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0631\u0633\u0627\u0644\u0629\u060c \u0633\u0646\u062a\u0648\u0627\u0635\u0644 \u0645\u0639\u0643 \u0642\u0631\u064a\u0628\u064b\u0627.",
|
||||
"enterprise.faq.title": "\u0627\u0644\u0623\u0633\u0626\u0644\u0629 \u0627\u0644\u0634\u0627\u0626\u0639\u0629",
|
||||
"enterprise.faq.q1": "\u0645\u0627 \u0647\u0648 OpenCode Enterprise\u061f",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise \u0645\u062e\u0635\u0635 \u0644\u0644\u0645\u0624\u0633\u0633\u0627\u062a \u0627\u0644\u062a\u064a \u062a\u0631\u064a\u062f \u0627\u0644\u062a\u0623\u0643\u062f \u0645\u0646 \u0623\u0646 \u0627\u0644\u0643\u0648\u062f \u0648\u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u0644\u0627 \u062a\u063a\u0627\u062f\u0631 \u0628\u0646\u064a\u062a\u0647\u0627 \u0627\u0644\u062a\u062d\u062a\u064a\u0629 \u0623\u0628\u062f\u064b\u0627. \u064a\u062a\u062d\u0642\u0642 \u0630\u0644\u0643 \u0639\u0628\u0631 \u0625\u0639\u062f\u0627\u062f \u0645\u0631\u0643\u0632\u064a \u064a\u0646\u062f\u0645\u062c \u0645\u0639 SSO \u0648\u0628\u0648\u0627\u0628\u0629 \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0627\u0644\u062f\u0627\u062e\u0644\u064a\u0629 \u0644\u062f\u064a\u0643.",
|
||||
"enterprise.faq.q2":
|
||||
"\u0643\u064a\u0641 \u0623\u0628\u062f\u0623 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645 OpenCode Enterprise\u061f",
|
||||
"enterprise.faq.a2":
|
||||
"\u0627\u0628\u062f\u0623 \u0628\u0628\u0633\u0627\u0637\u0629 \u0628\u062a\u062c\u0631\u0628\u0629 \u062f\u0627\u062e\u0644\u064a\u0629 \u0645\u0639 \u0641\u0631\u064a\u0642\u0643. \u0627\u0641\u062a\u0631\u0627\u0636\u064a\u064b\u0627\u060c \u0644\u0627 \u064a\u0642\u0648\u0645 OpenCode \u0628\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0643\u0648\u062f \u0623\u0648 \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0633\u064a\u0627\u0642\u060c \u0645\u0645\u0627 \u064a\u062c\u0639\u0644 \u0627\u0644\u0628\u062f\u0621 \u0633\u0647\u0644\u064b\u0627. \u0628\u0639\u062f \u0630\u0644\u0643\u060c \u062a\u0648\u0627\u0635\u0644 \u0645\u0639\u0646\u0627 \u0644\u0645\u0646\u0627\u0642\u0634\u0629 \u0627\u0644\u0623\u0633\u0639\u0627\u0631 \u0648\u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u062a\u0646\u0641\u064a\u0630.",
|
||||
"enterprise.faq.q3":
|
||||
"\u0643\u064a\u0641 \u062a\u0639\u0645\u0644 \u062a\u0633\u0639\u064a\u0631\u0629 \u0627\u0644\u0645\u0624\u0633\u0633\u0627\u062a\u061f",
|
||||
"enterprise.faq.a3":
|
||||
"\u0646\u0642\u062f\u0645 \u062a\u0633\u0639\u064a\u0631\u064b\u0627 \u0644\u0644\u0645\u0624\u0633\u0633\u0627\u062a \u062d\u0633\u0628 \u0639\u062f\u062f \u0627\u0644\u0645\u0642\u0627\u0639\u062f. \u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0644\u062f\u064a\u0643 \u0628\u0648\u0627\u0628\u0629 LLM \u062e\u0627\u0635\u0629 \u0628\u0643\u060c \u0641\u0644\u0646 \u0646\u0641\u0631\u0636 \u0631\u0633\u0648\u0645\u064b\u0627 \u0639\u0644\u0649 \u0627\u0644\u062a\u0648\u0643\u0646\u0627\u062a \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u0629. \u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u062a\u0641\u0627\u0635\u064a\u0644\u060c \u062a\u0648\u0627\u0635\u0644 \u0645\u0639\u0646\u0627 \u0644\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0639\u0631\u0636 \u0633\u0639\u0631 \u0645\u062e\u0635\u0635 \u0628\u0646\u0627\u0621\u064b \u0639\u0644\u0649 \u0627\u062d\u062a\u064a\u0627\u062c\u0627\u062a \u0645\u0624\u0633\u0633\u062a\u0643.",
|
||||
"enterprise.faq.q4":
|
||||
"\u0647\u0644 \u0628\u064a\u0627\u0646\u0627\u062a\u064a \u0622\u0645\u0646\u0629 \u0645\u0639 OpenCode Enterprise\u061f",
|
||||
"enterprise.faq.a4":
|
||||
"\u0646\u0639\u0645. \u0644\u0627 \u064a\u0642\u0648\u0645 OpenCode \u0628\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0643\u0648\u062f \u0623\u0648 \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0633\u064a\u0627\u0642. \u062a\u062a\u0645 \u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0639\u0627\u0644\u062c\u0629 \u0645\u062d\u0644\u064a\u064b\u0627 \u0623\u0648 \u0639\u0628\u0631 \u0627\u0633\u062a\u062f\u0639\u0627\u0621\u0627\u062a API \u0645\u0628\u0627\u0634\u0631\u0629 \u0625\u0644\u0649 \u0645\u0632\u0648\u062f \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a \u0644\u062f\u064a\u0643. \u0648\u0645\u0639 \u0627\u0644\u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0645\u0631\u0643\u0632\u064a \u0648\u062a\u0643\u0627\u0645\u0644 SSO\u060c \u062a\u0638\u0644 \u0628\u064a\u0627\u0646\u0627\u062a\u0643 \u0622\u0645\u0646\u0629 \u062f\u0627\u062e\u0644 \u0627\u0644\u0628\u0646\u064a\u0629 \u0627\u0644\u062a\u062d\u062a\u064a\u0629 \u0644\u0645\u0624\u0633\u0633\u062a\u0643.",
|
||||
|
||||
"brand.title":
|
||||
"OpenCode | \u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062a\u062c\u0627\u0631\u064a\u0629",
|
||||
"brand.meta.description":
|
||||
"\u0625\u0631\u0634\u0627\u062f\u0627\u062a \u0639\u0644\u0627\u0645\u0629 OpenCode \u0627\u0644\u062a\u062c\u0627\u0631\u064a\u0629",
|
||||
"brand.heading":
|
||||
"\u0625\u0631\u0634\u0627\u062f\u0627\u062a \u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062a\u062c\u0627\u0631\u064a\u0629",
|
||||
"brand.subtitle":
|
||||
"\u0645\u0648\u0627\u0631\u062f \u0648\u0645\u0644\u0641\u0627\u062a \u0644\u0645\u0633\u0627\u0639\u062f\u062a\u0643 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u0644 \u0645\u0639 \u0639\u0644\u0627\u0645\u0629 OpenCode \u0627\u0644\u062a\u062c\u0627\u0631\u064a\u0629.",
|
||||
"brand.downloadAll":
|
||||
"\u062a\u0646\u0632\u064a\u0644 \u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0644\u0641\u0627\u062a",
|
||||
"changelog.title": "OpenCode | \u0633\u062c\u0644 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a",
|
||||
"changelog.meta.description":
|
||||
"\u0645\u0644\u0627\u062d\u0638\u0627\u062a \u0627\u0644\u0625\u0635\u062f\u0627\u0631 \u0648\u0633\u062c\u0644 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0644\u0640 OpenCode",
|
||||
"changelog.hero.title": "\u0633\u062c\u0644 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a",
|
||||
"changelog.hero.subtitle":
|
||||
"\u062a\u062d\u062f\u064a\u062b\u0627\u062a \u0648\u062a\u062d\u0633\u064a\u0646\u0627\u062a \u062c\u062f\u064a\u062f\u0629 \u0644\u0640 OpenCode",
|
||||
"changelog.empty":
|
||||
"\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0623\u064a \u0625\u062f\u062e\u0627\u0644\u0627\u062a \u0641\u064a \u0633\u062c\u0644 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a.",
|
||||
"changelog.viewJson": "\u0639\u0631\u0636 JSON",
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "مفاتيح API",
|
||||
"workspace.nav.members": "أعضاء",
|
||||
"workspace.nav.billing": "الفواتير",
|
||||
"workspace.nav.settings": "إعدادات",
|
||||
"workspace.home.banner.beforeLink": "نماذج محسنة موثوقة لوكلاء الترميز.",
|
||||
"workspace.home.billing.loading": "تحميل...",
|
||||
"workspace.nav.members": "الأعضاء",
|
||||
"workspace.nav.billing": "الفوترة",
|
||||
"workspace.nav.settings": "الإعدادات",
|
||||
|
||||
"workspace.home.banner.beforeLink": "نماذج محسنة وموثوقة لوكلاء البرمجة.",
|
||||
"workspace.home.billing.loading": "جارٍ التحميل...",
|
||||
"workspace.home.billing.enable": "تمكين الفوترة",
|
||||
"workspace.home.billing.currentBalance": "الرصيد الحالي",
|
||||
"workspace.newUser.feature.tested.title": "نماذج تم اختبارها والتحقق منها",
|
||||
"workspace.newUser.feature.tested.body": "لقد قمنا بقياس واختبار النماذج خصيصًا لوكلاء الترميز لضمان أفضل أداء.",
|
||||
|
||||
"workspace.newUser.feature.tested.title": "نماذج مُختبرة ومحققة",
|
||||
"workspace.newUser.feature.tested.body": "لقد قمنا بقياس واختبار النماذج خصيصًا لوكلاء البرمجة لضمان أفضل أداء.",
|
||||
"workspace.newUser.feature.quality.title": "أعلى جودة",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"الوصول إلى النماذج التي تم تكوينها لتحقيق الأداء الأمثل - لا يوجد تخفيضات أو توجيه إلى موفري الخدمة الأرخص.",
|
||||
"workspace.newUser.feature.lockin.title": "بدون احتجاز بمزوّد واحد",
|
||||
"الوصول إلى النماذج التي تم تكوينها لتحقيق الأداء الأمثل - لا تقليل للجودة أو توجيه إلى موفري خدمة أرخص.",
|
||||
"workspace.newUser.feature.lockin.title": "لا قيود على المزود",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"استخدم Zen مع أي وكيل ترميز، واستمر في استخدام موفري الخدمات الآخرين مع opencode وقتما تشاء.",
|
||||
"workspace.newUser.copyApiKey": "انسخ مفتاح API",
|
||||
"استخدم Zen مع أي وكيل برمجة، واستمر في استخدام موفرين آخرين مع opencode وقتما تشاء.",
|
||||
"workspace.newUser.copyApiKey": "نسخ مفتاح API",
|
||||
"workspace.newUser.copyKey": "نسخ المفتاح",
|
||||
"workspace.newUser.copied": "منسوخ!",
|
||||
"workspace.newUser.copied": "تم النسخ!",
|
||||
"workspace.newUser.step.enableBilling": "تمكين الفوترة",
|
||||
"workspace.newUser.step.login.before": "شغّل",
|
||||
"workspace.newUser.step.login.after": "وحدد opencode",
|
||||
"workspace.newUser.step.login.after": "واختر opencode",
|
||||
"workspace.newUser.step.pasteKey": "الصق مفتاح API الخاص بك",
|
||||
"workspace.newUser.step.models.before": "ابدأ opencode ثم قم بالتشغيل",
|
||||
"workspace.newUser.step.models.before": "ابدأ opencode ثم نفّذ",
|
||||
"workspace.newUser.step.models.after": "لاختيار نموذج",
|
||||
"workspace.models.title": "نماذج",
|
||||
|
||||
"workspace.models.title": "النماذج",
|
||||
"workspace.models.subtitle.beforeLink": "إدارة النماذج التي يمكن لأعضاء مساحة العمل الوصول إليها.",
|
||||
"workspace.models.table.model": "نموذج",
|
||||
"workspace.models.table.model": "النموذج",
|
||||
"workspace.models.table.enabled": "ممكّن",
|
||||
|
||||
"workspace.providers.title": "أحضر مفتاحك الخاص",
|
||||
"workspace.providers.subtitle": "قم بتكوين مفاتيح API الخاصة بك من موفري الذكاء الاصطناعي.",
|
||||
"workspace.providers.placeholder": "أدخل {{provider}} API مفتاح ({{prefix}}...)",
|
||||
"workspace.providers.placeholder": "أدخل مفتاح API لـ {{provider}} ({{prefix}}...)",
|
||||
"workspace.providers.configure": "تكوين",
|
||||
"workspace.providers.edit": "يحرر",
|
||||
"workspace.providers.delete": "يمسح",
|
||||
"workspace.providers.saving": "توفير...",
|
||||
"workspace.providers.save": "يحفظ",
|
||||
"workspace.providers.table.provider": "مزود",
|
||||
"workspace.providers.edit": "تعديل",
|
||||
"workspace.providers.delete": "حذف",
|
||||
"workspace.providers.saving": "جارٍ الحفظ...",
|
||||
"workspace.providers.save": "حفظ",
|
||||
"workspace.providers.table.provider": "المزود",
|
||||
"workspace.providers.table.apiKey": "مفتاح API",
|
||||
|
||||
"workspace.usage.title": "تاريخ الاستخدام",
|
||||
"workspace.usage.subtitle": "استخدام وتكاليف API الأخيرة.",
|
||||
"workspace.usage.empty": "قم بإجراء أول مكالمة API للبدء.",
|
||||
"workspace.usage.table.date": "تاريخ",
|
||||
"workspace.usage.table.model": "نموذج",
|
||||
"workspace.usage.table.input": "مدخل",
|
||||
"workspace.usage.table.output": "الإخراج",
|
||||
"workspace.usage.empty": "قم بإجراء أول استدعاء API للبدء.",
|
||||
"workspace.usage.table.date": "التاريخ",
|
||||
"workspace.usage.table.model": "النموذج",
|
||||
"workspace.usage.table.input": "الدخل",
|
||||
"workspace.usage.table.output": "الخرج",
|
||||
"workspace.usage.table.cost": "التكلفة",
|
||||
"workspace.usage.breakdown.input": "مدخل",
|
||||
"workspace.usage.breakdown.cacheRead": "قراءة ذاكرة التخزين المؤقت",
|
||||
"workspace.usage.breakdown.cacheWrite": "كتابة ذاكرة التخزين المؤقت",
|
||||
"workspace.usage.breakdown.output": "الإخراج",
|
||||
"workspace.usage.breakdown.input": "الدخل",
|
||||
"workspace.usage.breakdown.cacheRead": "قراءة الكاش",
|
||||
"workspace.usage.breakdown.cacheWrite": "كتابة الكاش",
|
||||
"workspace.usage.breakdown.output": "الخرج",
|
||||
"workspace.usage.breakdown.reasoning": "المنطق",
|
||||
"workspace.usage.subscription": "الاشتراك (${{amount}})",
|
||||
|
||||
"workspace.cost.title": "التكلفة",
|
||||
"workspace.cost.subtitle": "تكاليف الاستخدام مقسمة حسب النموذج.",
|
||||
"workspace.cost.allModels": "جميع النماذج",
|
||||
@@ -412,100 +351,108 @@ export const dict = {
|
||||
"workspace.cost.deletedSuffix": "(محذوف)",
|
||||
"workspace.cost.empty": "لا توجد بيانات استخدام متاحة للفترة المحددة.",
|
||||
"workspace.cost.subscriptionShort": "اشتراك",
|
||||
|
||||
"workspace.keys.title": "مفاتيح API",
|
||||
"workspace.keys.subtitle": "إدارة مفاتيح API الخاصة بك للوصول إلى خدمات opencode.",
|
||||
"workspace.keys.create": "قم بإنشاء مفتاح API",
|
||||
"workspace.keys.create": "إنشاء مفتاح API",
|
||||
"workspace.keys.placeholder": "أدخل اسم المفتاح",
|
||||
"workspace.keys.empty": "أنشئ مفتاح API لبوابة opencode",
|
||||
"workspace.keys.table.name": "اسم",
|
||||
"workspace.keys.table.key": "مفتاح",
|
||||
"workspace.keys.table.name": "الاسم",
|
||||
"workspace.keys.table.key": "المفتاح",
|
||||
"workspace.keys.table.createdBy": "تم الإنشاء بواسطة",
|
||||
"workspace.keys.table.lastUsed": "آخر استخدام",
|
||||
"workspace.keys.copyApiKey": "انسخ مفتاح API",
|
||||
"workspace.keys.delete": "يمسح",
|
||||
"workspace.members.title": "أعضاء",
|
||||
"workspace.keys.copyApiKey": "نسخ مفتاح API",
|
||||
"workspace.keys.delete": "حذف",
|
||||
|
||||
"workspace.members.title": "الأعضاء",
|
||||
"workspace.members.subtitle": "إدارة أعضاء مساحة العمل وأذوناتهم.",
|
||||
"workspace.members.invite": "دعوة العضو",
|
||||
"workspace.members.inviting": "دعوة...",
|
||||
"workspace.members.beta.beforeLink": "مساحات العمل مجانية للفرق أثناء النسخة التجريبية.",
|
||||
"workspace.members.invite": "دعوة عضو",
|
||||
"workspace.members.inviting": "جارٍ الدعوة...",
|
||||
"workspace.members.beta.beforeLink": "مساحات العمل مجانية للفرق أثناء الفترة التجريبية.",
|
||||
"workspace.members.form.invitee": "المدعو",
|
||||
"workspace.members.form.emailPlaceholder": "أدخل البريد الإلكتروني",
|
||||
"workspace.members.form.role": "دور",
|
||||
"workspace.members.form.role": "الدور",
|
||||
"workspace.members.form.monthlyLimit": "حد الإنفاق الشهري",
|
||||
"workspace.members.noLimit": "لا يوجد حد",
|
||||
"workspace.members.noLimitLowercase": "لا يوجد حد",
|
||||
"workspace.members.invited": "مدعو",
|
||||
"workspace.members.edit": "يحرر",
|
||||
"workspace.members.delete": "يمسح",
|
||||
"workspace.members.saving": "توفير...",
|
||||
"workspace.members.save": "يحفظ",
|
||||
"workspace.members.table.email": "بريد إلكتروني",
|
||||
"workspace.members.table.role": "دور",
|
||||
"workspace.members.table.monthLimit": "حد الشهر",
|
||||
"workspace.members.invited": "تمت دعوته",
|
||||
"workspace.members.edit": "تعديل",
|
||||
"workspace.members.delete": "حذف",
|
||||
"workspace.members.saving": "جارٍ الحفظ...",
|
||||
"workspace.members.save": "حفظ",
|
||||
"workspace.members.table.email": "البريد الإلكتروني",
|
||||
"workspace.members.table.role": "الدور",
|
||||
"workspace.members.table.monthLimit": "الحد الشهري",
|
||||
"workspace.members.role.admin": "مسؤول",
|
||||
"workspace.members.role.adminDescription": "يمكن إدارة النماذج، والأعضاء، والفواتير",
|
||||
"workspace.members.role.adminDescription": "يمكنه إدارة النماذج، والأعضاء، والفوترة",
|
||||
"workspace.members.role.member": "عضو",
|
||||
"workspace.members.role.memberDescription": "يمكنهم فقط إنشاء مفاتيح API لأنفسهم",
|
||||
"workspace.settings.title": "إعدادات",
|
||||
"workspace.settings.subtitle": "قم بتحديث اسم مساحة العمل الخاصة بك وتفضيلاتك.",
|
||||
"workspace.members.role.memberDescription": "يمكنه فقط إنشاء مفاتيح API لنفسه",
|
||||
|
||||
"workspace.settings.title": "الإعدادات",
|
||||
"workspace.settings.subtitle": "حدّث اسم مساحة العمل وتفضيلاتك.",
|
||||
"workspace.settings.workspaceName": "اسم مساحة العمل",
|
||||
"workspace.settings.defaultName": "الافتراضي",
|
||||
"workspace.settings.defaultName": "افتراضي",
|
||||
"workspace.settings.updating": "جارٍ التحديث...",
|
||||
"workspace.settings.save": "يحفظ",
|
||||
"workspace.settings.edit": "يحرر",
|
||||
"workspace.billing.title": "الفواتير",
|
||||
"workspace.settings.save": "حفظ",
|
||||
"workspace.settings.edit": "تعديل",
|
||||
|
||||
"workspace.billing.title": "الفوترة",
|
||||
"workspace.billing.subtitle.beforeLink": "إدارة طرق الدفع.",
|
||||
"workspace.billing.contactUs": "اتصل بنا",
|
||||
"workspace.billing.subtitle.afterLink": "إذا كان لديك أي أسئلة.",
|
||||
"workspace.billing.currentBalance": "الرصيد الحالي",
|
||||
"workspace.billing.add": "أضف $",
|
||||
"workspace.billing.enterAmount": "أدخل المبلغ",
|
||||
"workspace.billing.loading": "تحميل...",
|
||||
"workspace.billing.loading": "جارٍ التحميل...",
|
||||
"workspace.billing.addAction": "إضافة",
|
||||
"workspace.billing.addBalance": "إضافة الرصيد",
|
||||
"workspace.billing.addBalance": "إضافة رصيد",
|
||||
"workspace.billing.linkedToStripe": "مرتبط بـ Stripe",
|
||||
"workspace.billing.manage": "إدارة",
|
||||
"workspace.billing.enable": "تمكين الفوترة",
|
||||
|
||||
"workspace.monthlyLimit.title": "الحد الشهري",
|
||||
"workspace.monthlyLimit.subtitle": "قم بتعيين حد الاستخدام الشهري لحسابك.",
|
||||
"workspace.monthlyLimit.subtitle": "عيّن حد الاستخدام الشهري لحسابك.",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "جارٍ التعيين...",
|
||||
"workspace.monthlyLimit.set": "تعيين",
|
||||
"workspace.monthlyLimit.edit": "تحرير الحد",
|
||||
"workspace.monthlyLimit.noLimit": "لم يتم تعيين حد الاستخدام.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "الاستخدام الحالي ل",
|
||||
"workspace.monthlyLimit.edit": "تعديل الحد",
|
||||
"workspace.monthlyLimit.noLimit": "لم يتم تعيين حد للاستخدام.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "الاستخدام الحالي لـ",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "هو $",
|
||||
|
||||
"workspace.reload.title": "إعادة الشحن التلقائي",
|
||||
"workspace.reload.disabled.before": "إعادة الشحن التلقائي",
|
||||
"workspace.reload.disabled.state": "معطّل",
|
||||
"workspace.reload.disabled.after": "فعّلها لإعادة شحن الرصيد تلقائيًا عندما يكون منخفضًا.",
|
||||
"workspace.reload.disabled.after": "فعّلها لإعادة شحن الرصيد تلقائيًا عندما ينخفض.",
|
||||
"workspace.reload.enabled.before": "إعادة الشحن التلقائي",
|
||||
"workspace.reload.enabled.state": "ممكّن",
|
||||
"workspace.reload.enabled.middle": "سنعيد شحن رصيدك بمبلغ",
|
||||
"workspace.reload.processingFee": "رسوم المعالجة",
|
||||
"workspace.reload.processingFee": "رسوم معالجة",
|
||||
"workspace.reload.enabled.after": "عندما يصل الرصيد إلى",
|
||||
"workspace.reload.edit": "يحرر",
|
||||
"workspace.reload.edit": "تعديل",
|
||||
"workspace.reload.enable": "تفعيل",
|
||||
"workspace.reload.enableAutoReload": "تفعيل إعادة الشحن التلقائي",
|
||||
"workspace.reload.reloadAmount": "مبلغ إعادة الشحن $",
|
||||
"workspace.reload.reloadAmount": "مبلغ الشحن $",
|
||||
"workspace.reload.whenBalanceReaches": "عندما يصل الرصيد إلى $",
|
||||
"workspace.reload.saving": "توفير...",
|
||||
"workspace.reload.save": "يحفظ",
|
||||
"workspace.reload.saving": "جارٍ الحفظ...",
|
||||
"workspace.reload.save": "حفظ",
|
||||
"workspace.reload.failedAt": "فشلت إعادة الشحن في",
|
||||
"workspace.reload.reason": "سبب:",
|
||||
"workspace.reload.updatePaymentMethod": "يرجى تحديث طريقة الدفع الخاصة بك والمحاولة مرة أخرى.",
|
||||
"workspace.reload.reason": "السبب:",
|
||||
"workspace.reload.updatePaymentMethod": "يرجى تحديث طريقة الدفع والمحاولة مرة أخرى.",
|
||||
"workspace.reload.retrying": "جارٍ إعادة المحاولة...",
|
||||
"workspace.reload.retry": "أعد المحاولة",
|
||||
"workspace.payments.title": "تاريخ المدفوعات",
|
||||
|
||||
"workspace.payments.title": "سجل المدفوعات",
|
||||
"workspace.payments.subtitle": "معاملات الدفع الأخيرة.",
|
||||
"workspace.payments.table.date": "تاريخ",
|
||||
"workspace.payments.table.date": "التاريخ",
|
||||
"workspace.payments.table.paymentId": "معرف الدفع",
|
||||
"workspace.payments.table.amount": "المبلغ",
|
||||
"workspace.payments.table.receipt": "إيصال",
|
||||
"workspace.payments.type.credit": "ائتمان",
|
||||
"workspace.payments.type.subscription": "الاشتراك",
|
||||
"workspace.payments.table.receipt": "الإيصال",
|
||||
"workspace.payments.type.credit": "رصيد",
|
||||
"workspace.payments.type.subscription": "اشتراك",
|
||||
"workspace.payments.view": "عرض",
|
||||
"workspace.black.loading": "تحميل...",
|
||||
|
||||
"workspace.black.loading": "جارٍ التحميل...",
|
||||
"workspace.black.time.day": "يوم",
|
||||
"workspace.black.time.days": "أيام",
|
||||
"workspace.black.time.hour": "ساعة",
|
||||
@@ -514,20 +461,130 @@ export const dict = {
|
||||
"workspace.black.time.minutes": "دقائق",
|
||||
"workspace.black.time.fewSeconds": "بضع ثوان",
|
||||
"workspace.black.subscription.title": "الاشتراك",
|
||||
"workspace.black.subscription.message": "أنت مشترك في OpenCode Black مقابل {{plan}} دولار شهريًا.",
|
||||
"workspace.black.subscription.message": "أنت مشترك في OpenCode Black مقابل ${{plan}} شهريًا.",
|
||||
"workspace.black.subscription.manage": "إدارة الاشتراك",
|
||||
"workspace.black.subscription.rollingUsage": "استخدام لمدة 5 ساعات",
|
||||
"workspace.black.subscription.weeklyUsage": "الاستخدام الأسبوعي",
|
||||
"workspace.black.subscription.resetsIn": "إعادة تعيين في",
|
||||
"workspace.black.subscription.useBalance": "استخدم رصيدك المتوفر بعد الوصول إلى حدود الاستخدام",
|
||||
"workspace.black.waitlist.title": "قائمة الانتظار",
|
||||
"workspace.black.waitlist.joined": "أنت على قائمة الانتظار لخطة OpenCode Black بقيمة ${{plan}} شهريًا.",
|
||||
"workspace.black.waitlist.joined": "أنت في قائمة الانتظار لخطة OpenCode Black بقيمة ${{plan}} شهريًا.",
|
||||
"workspace.black.waitlist.ready": "نحن مستعدون لتسجيلك في خطة OpenCode Black بقيمة ${{plan}} شهريًا.",
|
||||
"workspace.black.waitlist.leave": "ترك قائمة الانتظار",
|
||||
"workspace.black.waitlist.leaving": "مغادرة...",
|
||||
"workspace.black.waitlist.leaving": "جارٍ المغادرة...",
|
||||
"workspace.black.waitlist.left": "غادر",
|
||||
"workspace.black.waitlist.enroll": "تسجل",
|
||||
"workspace.black.waitlist.enroll": "تسجيل",
|
||||
"workspace.black.waitlist.enrolling": "جارٍ التسجيل...",
|
||||
"workspace.black.waitlist.enrolled": "مسجل",
|
||||
"workspace.black.waitlist.enrollNote": 'عند النقر فوق "تسجيل"، يبدأ اشتراكك على الفور وسيتم خصم الرسوم من بطاقتك.',
|
||||
|
||||
"download.title": "OpenCode | تنزيل",
|
||||
"download.meta.description": "نزّل OpenCode لـ macOS، Windows، وLinux",
|
||||
"download.hero.title": "تنزيل OpenCode",
|
||||
"download.hero.subtitle": "متاح في نسخة تجريبية لـ macOS، Windows، وLinux",
|
||||
"download.hero.button": "تنزيل لـ {{os}}",
|
||||
"download.section.terminal": "OpenCode للطرفية",
|
||||
"download.section.desktop": "OpenCode لسطح المكتب (Beta)",
|
||||
"download.section.extensions": "امتدادات OpenCode",
|
||||
"download.section.integrations": "تكاملات OpenCode",
|
||||
"download.action.download": "تنزيل",
|
||||
"download.action.install": "تثبيت",
|
||||
|
||||
"download.platform.macosAppleSilicon": "macOS (Apple Silicon)",
|
||||
"download.platform.macosIntel": "macOS (Intel)",
|
||||
"download.platform.windowsX64": "Windows (x64)",
|
||||
"download.platform.linuxDeb": "Linux (.deb)",
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
|
||||
"download.faq.a3.beforeLocal":
|
||||
"ليس بالضرورة، ولكن على الأرجح. ستحتاج إلى اشتراك ذكاء اصطناعي إذا كنت تريد ربط OpenCode بمزوّد مدفوع، رغم أنه يمكنك العمل مع",
|
||||
"download.faq.a3.localLink": "النماذج المحلية",
|
||||
"download.faq.a3.afterLocal.beforeZen": "مجانًا. بينما نشجع المستخدمين على استخدام",
|
||||
"download.faq.a3.afterZen": "، فإن OpenCode يعمل مع جميع المزودين الشائعين مثل OpenAI، Anthropic، xAI إلخ.",
|
||||
|
||||
"download.faq.a5.p1": "OpenCode مجاني 100% للاستخدام.",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"أي تكاليف إضافية ستأتي من اشتراكك لدى مزود النماذج. بينما يعمل OpenCode مع أي مزود نماذج، نوصي باستخدام",
|
||||
"download.faq.a5.p2.afterZen": ".",
|
||||
|
||||
"download.faq.a6.p1": "يتم حفظ بياناتك ومعلوماتك فقط عند إنشاء روابط قابلة للمشاركة في OpenCode.",
|
||||
"download.faq.a6.p2.beforeShare": "اعرف المزيد عن",
|
||||
"download.faq.a6.shareLink": "صفحات المشاركة",
|
||||
|
||||
"enterprise.title": "OpenCode | حلول المؤسسات لمنظمتك",
|
||||
"enterprise.meta.description": "تواصل مع OpenCode لحلول المؤسسات",
|
||||
"enterprise.hero.title": "كودك ملكك",
|
||||
"enterprise.hero.body1":
|
||||
"يعمل OpenCode بأمان داخل مؤسستك دون تخزين أي بيانات أو سياق، ودون قيود ترخيص أو مطالبات ملكية. ابدأ تجربة مع فريقك، ثم انشره عبر مؤسستك من خلال دمجه مع SSO وبوابة الذكاء الاصطناعي الداخلية لديك.",
|
||||
"enterprise.hero.body2": "أخبرنا كيف يمكننا المساعدة.",
|
||||
"enterprise.form.name.label": "الاسم الكامل",
|
||||
"enterprise.form.name.placeholder": "جيف بيزوس",
|
||||
"enterprise.form.role.label": "المنصب",
|
||||
"enterprise.form.role.placeholder": "رئيس مجلس الإدارة التنفيذي",
|
||||
"enterprise.form.email.label": "البريد الإلكتروني للشركة",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "ما المشكلة التي تحاول حلها؟",
|
||||
"enterprise.form.message.placeholder": "نحتاج مساعدة في...",
|
||||
"enterprise.form.send": "إرسال",
|
||||
"enterprise.form.sending": "جارٍ الإرسال...",
|
||||
"enterprise.form.success": "تم إرسال الرسالة، سنتواصل معك قريبًا.",
|
||||
"enterprise.faq.title": "الأسئلة الشائعة",
|
||||
"enterprise.faq.q1": "ما هو OpenCode Enterprise؟",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise مخصص للمؤسسات التي تريد التأكد من أن الكود والبيانات لا تغادر بنيتها التحتية أبدًا. يتحقق ذلك عبر استخدام تكوين مركزي يندمج مع SSO وبوابة الذكاء الاصطناعي الداخلية لديك.",
|
||||
"enterprise.faq.q2": "كيف أبدأ مع OpenCode Enterprise؟",
|
||||
"enterprise.faq.a2":
|
||||
"ابدأ ببساطة بتجربة داخلية مع فريقك. افتراضيًا، لا يقوم OpenCode بتخزين الكود أو بيانات السياق، مما يجعل البدء سهلاً. ثم اتصل بنا لمناقشة الأسعار وخيارات التنفيذ.",
|
||||
"enterprise.faq.q3": "كيف تعمل تسعيرة المؤسسات؟",
|
||||
"enterprise.faq.a3":
|
||||
"نقدم تسعيرًا للمؤسسات حسب المقعد. إذا كان لديك بوابة LLM خاصة بك، فلن نفرض رسومًا على التوكنات المستخدمة. لمزيد من التفاصيل، اتصل بنا للحصول على عرض سعر مخصص بناءً على احتياجات مؤسستك.",
|
||||
"enterprise.faq.q4": "هل بياناتي آمنة مع OpenCode Enterprise؟",
|
||||
"enterprise.faq.a4":
|
||||
"نعم. لا يقوم OpenCode بتخزين الكود أو بيانات السياق. تتم جميع المعالجة محليًا أو عبر استدعاءات API مباشرة إلى مزود الذكاء الاصطناعي لديك. مع التكوين المركزي وتكامل SSO، تظل بياناتك آمنة داخل البنية التحتية لمؤسستك.",
|
||||
|
||||
"brand.title": "OpenCode | العلامة التجارية",
|
||||
"brand.meta.description": "إرشادات العلامة التجارية لـ OpenCode",
|
||||
"brand.heading": "إرشادات العلامة التجارية",
|
||||
"brand.subtitle": "موارد وأصول لمساعدتك في العمل مع العلامة التجارية لـ OpenCode.",
|
||||
"brand.downloadAll": "تنزيل جميع الأصول",
|
||||
|
||||
"changelog.title": "OpenCode | سجل التغييرات",
|
||||
"changelog.meta.description": "ملاحظات الإصدار وسجل التغييرات لـ OpenCode",
|
||||
"changelog.hero.title": "سجل التغييرات",
|
||||
"changelog.hero.subtitle": "تحديثات وتحسينات جديدة لـ OpenCode",
|
||||
"changelog.empty": "لم يتم العثور على مدخلات في سجل التغييرات.",
|
||||
"changelog.viewJson": "عرض JSON",
|
||||
|
||||
"bench.list.title": "المعيار",
|
||||
"bench.list.heading": "المعايير",
|
||||
"bench.list.table.agent": "الوكيل",
|
||||
"bench.list.table.model": "النموذج",
|
||||
"bench.list.table.score": "الدرجة",
|
||||
|
||||
"bench.detail.title": "المعيار - {{task}}",
|
||||
"bench.detail.notFound": "المهمة غير موجودة",
|
||||
"bench.detail.na": "غير متاح",
|
||||
"bench.detail.labels.agent": "الوكيل",
|
||||
"bench.detail.labels.model": "النموذج",
|
||||
"bench.detail.labels.task": "المهمة",
|
||||
"bench.detail.labels.repo": "المستودع",
|
||||
"bench.detail.labels.from": "من",
|
||||
"bench.detail.labels.to": "إلى",
|
||||
"bench.detail.labels.prompt": "الموجه",
|
||||
"bench.detail.labels.commit": "Commit",
|
||||
"bench.detail.labels.averageDuration": "متوسط المدة",
|
||||
"bench.detail.labels.averageScore": "متوسط الدرجة",
|
||||
"bench.detail.labels.averageCost": "متوسط التكلفة",
|
||||
"bench.detail.labels.summary": "الملخص",
|
||||
"bench.detail.labels.runs": "تشغيلات",
|
||||
"bench.detail.labels.score": "الدرجة",
|
||||
"bench.detail.labels.base": "الأساس",
|
||||
"bench.detail.labels.penalty": "الجزاء",
|
||||
"bench.detail.labels.weight": "الوزن",
|
||||
"bench.detail.table.run": "تشغيل",
|
||||
"bench.detail.table.score": "الدرجة (الأساس - الجزاء)",
|
||||
"bench.detail.table.cost": "التكلفة",
|
||||
"bench.detail.table.duration": "المدة",
|
||||
"bench.detail.run.title": "تشغيل {{n}}",
|
||||
"bench.detail.rawJson": "JSON خام",
|
||||
} satisfies Dict
|
||||
|
||||
@@ -4,25 +4,25 @@ import { dict as en } from "./en"
|
||||
export const dict = {
|
||||
...en,
|
||||
"nav.github": "GitHub",
|
||||
"nav.docs": "Documentacao",
|
||||
"nav.changelog": "Registro de mudancas",
|
||||
"nav.docs": "Documentação",
|
||||
"nav.changelog": "Changelog",
|
||||
"nav.discord": "Discord",
|
||||
"nav.x": "X",
|
||||
"nav.enterprise": "Empresas",
|
||||
"nav.enterprise": "Enterprise",
|
||||
"nav.zen": "Zen",
|
||||
"nav.login": "Entrar",
|
||||
"nav.free": "Gratis",
|
||||
"nav.home": "Inicio",
|
||||
"nav.free": "Grátis",
|
||||
"nav.home": "Início",
|
||||
"nav.openMenu": "Abrir menu",
|
||||
"nav.getStartedFree": "Comecar gratis",
|
||||
"nav.getStartedFree": "Começar grátis",
|
||||
|
||||
"nav.context.copyLogo": "Copiar logo como SVG",
|
||||
"nav.context.copyWordmark": "Copiar wordmark como SVG",
|
||||
"nav.context.brandAssets": "Assets da marca",
|
||||
"nav.context.copyWordmark": "Copiar marca como SVG",
|
||||
"nav.context.brandAssets": "Recursos da marca",
|
||||
|
||||
"footer.github": "GitHub",
|
||||
"footer.docs": "Documentacao",
|
||||
"footer.changelog": "Registro de mudancas",
|
||||
"footer.docs": "Documentação",
|
||||
"footer.changelog": "Changelog",
|
||||
"footer.discord": "Discord",
|
||||
"footer.x": "X",
|
||||
|
||||
@@ -30,16 +30,16 @@ export const dict = {
|
||||
"legal.privacy": "Privacidade",
|
||||
"legal.terms": "Termos",
|
||||
|
||||
"email.title": "Seja o primeiro a saber quando lancarmos novos produtos",
|
||||
"email.title": "Seja o primeiro a saber quando lançarmos novos produtos",
|
||||
"email.subtitle": "Entre na lista de espera para acesso antecipado.",
|
||||
"email.placeholder": "Endereco de e-mail",
|
||||
"email.placeholder": "Endereço de e-mail",
|
||||
"email.subscribe": "Inscrever-se",
|
||||
"email.success": "Quase pronto: verifique sua caixa de entrada e confirme seu e-mail",
|
||||
"email.success": "Quase lá, verifique sua caixa de entrada e confirme seu e-mail",
|
||||
|
||||
"notFound.title": "Nao encontrado | opencode",
|
||||
"notFound.heading": "404 - Pagina nao encontrada",
|
||||
"notFound.home": "Inicio",
|
||||
"notFound.docs": "Documentacao",
|
||||
"notFound.title": "Não encontrado | opencode",
|
||||
"notFound.heading": "404 - Página não encontrada",
|
||||
"notFound.home": "Início",
|
||||
"notFound.docs": "Documentação",
|
||||
"notFound.github": "GitHub",
|
||||
"notFound.discord": "Discord",
|
||||
|
||||
@@ -54,170 +54,445 @@ export const dict = {
|
||||
"common.creating": "Criando...",
|
||||
"common.create": "Criar",
|
||||
|
||||
"common.videoUnsupported": "Seu navegador nao suporta a tag de video.",
|
||||
"common.videoUnsupported": "Seu navegador não suporta a tag de vídeo.",
|
||||
"common.figure": "Fig {{n}}.",
|
||||
"common.faq": "FAQ",
|
||||
"common.learnMore": "Saiba mais",
|
||||
|
||||
"home.title": "OpenCode | O agente de codificacao com IA de codigo aberto",
|
||||
"error.invalidPlan": "Plano inválido",
|
||||
"error.workspaceRequired": "ID do workspace é obrigatório",
|
||||
"error.alreadySubscribed": "Este workspace já possui uma assinatura",
|
||||
"error.limitRequired": "Limite é obrigatório.",
|
||||
"error.monthlyLimitInvalid": "Defina um limite mensal válido.",
|
||||
"error.workspaceNameRequired": "Nome do workspace é obrigatório.",
|
||||
"error.nameTooLong": "O nome deve ter 255 caracteres ou menos.",
|
||||
"error.emailRequired": "E-mail é obrigatório",
|
||||
"error.roleRequired": "Função é obrigatória",
|
||||
"error.idRequired": "ID é obrigatório",
|
||||
"error.nameRequired": "Nome é obrigatório",
|
||||
"error.providerRequired": "Provedor é obrigatório",
|
||||
"error.apiKeyRequired": "Chave de API é obrigatória",
|
||||
"error.modelRequired": "Modelo é obrigatório",
|
||||
"error.reloadAmountMin": "O valor de recarga deve ser de pelo menos ${{amount}}",
|
||||
"error.reloadTriggerMin": "O gatilho de saldo deve ser de pelo menos ${{amount}}",
|
||||
|
||||
"home.title": "OpenCode | O agente de codificação de código aberto com IA",
|
||||
|
||||
"temp.title": "opencode | Agente de codificação com IA feito para o terminal",
|
||||
"temp.hero.title": "O agente de codificação com IA feito para o terminal",
|
||||
"temp.zen": "opencode zen",
|
||||
"temp.getStarted": "Começar",
|
||||
"temp.feature.native.title": "TUI Nativa",
|
||||
"temp.feature.native.body": "Uma interface de terminal responsiva, nativa e personalizável",
|
||||
"temp.feature.zen.beforeLink": "Uma",
|
||||
"temp.feature.zen.link": "lista selecionada de modelos",
|
||||
"temp.feature.zen.afterLink": "fornecida pela opencode",
|
||||
"temp.feature.models.beforeLink": "Suporta mais de 75 provedores de LLM através do",
|
||||
"temp.feature.models.afterLink": ", incluindo modelos locais",
|
||||
"temp.screenshot.caption": "OpenCode TUI com o tema tokyonight",
|
||||
"temp.screenshot.alt": "OpenCode TUI com tema tokyonight",
|
||||
|
||||
"home.banner.badge": "Novo",
|
||||
"home.banner.text": "App desktop disponivel em beta",
|
||||
"home.banner.text": "App desktop disponível em beta",
|
||||
"home.banner.platforms": "no macOS, Windows e Linux",
|
||||
"home.banner.downloadNow": "Baixar agora",
|
||||
"home.banner.downloadBetaNow": "Baixe agora o beta do desktop",
|
||||
|
||||
"home.hero.title": "O agente de codificacao com IA de codigo aberto",
|
||||
"home.hero.subtitle.a": "Modelos gratis incluidos ou conecte qualquer modelo de qualquer provedor,",
|
||||
"home.hero.title": "O agente de codificação de código aberto com IA",
|
||||
"home.hero.subtitle.a": "Modelos grátis incluídos ou conecte qualquer modelo de qualquer provedor,",
|
||||
"home.hero.subtitle.b": "incluindo Claude, GPT, Gemini e mais.",
|
||||
|
||||
"home.install.ariaLabel": "Opcoes de instalacao",
|
||||
"home.install.ariaLabel": "Opções de instalação",
|
||||
|
||||
"home.what.title": "O que e OpenCode?",
|
||||
"home.what.title": "O que é OpenCode?",
|
||||
"home.what.body":
|
||||
"OpenCode e um agente de codigo aberto que ajuda voce a escrever codigo no terminal, IDE ou desktop.",
|
||||
"OpenCode é um agente de código aberto que ajuda você a escrever código no seu terminal, IDE ou desktop.",
|
||||
"home.what.lsp.title": "LSP habilitado",
|
||||
"home.what.lsp.body": "Carrega automaticamente os LSPs certos para o LLM",
|
||||
"home.what.multiSession.title": "Multi-sessao",
|
||||
"home.what.multiSession.body": "Inicie varios agentes em paralelo no mesmo projeto",
|
||||
"home.what.shareLinks.title": "Links para compartilhar",
|
||||
"home.what.shareLinks.body": "Compartilhe um link para qualquer sessao para referencia ou depuracao",
|
||||
"home.what.multiSession.title": "Multissessão",
|
||||
"home.what.multiSession.body": "Inicie vários agentes em paralelo no mesmo projeto",
|
||||
"home.what.shareLinks.title": "Links compartilháveis",
|
||||
"home.what.shareLinks.body": "Compartilhe um link para qualquer sessão para referência ou depuração",
|
||||
"home.what.copilot.title": "GitHub Copilot",
|
||||
"home.what.copilot.body": "Faca login com o GitHub para usar sua conta do Copilot",
|
||||
"home.what.copilot.body": "Entre com o GitHub para usar sua conta do Copilot",
|
||||
"home.what.chatgptPlus.title": "ChatGPT Plus/Pro",
|
||||
"home.what.chatgptPlus.body": "Faca login com a OpenAI para usar sua conta do ChatGPT Plus ou Pro",
|
||||
"home.what.chatgptPlus.body": "Entre com a OpenAI para usar sua conta do ChatGPT Plus ou Pro",
|
||||
"home.what.anyModel.title": "Qualquer modelo",
|
||||
"home.what.anyModel.body": "75+ provedores de LLM via Models.dev, incluindo modelos locais",
|
||||
"home.what.anyModel.body": "Mais de 75 provedores de LLM via Models.dev, incluindo modelos locais",
|
||||
"home.what.anyEditor.title": "Qualquer editor",
|
||||
"home.what.anyEditor.body": "Disponivel como interface de terminal, app desktop e extensao de IDE",
|
||||
"home.what.readDocs": "Ler docs",
|
||||
"home.what.anyEditor.body": "Disponível como interface de terminal, app desktop e extensão de IDE",
|
||||
"home.what.readDocs": "Ler documentação",
|
||||
|
||||
"home.growth.title": "O agente de codificacao com IA de codigo aberto",
|
||||
"home.growth.title": "O agente de codificação de código aberto com IA",
|
||||
"home.growth.body":
|
||||
"Com mais de <strong>{{stars}}</strong> estrelas no GitHub, <strong>{{contributors}}</strong> colaboradores e mais de <strong>{{commits}}</strong> commits, OpenCode e usado e confiado por mais de <strong>{{monthlyUsers}}</strong> desenvolvedores todos os meses.",
|
||||
"Com mais de <strong>{{stars}}</strong> estrelas no GitHub, <strong>{{contributors}}</strong> colaboradores e mais de <strong>{{commits}}</strong> commits, OpenCode é usado e confiado por mais de <strong>{{monthlyUsers}}</strong> desenvolvedores todos os meses.",
|
||||
"home.growth.githubStars": "Estrelas no GitHub",
|
||||
"home.growth.contributors": "Colaboradores",
|
||||
"home.growth.monthlyDevs": "Devs mensais",
|
||||
|
||||
"home.privacy.title": "Feito com privacidade em primeiro lugar",
|
||||
"home.privacy.body":
|
||||
"OpenCode nao armazena nenhum codigo seu nem dados de contexto, para poder operar em ambientes sensiveis a privacidade.",
|
||||
"OpenCode não armazena nenhum código seu nem dados de contexto, para que possa operar em ambientes sensíveis à privacidade.",
|
||||
"home.privacy.learnMore": "Saiba mais sobre",
|
||||
"home.privacy.link": "privacidade",
|
||||
|
||||
"home.faq.q1": "O que e OpenCode?",
|
||||
"home.faq.q1": "O que é OpenCode?",
|
||||
"home.faq.a1":
|
||||
"OpenCode e um agente de codigo aberto que ajuda voce a escrever e executar codigo com qualquer modelo de IA. Ele esta disponivel como interface de terminal, app desktop ou extensao de IDE.",
|
||||
"OpenCode é um agente de código aberto que ajuda você a escrever e executar código com qualquer modelo de IA. Está disponível como interface de terminal, app desktop ou extensão de IDE.",
|
||||
"home.faq.q2": "Como eu uso o OpenCode?",
|
||||
"home.faq.a2.before": "A forma mais facil de comecar e ler a",
|
||||
"home.faq.a2.link": "introducao",
|
||||
"home.faq.a2.before": "A maneira mais fácil de começar é ler a",
|
||||
"home.faq.a2.link": "introdução",
|
||||
"home.faq.q3": "Preciso de assinaturas extras de IA para usar o OpenCode?",
|
||||
"home.faq.a3.p1":
|
||||
"Nao necessariamente, OpenCode vem com um conjunto de modelos gratis que voce pode usar sem criar conta.",
|
||||
"home.faq.a3.p2.beforeZen": "Fora isso, voce pode usar modelos populares para codigo criando uma conta",
|
||||
"Não necessariamente, OpenCode vem com um conjunto de modelos grátis que você pode usar sem criar conta.",
|
||||
"home.faq.a3.p2.beforeZen":
|
||||
"Além disso, você pode usar qualquer um dos modelos de codificação populares criando uma conta",
|
||||
"home.faq.a3.p2.afterZen": ".",
|
||||
"home.faq.a3.p3":
|
||||
"Embora incentivemos os usuarios a usar o Zen, OpenCode tambem funciona com todos os provedores populares, como OpenAI, Anthropic, xAI etc.",
|
||||
"home.faq.a3.p4.beforeLocal": "Voce pode ate conectar seus",
|
||||
"Embora incentivemos os usuários a usar o Zen, OpenCode também funciona com todos os provedores populares, como OpenAI, Anthropic, xAI etc.",
|
||||
"home.faq.a3.p4.beforeLocal": "Você pode até conectar seus",
|
||||
"home.faq.a3.p4.localLink": "modelos locais",
|
||||
"home.faq.q4": "Posso usar minhas assinaturas de IA existentes com o OpenCode?",
|
||||
"home.faq.a4.p1":
|
||||
"Sim, OpenCode oferece suporte a planos de assinatura dos principais provedores. Voce pode usar suas assinaturas Claude Pro/Max, ChatGPT Plus/Pro ou GitHub Copilot.",
|
||||
"Sim, OpenCode suporta planos de assinatura de todos os principais provedores. Você pode usar suas assinaturas Claude Pro/Max, ChatGPT Plus/Pro ou GitHub Copilot.",
|
||||
"home.faq.q5": "Posso usar o OpenCode apenas no terminal?",
|
||||
"home.faq.a5.beforeDesktop": "Nao mais! OpenCode agora esta disponivel como um app para o",
|
||||
"home.faq.a5.beforeDesktop": "Não mais! OpenCode agora está disponível como um app para o seu",
|
||||
"home.faq.a5.desktop": "desktop",
|
||||
"home.faq.a5.and": "e",
|
||||
"home.faq.a5.web": "web",
|
||||
"home.faq.q6": "Quanto custa o OpenCode?",
|
||||
"home.faq.a6":
|
||||
"OpenCode e 100% gratis para usar. Tambem vem com um conjunto de modelos gratuitos. Pode haver custos adicionais se voce conectar outro provedor.",
|
||||
"OpenCode é 100% gratuito para usar. Ele também vem com um conjunto de modelos gratuitos. Pode haver custos adicionais se você conectar qualquer outro provedor.",
|
||||
"home.faq.q7": "E sobre dados e privacidade?",
|
||||
"home.faq.a7.p1":
|
||||
"Seus dados e informacoes so sao armazenados quando voce usa nossos modelos gratis ou cria links compartilhaveis.",
|
||||
"Seus dados e informações só são armazenados quando você usa nossos modelos gratuitos ou cria links compartilháveis.",
|
||||
"home.faq.a7.p2.beforeModels": "Saiba mais sobre",
|
||||
"home.faq.a7.p2.modelsLink": "nossos modelos",
|
||||
"home.faq.a7.p2.and": "e",
|
||||
"home.faq.a7.p2.shareLink": "paginas de compartilhamento",
|
||||
"home.faq.q8": "OpenCode e codigo aberto?",
|
||||
"home.faq.a8.p1": "Sim, OpenCode e totalmente open source. O codigo-fonte e publico no",
|
||||
"home.faq.a7.p2.shareLink": "páginas de compartilhamento",
|
||||
"home.faq.q8": "OpenCode é código aberto?",
|
||||
"home.faq.a8.p1": "Sim, OpenCode é totalmente open source. O código-fonte é público no",
|
||||
"home.faq.a8.p2": "sob a",
|
||||
"home.faq.a8.mitLicense": "Licenca MIT",
|
||||
"home.faq.a8.mitLicense": "Licença MIT",
|
||||
"home.faq.a8.p3":
|
||||
", o que significa que qualquer pessoa pode usar, modificar ou contribuir com o desenvolvimento. Qualquer pessoa da comunidade pode abrir issues, enviar pull requests e estender funcionalidades.",
|
||||
", o que significa que qualquer pessoa pode usar, modificar ou contribuir para o seu desenvolvimento. Qualquer pessoa da comunidade pode abrir issues, enviar pull requests e estender a funcionalidade.",
|
||||
|
||||
"home.zenCta.title": "Acesse modelos confiaveis e otimizados para agentes de codigo",
|
||||
"home.zenCta.title": "Acesse modelos confiáveis e otimizados para agentes de codificação",
|
||||
"home.zenCta.body":
|
||||
"O Zen te da acesso a um conjunto selecionado de modelos de IA que a OpenCode testou e benchmarkou especificamente para agentes de codigo. Nao precisa se preocupar com desempenho e qualidade inconsistentes entre provedores: use modelos validados que funcionam.",
|
||||
"O Zen dá acesso a um conjunto selecionado de modelos de IA que a OpenCode testou e avaliou especificamente para agentes de codificação. Não precisa se preocupar com desempenho e qualidade inconsistentes entre provedores, use modelos validados que funcionam.",
|
||||
"home.zenCta.link": "Saiba mais sobre o Zen",
|
||||
|
||||
"download.title": "OpenCode | Download",
|
||||
|
||||
"zen.title": "OpenCode Zen | Um conjunto selecionado de modelos confiaveis e otimizados para agentes de codigo",
|
||||
"zen.hero.title": "Acesse modelos confiaveis e otimizados para agentes de codigo",
|
||||
"zen.title": "OpenCode Zen | Um conjunto selecionado de modelos confiáveis e otimizados para agentes de codificação",
|
||||
"zen.hero.title": "Modelos confiáveis e otimizados para agentes de codificação",
|
||||
"zen.hero.body":
|
||||
"O Zen te da acesso a um conjunto selecionado de modelos de IA que a OpenCode testou e benchmarkou especificamente para agentes de codigo. Nao precisa se preocupar com desempenho e qualidade inconsistentes entre provedores: use modelos validados que funcionam.",
|
||||
"O Zen dá acesso a um conjunto selecionado de modelos de IA que a OpenCode testou e avaliou especificamente para agentes de codificação. Não precisa se preocupar com desempenho e qualidade inconsistentes, use modelos validados que funcionam.",
|
||||
|
||||
"zen.faq.q1": "O que e OpenCode Zen?",
|
||||
"zen.faq.q1": "O que é OpenCode Zen?",
|
||||
"zen.faq.a1":
|
||||
"Zen e um conjunto selecionado de modelos de IA testados e benchmarkados para agentes de codigo, criado pelo time por tras do OpenCode.",
|
||||
"Zen é um conjunto selecionado de modelos de IA testados e avaliados para agentes de codificação, criado pela equipe por trás do OpenCode.",
|
||||
"zen.faq.q2": "O que torna o Zen mais preciso?",
|
||||
"zen.faq.a2":
|
||||
"O Zen so oferece modelos que foram testados e benchmarkados especificamente para agentes de codigo. Voce nao usaria uma faca de manteiga para cortar um bife; nao use modelos ruins para programar.",
|
||||
"zen.faq.q3": "Zen e mais barato?",
|
||||
"O Zen fornece apenas modelos que foram especificamente testados e avaliados para agentes de codificação. Você não usaria uma faca de manteiga para cortar um bife, não use modelos ruins para programar.",
|
||||
"zen.faq.q3": "O Zen é mais barato?",
|
||||
"zen.faq.a3":
|
||||
"Zen nao tem fins lucrativos. Zen repassa os custos dos provedores de modelos diretamente para voce. Quanto maior o uso do Zen, mais a OpenCode pode negociar melhores taxas e repassar para voce.",
|
||||
"O Zen não tem fins lucrativos. O Zen repassa os custos dos provedores de modelos para você. Quanto maior o uso do Zen, mais a OpenCode pode negociar melhores taxas e repassá-las para você.",
|
||||
"zen.faq.q4": "Quanto custa o Zen?",
|
||||
"zen.faq.a4.p1.beforePricing": "Zen",
|
||||
"zen.faq.a4.p1.pricingLink": "cobra por requisicao",
|
||||
"zen.faq.a4.p1.afterPricing": "sem margem, entao voce paga exatamente o que o provedor do modelo cobra.",
|
||||
"zen.faq.a4.p2.beforeAccount": "Seu custo total depende do uso, e voce pode definir limites mensais de gasto na sua",
|
||||
"zen.faq.a4.p1.pricingLink": "cobra por requisição",
|
||||
"zen.faq.a4.p1.afterPricing": "sem margens de lucro, então você paga exatamente o que o provedor do modelo cobra.",
|
||||
"zen.faq.a4.p2.beforeAccount": "Seu custo total depende do uso, e você pode definir limites de gastos mensais em sua",
|
||||
"zen.faq.a4.p2.accountLink": "conta",
|
||||
"zen.faq.a4.p3":
|
||||
"Para cobrir custos, a OpenCode adiciona apenas uma pequena taxa de processamento de pagamento de $1.23 por recarga de saldo de $20.",
|
||||
"Para cobrir custos, a OpenCode adiciona apenas uma pequena taxa de processamento de pagamento de $1,23 por recarga de $20.",
|
||||
"zen.faq.q5": "E sobre dados e privacidade?",
|
||||
"zen.faq.a5.beforeExceptions":
|
||||
"Todos os modelos do Zen sao hospedados nos EUA. Os provedores seguem uma politica de zero retencao e nao usam seus dados para treinamento de modelos, com as",
|
||||
"zen.faq.a5.exceptionsLink": "seguintes excecoes",
|
||||
"zen.faq.q6": "Posso definir limites de gasto?",
|
||||
"zen.faq.a6": "Sim, voce pode definir limites mensais de gasto na sua conta.",
|
||||
"Todos os modelos Zen são hospedados nos EUA. Os provedores seguem uma política de retenção zero e não usam seus dados para treinamento de modelos, com as",
|
||||
"zen.faq.a5.exceptionsLink": "seguintes exceções",
|
||||
"zen.faq.q6": "Posso definir limites de gastos?",
|
||||
"zen.faq.a6": "Sim, você pode definir limites de gastos mensais em sua conta.",
|
||||
"zen.faq.q7": "Posso cancelar?",
|
||||
"zen.faq.a7": "Sim, voce pode desativar a cobranca a qualquer momento e usar o saldo restante.",
|
||||
"zen.faq.q8": "Posso usar Zen com outros agentes de codigo?",
|
||||
"zen.faq.a7": "Sim, você pode desativar o faturamento a qualquer momento e usar seu saldo restante.",
|
||||
"zen.faq.q8": "Posso usar o Zen com outros agentes de codificação?",
|
||||
"zen.faq.a8":
|
||||
"Embora o Zen funcione muito bem com o OpenCode, voce pode usar o Zen com qualquer agente. Siga as instrucoes de configuracao no seu agente de codigo preferido.",
|
||||
"zen.cta.start": "Comece com Zen",
|
||||
"zen.pricing.title": "Adicione $ 20 de saldo pré-pago",
|
||||
"zen.pricing.fee": "(+$ 1,23 taxa de processamento do cartão)",
|
||||
"Embora o Zen funcione muito bem com o OpenCode, você pode usar o Zen com qualquer agente. Siga as instruções de configuração no seu agente de codificação preferido.",
|
||||
|
||||
"zen.cta.start": "Comece com o Zen",
|
||||
"zen.pricing.title": "Adicionar $20 de saldo pré-pago",
|
||||
"zen.pricing.fee": "(+$1,23 taxa de processamento do cartão)",
|
||||
"zen.pricing.body": "Use com qualquer agente. Defina limites de gastos mensais. Cancele a qualquer momento.",
|
||||
"zen.problem.title": "Que problema Zen está resolvendo?",
|
||||
"zen.problem.title": "Que problema o Zen resolve?",
|
||||
"zen.problem.body":
|
||||
"Existem muitos modelos disponíveis, mas apenas alguns funcionam bem com agentes de codificação. A maioria dos provedores os configura de maneira diferente, com resultados variados.",
|
||||
"zen.problem.subtitle": "Estamos corrigindo isso para todos, não apenas para os usuários OpenCode.",
|
||||
"zen.problem.subtitle": "Estamos corrigindo isso para todos, não apenas para os usuários do OpenCode.",
|
||||
"zen.problem.item1": "Testando modelos selecionados e consultando suas equipes",
|
||||
"zen.problem.item2": "Trabalhar com fornecedores para garantir que eles sejam entregues corretamente",
|
||||
"zen.problem.item3": "Comparando todas as combinações de fornecedor de modelo que recomendamos",
|
||||
"zen.how.title": "Como Zen funciona",
|
||||
"zen.how.body": "Embora sugerimos que você use Zen com OpenCode, você pode usar Zen com qualquer agente.",
|
||||
"zen.how.step1.title": "Cadastre-se e adicione saldo de $ 20",
|
||||
"zen.how.step1.beforeLink": "siga o",
|
||||
"zen.problem.item2": "Trabalhando com provedores para garantir que sejam entregues corretamente",
|
||||
"zen.problem.item3": "Avaliando todas as combinações de modelo-provedor que recomendamos",
|
||||
"zen.how.title": "Como o Zen funciona",
|
||||
"zen.how.body": "Embora sugerimos que você use o Zen com o OpenCode, você pode usá-lo com qualquer agente.",
|
||||
"zen.how.step1.title": "Cadastre-se e adicione $20 de saldo",
|
||||
"zen.how.step1.beforeLink": "siga as",
|
||||
"zen.how.step1.link": "instruções de configuração",
|
||||
"zen.how.step2.title": "Use Zen com preços transparentes",
|
||||
"zen.how.step2.link": "pague por solicitação",
|
||||
"zen.how.step2.afterLink": "com marcação zero",
|
||||
"zen.how.step2.title": "Use o Zen com preços transparentes",
|
||||
"zen.how.step2.link": "pague por requisição",
|
||||
"zen.how.step2.afterLink": "sem margens de lucro",
|
||||
"zen.how.step3.title": "Recarga automática",
|
||||
"zen.how.step3.body": "quando seu saldo atingir US$ 5, adicionaremos automaticamente US$ 20",
|
||||
"zen.how.step3.body": "quando seu saldo atingir $5, adicionaremos automaticamente $20",
|
||||
"zen.privacy.title": "Sua privacidade é importante para nós",
|
||||
"zen.privacy.beforeExceptions":
|
||||
"Todos os modelos Zen estão hospedados nos EUA. Os provedores seguem uma política de retenção zero e não usam seus dados para treinamento de modelo, com a",
|
||||
"Todos os modelos Zen são hospedados nos EUA. Os provedores seguem uma política de retenção zero e não usam seus dados para treinamento de modelo, com as",
|
||||
"zen.privacy.exceptionsLink": "seguintes exceções",
|
||||
|
||||
"black.meta.title": "OpenCode Black | Acesse os melhores modelos de codificação do mundo",
|
||||
"black.meta.description": "Tenha acesso ao Claude, GPT, Gemini e mais com os planos de assinatura OpenCode Black.",
|
||||
"black.hero.title": "Acesse os melhores modelos de codificação do mundo",
|
||||
"black.hero.subtitle": "Incluindo Claude, GPT, Gemini e mais",
|
||||
"black.title": "OpenCode Black | Preços",
|
||||
"black.plan.icon20": "Plano Black 20",
|
||||
"black.plan.icon100": "Plano Black 100",
|
||||
"black.plan.icon200": "Plano Black 200",
|
||||
"black.plan.multiplier100": "5x mais uso que o Black 20",
|
||||
"black.plan.multiplier200": "20x mais uso que o Black 20",
|
||||
"black.price.perMonth": "por mês",
|
||||
"black.price.perPersonBilledMonthly": "por pessoa faturado mensalmente",
|
||||
"black.terms.1": "Sua assinatura não começará imediatamente",
|
||||
"black.terms.2": "Você será adicionado à lista de espera e ativado em breve",
|
||||
"black.terms.3": "Seu cartão só será cobrado quando sua assinatura for ativada",
|
||||
"black.terms.4": "Limites de uso se aplicam; uso fortemente automatizado pode atingir os limites mais cedo",
|
||||
"black.terms.5": "Assinaturas são para indivíduos, contate Enterprise para equipes",
|
||||
"black.terms.6": "Limites podem ser ajustados e planos podem ser descontinuados no futuro",
|
||||
"black.terms.7": "Cancele sua assinatura a qualquer momento",
|
||||
"black.action.continue": "Continuar",
|
||||
"black.finePrint.beforeTerms": "Os preços mostrados não incluem impostos aplicáveis",
|
||||
"black.finePrint.terms": "Termos de Serviço",
|
||||
"black.workspace.title": "OpenCode Black | Selecionar Workspace",
|
||||
"black.workspace.selectPlan": "Selecione um workspace para este plano",
|
||||
"black.workspace.name": "Workspace {{n}}",
|
||||
"black.subscribe.title": "Assinar OpenCode Black",
|
||||
"black.subscribe.paymentMethod": "Forma de pagamento",
|
||||
"black.subscribe.loadingPaymentForm": "Carregando formulário de pagamento...",
|
||||
"black.subscribe.selectWorkspaceToContinue": "Selecione um workspace para continuar",
|
||||
"black.subscribe.failurePrefix": "Ops!",
|
||||
"black.subscribe.error.generic": "Ocorreu um erro",
|
||||
"black.subscribe.error.invalidPlan": "Plano inválido",
|
||||
"black.subscribe.error.workspaceRequired": "ID do workspace é obrigatório",
|
||||
"black.subscribe.error.alreadySubscribed": "Este workspace já possui uma assinatura",
|
||||
"black.subscribe.processing": "Processando...",
|
||||
"black.subscribe.submit": "Assinar ${{plan}}",
|
||||
"black.subscribe.form.chargeNotice": "Você só será cobrado quando sua assinatura for ativada",
|
||||
"black.subscribe.success.title": "Você está na lista de espera do OpenCode Black",
|
||||
"black.subscribe.success.subscriptionPlan": "Plano de assinatura",
|
||||
"black.subscribe.success.planName": "OpenCode Black {{plan}}",
|
||||
"black.subscribe.success.amount": "Valor",
|
||||
"black.subscribe.success.amountValue": "${{plan}} por mês",
|
||||
"black.subscribe.success.paymentMethod": "Forma de pagamento",
|
||||
"black.subscribe.success.dateJoined": "Data de entrada",
|
||||
"black.subscribe.success.chargeNotice": "Seu cartão será cobrado quando sua assinatura for ativada",
|
||||
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "Chaves de API",
|
||||
"workspace.nav.members": "Membros",
|
||||
"workspace.nav.billing": "Faturamento",
|
||||
"workspace.nav.settings": "Configurações",
|
||||
|
||||
"workspace.home.banner.beforeLink": "Modelos otimizados e confiáveis para agentes de codificação.",
|
||||
"workspace.home.billing.loading": "Carregando...",
|
||||
"workspace.home.billing.enable": "Ativar faturamento",
|
||||
"workspace.home.billing.currentBalance": "Saldo atual",
|
||||
|
||||
"workspace.newUser.feature.tested.title": "Modelos Testados e Verificados",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"Avaliamos e testamos modelos especificamente para agentes de codificação para garantir o melhor desempenho.",
|
||||
"workspace.newUser.feature.quality.title": "Qualidade Máxima",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"Acesse modelos configurados para desempenho ideal - sem downgrades ou roteamento para provedores mais baratos.",
|
||||
"workspace.newUser.feature.lockin.title": "Sem Fidelidade",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"Use o Zen com qualquer agente de codificação e continue usando outros provedores com opencode sempre que quiser.",
|
||||
"workspace.newUser.copyApiKey": "Copiar chave de API",
|
||||
"workspace.newUser.copyKey": "Copiar Chave",
|
||||
"workspace.newUser.copied": "Copiado!",
|
||||
"workspace.newUser.step.enableBilling": "Ativar faturamento",
|
||||
"workspace.newUser.step.login.before": "Execute",
|
||||
"workspace.newUser.step.login.after": "e selecione opencode",
|
||||
"workspace.newUser.step.pasteKey": "Cole sua chave de API",
|
||||
"workspace.newUser.step.models.before": "Inicie o opencode e execute",
|
||||
"workspace.newUser.step.models.after": "para selecionar um modelo",
|
||||
|
||||
"workspace.models.title": "Modelos",
|
||||
"workspace.models.subtitle.beforeLink": "Gerencie quais modelos os membros do workspace podem acessar.",
|
||||
"workspace.models.table.model": "Modelo",
|
||||
"workspace.models.table.enabled": "Habilitado",
|
||||
|
||||
"workspace.providers.title": "Traga Sua Própria Chave",
|
||||
"workspace.providers.subtitle": "Configure suas próprias chaves de API de provedores de IA.",
|
||||
"workspace.providers.placeholder": "Insira a chave de API {{provider}} ({{prefix}}...)",
|
||||
"workspace.providers.configure": "Configurar",
|
||||
"workspace.providers.edit": "Editar",
|
||||
"workspace.providers.delete": "Excluir",
|
||||
"workspace.providers.saving": "Salvando...",
|
||||
"workspace.providers.save": "Salvar",
|
||||
"workspace.providers.table.provider": "Provedor",
|
||||
"workspace.providers.table.apiKey": "Chave de API",
|
||||
|
||||
"workspace.usage.title": "Histórico de Uso",
|
||||
"workspace.usage.subtitle": "Uso recente da API e custos.",
|
||||
"workspace.usage.empty": "Faça sua primeira chamada de API para começar.",
|
||||
"workspace.usage.table.date": "Data",
|
||||
"workspace.usage.table.model": "Modelo",
|
||||
"workspace.usage.table.input": "Entrada",
|
||||
"workspace.usage.table.output": "Saída",
|
||||
"workspace.usage.table.cost": "Custo",
|
||||
"workspace.usage.breakdown.input": "Entrada",
|
||||
"workspace.usage.breakdown.cacheRead": "Leitura de Cache",
|
||||
"workspace.usage.breakdown.cacheWrite": "Escrita em Cache",
|
||||
"workspace.usage.breakdown.output": "Saída",
|
||||
"workspace.usage.breakdown.reasoning": "Raciocínio",
|
||||
"workspace.usage.subscription": "assinatura (${{amount}})",
|
||||
|
||||
"workspace.cost.title": "Custo",
|
||||
"workspace.cost.subtitle": "Custos de uso discriminados por modelo.",
|
||||
"workspace.cost.allModels": "Todos os Modelos",
|
||||
"workspace.cost.allKeys": "Todas as Chaves",
|
||||
"workspace.cost.deletedSuffix": "(excluído)",
|
||||
"workspace.cost.empty": "Nenhum dado de uso disponível para o período selecionado.",
|
||||
"workspace.cost.subscriptionShort": "ass",
|
||||
|
||||
"workspace.keys.title": "Chaves de API",
|
||||
"workspace.keys.subtitle": "Gerencie suas chaves de API para acessar os serviços opencode.",
|
||||
"workspace.keys.create": "Criar Chave de API",
|
||||
"workspace.keys.placeholder": "Digite o nome da chave",
|
||||
"workspace.keys.empty": "Crie uma chave de API do opencode Gateway",
|
||||
"workspace.keys.table.name": "Nome",
|
||||
"workspace.keys.table.key": "Chave",
|
||||
"workspace.keys.table.createdBy": "Criado Por",
|
||||
"workspace.keys.table.lastUsed": "Último Uso",
|
||||
"workspace.keys.copyApiKey": "Copiar chave de API",
|
||||
"workspace.keys.delete": "Excluir",
|
||||
|
||||
"workspace.members.title": "Membros",
|
||||
"workspace.members.subtitle": "Gerencie os membros do workspace e suas permissões.",
|
||||
"workspace.members.invite": "Convidar Membro",
|
||||
"workspace.members.inviting": "Convidando...",
|
||||
"workspace.members.beta.beforeLink": "Workspaces são gratuitos para equipes durante o beta.",
|
||||
"workspace.members.form.invitee": "Convidado",
|
||||
"workspace.members.form.emailPlaceholder": "Digite o e-mail",
|
||||
"workspace.members.form.role": "Função",
|
||||
"workspace.members.form.monthlyLimit": "Limite de gastos mensais",
|
||||
"workspace.members.noLimit": "Sem limite",
|
||||
"workspace.members.noLimitLowercase": "sem limite",
|
||||
"workspace.members.invited": "convidado",
|
||||
"workspace.members.edit": "Editar",
|
||||
"workspace.members.delete": "Excluir",
|
||||
"workspace.members.saving": "Salvando...",
|
||||
"workspace.members.save": "Salvar",
|
||||
"workspace.members.table.email": "E-mail",
|
||||
"workspace.members.table.role": "Função",
|
||||
"workspace.members.table.monthLimit": "Limite mensal",
|
||||
"workspace.members.role.admin": "Admin",
|
||||
"workspace.members.role.adminDescription": "Pode gerenciar modelos, membros e faturamento",
|
||||
"workspace.members.role.member": "Membro",
|
||||
"workspace.members.role.memberDescription": "Só pode gerar chaves de API para si mesmo",
|
||||
|
||||
"workspace.settings.title": "Configurações",
|
||||
"workspace.settings.subtitle": "Atualize o nome e as preferências do seu workspace.",
|
||||
"workspace.settings.workspaceName": "Nome do workspace",
|
||||
"workspace.settings.defaultName": "Padrão",
|
||||
"workspace.settings.updating": "Atualizando...",
|
||||
"workspace.settings.save": "Salvar",
|
||||
"workspace.settings.edit": "Editar",
|
||||
|
||||
"workspace.billing.title": "Faturamento",
|
||||
"workspace.billing.subtitle.beforeLink": "Gerenciar formas de pagamento.",
|
||||
"workspace.billing.contactUs": "Contate-nos",
|
||||
"workspace.billing.subtitle.afterLink": "se você tiver alguma dúvida.",
|
||||
"workspace.billing.currentBalance": "Saldo Atual",
|
||||
"workspace.billing.add": "Adicionar $",
|
||||
"workspace.billing.enterAmount": "Digite o valor",
|
||||
"workspace.billing.loading": "Carregando...",
|
||||
"workspace.billing.addAction": "Adicionar",
|
||||
"workspace.billing.addBalance": "Adicionar Saldo",
|
||||
"workspace.billing.linkedToStripe": "Vinculado ao Stripe",
|
||||
"workspace.billing.manage": "Gerenciar",
|
||||
"workspace.billing.enable": "Ativar Faturamento",
|
||||
|
||||
"workspace.monthlyLimit.title": "Limite Mensal",
|
||||
"workspace.monthlyLimit.subtitle": "Defina um limite de uso mensal para sua conta.",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "Definindo...",
|
||||
"workspace.monthlyLimit.set": "Definir",
|
||||
"workspace.monthlyLimit.edit": "Editar Limite",
|
||||
"workspace.monthlyLimit.noLimit": "Nenhum limite de uso definido.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "Uso atual para",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "é $",
|
||||
|
||||
"workspace.reload.title": "Recarga Automática",
|
||||
"workspace.reload.disabled.before": "A recarga automática está",
|
||||
"workspace.reload.disabled.state": "desativada",
|
||||
"workspace.reload.disabled.after": "Ative para recarregar automaticamente quando o saldo estiver baixo.",
|
||||
"workspace.reload.enabled.before": "A recarga automática está",
|
||||
"workspace.reload.enabled.state": "ativada",
|
||||
"workspace.reload.enabled.middle": "Recarregaremos",
|
||||
"workspace.reload.processingFee": "taxa de processamento",
|
||||
"workspace.reload.enabled.after": "quando o saldo atingir",
|
||||
"workspace.reload.edit": "Editar",
|
||||
"workspace.reload.enable": "Ativar",
|
||||
"workspace.reload.enableAutoReload": "Ativar Recarga Automática",
|
||||
"workspace.reload.reloadAmount": "Recarregar $",
|
||||
"workspace.reload.whenBalanceReaches": "Quando o saldo atingir $",
|
||||
"workspace.reload.saving": "Salvando...",
|
||||
"workspace.reload.save": "Salvar",
|
||||
"workspace.reload.failedAt": "Recarga falhou em",
|
||||
"workspace.reload.reason": "Motivo:",
|
||||
"workspace.reload.updatePaymentMethod": "Por favor, atualize sua forma de pagamento e tente novamente.",
|
||||
"workspace.reload.retrying": "Tentando novamente...",
|
||||
"workspace.reload.retry": "Tentar novamente",
|
||||
|
||||
"workspace.payments.title": "Histórico de Pagamentos",
|
||||
"workspace.payments.subtitle": "Transações de pagamento recentes.",
|
||||
"workspace.payments.table.date": "Data",
|
||||
"workspace.payments.table.paymentId": "ID do Pagamento",
|
||||
"workspace.payments.table.amount": "Valor",
|
||||
"workspace.payments.table.receipt": "Recibo",
|
||||
"workspace.payments.type.credit": "crédito",
|
||||
"workspace.payments.type.subscription": "assinatura",
|
||||
"workspace.payments.view": "Ver",
|
||||
|
||||
"workspace.black.loading": "Carregando...",
|
||||
"workspace.black.time.day": "dia",
|
||||
"workspace.black.time.days": "dias",
|
||||
"workspace.black.time.hour": "hora",
|
||||
"workspace.black.time.hours": "horas",
|
||||
"workspace.black.time.minute": "minuto",
|
||||
"workspace.black.time.minutes": "minutos",
|
||||
"workspace.black.time.fewSeconds": "alguns segundos",
|
||||
"workspace.black.subscription.title": "Assinatura",
|
||||
"workspace.black.subscription.message": "Você assina o OpenCode Black por ${{plan}} por mês.",
|
||||
"workspace.black.subscription.manage": "Gerenciar Assinatura",
|
||||
"workspace.black.subscription.rollingUsage": "Uso de 5 horas",
|
||||
"workspace.black.subscription.weeklyUsage": "Uso Semanal",
|
||||
"workspace.black.subscription.resetsIn": "Reinicia em",
|
||||
"workspace.black.subscription.useBalance": "Use seu saldo disponível após atingir os limites de uso",
|
||||
"workspace.black.waitlist.title": "Lista de Espera",
|
||||
"workspace.black.waitlist.joined": "Você está na lista de espera para o plano OpenCode Black de ${{plan}} por mês.",
|
||||
"workspace.black.waitlist.ready": "Estamos prontos para inscrever você no plano OpenCode Black de ${{plan}} por mês.",
|
||||
"workspace.black.waitlist.leave": "Sair da Lista de Espera",
|
||||
"workspace.black.waitlist.leaving": "Saindo...",
|
||||
"workspace.black.waitlist.left": "Saiu",
|
||||
"workspace.black.waitlist.enroll": "Inscrever-se",
|
||||
"workspace.black.waitlist.enrolling": "Inscrevendo-se...",
|
||||
"workspace.black.waitlist.enrolled": "Inscrito",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"Ao clicar em Inscrever-se, sua assinatura começará imediatamente e seu cartão será cobrado.",
|
||||
|
||||
"download.title": "OpenCode | Baixar",
|
||||
"download.meta.description": "Baixe o OpenCode para macOS, Windows e Linux",
|
||||
"download.hero.title": "Baixar OpenCode",
|
||||
"download.hero.subtitle": "Disponivel em beta para macOS, Windows e Linux",
|
||||
"download.hero.subtitle": "Disponível em Beta para macOS, Windows e Linux",
|
||||
"download.hero.button": "Baixar para {{os}}",
|
||||
"download.section.terminal": "OpenCode Terminal",
|
||||
"download.section.desktop": "OpenCode Desktop (Beta)",
|
||||
"download.section.extensions": "Extensoes do OpenCode",
|
||||
"download.section.integrations": "Integracoes do OpenCode",
|
||||
"download.section.extensions": "Extensões OpenCode",
|
||||
"download.section.integrations": "Integrações OpenCode",
|
||||
"download.action.download": "Baixar",
|
||||
"download.action.install": "Instalar",
|
||||
|
||||
@@ -228,243 +503,96 @@ export const dict = {
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
|
||||
"download.faq.a3.beforeLocal":
|
||||
"Nao necessariamente, mas provavelmente. Voce vai precisar de uma assinatura de IA se quiser conectar o OpenCode a um provedor pago, embora possa trabalhar com",
|
||||
"Não necessariamente, mas provavelmente. Você precisará de uma assinatura de IA se quiser conectar o OpenCode a um provedor pago, embora você possa trabalhar com",
|
||||
"download.faq.a3.localLink": "modelos locais",
|
||||
"download.faq.a3.afterLocal.beforeZen": "de graca. Embora encorajemos os usuarios a usar",
|
||||
"download.faq.a3.afterLocal.beforeZen": "de graça. Embora incentivemos os usuários a usar o",
|
||||
"download.faq.a3.afterZen":
|
||||
", o OpenCode funciona com todos os provedores populares como OpenAI, Anthropic, xAI etc.",
|
||||
", o OpenCode funciona com todos os provedores populares, como OpenAI, Anthropic, xAI etc.",
|
||||
|
||||
"download.faq.a5.p1": "OpenCode e 100% gratuito para usar.",
|
||||
"download.faq.a5.p1": "O OpenCode é 100% gratuito para usar.",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"Qualquer custo adicional vira da sua assinatura de um provedor de modelos. Embora o OpenCode funcione com qualquer provedor de modelos, recomendamos usar",
|
||||
"Quaisquer custos adicionais virão da sua assinatura de um provedor de modelo. Embora o OpenCode funcione com qualquer provedor de modelo, recomendamos o uso do",
|
||||
"download.faq.a5.p2.afterZen": ".",
|
||||
|
||||
"download.faq.a6.p1":
|
||||
"Seus dados e informacoes so sao armazenados quando voce cria links compartilhaveis no OpenCode.",
|
||||
"Seus dados e informações só são armazenados quando você cria links compartilháveis no OpenCode.",
|
||||
"download.faq.a6.p2.beforeShare": "Saiba mais sobre",
|
||||
"download.faq.a6.shareLink": "paginas de compartilhamento",
|
||||
"download.faq.a6.shareLink": "páginas de compartilhamento",
|
||||
|
||||
"enterprise.title": "OpenCode | Solucoes empresariais para sua organizacao",
|
||||
"enterprise.meta.description": "Entre em contato com a OpenCode para solucoes empresariais",
|
||||
"enterprise.hero.title": "Seu codigo e seu",
|
||||
"enterprise.title": "OpenCode | Soluções empresariais para sua organização",
|
||||
"enterprise.meta.description": "Contate a OpenCode para soluções empresariais",
|
||||
"enterprise.hero.title": "Seu código é seu",
|
||||
"enterprise.hero.body1":
|
||||
"A OpenCode opera de forma segura dentro da sua organizacao sem armazenar dados ou contexto e sem restricoes de licenca ou reivindicacoes de propriedade. Inicie um teste com sua equipe e, em seguida, implante em toda a organizacao integrando com seu SSO e gateway interno de IA.",
|
||||
"enterprise.hero.body2": "Diga-nos como podemos ajudar.",
|
||||
"O OpenCode opera com segurança dentro da sua organização, sem dados ou contexto armazenados e sem restrições de licenciamento ou reivindicações de propriedade. Inicie um teste com sua equipe e, em seguida, implante em toda a organização integrando-o ao seu SSO e gateway de IA interno.",
|
||||
"enterprise.hero.body2": "Deixe-nos saber como podemos ajudar.",
|
||||
"enterprise.form.name.label": "Nome completo",
|
||||
"enterprise.form.name.placeholder": "Jeff Bezos",
|
||||
"enterprise.form.role.label": "Cargo",
|
||||
"enterprise.form.role.placeholder": "Presidente do conselho",
|
||||
"enterprise.form.role.placeholder": "Presidente Executivo",
|
||||
"enterprise.form.email.label": "E-mail corporativo",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "Qual problema voce esta tentando resolver?",
|
||||
"enterprise.form.message.label": "Qual problema você está tentando resolver?",
|
||||
"enterprise.form.message.placeholder": "Precisamos de ajuda com...",
|
||||
"enterprise.form.send": "Enviar",
|
||||
"enterprise.form.sending": "Enviando...",
|
||||
"enterprise.form.success": "Mensagem enviada, entraremos em contato em breve.",
|
||||
"enterprise.faq.title": "FAQ",
|
||||
"enterprise.faq.q1": "O que e OpenCode Enterprise?",
|
||||
"enterprise.faq.q1": "O que é OpenCode Enterprise?",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise e para organizacoes que querem garantir que seu codigo e dados nunca saiam da sua infraestrutura. Isso pode ser feito com uma configuracao centralizada que se integra ao seu SSO e gateway interno de IA.",
|
||||
"enterprise.faq.q2": "Como comeco com OpenCode Enterprise?",
|
||||
"OpenCode Enterprise é para organizações que desejam garantir que seu código e dados nunca saiam de sua infraestrutura. Isso pode ser feito usando uma configuração centralizada que se integra ao seu SSO e gateway de IA interno.",
|
||||
"enterprise.faq.q2": "Como faço para começar com o OpenCode Enterprise?",
|
||||
"enterprise.faq.a2":
|
||||
"Basta comecar com um teste interno com sua equipe. A OpenCode por padrao nao armazena seu codigo nem dados de contexto, tornando facil comecar. Depois, entre em contato conosco para discutir precos e opcoes de implementacao.",
|
||||
"enterprise.faq.q3": "Como funciona a precificacao empresarial?",
|
||||
"Basta começar com um teste interno com sua equipe. O OpenCode por padrão não armazena seu código ou dados de contexto, facilitando o início. Em seguida, entre em contato conosco para discutir opções de preços e implementação.",
|
||||
"enterprise.faq.q3": "Como funciona o preço empresarial?",
|
||||
"enterprise.faq.a3":
|
||||
"Oferecemos precos empresariais por assento. Se voce tiver seu proprio gateway de LLM, nao cobramos pelos tokens utilizados. Para mais detalhes, entre em contato para um orcamento personalizado com base nas necessidades da sua organizacao.",
|
||||
"enterprise.faq.q4": "Meus dados estao seguros com OpenCode Enterprise?",
|
||||
"Oferecemos preços empresariais por assento. Se você tiver seu próprio gateway de LLM, não cobramos pelos tokens usados. Para mais detalhes, entre em contato conosco para um orçamento personalizado com base nas necessidades da sua organização.",
|
||||
"enterprise.faq.q4": "Meus dados estão seguros com o OpenCode Enterprise?",
|
||||
"enterprise.faq.a4":
|
||||
"Sim. A OpenCode nao armazena seu codigo nem dados de contexto. Todo o processamento acontece localmente ou por chamadas diretas de API ao seu provedor de IA. Com configuracao centralizada e integracao SSO, seus dados permanecem seguros dentro da infraestrutura da sua organizacao.",
|
||||
"Sim. O OpenCode não armazena seu código ou dados de contexto. Todo o processamento acontece localmente ou por meio de chamadas de API diretas para seu provedor de IA. Com configuração centralizada e integração de SSO, seus dados permanecem seguros dentro da infraestrutura de sua organização.",
|
||||
|
||||
"brand.title": "OpenCode | Marca",
|
||||
"brand.meta.description": "Diretrizes de marca da OpenCode",
|
||||
"brand.heading": "Diretrizes de marca",
|
||||
"brand.subtitle": "Recursos e arquivos para ajudar você a trabalhar com a marca OpenCode.",
|
||||
"brand.downloadAll": "Baixar todos os assets",
|
||||
"changelog.title": "OpenCode | Registro de mudancas",
|
||||
"changelog.meta.description": "Notas de versao e registro de mudancas do OpenCode",
|
||||
"changelog.hero.title": "Registro de mudancas",
|
||||
"changelog.hero.subtitle": "Novas atualizacoes e melhorias no OpenCode",
|
||||
"brand.meta.description": "Diretrizes da marca OpenCode",
|
||||
"brand.heading": "Diretrizes da marca",
|
||||
"brand.subtitle": "Recursos e ativos para ajudá-lo a trabalhar com a marca OpenCode.",
|
||||
"brand.downloadAll": "Baixar todos os recursos",
|
||||
|
||||
"changelog.title": "OpenCode | Changelog",
|
||||
"changelog.meta.description": "Notas de versão e changelog do OpenCode",
|
||||
"changelog.hero.title": "Changelog",
|
||||
"changelog.hero.subtitle": "Novas atualizações e melhorias no OpenCode",
|
||||
"changelog.empty": "Nenhuma entrada de changelog encontrada.",
|
||||
"changelog.viewJson": "Ver JSON",
|
||||
"workspace.nav.zen": "zen",
|
||||
"workspace.nav.apiKeys": "API Chaves",
|
||||
"workspace.nav.members": "Membros",
|
||||
"workspace.nav.billing": "Cobrança",
|
||||
"workspace.nav.settings": "Configurações",
|
||||
"workspace.home.banner.beforeLink": "Modelos otimizados confiáveis para agentes de codificação.",
|
||||
"workspace.home.billing.loading": "Carregando...",
|
||||
"workspace.home.billing.enable": "Ativar faturamento",
|
||||
"workspace.home.billing.currentBalance": "Saldo atual",
|
||||
"workspace.newUser.feature.tested.title": "Modelos testados e verificados",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"Comparamos e testamos modelos especificamente para agentes de codificação para garantir o melhor desempenho.",
|
||||
"workspace.newUser.feature.quality.title": "Mais alta qualidade",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"Modelos de acesso configurados para desempenho ideal – sem downgrades ou roteamento para provedores mais baratos.",
|
||||
"workspace.newUser.feature.lockin.title": "Sem bloqueio",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"Use Zen com qualquer agente de codificação e continue usando outros provedores com opencode sempre que quiser.",
|
||||
"workspace.newUser.copyApiKey": "Copiar chave API",
|
||||
"workspace.newUser.copyKey": "Copiar chave",
|
||||
"workspace.newUser.copied": "Copiado!",
|
||||
"workspace.newUser.step.enableBilling": "Ativar faturamento",
|
||||
"workspace.newUser.step.login.before": "Correr",
|
||||
"workspace.newUser.step.login.after": "e selecione opencode",
|
||||
"workspace.newUser.step.pasteKey": "Cole sua chave API",
|
||||
"workspace.newUser.step.models.before": "Inicie opencode e execute",
|
||||
"workspace.newUser.step.models.after": "para selecionar um modelo",
|
||||
"workspace.models.title": "Modelos",
|
||||
"workspace.models.subtitle.beforeLink": "Gerencie quais modelos os membros do espaço de trabalho podem acessar.",
|
||||
"workspace.models.table.model": "Modelo",
|
||||
"workspace.models.table.enabled": "Habilitado",
|
||||
"workspace.providers.title": "Traga sua própria chave",
|
||||
"workspace.providers.subtitle": "Configure suas próprias chaves API de provedores de IA.",
|
||||
"workspace.providers.placeholder": "Insira a chave {{provider}} API ({{prefix}}...)",
|
||||
"workspace.providers.configure": "Configurar",
|
||||
"workspace.providers.edit": "Editar",
|
||||
"workspace.providers.delete": "Excluir",
|
||||
"workspace.providers.saving": "Salvando...",
|
||||
"workspace.providers.save": "Salvar",
|
||||
"workspace.providers.table.provider": "Provedor",
|
||||
"workspace.providers.table.apiKey": "Chave API",
|
||||
"workspace.usage.title": "Histórico de uso",
|
||||
"workspace.usage.subtitle": "Uso e custos recentes de API.",
|
||||
"workspace.usage.empty": "Faça sua primeira chamada API para começar.",
|
||||
"workspace.usage.table.date": "Data",
|
||||
"workspace.usage.table.model": "Modelo",
|
||||
"workspace.usage.table.input": "Entrada",
|
||||
"workspace.usage.table.output": "Saída",
|
||||
"workspace.usage.table.cost": "Custo",
|
||||
"workspace.usage.breakdown.input": "Entrada",
|
||||
"workspace.usage.breakdown.cacheRead": "Leitura de cache",
|
||||
"workspace.usage.breakdown.cacheWrite": "Gravação em cache",
|
||||
"workspace.usage.breakdown.output": "Saída",
|
||||
"workspace.usage.breakdown.reasoning": "Raciocínio",
|
||||
"workspace.usage.subscription": "assinatura (${{amount}})",
|
||||
"workspace.cost.title": "Custo",
|
||||
"workspace.cost.subtitle": "Custos de utilização discriminados por modelo.",
|
||||
"workspace.cost.allModels": "Todos os modelos",
|
||||
"workspace.cost.allKeys": "Todas as chaves",
|
||||
"workspace.cost.deletedSuffix": "(excluído)",
|
||||
"workspace.cost.empty": "Não há dados de uso disponíveis para o período selecionado.",
|
||||
"workspace.cost.subscriptionShort": "sub",
|
||||
"workspace.keys.title": "API Chaves",
|
||||
"workspace.keys.subtitle": "Gerencie suas chaves API para acessar serviços opencode.",
|
||||
"workspace.keys.create": "Criar chave API",
|
||||
"workspace.keys.placeholder": "Digite o nome da chave",
|
||||
"workspace.keys.empty": "Crie uma chave opencode Gateway API",
|
||||
"workspace.keys.table.name": "Nome",
|
||||
"workspace.keys.table.key": "Chave",
|
||||
"workspace.keys.table.createdBy": "Criado por",
|
||||
"workspace.keys.table.lastUsed": "Último uso",
|
||||
"workspace.keys.copyApiKey": "Copiar chave API",
|
||||
"workspace.keys.delete": "Excluir",
|
||||
"workspace.members.title": "Membros",
|
||||
"workspace.members.subtitle": "Gerencie membros do espaço de trabalho e suas permissões.",
|
||||
"workspace.members.invite": "Convidar membro",
|
||||
"workspace.members.inviting": "Convidativo...",
|
||||
"workspace.members.beta.beforeLink": "Os espaços de trabalho são gratuitos para equipes durante a versão beta.",
|
||||
"workspace.members.form.invitee": "Convidado",
|
||||
"workspace.members.form.emailPlaceholder": "Digite o e-mail",
|
||||
"workspace.members.form.role": "Papel",
|
||||
"workspace.members.form.monthlyLimit": "Limite de gastos mensais",
|
||||
"workspace.members.noLimit": "Sem limite",
|
||||
"workspace.members.noLimitLowercase": "sem limite",
|
||||
"workspace.members.invited": "convidado",
|
||||
"workspace.members.edit": "Editar",
|
||||
"workspace.members.delete": "Excluir",
|
||||
"workspace.members.saving": "Salvando...",
|
||||
"workspace.members.save": "Salvar",
|
||||
"workspace.members.table.email": "E-mail",
|
||||
"workspace.members.table.role": "Papel",
|
||||
"workspace.members.table.monthLimit": "Limite de mês",
|
||||
"workspace.members.role.admin": "Administrador",
|
||||
"workspace.members.role.adminDescription": "Pode gerenciar modelos, membros e cobrança",
|
||||
"workspace.members.role.member": "Membro",
|
||||
"workspace.members.role.memberDescription": "Só podem gerar chaves API para si próprios",
|
||||
"workspace.settings.title": "Configurações",
|
||||
"workspace.settings.subtitle": "Atualize o nome e as preferências do seu espaço de trabalho.",
|
||||
"workspace.settings.workspaceName": "Nome do espaço de trabalho",
|
||||
"workspace.settings.defaultName": "Padrão",
|
||||
"workspace.settings.updating": "Atualizando...",
|
||||
"workspace.settings.save": "Salvar",
|
||||
"workspace.settings.edit": "Editar",
|
||||
"workspace.billing.title": "Cobrança",
|
||||
"workspace.billing.subtitle.beforeLink": "Gerenciar métodos de pagamentos.",
|
||||
"workspace.billing.contactUs": "Contate-nos",
|
||||
"workspace.billing.subtitle.afterLink": "se você tiver alguma dúvida.",
|
||||
"workspace.billing.currentBalance": "Saldo Atual",
|
||||
"workspace.billing.add": "Adicionar $",
|
||||
"workspace.billing.enterAmount": "Insira o valor",
|
||||
"workspace.billing.loading": "Carregando...",
|
||||
"workspace.billing.addAction": "Adicionar",
|
||||
"workspace.billing.addBalance": "Adicionar saldo",
|
||||
"workspace.billing.linkedToStripe": "Vinculado ao Stripe",
|
||||
"workspace.billing.manage": "Gerenciar",
|
||||
"workspace.billing.enable": "Ativar faturamento",
|
||||
"workspace.monthlyLimit.title": "Limite Mensal",
|
||||
"workspace.monthlyLimit.subtitle": "Defina um limite de uso mensal para sua conta.",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "Contexto...",
|
||||
"workspace.monthlyLimit.set": "Definir",
|
||||
"workspace.monthlyLimit.edit": "Editar Limite",
|
||||
"workspace.monthlyLimit.noLimit": "Nenhum limite de uso definido.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "Uso atual para",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "é $",
|
||||
"workspace.reload.title": "Recarga automática",
|
||||
"workspace.reload.disabled.before": "A recarga automática é",
|
||||
"workspace.reload.disabled.state": "desabilitado",
|
||||
"workspace.reload.disabled.after": "Ative para recarregar automaticamente quando o saldo estiver baixo.",
|
||||
"workspace.reload.enabled.before": "A recarga automática é",
|
||||
"workspace.reload.enabled.state": "habilitado",
|
||||
"workspace.reload.enabled.middle": "Vamos recarregar",
|
||||
"workspace.reload.processingFee": "taxa de processamento",
|
||||
"workspace.reload.enabled.after": "quando o equilíbrio atinge",
|
||||
"workspace.reload.edit": "Editar",
|
||||
"workspace.reload.enable": "Habilitar",
|
||||
"workspace.reload.enableAutoReload": "Ativar recarga automática",
|
||||
"workspace.reload.reloadAmount": "Recarregar $",
|
||||
"workspace.reload.whenBalanceReaches": "Quando o saldo atinge $",
|
||||
"workspace.reload.saving": "Salvando...",
|
||||
"workspace.reload.save": "Salvar",
|
||||
"workspace.reload.failedAt": "Falha ao recarregar em",
|
||||
"workspace.reload.reason": "Razão:",
|
||||
"workspace.reload.updatePaymentMethod": "Atualize sua forma de pagamento e tente novamente.",
|
||||
"workspace.reload.retrying": "Tentando novamente...",
|
||||
"workspace.reload.retry": "Tentar novamente",
|
||||
"workspace.payments.title": "Histórico de pagamentos",
|
||||
"workspace.payments.subtitle": "Transações de pagamento recentes.",
|
||||
"workspace.payments.table.date": "Data",
|
||||
"workspace.payments.table.paymentId": "ID de pagamento",
|
||||
"workspace.payments.table.amount": "Quantia",
|
||||
"workspace.payments.table.receipt": "Recibo",
|
||||
"workspace.payments.type.credit": "crédito",
|
||||
"workspace.payments.type.subscription": "subscrição",
|
||||
"workspace.payments.view": "Visualizar",
|
||||
"workspace.black.loading": "Carregando...",
|
||||
"workspace.black.time.day": "dia",
|
||||
"workspace.black.time.days": "dias",
|
||||
"workspace.black.time.hour": "hora",
|
||||
"workspace.black.time.hours": "horas",
|
||||
"workspace.black.time.minute": "minuto",
|
||||
"workspace.black.time.minutes": "minutos",
|
||||
"workspace.black.time.fewSeconds": "alguns segundos",
|
||||
"workspace.black.subscription.title": "Subscrição",
|
||||
"workspace.black.subscription.message": "Você está inscrito no OpenCode Black por ${{plan}} por mês.",
|
||||
"workspace.black.subscription.manage": "Gerenciar assinatura",
|
||||
"workspace.black.subscription.rollingUsage": "Uso de 5 horas",
|
||||
"workspace.black.subscription.weeklyUsage": "Uso semanal",
|
||||
"workspace.black.subscription.resetsIn": "Reinicia em",
|
||||
"workspace.black.subscription.useBalance": "Use seu saldo disponível após atingir os limites de uso",
|
||||
"workspace.black.waitlist.title": "Lista de espera",
|
||||
"workspace.black.waitlist.joined": "Você está na lista de espera do plano Black de ${{plan}} por mês OpenCode.",
|
||||
"workspace.black.waitlist.ready": "Estamos prontos para inscrevê-lo no plano Black de ${{plan}} por mês OpenCode.",
|
||||
"workspace.black.waitlist.leave": "Sair da lista de espera",
|
||||
"workspace.black.waitlist.leaving": "Saindo...",
|
||||
"workspace.black.waitlist.left": "Esquerda",
|
||||
"workspace.black.waitlist.enroll": "Matricular",
|
||||
"workspace.black.waitlist.enrolling": "Inscrevendo-se...",
|
||||
"workspace.black.waitlist.enrolled": "Inscrito",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"Ao clicar em Inscrever-se, sua assinatura será iniciada imediatamente e seu cartão será cobrado.",
|
||||
|
||||
"bench.list.title": "Benchmark",
|
||||
"bench.list.heading": "Benchmarks",
|
||||
"bench.list.table.agent": "Agente",
|
||||
"bench.list.table.model": "Modelo",
|
||||
"bench.list.table.score": "Pontuação",
|
||||
|
||||
"bench.detail.title": "Benchmark - {{task}}",
|
||||
"bench.detail.notFound": "Tarefa não encontrada",
|
||||
"bench.detail.na": "N/A",
|
||||
"bench.detail.labels.agent": "Agente",
|
||||
"bench.detail.labels.model": "Modelo",
|
||||
"bench.detail.labels.task": "Tarefa",
|
||||
"bench.detail.labels.repo": "Repositório",
|
||||
"bench.detail.labels.from": "De",
|
||||
"bench.detail.labels.to": "Para",
|
||||
"bench.detail.labels.prompt": "Prompt",
|
||||
"bench.detail.labels.commit": "Commit",
|
||||
"bench.detail.labels.averageDuration": "Duração Média",
|
||||
"bench.detail.labels.averageScore": "Pontuação Média",
|
||||
"bench.detail.labels.averageCost": "Custo Médio",
|
||||
"bench.detail.labels.summary": "Resumo",
|
||||
"bench.detail.labels.runs": "Execuções",
|
||||
"bench.detail.labels.score": "Pontuação",
|
||||
"bench.detail.labels.base": "Base",
|
||||
"bench.detail.labels.penalty": "Penalidade",
|
||||
"bench.detail.labels.weight": "peso",
|
||||
"bench.detail.table.run": "Execução",
|
||||
"bench.detail.table.score": "Pontuação (Base - Penalidade)",
|
||||
"bench.detail.table.cost": "Custo",
|
||||
"bench.detail.table.duration": "Duração",
|
||||
"bench.detail.run.title": "Execução {{n}}",
|
||||
"bench.detail.rawJson": "JSON Bruto",
|
||||
} satisfies Dict
|
||||
|
||||
@@ -13,7 +13,7 @@ export const dict = {
|
||||
"nav.login": "Log ind",
|
||||
"nav.free": "Gratis",
|
||||
"nav.home": "Hjem",
|
||||
"nav.openMenu": "Aben menu",
|
||||
"nav.openMenu": "Åbn menu",
|
||||
"nav.getStartedFree": "Kom i gang gratis",
|
||||
|
||||
"nav.context.copyLogo": "Kopier logo som SVG",
|
||||
@@ -30,7 +30,7 @@ export const dict = {
|
||||
"legal.privacy": "Privatliv",
|
||||
"legal.terms": "Vilkår",
|
||||
|
||||
"email.title": "Fa besked først, nar vi lancerer nye produkter",
|
||||
"email.title": "Få besked først, når vi lancerer nye produkter",
|
||||
"email.subtitle": "Tilmeld dig ventelisten for tidlig adgang.",
|
||||
"email.placeholder": "E-mailadresse",
|
||||
"email.subscribe": "Tilmeld",
|
||||
@@ -54,16 +54,47 @@ export const dict = {
|
||||
"common.creating": "Opretter...",
|
||||
"common.create": "Opret",
|
||||
|
||||
"common.videoUnsupported": "Din browser understotter ikke video-tagget.",
|
||||
"common.videoUnsupported": "Din browser understøtter ikke video-tagget.",
|
||||
"common.figure": "Fig {{n}}.",
|
||||
"common.faq": "FAQ",
|
||||
"common.learnMore": "Laes mere",
|
||||
"common.learnMore": "Læs mere",
|
||||
|
||||
"error.invalidPlan": "Ugyldig plan",
|
||||
"error.workspaceRequired": "Workspace-ID er påkrævet",
|
||||
"error.alreadySubscribed": "Dette workspace har allerede et abonnement",
|
||||
"error.limitRequired": "Grænse er påkrævet.",
|
||||
"error.monthlyLimitInvalid": "Angiv en gyldig månedlig grænse.",
|
||||
"error.workspaceNameRequired": "Workspace-navn er påkrævet.",
|
||||
"error.nameTooLong": "Navnet må højst være på 255 tegn.",
|
||||
"error.emailRequired": "E-mail er påkrævet",
|
||||
"error.roleRequired": "Rolle er påkrævet",
|
||||
"error.idRequired": "ID er påkrævet",
|
||||
"error.nameRequired": "Navn er påkrævet",
|
||||
"error.providerRequired": "Udbyder er påkrævet",
|
||||
"error.apiKeyRequired": "API-nøgle er påkrævet",
|
||||
"error.modelRequired": "Model er påkrævet",
|
||||
"error.reloadAmountMin": "Genopfyldningsbeløb skal være mindst ${{amount}}",
|
||||
"error.reloadTriggerMin": "Saldogrænse skal være mindst ${{amount}}",
|
||||
|
||||
"home.title": "OpenCode | Den open source AI-kodningsagent",
|
||||
|
||||
"temp.title": "opencode | AI-kodningsagent bygget til terminalen",
|
||||
"temp.hero.title": "AI-kodningsagenten bygget til terminalen",
|
||||
"temp.zen": "opencode zen",
|
||||
"temp.getStarted": "Kom i gang",
|
||||
"temp.feature.native.title": "Native TUI",
|
||||
"temp.feature.native.body": "En responsiv, native, tema-bar terminal-UI",
|
||||
"temp.feature.zen.beforeLink": "En",
|
||||
"temp.feature.zen.link": "kurateret liste over modeller",
|
||||
"temp.feature.zen.afterLink": "leveret af opencode",
|
||||
"temp.feature.models.beforeLink": "Understøtter 75+ LLM-udbydere gennem",
|
||||
"temp.feature.models.afterLink": ", inklusive lokale modeller",
|
||||
"temp.screenshot.caption": "opencode TUI med tokyonight-temaet",
|
||||
"temp.screenshot.alt": "opencode TUI med tokyonight-temaet",
|
||||
|
||||
"home.banner.badge": "Ny",
|
||||
"home.banner.text": "Desktop-app tilgaengelig i beta",
|
||||
"home.banner.platforms": "pa macOS, Windows og Linux",
|
||||
"home.banner.text": "Desktop-app tilgængelig i beta",
|
||||
"home.banner.platforms": "på macOS, Windows og Linux",
|
||||
"home.banner.downloadNow": "Download nu",
|
||||
"home.banner.downloadBetaNow": "Download desktop-betaen nu",
|
||||
|
||||
@@ -75,11 +106,11 @@ export const dict = {
|
||||
|
||||
"home.what.title": "Hvad er OpenCode?",
|
||||
"home.what.body":
|
||||
"OpenCode er en open source agent, der hjelper dig med at skrive kode i din terminal, IDE eller desktop.",
|
||||
"OpenCode er en open source agent, der hjælper dig med at skrive kode i din terminal, IDE eller desktop.",
|
||||
"home.what.lsp.title": "LSP aktiveret",
|
||||
"home.what.lsp.body": "Indlaeser automatisk de rigtige LSP'er til LLM'en",
|
||||
"home.what.lsp.body": "Indlæser automatisk de rigtige LSP'er til LLM'en",
|
||||
"home.what.multiSession.title": "Multi-session",
|
||||
"home.what.multiSession.body": "Start flere agenter parallelt pa det samme projekt",
|
||||
"home.what.multiSession.body": "Start flere agenter parallelt på det samme projekt",
|
||||
"home.what.shareLinks.title": "Del links",
|
||||
"home.what.shareLinks.body": "Del et link til enhver session til reference eller debugging",
|
||||
"home.what.copilot.title": "GitHub Copilot",
|
||||
@@ -89,108 +120,107 @@ export const dict = {
|
||||
"home.what.anyModel.title": "Enhver model",
|
||||
"home.what.anyModel.body": "75+ LLM-udbydere via Models.dev, inklusive lokale modeller",
|
||||
"home.what.anyEditor.title": "Enhver editor",
|
||||
"home.what.anyEditor.body": "Tilgengelig som terminal-interface, desktop-app og IDE-udvidelse",
|
||||
"home.what.readDocs": "Laes docs",
|
||||
"home.what.anyEditor.body": "Tilgængelig som terminal-interface, desktop-app og IDE-udvidelse",
|
||||
"home.what.readDocs": "Læs docs",
|
||||
|
||||
"home.growth.title": "Den open source AI-kodningsagent",
|
||||
"home.growth.body":
|
||||
"Med over <strong>{{stars}}</strong> GitHub-stjerner, <strong>{{contributors}}</strong> bidragsydere og over <strong>{{commits}}</strong> commits bruges OpenCode af over <strong>{{monthlyUsers}}</strong> udviklere hver maaned.",
|
||||
"Med over <strong>{{stars}}</strong> GitHub-stjerner, <strong>{{contributors}}</strong> bidragsydere og over <strong>{{commits}}</strong> commits bruges OpenCode af over <strong>{{monthlyUsers}}</strong> udviklere hver måned.",
|
||||
"home.growth.githubStars": "GitHub-stjerner",
|
||||
"home.growth.contributors": "Bidragsydere",
|
||||
"home.growth.monthlyDevs": "Maanedlige devs",
|
||||
"home.growth.monthlyDevs": "Månedlige udviklere",
|
||||
|
||||
"home.privacy.title": "Bygget med privatliv forst",
|
||||
"home.privacy.title": "Bygget med privatliv først",
|
||||
"home.privacy.body":
|
||||
"OpenCode gemmer ikke din kode eller kontekstdata, sa den kan bruges i privatlivsfomlsomme miljoer.",
|
||||
"home.privacy.learnMore": "Laes mere om",
|
||||
"OpenCode gemmer ikke din kode eller kontekstdata, så den kan bruges i privatlivsfølsomme miljøer.",
|
||||
"home.privacy.learnMore": "Læs mere om",
|
||||
"home.privacy.link": "privatliv",
|
||||
|
||||
"home.faq.q1": "Hvad er OpenCode?",
|
||||
"home.faq.a1":
|
||||
"OpenCode er en open source agent, der hjelper dig med at skrive og kore kode med enhver AI-model. Den er tilgengelig som terminal-interface, desktop-app eller IDE-udvidelse.",
|
||||
"OpenCode er en open source agent, der hjælper dig med at skrive og køre kode med enhver AI-model. Den er tilgængelig som terminal-interface, desktop-app eller IDE-udvidelse.",
|
||||
"home.faq.q2": "Hvordan bruger jeg OpenCode?",
|
||||
"home.faq.a2.before": "Den nemmeste made at komme i gang pa er at laese",
|
||||
"home.faq.a2.before": "Den nemmeste måde at komme i gang på er at læse",
|
||||
"home.faq.a2.link": "introen",
|
||||
"home.faq.q3": "Skal jeg have ekstra AI-abonnementer for at bruge OpenCode?",
|
||||
"home.faq.a3.p1":
|
||||
"Ikke nodvendigvis. OpenCode kommer med gratis modeller, som du kan bruge uden at oprette en konto.",
|
||||
"Ikke nødvendigvis. OpenCode kommer med gratis modeller, som du kan bruge uden at oprette en konto.",
|
||||
"home.faq.a3.p2.beforeZen": "Derudover kan du bruge populære kodningsmodeller ved at oprette en",
|
||||
"home.faq.a3.p2.afterZen": " konto.",
|
||||
"home.faq.a3.p3":
|
||||
"Vi opfordrer til at bruge Zen, men OpenCode virker ogsa med populære udbydere som OpenAI, Anthropic, xAI osv.",
|
||||
"Vi opfordrer til at bruge Zen, men OpenCode virker også med populære udbydere som OpenAI, Anthropic, xAI osv.",
|
||||
"home.faq.a3.p4.beforeLocal": "Du kan endda forbinde dine",
|
||||
"home.faq.a3.p4.localLink": "lokale modeller",
|
||||
"home.faq.q4": "Kan jeg bruge mine eksisterende AI-abonnementer med OpenCode?",
|
||||
"home.faq.a4.p1":
|
||||
"Ja. OpenCode understotter abonnementer fra alle store udbydere. Du kan bruge Claude Pro/Max, ChatGPT Plus/Pro eller GitHub Copilot.",
|
||||
"Ja. OpenCode understøtter abonnementer fra alle store udbydere. Du kan bruge Claude Pro/Max, ChatGPT Plus/Pro eller GitHub Copilot.",
|
||||
"home.faq.q5": "Kan jeg kun bruge OpenCode i terminalen?",
|
||||
"home.faq.a5.beforeDesktop": "Ikke længere! OpenCode er nu tilgengelig som en app til",
|
||||
"home.faq.a5.beforeDesktop": "Ikke længere! OpenCode er nu tilgængelig som en app til",
|
||||
"home.faq.a5.desktop": "desktop",
|
||||
"home.faq.a5.and": "og",
|
||||
"home.faq.a5.web": "web",
|
||||
"home.faq.q6": "Hvad koster OpenCode?",
|
||||
"home.faq.a6":
|
||||
"OpenCode er 100% gratis at bruge. Det kommer ogsa med et saet gratis modeller. Der kan vare ekstra omkostninger, hvis du forbinder en anden udbyder.",
|
||||
"OpenCode er 100% gratis at bruge. Det kommer også med et sæt gratis modeller. Der kan være ekstra omkostninger, hvis du forbinder en anden udbyder.",
|
||||
"home.faq.q7": "Hvad med data og privatliv?",
|
||||
"home.faq.a7.p1": "Dine data gemmes kun, nar du bruger vores gratis modeller eller opretter delbare links.",
|
||||
"home.faq.a7.p2.beforeModels": "Laes mere om",
|
||||
"home.faq.a7.p1": "Dine data gemmes kun, når du bruger vores gratis modeller eller opretter delbare links.",
|
||||
"home.faq.a7.p2.beforeModels": "Læs mere om",
|
||||
"home.faq.a7.p2.modelsLink": "vores modeller",
|
||||
"home.faq.a7.p2.and": "og",
|
||||
"home.faq.a7.p2.shareLink": "delingssider",
|
||||
"home.faq.q8": "Er OpenCode open source?",
|
||||
"home.faq.a8.p1": "Ja, OpenCode er fuldt open source. Kildekoden er offentlig pa",
|
||||
"home.faq.a8.p1": "Ja, OpenCode er fuldt open source. Kildekoden er offentlig på",
|
||||
"home.faq.a8.p2": "under",
|
||||
"home.faq.a8.mitLicense": "MIT-licensen",
|
||||
"home.faq.a8.p3":
|
||||
", hvilket betyder at alle kan bruge, ændre eller bidrage til udviklingen. Alle i communityet kan oprette issues, indsende pull requests og udvide funktionalitet.",
|
||||
|
||||
"home.zenCta.title": "Fa adgang til palidelige, optimerede modeller til kodningsagenter",
|
||||
"home.zenCta.title": "Få adgang til pålidelige, optimerede modeller til kodningsagenter",
|
||||
"home.zenCta.body":
|
||||
"Zen giver dig adgang til et handplukket sæt AI-modeller, som OpenCode har testet og benchmarked specifikt til kodningsagenter. Du behøver ikke bekymre dig om svingende performance og kvalitet pa tværs af udbydere: brug validerede modeller, der virker.",
|
||||
"home.zenCta.link": "Laes om Zen",
|
||||
"Zen giver dig adgang til et håndplukket sæt AI-modeller, som OpenCode har testet og benchmarked specifikt til kodningsagenter. Du behøver ikke bekymre dig om svingende performance og kvalitet på tværs af udbydere: brug validerede modeller, der virker.",
|
||||
"home.zenCta.link": "Læs om Zen",
|
||||
|
||||
"download.title": "OpenCode | Download",
|
||||
|
||||
"zen.title": "OpenCode Zen | Et kurateret saet af palidelige, optimerede modeller til kodningsagenter",
|
||||
"zen.hero.title": "Fa adgang til palidelige, optimerede modeller til kodningsagenter",
|
||||
"zen.title": "OpenCode Zen | Et kurateret sæt af pålidelige, optimerede modeller til kodningsagenter",
|
||||
"zen.hero.title": "Pålidelige optimerede modeller til kodningsagenter",
|
||||
"zen.hero.body":
|
||||
"Zen giver dig adgang til et handplukket sæt AI-modeller, som OpenCode har testet og benchmarked specifikt til kodningsagenter. Du behøver ikke bekymre dig om svingende performance og kvalitet pa tværs af udbydere: brug validerede modeller, der virker.",
|
||||
"Zen giver dig adgang til et kurateret sæt AI-modeller, som OpenCode har testet og benchmarked specifikt til kodningsagenter. Du behøver ikke bekymre dig om svingende performance og kvalitet: brug validerede modeller, der virker.",
|
||||
|
||||
"zen.faq.q1": "Hvad er OpenCode Zen?",
|
||||
"zen.faq.a1":
|
||||
"Zen er et kurateret saet AI-modeller testet og benchmarked til kodningsagenter, skabt af teamet bag OpenCode.",
|
||||
"zen.faq.q2": "Hvad gor Zen mere praecis?",
|
||||
"Zen er et kurateret sæt AI-modeller testet og benchmarked til kodningsagenter, skabt af teamet bag OpenCode.",
|
||||
"zen.faq.q2": "Hvad gør Zen mere præcis?",
|
||||
"zen.faq.a2":
|
||||
"Zen tilbyder kun modeller, der er testet og benchmarked specifikt til kodningsagenter. Du ville ikke bruge en smorkniv til at skare steak; brug ikke darlige modeller til kodning.",
|
||||
"Zen tilbyder kun modeller, der er testet og benchmarked specifikt til kodningsagenter. Du ville ikke bruge en smørkniv til at skære steak; brug ikke dårlige modeller til kodning.",
|
||||
"zen.faq.q3": "Er Zen billigere?",
|
||||
"zen.faq.a3":
|
||||
"Zen er ikke for profit. Zen viderefakturerer omkostningerne fra modeludbyderne til dig. Jo mere Zen bruges, desto mere kan OpenCode forhandle bedre priser og give dem videre til dig.",
|
||||
"Zen er ikke for profit. Zen videregiver omkostningerne fra modeludbyderne til dig. Jo mere Zen bruges, desto mere kan OpenCode forhandle bedre priser og give dem videre til dig.",
|
||||
"zen.faq.q4": "Hvad koster Zen?",
|
||||
"zen.faq.a4.p1.beforePricing": "Zen",
|
||||
"zen.faq.a4.p1.pricingLink": "opkraever per request",
|
||||
"zen.faq.a4.p1.afterPricing": "uden markups, sa du betaler praecis det, som modeludbyderen opkraever.",
|
||||
"zen.faq.a4.p2.beforeAccount": "Din samlede pris afhanger af brug, og du kan saette manedlige udgiftsgraenser i din",
|
||||
"zen.faq.a4.p1.pricingLink": "opkræver per request",
|
||||
"zen.faq.a4.p1.afterPricing": "uden markups, så du betaler præcis det, som modeludbyderen opkræver.",
|
||||
"zen.faq.a4.p2.beforeAccount": "Din samlede pris afhænger af brug, og du kan sætte månedlige udgiftsgrænser i din",
|
||||
"zen.faq.a4.p2.accountLink": "konto",
|
||||
"zen.faq.a4.p3":
|
||||
"For at daekke omkostninger tilfojer OpenCode kun et lille betalingsgebyr pa $1.23 per $20 saldo-opfyldning.",
|
||||
"For at dække omkostninger tilføjer OpenCode kun et lille betalingsgebyr på $1.23 per $20 saldo-opfyldning.",
|
||||
"zen.faq.q5": "Hvad med data og privatliv?",
|
||||
"zen.faq.a5.beforeExceptions":
|
||||
"Alle Zen-modeller hostes i USA. Udbydere folger en zero-retention-policy og bruger ikke dine data til modeltraening, med de",
|
||||
"zen.faq.a5.exceptionsLink": "foelgende undtagelser",
|
||||
"zen.faq.q6": "Kan jeg saette udgiftsgraenser?",
|
||||
"zen.faq.a6": "Ja, du kan saette manedlige udgiftsgraenser i din konto.",
|
||||
"Alle Zen-modeller hostes i USA. Udbydere følger en zero-retention-policy og bruger ikke dine data til modeltræning, med de",
|
||||
"zen.faq.a5.exceptionsLink": "følgende undtagelser",
|
||||
"zen.faq.q6": "Kan jeg sætte udgiftsgrænser?",
|
||||
"zen.faq.a6": "Ja, du kan sætte månedlige udgiftsgrænser i din konto.",
|
||||
"zen.faq.q7": "Kan jeg afmelde?",
|
||||
"zen.faq.a7": "Ja, du kan deaktivere betaling nar som helst og bruge din resterende saldo.",
|
||||
"zen.faq.a7": "Ja, du kan deaktivere betaling når som helst og bruge din resterende saldo.",
|
||||
"zen.faq.q8": "Kan jeg bruge Zen med andre kodningsagenter?",
|
||||
"zen.faq.a8":
|
||||
"Selvom Zen fungerer godt med OpenCode, kan du bruge Zen med enhver agent. Folg opsaetningsinstruktionerne i din foretrukne kodningsagent.",
|
||||
"Selvom Zen fungerer godt med OpenCode, kan du bruge Zen med enhver agent. Følg opsætningsinstruktionerne i din foretrukne kodningsagent.",
|
||||
|
||||
"zen.cta.start": "Kom godt i gang med Zen",
|
||||
"zen.pricing.title": "Tilføj $20 Pay as you go-saldo",
|
||||
"zen.pricing.fee": "(+$1,23 kortbehandlingsgebyr)",
|
||||
"zen.pricing.body": "Brug med ethvert middel. Indstil månedlige forbrugsgrænser. Annuller til enhver tid.",
|
||||
"zen.pricing.fee": "(+$1.23 kortbehandlingsgebyr)",
|
||||
"zen.pricing.body": "Brug med enhver agent. Indstil månedlige forbrugsgrænser. Annuller til enhver tid.",
|
||||
"zen.problem.title": "Hvilket problem løser Zen?",
|
||||
"zen.problem.body":
|
||||
"Der er så mange modeller tilgængelige, men kun få fungerer godt med kodningsmidler. De fleste udbydere konfigurerer dem anderledes med forskellige resultater.",
|
||||
"Der er så mange modeller tilgængelige, men kun få fungerer godt med kodningsagenter. De fleste udbydere konfigurerer dem anderledes med forskellige resultater.",
|
||||
"zen.problem.subtitle": "Vi løser dette for alle, ikke kun OpenCode-brugere.",
|
||||
"zen.problem.item1": "Test af udvalgte modeller og høring af deres teams",
|
||||
"zen.problem.item2": "Samarbejde med udbydere for at sikre, at de bliver leveret korrekt",
|
||||
@@ -201,17 +231,261 @@ export const dict = {
|
||||
"zen.how.step1.beforeLink": "følg",
|
||||
"zen.how.step1.link": "opsætningsinstruktioner",
|
||||
"zen.how.step2.title": "Brug Zen med gennemsigtige priser",
|
||||
"zen.how.step2.link": "betale pr anmodning",
|
||||
"zen.how.step2.afterLink": "med nul markeringer",
|
||||
"zen.how.step2.link": "betal per request",
|
||||
"zen.how.step2.afterLink": "med nul markups",
|
||||
"zen.how.step3.title": "Auto-top op",
|
||||
"zen.how.step3.body": "når din saldo når $5, tilføjer vi automatisk $20",
|
||||
"zen.privacy.title": "Dit privatliv er vigtigt for os",
|
||||
"zen.privacy.beforeExceptions":
|
||||
"Alle Zen-modeller er hostet i USA. Udbydere følger en nulopbevaringspolitik og bruger ikke dine data til modeltræning med",
|
||||
"zen.privacy.exceptionsLink": "følgende undtagelser",
|
||||
|
||||
"black.meta.title": "OpenCode Black | Få adgang til verdens bedste kodningsmodeller",
|
||||
"black.meta.description": "Få adgang til Claude, GPT, Gemini og mere med OpenCode Black-abonnementer.",
|
||||
"black.hero.title": "Få adgang til verdens bedste kodningsmodeller",
|
||||
"black.hero.subtitle": "Inklusive Claude, GPT, Gemini og mere",
|
||||
"black.title": "OpenCode Black | Priser",
|
||||
"black.plan.icon20": "Black 20-plan",
|
||||
"black.plan.icon100": "Black 100-plan",
|
||||
"black.plan.icon200": "Black 200-plan",
|
||||
"black.plan.multiplier100": "5x mere brug end Black 20",
|
||||
"black.plan.multiplier200": "20x mere brug end Black 20",
|
||||
"black.price.perMonth": "pr. måned",
|
||||
"black.price.perPersonBilledMonthly": "pr. person faktureret månedligt",
|
||||
"black.terms.1": "Dit abonnement starter ikke med det samme",
|
||||
"black.terms.2": "Du bliver sat på ventelisten og aktiveret snart",
|
||||
"black.terms.3": "Dit kort debiteres først, når dit abonnement er aktiveret",
|
||||
"black.terms.4": "Forbrugsgrænser gælder, tung automatiseret brug kan nå grænserne hurtigere",
|
||||
"black.terms.5": "Abonnementer er for enkeltpersoner, kontakt Enterprise for teams",
|
||||
"black.terms.6": "Grænser kan justeres, og planer kan blive udfaset i fremtiden",
|
||||
"black.terms.7": "Opsig dit abonnement når som helst",
|
||||
"black.action.continue": "Fortsæt",
|
||||
"black.finePrint.beforeTerms": "Viste priser inkluderer ikke gældende skat",
|
||||
"black.finePrint.terms": "Servicevilkår",
|
||||
"black.workspace.title": "OpenCode Black | Vælg workspace",
|
||||
"black.workspace.selectPlan": "Vælg et workspace til denne plan",
|
||||
"black.workspace.name": "Workspace {{n}}",
|
||||
"black.subscribe.title": "Abonner på OpenCode Black",
|
||||
"black.subscribe.paymentMethod": "Betalingsmetode",
|
||||
"black.subscribe.loadingPaymentForm": "Indlæser betalingsformular...",
|
||||
"black.subscribe.selectWorkspaceToContinue": "Vælg et workspace for at fortsætte",
|
||||
"black.subscribe.failurePrefix": "Åh nej!",
|
||||
"black.subscribe.error.generic": "Der opstod en fejl",
|
||||
"black.subscribe.error.invalidPlan": "Ugyldig plan",
|
||||
"black.subscribe.error.workspaceRequired": "Workspace-ID er påkrævet",
|
||||
"black.subscribe.error.alreadySubscribed": "Dette workspace har allerede et abonnement",
|
||||
"black.subscribe.processing": "Behandler...",
|
||||
"black.subscribe.submit": "Abonner ${{plan}}",
|
||||
"black.subscribe.form.chargeNotice": "Du bliver først debiteret, når dit abonnement er aktiveret",
|
||||
"black.subscribe.success.title": "Du er på OpenCode Black-ventelisten",
|
||||
"black.subscribe.success.subscriptionPlan": "Abonnementsplan",
|
||||
"black.subscribe.success.planName": "OpenCode Black {{plan}}",
|
||||
"black.subscribe.success.amount": "Beløb",
|
||||
"black.subscribe.success.amountValue": "${{plan}} pr. måned",
|
||||
"black.subscribe.success.paymentMethod": "Betalingsmetode",
|
||||
"black.subscribe.success.dateJoined": "Dato tilmeldt",
|
||||
"black.subscribe.success.chargeNotice": "Dit kort vil blive debiteret, når dit abonnement er aktiveret",
|
||||
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "API-nøgler",
|
||||
"workspace.nav.members": "Medlemmer",
|
||||
"workspace.nav.billing": "Fakturering",
|
||||
"workspace.nav.settings": "Indstillinger",
|
||||
|
||||
"workspace.home.banner.beforeLink": "Pålidelige optimerede modeller til kodningsagenter.",
|
||||
"workspace.home.billing.loading": "Indlæser...",
|
||||
"workspace.home.billing.enable": "Aktiver fakturering",
|
||||
"workspace.home.billing.currentBalance": "Nuværende saldo",
|
||||
|
||||
"workspace.newUser.feature.tested.title": "Testede og verificerede modeller",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"Vi har benchmarket og testet modeller specifikt til kodningsagenter for at sikre den bedste ydeevne.",
|
||||
"workspace.newUser.feature.quality.title": "Højeste kvalitet",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"Få adgang til modeller konfigureret til optimal ydeevne - ingen nedgraderinger eller routing til billigere udbydere.",
|
||||
"workspace.newUser.feature.lockin.title": "Ingen indlåsning",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"Brug Zen med en hvilken som helst kodningsagent, og fortsæt med at bruge andre udbydere med opencode, når du vil.",
|
||||
"workspace.newUser.copyApiKey": "Kopiér API-nøgle",
|
||||
"workspace.newUser.copyKey": "Kopier nøgle",
|
||||
"workspace.newUser.copied": "Kopieret!",
|
||||
"workspace.newUser.step.enableBilling": "Aktiver fakturering",
|
||||
"workspace.newUser.step.login.before": "Kør",
|
||||
"workspace.newUser.step.login.after": "og vælg opencode",
|
||||
"workspace.newUser.step.pasteKey": "Indsæt din API-nøgle",
|
||||
"workspace.newUser.step.models.before": "Start opencode og kør",
|
||||
"workspace.newUser.step.models.after": "for at vælge en model",
|
||||
|
||||
"workspace.models.title": "Modeller",
|
||||
"workspace.models.subtitle.beforeLink": "Administrer, hvilke modeller workspace-medlemmer kan få adgang til.",
|
||||
"workspace.models.table.model": "Model",
|
||||
"workspace.models.table.enabled": "Aktiveret",
|
||||
|
||||
"workspace.providers.title": "Medbring din egen nøgle",
|
||||
"workspace.providers.subtitle": "Konfigurer dine egne API-nøgler fra AI-udbydere.",
|
||||
"workspace.providers.placeholder": "Indtast {{provider}} API-nøgle ({{prefix}}...)",
|
||||
"workspace.providers.configure": "Konfigurer",
|
||||
"workspace.providers.edit": "Rediger",
|
||||
"workspace.providers.delete": "Slet",
|
||||
"workspace.providers.saving": "Gemmer...",
|
||||
"workspace.providers.save": "Gem",
|
||||
"workspace.providers.table.provider": "Udbyder",
|
||||
"workspace.providers.table.apiKey": "API-nøgle",
|
||||
|
||||
"workspace.usage.title": "Brugshistorik",
|
||||
"workspace.usage.subtitle": "Seneste API-brug og omkostninger.",
|
||||
"workspace.usage.empty": "Foretag dit første API-opkald for at komme i gang.",
|
||||
"workspace.usage.table.date": "Dato",
|
||||
"workspace.usage.table.model": "Model",
|
||||
"workspace.usage.table.input": "Input",
|
||||
"workspace.usage.table.output": "Output",
|
||||
"workspace.usage.table.cost": "Omkostning",
|
||||
"workspace.usage.breakdown.input": "Input",
|
||||
"workspace.usage.breakdown.cacheRead": "Cache læst",
|
||||
"workspace.usage.breakdown.cacheWrite": "Cache skriv",
|
||||
"workspace.usage.breakdown.output": "Output",
|
||||
"workspace.usage.breakdown.reasoning": "Ræsonnement",
|
||||
"workspace.usage.subscription": "abonnement (${{amount}})",
|
||||
|
||||
"workspace.cost.title": "Omkostninger",
|
||||
"workspace.cost.subtitle": "Brugsomkostninger opdelt efter model.",
|
||||
"workspace.cost.allModels": "Alle modeller",
|
||||
"workspace.cost.allKeys": "Alle nøgler",
|
||||
"workspace.cost.deletedSuffix": "(slettet)",
|
||||
"workspace.cost.empty": "Ingen brugsdata tilgængelige for den valgte periode.",
|
||||
"workspace.cost.subscriptionShort": "sub",
|
||||
|
||||
"workspace.keys.title": "API-nøgler",
|
||||
"workspace.keys.subtitle": "Administrer dine API-nøgler for at få adgang til opencode-tjenester.",
|
||||
"workspace.keys.create": "Opret API-nøgle",
|
||||
"workspace.keys.placeholder": "Indtast nøglenavn",
|
||||
"workspace.keys.empty": "Opret en opencode Gateway API-nøgle",
|
||||
"workspace.keys.table.name": "Navn",
|
||||
"workspace.keys.table.key": "Nøgle",
|
||||
"workspace.keys.table.createdBy": "Oprettet af",
|
||||
"workspace.keys.table.lastUsed": "Sidst brugt",
|
||||
"workspace.keys.copyApiKey": "Kopiér API-nøgle",
|
||||
"workspace.keys.delete": "Slet",
|
||||
|
||||
"workspace.members.title": "Medlemmer",
|
||||
"workspace.members.subtitle": "Administrer workspace-medlemmer og deres tilladelser.",
|
||||
"workspace.members.invite": "Inviter medlem",
|
||||
"workspace.members.inviting": "Inviterer...",
|
||||
"workspace.members.beta.beforeLink": "Workspaces er gratis for teams under betaversionen.",
|
||||
"workspace.members.form.invitee": "Inviteret",
|
||||
"workspace.members.form.emailPlaceholder": "Indtast e-mail",
|
||||
"workspace.members.form.role": "Rolle",
|
||||
"workspace.members.form.monthlyLimit": "Månedlig forbrugsgrænse",
|
||||
"workspace.members.noLimit": "Ingen grænse",
|
||||
"workspace.members.noLimitLowercase": "ingen grænse",
|
||||
"workspace.members.invited": "inviteret",
|
||||
"workspace.members.edit": "Rediger",
|
||||
"workspace.members.delete": "Slet",
|
||||
"workspace.members.saving": "Gemmer...",
|
||||
"workspace.members.save": "Gem",
|
||||
"workspace.members.table.email": "E-mail",
|
||||
"workspace.members.table.role": "Rolle",
|
||||
"workspace.members.table.monthLimit": "Månedsgrænse",
|
||||
"workspace.members.role.admin": "Admin",
|
||||
"workspace.members.role.adminDescription": "Kan administrere modeller, medlemmer og fakturering",
|
||||
"workspace.members.role.member": "Medlem",
|
||||
"workspace.members.role.memberDescription": "Kan kun generere API-nøgler til sig selv",
|
||||
|
||||
"workspace.settings.title": "Indstillinger",
|
||||
"workspace.settings.subtitle": "Opdater dit workspace-navn og præferencer.",
|
||||
"workspace.settings.workspaceName": "Workspace-navn",
|
||||
"workspace.settings.defaultName": "Standard",
|
||||
"workspace.settings.updating": "Opdaterer...",
|
||||
"workspace.settings.save": "Gem",
|
||||
"workspace.settings.edit": "Rediger",
|
||||
|
||||
"workspace.billing.title": "Fakturering",
|
||||
"workspace.billing.subtitle.beforeLink": "Administrer betalingsmetoder.",
|
||||
"workspace.billing.contactUs": "Kontakt os",
|
||||
"workspace.billing.subtitle.afterLink": "hvis du har spørgsmål.",
|
||||
"workspace.billing.currentBalance": "Nuværende saldo",
|
||||
"workspace.billing.add": "Tilføj $",
|
||||
"workspace.billing.enterAmount": "Indtast beløb",
|
||||
"workspace.billing.loading": "Indlæser...",
|
||||
"workspace.billing.addAction": "Tilføj",
|
||||
"workspace.billing.addBalance": "Tilføj saldo",
|
||||
"workspace.billing.linkedToStripe": "Forbundet til Stripe",
|
||||
"workspace.billing.manage": "Administrer",
|
||||
"workspace.billing.enable": "Aktiver fakturering",
|
||||
|
||||
"workspace.monthlyLimit.title": "Månedlig grænse",
|
||||
"workspace.monthlyLimit.subtitle": "Indstil en månedlig forbrugsgrænse for din konto.",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "Indstiller...",
|
||||
"workspace.monthlyLimit.set": "Sæt",
|
||||
"workspace.monthlyLimit.edit": "Rediger grænse",
|
||||
"workspace.monthlyLimit.noLimit": "Ingen forbrugsgrænse angivet.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "Nuværende brug for",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "er $",
|
||||
|
||||
"workspace.reload.title": "Automatisk genopfyldning",
|
||||
"workspace.reload.disabled.before": "Automatisk genopfyldning er",
|
||||
"workspace.reload.disabled.state": "deaktiveret",
|
||||
"workspace.reload.disabled.after": "Aktiver for automatisk at genopfylde, når saldoen er lav.",
|
||||
"workspace.reload.enabled.before": "Automatisk genopfyldning er",
|
||||
"workspace.reload.enabled.state": "aktiveret",
|
||||
"workspace.reload.enabled.middle": "Vi genopfylder",
|
||||
"workspace.reload.processingFee": "ekspeditionsgebyr",
|
||||
"workspace.reload.enabled.after": "når saldoen når",
|
||||
"workspace.reload.edit": "Rediger",
|
||||
"workspace.reload.enable": "Aktiver",
|
||||
"workspace.reload.enableAutoReload": "Aktiver automatisk genopfyldning",
|
||||
"workspace.reload.reloadAmount": "Genopfyld $",
|
||||
"workspace.reload.whenBalanceReaches": "Når saldoen når $",
|
||||
"workspace.reload.saving": "Gemmer...",
|
||||
"workspace.reload.save": "Gem",
|
||||
"workspace.reload.failedAt": "Genopfyldning mislykkedes kl",
|
||||
"workspace.reload.reason": "Årsag:",
|
||||
"workspace.reload.updatePaymentMethod": "Opdater din betalingsmetode, og prøv igen.",
|
||||
"workspace.reload.retrying": "Prøver igen...",
|
||||
"workspace.reload.retry": "Prøv igen",
|
||||
|
||||
"workspace.payments.title": "Betalingshistorik",
|
||||
"workspace.payments.subtitle": "Seneste betalingstransaktioner.",
|
||||
"workspace.payments.table.date": "Dato",
|
||||
"workspace.payments.table.paymentId": "Betalings-ID",
|
||||
"workspace.payments.table.amount": "Beløb",
|
||||
"workspace.payments.table.receipt": "Kvittering",
|
||||
"workspace.payments.type.credit": "kredit",
|
||||
"workspace.payments.type.subscription": "abonnement",
|
||||
"workspace.payments.view": "Vis",
|
||||
|
||||
"workspace.black.loading": "Indlæser...",
|
||||
"workspace.black.time.day": "dag",
|
||||
"workspace.black.time.days": "dage",
|
||||
"workspace.black.time.hour": "time",
|
||||
"workspace.black.time.hours": "timer",
|
||||
"workspace.black.time.minute": "minut",
|
||||
"workspace.black.time.minutes": "minutter",
|
||||
"workspace.black.time.fewSeconds": "et par sekunder",
|
||||
"workspace.black.subscription.title": "Abonnement",
|
||||
"workspace.black.subscription.message": "Du abonnerer på OpenCode Black for ${{plan}} om måneden.",
|
||||
"workspace.black.subscription.manage": "Administrer abonnement",
|
||||
"workspace.black.subscription.rollingUsage": "5-timers brug",
|
||||
"workspace.black.subscription.weeklyUsage": "Ugentlig brug",
|
||||
"workspace.black.subscription.resetsIn": "Nulstiller i",
|
||||
"workspace.black.subscription.useBalance": "Brug din tilgængelige saldo, når du har nået forbrugsgrænserne",
|
||||
"workspace.black.waitlist.title": "Venteliste",
|
||||
"workspace.black.waitlist.joined": "Du er på ventelisten for ${{plan}} per måned OpenCode Black plan.",
|
||||
"workspace.black.waitlist.ready": "Vi er klar til at tilmelde dig ${{plan}} per måned OpenCode Black plan.",
|
||||
"workspace.black.waitlist.leave": "Forlad venteliste",
|
||||
"workspace.black.waitlist.leaving": "Forlader...",
|
||||
"workspace.black.waitlist.left": "Forladt",
|
||||
"workspace.black.waitlist.enroll": "Tilmeld",
|
||||
"workspace.black.waitlist.enrolling": "Tilmelder...",
|
||||
"workspace.black.waitlist.enrolled": "Tilmeldt",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"Når du klikker på Tilmeld, starter dit abonnement med det samme, og dit kort vil blive debiteret.",
|
||||
|
||||
"download.title": "OpenCode | Download",
|
||||
"download.meta.description": "Download OpenCode til macOS, Windows og Linux",
|
||||
"download.hero.title": "Download OpenCode",
|
||||
"download.hero.subtitle": "Tilgengelig i beta til macOS, Windows og Linux",
|
||||
"download.hero.subtitle": "Tilgængelig i beta til macOS, Windows og Linux",
|
||||
"download.hero.button": "Download til {{os}}",
|
||||
"download.section.terminal": "OpenCode Terminal",
|
||||
"download.section.desktop": "OpenCode Desktop (Beta)",
|
||||
@@ -227,7 +501,7 @@ export const dict = {
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
|
||||
"download.faq.a3.beforeLocal":
|
||||
"Ikke nodvendigvis, men sandsynligvis. Du skal bruge et AI-abonnement hvis du vil forbinde OpenCode til en betalt udbyder, men du kan arbejde med",
|
||||
"Ikke nødvendigvis, men sandsynligvis. Du skal bruge et AI-abonnement hvis du vil forbinde OpenCode til en betalt udbyder, men du kan arbejde med",
|
||||
"download.faq.a3.localLink": "lokale modeller",
|
||||
"download.faq.a3.afterLocal.beforeZen": "gratis. Selvom vi opfordrer brugere til at bruge",
|
||||
"download.faq.a3.afterZen": ", fungerer OpenCode med alle populære udbydere som OpenAI, Anthropic, xAI osv.",
|
||||
@@ -238,7 +512,7 @@ export const dict = {
|
||||
"download.faq.a5.p2.afterZen": ".",
|
||||
|
||||
"download.faq.a6.p1": "Dine data og oplysninger gemmes kun når du opretter delbare links i OpenCode.",
|
||||
"download.faq.a6.p2.beforeShare": "Laes mere om",
|
||||
"download.faq.a6.p2.beforeShare": "Læs mere om",
|
||||
"download.faq.a6.shareLink": "delingssider",
|
||||
|
||||
"enterprise.title": "OpenCode | Enterprise-løsninger til din organisation",
|
||||
@@ -275,193 +549,46 @@ export const dict = {
|
||||
"brand.title": "OpenCode | Brand",
|
||||
"brand.meta.description": "OpenCode brandretningslinjer",
|
||||
"brand.heading": "Brandretningslinjer",
|
||||
"brand.subtitle": "Ressourcer og assets, der hjelper dig med at arbejde med OpenCode-brandet.",
|
||||
"brand.subtitle": "Ressourcer og assets, der hjælper dig med at arbejde med OpenCode-brandet.",
|
||||
"brand.downloadAll": "Download alle assets",
|
||||
|
||||
"changelog.title": "OpenCode | Changelog",
|
||||
"changelog.meta.description": "OpenCode versionsnoter og changelog",
|
||||
"changelog.hero.title": "Changelog",
|
||||
"changelog.hero.subtitle": "Nye opdateringer og forbedringer til OpenCode",
|
||||
"changelog.empty": "Ingen changelog-indlaeg fundet.",
|
||||
"changelog.empty": "Ingen changelog-indlæg fundet.",
|
||||
"changelog.viewJson": "Se JSON",
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "API nøgler",
|
||||
"workspace.nav.members": "Medlemmer",
|
||||
"workspace.nav.billing": "Fakturering",
|
||||
"workspace.nav.settings": "Indstillinger",
|
||||
"workspace.home.banner.beforeLink": "Pålidelige optimerede modeller til kodningsagenter.",
|
||||
"workspace.home.billing.loading": "Indlæser...",
|
||||
"workspace.home.billing.enable": "Aktiver fakturering",
|
||||
"workspace.home.billing.currentBalance": "Nuværende saldo",
|
||||
"workspace.newUser.feature.tested.title": "Testede og verificerede modeller",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"Vi har benchmarket og testet modeller specifikt til kodningsagenter for at sikre den bedste ydeevne.",
|
||||
"workspace.newUser.feature.quality.title": "Højeste kvalitet",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"Få adgang til modeller konfigureret til optimal ydeevne - ingen nedgraderinger eller routing til billigere udbydere.",
|
||||
"workspace.newUser.feature.lockin.title": "Ingen indlåsning",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"Brug Zen med en hvilken som helst kodningsagent, og fortsæt med at bruge andre udbydere med opencode, når du vil.",
|
||||
"workspace.newUser.copyApiKey": "Kopiér API-nøgle",
|
||||
"workspace.newUser.copyKey": "Kopier nøgle",
|
||||
"workspace.newUser.copied": "Kopieret!",
|
||||
"workspace.newUser.step.enableBilling": "Aktiver fakturering",
|
||||
"workspace.newUser.step.login.before": "Kør",
|
||||
"workspace.newUser.step.login.after": "og vælg opencode",
|
||||
"workspace.newUser.step.pasteKey": "Indsæt din API nøgle",
|
||||
"workspace.newUser.step.models.before": "Start opencode og kør",
|
||||
"workspace.newUser.step.models.after": "for at vælge en model",
|
||||
"workspace.models.title": "Modeller",
|
||||
"workspace.models.subtitle.beforeLink": "Administrer, hvilke modeller arbejdsområdemedlemmer kan få adgang til.",
|
||||
"workspace.models.table.model": "Model",
|
||||
"workspace.models.table.enabled": "Aktiveret",
|
||||
"workspace.providers.title": "Medbring din egen nøgle",
|
||||
"workspace.providers.subtitle": "Konfigurer dine egne API nøgler fra AI-udbydere.",
|
||||
"workspace.providers.placeholder": "Indtast {{provider}} API-nøgle ({{prefix}}...)",
|
||||
"workspace.providers.configure": "Konfigurer",
|
||||
"workspace.providers.edit": "Rediger",
|
||||
"workspace.providers.delete": "Slet",
|
||||
"workspace.providers.saving": "Gemmer...",
|
||||
"workspace.providers.save": "Gem",
|
||||
"workspace.providers.table.provider": "Udbyder",
|
||||
"workspace.providers.table.apiKey": "API Nøgle",
|
||||
"workspace.usage.title": "Brugshistorik",
|
||||
"workspace.usage.subtitle": "Seneste API brug og omkostninger.",
|
||||
"workspace.usage.empty": "Foretag dit første API-opkald for at komme i gang.",
|
||||
"workspace.usage.table.date": "Dato",
|
||||
"workspace.usage.table.model": "Model",
|
||||
"workspace.usage.table.input": "Input",
|
||||
"workspace.usage.table.output": "Output",
|
||||
"workspace.usage.table.cost": "Omkostning",
|
||||
"workspace.usage.breakdown.input": "Input",
|
||||
"workspace.usage.breakdown.cacheRead": "Cache læst",
|
||||
"workspace.usage.breakdown.cacheWrite": "Cache skriv",
|
||||
"workspace.usage.breakdown.output": "Output",
|
||||
"workspace.usage.breakdown.reasoning": "Ræsonnement",
|
||||
"workspace.usage.subscription": "abonnement (${{amount}})",
|
||||
"workspace.cost.title": "Omkostninger",
|
||||
"workspace.cost.subtitle": "Brugsomkostninger opdelt efter model.",
|
||||
"workspace.cost.allModels": "Alle modeller",
|
||||
"workspace.cost.allKeys": "Alle nøgler",
|
||||
"workspace.cost.deletedSuffix": "(slettet)",
|
||||
"workspace.cost.empty": "Ingen brugsdata tilgængelige for den valgte periode.",
|
||||
"workspace.cost.subscriptionShort": "sub",
|
||||
"workspace.keys.title": "API nøgler",
|
||||
"workspace.keys.subtitle": "Administrer dine API nøgler for at få adgang til opencode tjenester.",
|
||||
"workspace.keys.create": "Opret API nøgle",
|
||||
"workspace.keys.placeholder": "Indtast nøglenavn",
|
||||
"workspace.keys.empty": "Opret en opencode Gateway API nøgle",
|
||||
"workspace.keys.table.name": "Navn",
|
||||
"workspace.keys.table.key": "Nøgle",
|
||||
"workspace.keys.table.createdBy": "Skabt af",
|
||||
"workspace.keys.table.lastUsed": "Sidst brugt",
|
||||
"workspace.keys.copyApiKey": "Kopiér API-nøgle",
|
||||
"workspace.keys.delete": "Slet",
|
||||
"workspace.members.title": "Medlemmer",
|
||||
"workspace.members.subtitle": "Administrer arbejdsområdemedlemmer og deres tilladelser.",
|
||||
"workspace.members.invite": "Inviter medlem",
|
||||
"workspace.members.inviting": "Inviterer...",
|
||||
"workspace.members.beta.beforeLink": "Arbejdsområder er gratis for teams under betaversionen.",
|
||||
"workspace.members.form.invitee": "Inviteret",
|
||||
"workspace.members.form.emailPlaceholder": "Indtast e-mail",
|
||||
"workspace.members.form.role": "Rolle",
|
||||
"workspace.members.form.monthlyLimit": "Månedlig forbrugsgrænse",
|
||||
"workspace.members.noLimit": "Ingen grænse",
|
||||
"workspace.members.noLimitLowercase": "ingen grænse",
|
||||
"workspace.members.invited": "inviteret",
|
||||
"workspace.members.edit": "Rediger",
|
||||
"workspace.members.delete": "Slet",
|
||||
"workspace.members.saving": "Gemmer...",
|
||||
"workspace.members.save": "Gem",
|
||||
"workspace.members.table.email": "E-mail",
|
||||
"workspace.members.table.role": "Rolle",
|
||||
"workspace.members.table.monthLimit": "Månedsgrænse",
|
||||
"workspace.members.role.admin": "Admin",
|
||||
"workspace.members.role.adminDescription": "Kan administrere modeller, medlemmer og fakturering",
|
||||
"workspace.members.role.member": "Medlem",
|
||||
"workspace.members.role.memberDescription": "Kan kun generere API nøgler til sig selv",
|
||||
"workspace.settings.title": "Indstillinger",
|
||||
"workspace.settings.subtitle": "Opdater dit arbejdsområdes navn og præferencer.",
|
||||
"workspace.settings.workspaceName": "Arbejdsområdets navn",
|
||||
"workspace.settings.defaultName": "Standard",
|
||||
"workspace.settings.updating": "Opdaterer...",
|
||||
"workspace.settings.save": "Gem",
|
||||
"workspace.settings.edit": "Rediger",
|
||||
"workspace.billing.title": "Fakturering",
|
||||
"workspace.billing.subtitle.beforeLink": "Administrer betalingsmetoder.",
|
||||
"workspace.billing.contactUs": "Kontakt os",
|
||||
"workspace.billing.subtitle.afterLink": "hvis du har spørgsmål.",
|
||||
"workspace.billing.currentBalance": "Nuværende saldo",
|
||||
"workspace.billing.add": "Tilføj $",
|
||||
"workspace.billing.enterAmount": "Indtast beløb",
|
||||
"workspace.billing.loading": "Indlæser...",
|
||||
"workspace.billing.addAction": "Tilføj",
|
||||
"workspace.billing.addBalance": "Tilføj balance",
|
||||
"workspace.billing.linkedToStripe": "Forbundet til Stripe",
|
||||
"workspace.billing.manage": "Administrer",
|
||||
"workspace.billing.enable": "Aktiver fakturering",
|
||||
"workspace.monthlyLimit.title": "Månedlig grænse",
|
||||
"workspace.monthlyLimit.subtitle": "Indstil en månedlig forbrugsgrænse for din konto.",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "Indstiller...",
|
||||
"workspace.monthlyLimit.set": "Sæt",
|
||||
"workspace.monthlyLimit.edit": "Rediger grænse",
|
||||
"workspace.monthlyLimit.noLimit": "Ingen forbrugsgrænse angivet.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "Nuværende brug for",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "er $",
|
||||
"workspace.reload.title": "Automatisk genopfyldning",
|
||||
"workspace.reload.disabled.before": "Automatisk genopfyldning er",
|
||||
"workspace.reload.disabled.state": "deaktiveret",
|
||||
"workspace.reload.disabled.after": "Aktiver for automatisk at genopfylde, når saldoen er lav.",
|
||||
"workspace.reload.enabled.before": "Automatisk genopfyldning er",
|
||||
"workspace.reload.enabled.state": "aktiveret",
|
||||
"workspace.reload.enabled.middle": "Vi genopfylder",
|
||||
"workspace.reload.processingFee": "ekspeditionsgebyr",
|
||||
"workspace.reload.enabled.after": "når balancen er nået",
|
||||
"workspace.reload.edit": "Rediger",
|
||||
"workspace.reload.enable": "Aktiver",
|
||||
"workspace.reload.enableAutoReload": "Aktiver automatisk genopfyldning",
|
||||
"workspace.reload.reloadAmount": "Genopfyld $",
|
||||
"workspace.reload.whenBalanceReaches": "Når saldoen når $",
|
||||
"workspace.reload.saving": "Gemmer...",
|
||||
"workspace.reload.save": "Gem",
|
||||
"workspace.reload.failedAt": "Genopfyldning mislykkedes kl",
|
||||
"workspace.reload.reason": "Årsag:",
|
||||
"workspace.reload.updatePaymentMethod": "Opdater din betalingsmetode, og prøv igen.",
|
||||
"workspace.reload.retrying": "Prøver igen...",
|
||||
"workspace.reload.retry": "Prøv igen",
|
||||
"workspace.payments.title": "Betalingshistorik",
|
||||
"workspace.payments.subtitle": "Seneste betalingstransaktioner.",
|
||||
"workspace.payments.table.date": "Dato",
|
||||
"workspace.payments.table.paymentId": "Betalings-id",
|
||||
"workspace.payments.table.amount": "Beløb",
|
||||
"workspace.payments.table.receipt": "Kvittering",
|
||||
"workspace.payments.type.credit": "kredit",
|
||||
"workspace.payments.type.subscription": "abonnement",
|
||||
"workspace.payments.view": "Vis",
|
||||
"workspace.black.loading": "Indlæser...",
|
||||
"workspace.black.time.day": "dag",
|
||||
"workspace.black.time.days": "dage",
|
||||
"workspace.black.time.hour": "time",
|
||||
"workspace.black.time.hours": "timer",
|
||||
"workspace.black.time.minute": "minut",
|
||||
"workspace.black.time.minutes": "minutter",
|
||||
"workspace.black.time.fewSeconds": "et par sekunder",
|
||||
"workspace.black.subscription.title": "Abonnement",
|
||||
"workspace.black.subscription.message": "Du abonnerer på OpenCode Black for ${{plan}} om måneden.",
|
||||
"workspace.black.subscription.manage": "Administrer abonnement",
|
||||
"workspace.black.subscription.rollingUsage": "5-timers brug",
|
||||
"workspace.black.subscription.weeklyUsage": "Ugentlig brug",
|
||||
"workspace.black.subscription.resetsIn": "Nulstiller i",
|
||||
"workspace.black.subscription.useBalance": "Brug din tilgængelige saldo, når du har nået forbrugsgrænserne",
|
||||
"workspace.black.waitlist.title": "Venteliste",
|
||||
"workspace.black.waitlist.joined": "Du er på ventelisten for ${{plan}} per måned OpenCode Black plan.",
|
||||
"workspace.black.waitlist.ready": "Vi er klar til at tilmelde dig ${{plan}} per måned OpenCode Black plan.",
|
||||
"workspace.black.waitlist.leave": "Forlad venteliste",
|
||||
"workspace.black.waitlist.leaving": "Forlader...",
|
||||
"workspace.black.waitlist.left": "Forladt",
|
||||
"workspace.black.waitlist.enroll": "Tilmeld",
|
||||
"workspace.black.waitlist.enrolling": "Tilmelder...",
|
||||
"workspace.black.waitlist.enrolled": "Tilmeldt",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"Når du klikker på Tilmeld, starter dit abonnement med det samme, og dit kort vil blive debiteret.",
|
||||
|
||||
"bench.list.title": "Benchmark",
|
||||
"bench.list.heading": "Benchmarks",
|
||||
"bench.list.table.agent": "Agent",
|
||||
"bench.list.table.model": "Model",
|
||||
"bench.list.table.score": "Score",
|
||||
|
||||
"bench.detail.title": "Benchmark - {{task}}",
|
||||
"bench.detail.notFound": "Opgave ikke fundet",
|
||||
"bench.detail.na": "Ikke tilgængelig",
|
||||
"bench.detail.labels.agent": "Agent",
|
||||
"bench.detail.labels.model": "Model",
|
||||
"bench.detail.labels.task": "Opgave",
|
||||
"bench.detail.labels.repo": "Repo",
|
||||
"bench.detail.labels.from": "Fra",
|
||||
"bench.detail.labels.to": "Til",
|
||||
"bench.detail.labels.prompt": "Prompt",
|
||||
"bench.detail.labels.commit": "Commit",
|
||||
"bench.detail.labels.averageDuration": "Gennemsnitlig varighed",
|
||||
"bench.detail.labels.averageScore": "Gennemsnitlig score",
|
||||
"bench.detail.labels.averageCost": "Gennemsnitlig omkostning",
|
||||
"bench.detail.labels.summary": "Resumé",
|
||||
"bench.detail.labels.runs": "Kørsler",
|
||||
"bench.detail.labels.score": "Score",
|
||||
"bench.detail.labels.base": "Basis",
|
||||
"bench.detail.labels.penalty": "Straf",
|
||||
"bench.detail.labels.weight": "vægt",
|
||||
"bench.detail.table.run": "Kørsel",
|
||||
"bench.detail.table.score": "Score (Basis - Straf)",
|
||||
"bench.detail.table.cost": "Omkostning",
|
||||
"bench.detail.table.duration": "Varighed",
|
||||
"bench.detail.run.title": "Kørsel {{n}}",
|
||||
"bench.detail.rawJson": "Rå JSON",
|
||||
} satisfies Dict
|
||||
|
||||
@@ -13,12 +13,12 @@ export const dict = {
|
||||
"nav.login": "Anmelden",
|
||||
"nav.free": "Kostenlos",
|
||||
"nav.home": "Startseite",
|
||||
"nav.openMenu": "Menu offnen",
|
||||
"nav.openMenu": "Menü öffnen",
|
||||
"nav.getStartedFree": "Kostenlos starten",
|
||||
|
||||
"nav.context.copyLogo": "Logo als SVG kopieren",
|
||||
"nav.context.copyWordmark": "Wordmarke als SVG kopieren",
|
||||
"nav.context.brandAssets": "Brand-Assets",
|
||||
"nav.context.copyWordmark": "Wortmarke als SVG kopieren",
|
||||
"nav.context.brandAssets": "Marken-Assets",
|
||||
|
||||
"footer.github": "GitHub",
|
||||
"footer.docs": "Dokumentation",
|
||||
@@ -26,17 +26,17 @@ export const dict = {
|
||||
"footer.discord": "Discord",
|
||||
"footer.x": "X",
|
||||
|
||||
"legal.brand": "Brand",
|
||||
"legal.brand": "Marke",
|
||||
"legal.privacy": "Datenschutz",
|
||||
"legal.terms": "Bedingungen",
|
||||
"legal.terms": "AGB",
|
||||
|
||||
"email.title": "Erfahre als Erste*r, wenn wir neue Produkte veroffentlichen",
|
||||
"email.subtitle": "Trage dich fur fruhzeitigen Zugriff in die Warteliste ein.",
|
||||
"email.title": "Erfahre als Erste:r, wenn wir neue Produkte veröffentlichen",
|
||||
"email.subtitle": "Trage dich in die Warteliste für frühen Zugang ein.",
|
||||
"email.placeholder": "E-Mail-Adresse",
|
||||
"email.subscribe": "Abonnieren",
|
||||
"email.success": "Fast fertig - prufe deinen Posteingang und bestatige deine E-Mail-Adresse",
|
||||
"email.subscribe": "Anmelden",
|
||||
"email.success": "Fast geschafft, überprüfe deinen Posteingang und bestätige deine E-Mail-Adresse",
|
||||
|
||||
"notFound.title": "Nicht gefunden | opencode",
|
||||
"notFound.title": "Nicht gefunden | OpenCode",
|
||||
"notFound.heading": "404 - Seite nicht gefunden",
|
||||
"notFound.home": "Startseite",
|
||||
"notFound.docs": "Dokumentation",
|
||||
@@ -45,182 +45,454 @@ export const dict = {
|
||||
|
||||
"user.logout": "Abmelden",
|
||||
|
||||
"workspace.select": "Workspace auswahlen",
|
||||
"workspace.select": "Workspace auswählen",
|
||||
"workspace.createNew": "+ Neuen Workspace erstellen",
|
||||
"workspace.modal.title": "Neuen Workspace erstellen",
|
||||
"workspace.modal.placeholder": "Workspace-Namen eingeben",
|
||||
|
||||
"common.cancel": "Abbrechen",
|
||||
"common.creating": "Wird erstellt...",
|
||||
"common.creating": "Erstelle...",
|
||||
"common.create": "Erstellen",
|
||||
|
||||
"common.videoUnsupported": "Dein Browser unterstuetzt das Video-Tag nicht.",
|
||||
"common.videoUnsupported": "Dein Browser unterstützt das Video-Tag nicht.",
|
||||
"common.figure": "Abb. {{n}}.",
|
||||
"common.faq": "FAQ",
|
||||
"common.learnMore": "Mehr erfahren",
|
||||
|
||||
"error.invalidPlan": "Ungültiger Plan",
|
||||
"error.workspaceRequired": "Workspace-ID ist erforderlich",
|
||||
"error.alreadySubscribed": "Dieser Workspace hat bereits ein Abonnement",
|
||||
"error.limitRequired": "Limit ist erforderlich.",
|
||||
"error.monthlyLimitInvalid": "Bitte gib ein gültiges monatliches Limit ein.",
|
||||
"error.workspaceNameRequired": "Workspace-Name ist erforderlich.",
|
||||
"error.nameTooLong": "Der Name darf höchstens 255 Zeichen lang sein.",
|
||||
"error.emailRequired": "E-Mail ist erforderlich",
|
||||
"error.roleRequired": "Rolle ist erforderlich",
|
||||
"error.idRequired": "ID ist erforderlich",
|
||||
"error.nameRequired": "Name ist erforderlich",
|
||||
"error.providerRequired": "Anbieter ist erforderlich",
|
||||
"error.apiKeyRequired": "API-Key ist erforderlich",
|
||||
"error.modelRequired": "Modell ist erforderlich",
|
||||
"error.reloadAmountMin": "Aufladebetrag muss mindestens ${{amount}} betragen",
|
||||
"error.reloadTriggerMin": "Guthaben-Auslöser muss mindestens ${{amount}} betragen",
|
||||
|
||||
"home.title": "OpenCode | Der Open-Source AI-Coding-Agent",
|
||||
|
||||
"temp.title": "OpenCode | Für das Terminal gebauter AI-Coding-Agent",
|
||||
"temp.hero.title": "Der für das Terminal gebaute AI-Coding-Agent",
|
||||
"temp.zen": "OpenCode Zen",
|
||||
"temp.getStarted": "Loslegen",
|
||||
"temp.feature.native.title": "Native TUI",
|
||||
"temp.feature.native.body": "Eine reaktionsschnelle, native, thematisierbare Terminal-UI",
|
||||
"temp.feature.zen.beforeLink": "Eine",
|
||||
"temp.feature.zen.link": "kuratierte Liste von Modellen",
|
||||
"temp.feature.zen.afterLink": "bereitgestellt von OpenCode",
|
||||
"temp.feature.models.beforeLink": "Unterstützt 75+ LLM-Anbieter durch",
|
||||
"temp.feature.models.afterLink": ", einschließlich lokaler Modelle",
|
||||
"temp.screenshot.caption": "OpenCode TUI mit dem Tokyonight-Theme",
|
||||
"temp.screenshot.alt": "OpenCode TUI mit Tokyonight-Theme",
|
||||
|
||||
"home.banner.badge": "Neu",
|
||||
"home.banner.text": "Desktop-App als Beta verfugbar",
|
||||
"home.banner.platforms": "fur macOS, Windows und Linux",
|
||||
"home.banner.text": "Desktop-App in der Beta verfügbar",
|
||||
"home.banner.platforms": "auf macOS, Windows und Linux",
|
||||
"home.banner.downloadNow": "Jetzt herunterladen",
|
||||
"home.banner.downloadBetaNow": "Desktop-Beta jetzt herunterladen",
|
||||
|
||||
"home.hero.title": "Der Open-Source AI-Coding-Agent",
|
||||
"home.hero.subtitle.a": "Kostenlose Modelle inklusive oder verbinde jedes Modell von jedem Anbieter,",
|
||||
"home.hero.subtitle.b": "einschliesslich Claude, GPT, Gemini und mehr.",
|
||||
"home.hero.subtitle.a": "Kostenlose Modelle inklusive oder verbinde jedes Modell eines beliebigen Anbieters,",
|
||||
"home.hero.subtitle.b": "einschließlich Claude, GPT, Gemini und mehr.",
|
||||
|
||||
"home.install.ariaLabel": "Installationsoptionen",
|
||||
|
||||
"home.what.title": "Was ist OpenCode?",
|
||||
"home.what.body":
|
||||
"OpenCode ist ein Open-Source Agent, der dir hilft, Code im Terminal, in der IDE oder auf dem Desktop zu schreiben.",
|
||||
"home.what.lsp.title": "LSP aktiviert",
|
||||
"home.what.lsp.body": "Laedt automatisch die passenden LSPs fur das LLM",
|
||||
"home.what.multiSession.title": "Mehrere Sessions",
|
||||
"home.what.multiSession.body": "Starte mehrere Agents parallel im selben Projekt",
|
||||
"OpenCode ist ein Open-Source-Agent, der dir hilft, Code in deinem Terminal, deiner IDE oder auf dem Desktop zu schreiben.",
|
||||
"home.what.lsp.title": "LSP-fähig",
|
||||
"home.what.lsp.body": "Lädt automatisch die richtigen LSPs für das LLM",
|
||||
"home.what.multiSession.title": "Multi-Session",
|
||||
"home.what.multiSession.body": "Starte mehrere Agenten parallel im selben Projekt",
|
||||
"home.what.shareLinks.title": "Links teilen",
|
||||
"home.what.shareLinks.body": "Teile einen Link zu jeder Session zum Nachschlagen oder Debuggen",
|
||||
"home.what.shareLinks.body": "Teile einen Link zu jeder Sitzung als Referenz oder zum Debuggen",
|
||||
"home.what.copilot.title": "GitHub Copilot",
|
||||
"home.what.copilot.body": "Mit GitHub anmelden, um deinen Copilot-Account zu nutzen",
|
||||
"home.what.copilot.body": "Melde dich mit GitHub an, um deinen Copilot-Account zu nutzen",
|
||||
"home.what.chatgptPlus.title": "ChatGPT Plus/Pro",
|
||||
"home.what.chatgptPlus.body": "Mit OpenAI anmelden, um dein ChatGPT Plus- oder Pro-Konto zu nutzen",
|
||||
"home.what.chatgptPlus.body": "Melde dich mit OpenAI an, um deinen ChatGPT Plus- oder Pro-Account zu nutzen",
|
||||
"home.what.anyModel.title": "Jedes Modell",
|
||||
"home.what.anyModel.body": "75+ LLM-Anbieter uber Models.dev, inklusive lokaler Modelle",
|
||||
"home.what.anyModel.body": "75+ LLM-Anbieter durch Models.dev, einschließlich lokaler Modelle",
|
||||
"home.what.anyEditor.title": "Jeder Editor",
|
||||
"home.what.anyEditor.body": "Verfugbar als Terminal-UI, Desktop-App und IDE-Extension",
|
||||
"home.what.readDocs": "Docs lesen",
|
||||
"home.what.anyEditor.body": "Verfügbar als Terminal-Interface, Desktop-App und IDE-Extension",
|
||||
"home.what.readDocs": "Doku lesen",
|
||||
|
||||
"home.growth.title": "Der Open-Source AI-Coding-Agent",
|
||||
"home.growth.body":
|
||||
"Mit uber <strong>{{stars}}</strong> GitHub-Stars, <strong>{{contributors}}</strong> Contributors und uber <strong>{{commits}}</strong> Commits wird OpenCode von uber <strong>{{monthlyUsers}}</strong> Entwickler*innen pro Monat genutzt und geschatzt.",
|
||||
"home.growth.githubStars": "GitHub-Stars",
|
||||
"Mit über <strong>{{stars}}</strong> GitHub-Stars, <strong>{{contributors}}</strong> Contributors und über <strong>{{commits}}</strong> Commits wird OpenCode von über <strong>{{monthlyUsers}}</strong> Entwickler:innen jeden Monat genutzt und geschätzt.",
|
||||
"home.growth.githubStars": "GitHub Stars",
|
||||
"home.growth.contributors": "Contributors",
|
||||
"home.growth.monthlyDevs": "Monatliche Devs",
|
||||
|
||||
"home.privacy.title": "Privacy-first gebaut",
|
||||
"home.privacy.title": "Built for privacy first",
|
||||
"home.privacy.body":
|
||||
"OpenCode speichert weder deinen Code noch Kontextdaten, damit es auch in datenschutzsensiblen Umgebungen eingesetzt werden kann.",
|
||||
"home.privacy.learnMore": "Mehr erfahren uber",
|
||||
"OpenCode speichert keinen deiner Codes oder Kontextdaten, sodass es in datenschutzsensiblen Umgebungen arbeiten kann.",
|
||||
"home.privacy.learnMore": "Erfahre mehr über",
|
||||
"home.privacy.link": "Datenschutz",
|
||||
|
||||
"home.faq.q1": "Was ist OpenCode?",
|
||||
"home.faq.a1":
|
||||
"OpenCode ist ein Open-Source Agent, der dir hilft, Code mit jedem AI-Modell zu schreiben und auszufuhren. Es ist als Terminal-Interface, Desktop-App oder IDE-Extension verfugbar.",
|
||||
"OpenCode ist ein Open-Source-Agent, der dir hilft, Code mit jedem KI-Modell zu schreiben und auszuführen. Er ist als Terminal-Interface, Desktop-App oder IDE-Erweiterung verfügbar.",
|
||||
"home.faq.q2": "Wie nutze ich OpenCode?",
|
||||
"home.faq.a2.before": "Der einfachste Einstieg ist, die",
|
||||
"home.faq.a2.link": "Einfuhrung",
|
||||
"home.faq.q3": "Brauche ich zusatzliche AI-Abos, um OpenCode zu nutzen?",
|
||||
"home.faq.a3.p1": "Nicht unbedingt: OpenCode bringt kostenlose Modelle mit, die du ohne Account nutzen kannst.",
|
||||
"home.faq.a3.p2.beforeZen": "Daruber hinaus kannst du beliebte Coding-Modelle nutzen, indem du einen",
|
||||
"home.faq.a2.before": "Der einfachste Weg zu starten ist, die",
|
||||
"home.faq.a2.link": "Einführung zu lesen",
|
||||
"home.faq.q3": "Brauche ich zusätzliche AI-Abos, um OpenCode zu nutzen?",
|
||||
"home.faq.a3.p1":
|
||||
"Nicht unbedingt, OpenCode kommt mit einer Reihe kostenloser Modelle, die du ohne Account nutzen kannst.",
|
||||
"home.faq.a3.p2.beforeZen": "Abgesehen davon kannst du jedes beliebige Coding-Modell nutzen, indem du einen",
|
||||
"home.faq.a3.p2.afterZen": " Account erstellst.",
|
||||
"home.faq.a3.p3":
|
||||
"Wir empfehlen Zen, aber OpenCode funktioniert auch mit allen gängigen Anbietern wie OpenAI, Anthropic, xAI usw.",
|
||||
"Während wir dazu raten, Zen zu nutzen, funktioniert OpenCode auch mit allen beliebten Anbietern wie OpenAI, Anthropic, xAI etc.",
|
||||
"home.faq.a3.p4.beforeLocal": "Du kannst sogar deine",
|
||||
"home.faq.a3.p4.localLink": "lokalen Modelle",
|
||||
"home.faq.a3.p4.localLink": "lokalen Modelle verbinden",
|
||||
"home.faq.q4": "Kann ich meine bestehenden AI-Abos mit OpenCode nutzen?",
|
||||
"home.faq.a4.p1":
|
||||
"Ja, OpenCode unterstutzt Abos von allen grossen Anbietern. Du kannst Claude Pro/Max, ChatGPT Plus/Pro oder GitHub Copilot verwenden.",
|
||||
"Ja, OpenCode unterstützt Abos von allen großen Anbietern. Du kannst deine Claude Pro/Max, ChatGPT Plus/Pro oder GitHub Copilot Abos nutzen.",
|
||||
"home.faq.q5": "Kann ich OpenCode nur im Terminal nutzen?",
|
||||
"home.faq.a5.beforeDesktop": "Nicht mehr! OpenCode gibt es jetzt auch als App fur",
|
||||
"home.faq.a5.beforeDesktop": "Nicht mehr! OpenCode ist jetzt als App für",
|
||||
"home.faq.a5.desktop": "Desktop",
|
||||
"home.faq.a5.and": "und",
|
||||
"home.faq.a5.web": "Web",
|
||||
"home.faq.a5.web": "Web verfügbar",
|
||||
"home.faq.q6": "Wie viel kostet OpenCode?",
|
||||
"home.faq.a6":
|
||||
"OpenCode ist zu 100% kostenlos. Es bringt ausserdem kostenlose Modelle mit. Zusatzliche Kosten konnen entstehen, wenn du einen anderen Anbieter verbindest.",
|
||||
"home.faq.q7": "Wie sieht es mit Daten und Datenschutz aus?",
|
||||
"OpenCode ist zu 100% kostenlos. Es enthält auch eine Reihe kostenloser Modelle. Zusätzliche Kosten können entstehen, wenn du andere Anbieter verbindest.",
|
||||
"home.faq.q7": "Was ist mit Daten und Privatsphäre?",
|
||||
"home.faq.a7.p1":
|
||||
"Deine Daten werden nur gespeichert, wenn du unsere kostenlosen Modelle nutzt oder teilbare Links erstellst.",
|
||||
"home.faq.a7.p2.beforeModels": "Mehr erfahren uber",
|
||||
"Deine Daten und Informationen werden nur gespeichert, wenn du unsere kostenlosen Modelle nutzt oder teilbare Links erstellst.",
|
||||
"home.faq.a7.p2.beforeModels": "Erfahre mehr über",
|
||||
"home.faq.a7.p2.modelsLink": "unsere Modelle",
|
||||
"home.faq.a7.p2.and": "und",
|
||||
"home.faq.a7.p2.shareLink": "Share-Seiten",
|
||||
"home.faq.a7.p2.shareLink": "Share-Pages",
|
||||
"home.faq.q8": "Ist OpenCode Open Source?",
|
||||
"home.faq.a8.p1": "Ja, OpenCode ist vollstandig Open Source. Der Quellcode ist offentlich auf",
|
||||
"home.faq.a8.p1": "Ja, OpenCode ist vollständig Open Source. Der Quellcode ist öffentlich auf",
|
||||
"home.faq.a8.p2": "unter der",
|
||||
"home.faq.a8.mitLicense": "MIT-Lizenz",
|
||||
"home.faq.a8.mitLicense": "MIT Lizenz",
|
||||
"home.faq.a8.p3":
|
||||
", d.h. jede*r kann ihn nutzen, andern oder zur Entwicklung beitragen. Aus der Community kann jede*r Issues erstellen, Pull Requests einreichen und Funktionen erweitern.",
|
||||
", was bedeutet, dass jeder ihn nutzen, modifizieren oder zu seiner Entwicklung beitragen kann. Jeder aus der Community kann Issues melden, Pull Requests einreichen und die Funktionalität erweitern.",
|
||||
|
||||
"home.zenCta.title": "Zuverlassige, optimierte Modelle fur Coding-Agents",
|
||||
"home.zenCta.title": "Zugriff auf zuverlässige, optimierte Modelle für Coding-Agents",
|
||||
"home.zenCta.body":
|
||||
"Zen gibt dir Zugriff auf eine handverlesene Auswahl an AI-Modellen, die OpenCode speziell fur Coding-Agents getestet und benchmarked hat. Keine Sorge uber schwankende Leistung und Qualitat zwischen Anbietern: nutze validierte Modelle, die funktionieren.",
|
||||
"home.zenCta.link": "Mehr uber Zen",
|
||||
"Zen gibt dir Zugriff auf ein handverlesenes Set an AI-Modellen, die OpenCode speziell für Coding-Agents getestet und bewertet hat. Keine Sorge wegen inkonsistenter Leistung und Qualität bei verschiedenen Anbietern – nutze validierte Modelle, die funktionieren.",
|
||||
"home.zenCta.link": "Erfahre mehr über Zen",
|
||||
|
||||
"download.title": "OpenCode | Download",
|
||||
|
||||
"zen.title": "OpenCode Zen | Eine kuratierte Auswahl an zuverlassigen, optimierten Modellen fur Coding-Agents",
|
||||
"zen.hero.title": "Zuverlassige, optimierte Modelle fur Coding-Agents",
|
||||
"zen.title": "OpenCode Zen | Ein kuratiertes Set zuverlässiger, optimierter Modelle für Coding-Agents",
|
||||
"zen.hero.title": "Zuverlässige, optimierte Modelle für Coding-Agents",
|
||||
"zen.hero.body":
|
||||
"Zen gibt dir Zugriff auf eine handverlesene Auswahl an AI-Modellen, die OpenCode speziell fur Coding-Agents getestet und benchmarked hat. Keine Sorge uber schwankende Leistung und Qualitat zwischen Anbietern: nutze validierte Modelle, die funktionieren.",
|
||||
"Zen gibt dir Zugriff auf ein kuratiertes Set an AI-Modellen, die OpenCode speziell für Coding-Agents getestet und bewertet hat. Keine Sorge wegen inkonsistenter Leistung und Qualität – nutze validierte Modelle, die funktionieren.",
|
||||
|
||||
"zen.faq.q1": "Was ist OpenCode Zen?",
|
||||
"zen.faq.a1":
|
||||
"Zen ist eine kuratierte Auswahl an AI-Modellen, die vom Team hinter OpenCode fur Coding-Agents getestet und benchmarked wurden.",
|
||||
"Zen ist ein kuratiertes Set an AI-Modellen, getestet und bewertet für Coding-Agents, erstellt vom Team hinter OpenCode.",
|
||||
"zen.faq.q2": "Was macht Zen genauer?",
|
||||
"zen.faq.a2":
|
||||
"Zen bietet nur Modelle an, die speziell fur Coding-Agents getestet und benchmarked wurden. Du wurdest kein Buttermesser benutzen, um Steak zu schneiden - nutze keine schlechten Modelle zum Coden.",
|
||||
"zen.faq.q3": "Ist Zen gunstiger?",
|
||||
"Zen bietet nur Modelle, die speziell für Coding-Agents getestet und bewertet wurden. Du würdest kein Buttermesser nehmen, um ein Steak zu schneiden – nutze keine schlechten Modelle zum Coden.",
|
||||
"zen.faq.q3": "Ist Zen günstiger?",
|
||||
"zen.faq.a3":
|
||||
"Zen ist nicht gewinnorientiert. Zen gibt die Kosten der Modellanbieter direkt an dich weiter. Je hoher die Nutzung von Zen, desto mehr kann OpenCode bessere Preise verhandeln und an dich weitergeben.",
|
||||
"zen.faq.q4": "Was kostet Zen?",
|
||||
"Zen ist nicht gewinnorientiert. Zen gibt die Kosten der Modellanbieter an dich weiter. Je höher die Nutzung von Zen, desto besser kann OpenCode Preise verhandeln und diese an dich weitergeben.",
|
||||
"zen.faq.q4": "Wie viel kostet Zen?",
|
||||
"zen.faq.a4.p1.beforePricing": "Zen",
|
||||
"zen.faq.a4.p1.pricingLink": "berechnet pro Request",
|
||||
"zen.faq.a4.p1.afterPricing": "ohne Aufschlage, du zahlst also genau das, was der Modellanbieter berechnet.",
|
||||
"zen.faq.a4.p1.pricingLink": "berechnet pro Anfrage",
|
||||
"zen.faq.a4.p1.afterPricing": "ohne Aufschläge, also zahlst du genau das, was der Modellanbieter berechnet.",
|
||||
"zen.faq.a4.p2.beforeAccount":
|
||||
"Deine Gesamtkosten hangen von der Nutzung ab, und du kannst monatliche Ausgabenlimits in deinem",
|
||||
"zen.faq.a4.p2.accountLink": "Account",
|
||||
"Deine Gesamtkosten hängen von der Nutzung ab, und du kannst monatliche Ausgabenlimits in deinem",
|
||||
"zen.faq.a4.p2.accountLink": "Account festlegen",
|
||||
"zen.faq.a4.p3":
|
||||
"Um Kosten zu decken, erhebt OpenCode nur eine kleine Zahlungsabwicklungsgebuhr von $1.23 pro $20 Guthaben-Aufladung.",
|
||||
"zen.faq.q5": "Wie sieht es mit Daten und Datenschutz aus?",
|
||||
"Um die Kosten zu decken, fügt OpenCode nur eine kleine Bearbeitungsgebühr von $1.23 pro $20 Guthabenaufladung hinzu.",
|
||||
"zen.faq.q5": "Was ist mit Daten und Privatsphäre?",
|
||||
"zen.faq.a5.beforeExceptions":
|
||||
"Alle Zen-Modelle werden in den USA gehostet. Anbieter folgen einer Zero-Retention-Policy und verwenden deine Daten nicht fur Modelltraining, mit den",
|
||||
"Alle Zen-Modelle werden in den USA gehostet. Anbieter folgen einer Zero-Retention-Policy und nutzen deine Daten nicht zum Trainieren von Modellen, mit den",
|
||||
"zen.faq.a5.exceptionsLink": "folgenden Ausnahmen",
|
||||
"zen.faq.q6": "Kann ich Ausgabenlimits festlegen?",
|
||||
"zen.faq.a6": "Ja, du kannst monatliche Ausgabenlimits in deinem Account festlegen.",
|
||||
"zen.faq.q7": "Kann ich kundigen?",
|
||||
"zen.faq.q6": "Kann ich Ausgabenlimits setzen?",
|
||||
"zen.faq.a6": "Ja, du kannst monatliche Ausgabenlimits in deinem Account setzen.",
|
||||
"zen.faq.q7": "Kann ich kündigen?",
|
||||
"zen.faq.a7": "Ja, du kannst die Abrechnung jederzeit deaktivieren und dein verbleibendes Guthaben nutzen.",
|
||||
"zen.faq.q8": "Kann ich Zen mit anderen Coding-Agents nutzen?",
|
||||
"zen.faq.a8":
|
||||
"Zen funktioniert grossartig mit OpenCode, aber du kannst Zen mit jedem Agent verwenden. Folge den Setup-Anweisungen in deinem bevorzugten Coding-Agent.",
|
||||
"zen.cta.start": "Beginnen Sie mit Zen",
|
||||
"zen.pricing.title": "Fügen Sie 20 $ Pay-as-you-go-Guthaben hinzu",
|
||||
"zen.pricing.fee": "(+1,23 $ Kartenbearbeitungsgebühr)",
|
||||
"zen.pricing.body":
|
||||
"Zur Verwendung mit jedem beliebigen Agenten. Legen Sie monatliche Ausgabenlimits fest. Jederzeit kündbar.",
|
||||
"Während Zen großartig mit OpenCode funktioniert, kannst du Zen mit jedem Agent nutzen. Folge den Einrichtungsanweisungen in deinem bevorzugten Coding-Agent.",
|
||||
|
||||
"zen.cta.start": "Starte mit Zen",
|
||||
"zen.pricing.title": "Füge $20 Pay-as-you-go Guthaben hinzu",
|
||||
"zen.pricing.fee": "(+$1.23 Bearbeitungsgebühr)",
|
||||
"zen.pricing.body": "Nutze es mit jedem Agent. Setze monatliche Ausgabenlimits. Jederzeit kündbar.",
|
||||
"zen.problem.title": "Welches Problem löst Zen?",
|
||||
"zen.problem.body":
|
||||
"Es gibt so viele Modelle, aber nur wenige funktionieren gut mit Codierungsagenten. Die meisten Anbieter konfigurieren sie unterschiedlich und führen zu unterschiedlichen Ergebnissen.",
|
||||
"zen.problem.subtitle": "Wir beheben dieses Problem für alle, nicht nur für OpenCode-Benutzer.",
|
||||
"zen.problem.item1": "Testen ausgewählter Modelle und Beratung ihrer Teams",
|
||||
"zen.problem.item2":
|
||||
"Arbeiten Sie mit Anbietern zusammen, um sicherzustellen, dass sie ordnungsgemäß geliefert werden",
|
||||
"zen.problem.item3": "Benchmarking aller von uns empfohlenen Modell-Anbieter-Kombinationen",
|
||||
"zen.how.title": "So funktioniert Zen",
|
||||
"zen.how.body":
|
||||
"Während wir Ihnen empfehlen, Zen mit OpenCode zu verwenden, können Sie Zen mit jedem Agenten verwenden.",
|
||||
"zen.how.step1.title": "Melden Sie sich an und fügen Sie ein Guthaben von 20 $ hinzu",
|
||||
"zen.how.step1.beforeLink": "Folgen Sie dem",
|
||||
"zen.how.step1.link": "Installationsanweisungen",
|
||||
"zen.how.step2.title": "Nutzen Sie Zen mit transparenter Preisgestaltung",
|
||||
"zen.how.step2.link": "Bezahlung pro Anfrage",
|
||||
"Es gibt so viele Modelle, aber nur wenige funktionieren gut mit Coding-Agents. Die meisten Anbieter konfigurieren sie unterschiedlich, was zu variierenden Ergebnissen führt.",
|
||||
"zen.problem.subtitle": "Wir beheben das für alle, nicht nur für OpenCode-Nutzer.",
|
||||
"zen.problem.item1": "Testen ausgewählter Modelle und Beratung mit deren Teams",
|
||||
"zen.problem.item2": "Zusammenarbeit mit Anbietern, um korrekte Bereitstellung zu sichern",
|
||||
"zen.problem.item3": "Benchmarking aller Modell-Anbieter-Kombinationen, die wir empfehlen",
|
||||
"zen.how.title": "Wie Zen funktioniert",
|
||||
"zen.how.body": "Während wir dir raten, Zen mit OpenCode zu nutzen, kannst du Zen mit jedem Agent nutzen.",
|
||||
"zen.how.step1.title": "Melde dich an und füge $20 Guthaben hinzu",
|
||||
"zen.how.step1.beforeLink": "folge den",
|
||||
"zen.how.step1.link": "Einrichtungsanweisungen",
|
||||
"zen.how.step2.title": "Nutze Zen mit transparenter Preisgestaltung",
|
||||
"zen.how.step2.link": "zahle pro Anfrage",
|
||||
"zen.how.step2.afterLink": "ohne Aufschläge",
|
||||
"zen.how.step3.title": "Automatisches Aufladen",
|
||||
"zen.how.step3.body": "Wenn Ihr Guthaben 5 $ erreicht, fügen wir automatisch 20 $ hinzu",
|
||||
"zen.privacy.title": "Ihre Privatsphäre ist uns wichtig",
|
||||
"zen.how.step3.title": "Auto-Top-up",
|
||||
"zen.how.step3.body": "wenn dein Guthaben $5 erreicht, fügen wir automatisch $20 hinzu",
|
||||
"zen.privacy.title": "Deine Privatsphäre ist uns wichtig",
|
||||
"zen.privacy.beforeExceptions":
|
||||
"Alle Zen-Modelle werden in den USA gehostet. Anbieter folgen einer Null-Aufbewahrungsrichtlinie und verwenden Ihre Daten nicht für Modellschulungen",
|
||||
"zen.privacy.exceptionsLink": "folgende Ausnahmen",
|
||||
"download.meta.description": "Lade OpenCode fur macOS, Windows und Linux herunter",
|
||||
"Alle Zen-Modelle werden in den USA gehostet. Anbieter folgen einer Zero-Retention-Policy und nutzen deine Daten nicht für Modelltraining, mit den",
|
||||
"zen.privacy.exceptionsLink": "folgenden Ausnahmen",
|
||||
|
||||
"black.meta.title": "OpenCode Black | Zugriff auf die weltweit besten Coding-Modelle",
|
||||
"black.meta.description": "Erhalte Zugriff auf Claude, GPT, Gemini und mehr mit OpenCode Black Abos.",
|
||||
"black.hero.title": "Zugriff auf die weltweit besten Coding-Modelle",
|
||||
"black.hero.subtitle": "Einschließlich Claude, GPT, Gemini und mehr",
|
||||
"black.title": "OpenCode Black | Preise",
|
||||
"black.plan.icon20": "Black 20 Plan",
|
||||
"black.plan.icon100": "Black 100 Plan",
|
||||
"black.plan.icon200": "Black 200 Plan",
|
||||
"black.plan.multiplier100": "5x mehr Nutzung als Black 20",
|
||||
"black.plan.multiplier200": "20x mehr Nutzung als Black 20",
|
||||
"black.price.perMonth": "pro Monat",
|
||||
"black.price.perPersonBilledMonthly": "pro Person, monatlich abgerechnet",
|
||||
"black.terms.1": "Dein Abonnement startet nicht sofort",
|
||||
"black.terms.2": "Du wirst auf die Warteliste gesetzt und bald freigeschaltet",
|
||||
"black.terms.3": "Deine Karte wird erst belastet, wenn dein Abonnement aktiviert ist",
|
||||
"black.terms.4": "Nutzungslimits gelten, stark automatisierte Nutzung kann Limits schneller erreichen",
|
||||
"black.terms.5": "Abonnements sind für Einzelpersonen, kontaktiere Enterprise für Teams",
|
||||
"black.terms.6": "Limits können angepasst werden und Pläne können in Zukunft eingestellt werden",
|
||||
"black.terms.7": "Kündige dein Abonnement jederzeit",
|
||||
"black.action.continue": "Weiter",
|
||||
"black.finePrint.beforeTerms": "Angezeigte Preise enthalten keine anfallenden Steuern",
|
||||
"black.finePrint.terms": "Nutzungsbedingungen",
|
||||
"black.workspace.title": "OpenCode Black | Workspace wählen",
|
||||
"black.workspace.selectPlan": "Wähle einen Workspace für diesen Plan",
|
||||
"black.workspace.name": "Workspace {{n}}",
|
||||
"black.subscribe.title": "OpenCode Black abonnieren",
|
||||
"black.subscribe.paymentMethod": "Zahlungsmethode",
|
||||
"black.subscribe.loadingPaymentForm": "Lade Zahlungsformular...",
|
||||
"black.subscribe.selectWorkspaceToContinue": "Wähle einen Workspace um fortzufahren",
|
||||
"black.subscribe.failurePrefix": "Oh nein!",
|
||||
"black.subscribe.error.generic": "Ein Fehler ist aufgetreten",
|
||||
"black.subscribe.error.invalidPlan": "Ungültiger Plan",
|
||||
"black.subscribe.error.workspaceRequired": "Workspace-ID ist erforderlich",
|
||||
"black.subscribe.error.alreadySubscribed": "Dieser Workspace hat bereits ein Abonnement",
|
||||
"black.subscribe.processing": "Verarbeitung...",
|
||||
"black.subscribe.submit": "Abonnieren ${{plan}}",
|
||||
"black.subscribe.form.chargeNotice": "Du wirst erst belastet, wenn dein Abonnement aktiviert ist",
|
||||
"black.subscribe.success.title": "Du bist auf der OpenCode Black Warteliste",
|
||||
"black.subscribe.success.subscriptionPlan": "Abo-Plan",
|
||||
"black.subscribe.success.planName": "OpenCode Black {{plan}}",
|
||||
"black.subscribe.success.amount": "Betrag",
|
||||
"black.subscribe.success.amountValue": "${{plan}} pro Monat",
|
||||
"black.subscribe.success.paymentMethod": "Zahlungsmethode",
|
||||
"black.subscribe.success.dateJoined": "Beitrittsdatum",
|
||||
"black.subscribe.success.chargeNotice": "Deine Karte wird belastet, sobald dein Abonnement aktiviert ist",
|
||||
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "API Keys",
|
||||
"workspace.nav.members": "Mitglieder",
|
||||
"workspace.nav.billing": "Abrechnung",
|
||||
"workspace.nav.settings": "Einstellungen",
|
||||
|
||||
"workspace.home.banner.beforeLink": "Zuverlässige, optimierte Modelle für Coding-Agents.",
|
||||
"workspace.home.billing.loading": "Laden...",
|
||||
"workspace.home.billing.enable": "Abrechnung aktivieren",
|
||||
"workspace.home.billing.currentBalance": "Aktuelles Guthaben",
|
||||
|
||||
"workspace.newUser.feature.tested.title": "Getestete & Verifizierte Modelle",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"Wir haben Modelle speziell für Coding-Agents getestet und bewertet, um beste Leistung zu garantieren.",
|
||||
"workspace.newUser.feature.quality.title": "Höchste Qualität",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"Zugriff auf Modelle, die für optimale Leistung konfiguriert sind – keine Downgrades oder Routing zu billigeren Anbietern.",
|
||||
"workspace.newUser.feature.lockin.title": "Kein Lock-in",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"Nutze Zen mit jedem Coding-Agent und nutze weiterhin andere Anbieter mit OpenCode, wann immer du willst.",
|
||||
"workspace.newUser.copyApiKey": "API Key kopieren",
|
||||
"workspace.newUser.copyKey": "Key kopieren",
|
||||
"workspace.newUser.copied": "Kopiert!",
|
||||
"workspace.newUser.step.enableBilling": "Abrechnung aktivieren",
|
||||
"workspace.newUser.step.login.before": "Führe",
|
||||
"workspace.newUser.step.login.after": "aus und wähle OpenCode",
|
||||
"workspace.newUser.step.pasteKey": "Füge deinen API Key ein",
|
||||
"workspace.newUser.step.models.before": "Starte OpenCode und führe",
|
||||
"workspace.newUser.step.models.after": "aus, um ein Modell zu wählen",
|
||||
|
||||
"workspace.models.title": "Modelle",
|
||||
"workspace.models.subtitle.beforeLink": "Verwalte, auf welche Modelle Workspace-Mitglieder zugreifen können.",
|
||||
"workspace.models.table.model": "Modell",
|
||||
"workspace.models.table.enabled": "Aktiviert",
|
||||
|
||||
"workspace.providers.title": "Bring Your Own Key",
|
||||
"workspace.providers.subtitle": "Konfiguriere deine eigenen API Keys von AI-Anbietern.",
|
||||
"workspace.providers.placeholder": "Gib {{provider}} API Key ein ({{prefix}}...)",
|
||||
"workspace.providers.configure": "Konfigurieren",
|
||||
"workspace.providers.edit": "Bearbeiten",
|
||||
"workspace.providers.delete": "Löschen",
|
||||
"workspace.providers.saving": "Speichere...",
|
||||
"workspace.providers.save": "Speichern",
|
||||
"workspace.providers.table.provider": "Anbieter",
|
||||
"workspace.providers.table.apiKey": "API Key",
|
||||
|
||||
"workspace.usage.title": "Nutzungsverlauf",
|
||||
"workspace.usage.subtitle": "Kürzliche API-Nutzung und Kosten.",
|
||||
"workspace.usage.empty": "Mache deinen ersten API-Aufruf, um loszulegen.",
|
||||
"workspace.usage.table.date": "Datum",
|
||||
"workspace.usage.table.model": "Modell",
|
||||
"workspace.usage.table.input": "Input",
|
||||
"workspace.usage.table.output": "Output",
|
||||
"workspace.usage.table.cost": "Kosten",
|
||||
"workspace.usage.breakdown.input": "Input",
|
||||
"workspace.usage.breakdown.cacheRead": "Cache Read",
|
||||
"workspace.usage.breakdown.cacheWrite": "Cache Write",
|
||||
"workspace.usage.breakdown.output": "Output",
|
||||
"workspace.usage.breakdown.reasoning": "Reasoning",
|
||||
"workspace.usage.subscription": "Abonnement (${{amount}})",
|
||||
|
||||
"workspace.cost.title": "Kosten",
|
||||
"workspace.cost.subtitle": "Nutzungskosten aufgeschlüsselt nach Modell.",
|
||||
"workspace.cost.allModels": "Alle Modelle",
|
||||
"workspace.cost.allKeys": "Alle Keys",
|
||||
"workspace.cost.deletedSuffix": "(gelöscht)",
|
||||
"workspace.cost.empty": "Keine Nutzungsdaten für den gewählten Zeitraum verfügbar.",
|
||||
"workspace.cost.subscriptionShort": "Abo",
|
||||
|
||||
"workspace.keys.title": "API Keys",
|
||||
"workspace.keys.subtitle": "Verwalte deine API Keys für den Zugriff auf OpenCode-Dienste.",
|
||||
"workspace.keys.create": "API Key erstellen",
|
||||
"workspace.keys.placeholder": "Key-Namen eingeben",
|
||||
"workspace.keys.empty": "Erstelle einen OpenCode Gateway API Key",
|
||||
"workspace.keys.table.name": "Name",
|
||||
"workspace.keys.table.key": "Key",
|
||||
"workspace.keys.table.createdBy": "Erstellt von",
|
||||
"workspace.keys.table.lastUsed": "Zuletzt genutzt",
|
||||
"workspace.keys.copyApiKey": "API Key kopieren",
|
||||
"workspace.keys.delete": "Löschen",
|
||||
|
||||
"workspace.members.title": "Mitglieder",
|
||||
"workspace.members.subtitle": "Verwalte Workspace-Mitglieder und deren Berechtigungen.",
|
||||
"workspace.members.invite": "Mitglied einladen",
|
||||
"workspace.members.inviting": "Lade ein...",
|
||||
"workspace.members.beta.beforeLink": "Workspaces sind für Teams während der Beta kostenlos.",
|
||||
"workspace.members.form.invitee": "Eingeladene Person",
|
||||
"workspace.members.form.emailPlaceholder": "E-Mail eingeben",
|
||||
"workspace.members.form.role": "Rolle",
|
||||
"workspace.members.form.monthlyLimit": "Monatliches Ausgabenlimit",
|
||||
"workspace.members.noLimit": "Kein Limit",
|
||||
"workspace.members.noLimitLowercase": "kein Limit",
|
||||
"workspace.members.invited": "eingeladen",
|
||||
"workspace.members.edit": "Bearbeiten",
|
||||
"workspace.members.delete": "Löschen",
|
||||
"workspace.members.saving": "Speichere...",
|
||||
"workspace.members.save": "Speichern",
|
||||
"workspace.members.table.email": "E-Mail",
|
||||
"workspace.members.table.role": "Rolle",
|
||||
"workspace.members.table.monthLimit": "Monatslimit",
|
||||
"workspace.members.role.admin": "Admin",
|
||||
"workspace.members.role.adminDescription": "Kann Modelle, Mitglieder und Abrechnung verwalten",
|
||||
"workspace.members.role.member": "Mitglied",
|
||||
"workspace.members.role.memberDescription": "Kann nur API Keys für sich selbst generieren",
|
||||
|
||||
"workspace.settings.title": "Einstellungen",
|
||||
"workspace.settings.subtitle": "Aktualisiere deinen Workspace-Namen und Präferenzen.",
|
||||
"workspace.settings.workspaceName": "Workspace-Name",
|
||||
"workspace.settings.defaultName": "Standard",
|
||||
"workspace.settings.updating": "Aktualisiere...",
|
||||
"workspace.settings.save": "Speichern",
|
||||
"workspace.settings.edit": "Bearbeiten",
|
||||
|
||||
"workspace.billing.title": "Abrechnung",
|
||||
"workspace.billing.subtitle.beforeLink": "Zahlungsmethoden verwalten.",
|
||||
"workspace.billing.contactUs": "Kontaktiere uns",
|
||||
"workspace.billing.subtitle.afterLink": "wenn du Fragen hast.",
|
||||
"workspace.billing.currentBalance": "Aktuelles Guthaben",
|
||||
"workspace.billing.add": "$ hinzufügen",
|
||||
"workspace.billing.enterAmount": "Betrag eingeben",
|
||||
"workspace.billing.loading": "Lade...",
|
||||
"workspace.billing.addAction": "Hinzufügen",
|
||||
"workspace.billing.addBalance": "Guthaben aufladen",
|
||||
"workspace.billing.linkedToStripe": "Mit Stripe verbunden",
|
||||
"workspace.billing.manage": "Verwalten",
|
||||
"workspace.billing.enable": "Abrechnung aktivieren",
|
||||
|
||||
"workspace.monthlyLimit.title": "Monatliches Limit",
|
||||
"workspace.monthlyLimit.subtitle": "Setze ein monatliches Nutzungslimit für deinen Account.",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "Setze...",
|
||||
"workspace.monthlyLimit.set": "Setzen",
|
||||
"workspace.monthlyLimit.edit": "Limit bearbeiten",
|
||||
"workspace.monthlyLimit.noLimit": "Kein Nutzungslimit gesetzt.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "Aktuelle Nutzung für",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "ist $",
|
||||
|
||||
"workspace.reload.title": "Auto-Reload",
|
||||
"workspace.reload.disabled.before": "Auto-Reload ist",
|
||||
"workspace.reload.disabled.state": "deaktiviert",
|
||||
"workspace.reload.disabled.after": "Aktivieren, um automatisch aufzuladen, wenn das Guthaben niedrig ist.",
|
||||
"workspace.reload.enabled.before": "Auto-Reload ist",
|
||||
"workspace.reload.enabled.state": "aktiviert",
|
||||
"workspace.reload.enabled.middle": "Wir laden auf",
|
||||
"workspace.reload.processingFee": "Bearbeitungsgebühr",
|
||||
"workspace.reload.enabled.after": "wenn das Guthaben erreicht:",
|
||||
"workspace.reload.edit": "Bearbeiten",
|
||||
"workspace.reload.enable": "Aktivieren",
|
||||
"workspace.reload.enableAutoReload": "Auto-Reload aktivieren",
|
||||
"workspace.reload.reloadAmount": "Aufladebetrag $",
|
||||
"workspace.reload.whenBalanceReaches": "Wenn Guthaben $ erreicht",
|
||||
"workspace.reload.saving": "Speichere...",
|
||||
"workspace.reload.save": "Speichern",
|
||||
"workspace.reload.failedAt": "Aufladung fehlgeschlagen am",
|
||||
"workspace.reload.reason": "Grund:",
|
||||
"workspace.reload.updatePaymentMethod": "Bitte aktualisiere deine Zahlungsmethode und versuche es erneut.",
|
||||
"workspace.reload.retrying": "Versuche erneut...",
|
||||
"workspace.reload.retry": "Erneut versuchen",
|
||||
|
||||
"workspace.payments.title": "Zahlungshistorie",
|
||||
"workspace.payments.subtitle": "Kürzliche Zahlungstransaktionen.",
|
||||
"workspace.payments.table.date": "Datum",
|
||||
"workspace.payments.table.paymentId": "Zahlungs-ID",
|
||||
"workspace.payments.table.amount": "Betrag",
|
||||
"workspace.payments.table.receipt": "Beleg",
|
||||
"workspace.payments.type.credit": "Guthaben",
|
||||
"workspace.payments.type.subscription": "Abonnement",
|
||||
"workspace.payments.view": "Ansehen",
|
||||
|
||||
"workspace.black.loading": "Lade...",
|
||||
"workspace.black.time.day": "Tag",
|
||||
"workspace.black.time.days": "Tage",
|
||||
"workspace.black.time.hour": "Stunde",
|
||||
"workspace.black.time.hours": "Stunden",
|
||||
"workspace.black.time.minute": "Minute",
|
||||
"workspace.black.time.minutes": "Minuten",
|
||||
"workspace.black.time.fewSeconds": "einige Sekunden",
|
||||
"workspace.black.subscription.title": "Abonnement",
|
||||
"workspace.black.subscription.message": "Du hast OpenCode Black für ${{plan}} pro Monat abonniert.",
|
||||
"workspace.black.subscription.manage": "Abo verwalten",
|
||||
"workspace.black.subscription.rollingUsage": "5-Stunden-Nutzung",
|
||||
"workspace.black.subscription.weeklyUsage": "Wöchentliche Nutzung",
|
||||
"workspace.black.subscription.resetsIn": "Setzt zurück in",
|
||||
"workspace.black.subscription.useBalance": "Nutze dein verfügbares Guthaben, nachdem die Limits erreicht sind",
|
||||
"workspace.black.waitlist.title": "Warteliste",
|
||||
"workspace.black.waitlist.joined": "Du bist auf der Warteliste für den ${{plan}} pro Monat OpenCode Black Plan.",
|
||||
"workspace.black.waitlist.ready": "Wir sind bereit, dich in den ${{plan}} pro Monat OpenCode Black Plan aufzunehmen.",
|
||||
"workspace.black.waitlist.leave": "Warteliste verlassen",
|
||||
"workspace.black.waitlist.leaving": "Verlasse...",
|
||||
"workspace.black.waitlist.left": "Verlassen",
|
||||
"workspace.black.waitlist.enroll": "Einschreiben",
|
||||
"workspace.black.waitlist.enrolling": "Schreibe ein...",
|
||||
"workspace.black.waitlist.enrolled": "Eingeschrieben",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"Wenn du auf Einschreiben klickst, startet dein Abo sofort und deine Karte wird belastet.",
|
||||
|
||||
"download.title": "OpenCode | Download",
|
||||
"download.meta.description": "Lade OpenCode für macOS, Windows und Linux herunter",
|
||||
"download.hero.title": "OpenCode herunterladen",
|
||||
"download.hero.subtitle": "Als Beta verfugbar fur macOS, Windows und Linux",
|
||||
"download.hero.button": "Download fur {{os}}",
|
||||
"download.hero.subtitle": "In Beta verfügbar für macOS, Windows und Linux",
|
||||
"download.hero.button": "Download für {{os}}",
|
||||
"download.section.terminal": "OpenCode Terminal",
|
||||
"download.section.desktop": "OpenCode Desktop (Beta)",
|
||||
"download.section.extensions": "OpenCode Extensions",
|
||||
"download.section.integrations": "OpenCode Integrations",
|
||||
"download.section.integrations": "OpenCode Integrationen",
|
||||
"download.action.download": "Download",
|
||||
"download.action.install": "Installieren",
|
||||
|
||||
@@ -231,247 +503,96 @@ export const dict = {
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
|
||||
"download.faq.a3.beforeLocal":
|
||||
"Nicht unbedingt, aber wahrscheinlich. Du brauchst ein AI-Abo, wenn du OpenCode mit einem kostenpflichtigen Anbieter verbinden willst, obwohl du mit",
|
||||
"Nicht unbedingt, aber wahrscheinlich. Du brauchst ein AI-Abo, wenn du OpenCode mit einem bezahlten Anbieter verbinden willst, obwohl du mit",
|
||||
"download.faq.a3.localLink": "lokalen Modellen",
|
||||
"download.faq.a3.afterLocal.beforeZen": "kostenlos arbeiten kannst. Obwohl wir Nutzer ermutigen,",
|
||||
"download.faq.a3.afterLocal.beforeZen": "kostenlos arbeiten kannst. Während wir Nutzern raten,",
|
||||
"download.faq.a3.afterZen":
|
||||
" zu verwenden, funktioniert OpenCode mit allen popularen Anbietern wie OpenAI, Anthropic, xAI usw.",
|
||||
" zu nutzen, funktioniert OpenCode mit allen populären Anbietern wie OpenAI, Anthropic, xAI etc.",
|
||||
|
||||
"download.faq.a5.p1": "OpenCode ist zu 100% kostenlos.",
|
||||
"download.faq.a5.p1": "OpenCode ist 100% kostenlos.",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"Zusatzliche Kosten entstehen durch dein Abo bei einem Modellanbieter. OpenCode funktioniert mit jedem Modellanbieter, aber wir empfehlen",
|
||||
"Zusätzliche Kosten entstehen durch dein Abo bei einem Modellanbieter. Während OpenCode mit jedem Modellanbieter funktioniert, empfehlen wir",
|
||||
"download.faq.a5.p2.afterZen": " zu nutzen.",
|
||||
|
||||
"download.faq.a6.p1": "Deine Daten werden nur gespeichert, wenn du in OpenCode teilbare Links erstellst.",
|
||||
"download.faq.a6.p2.beforeShare": "Mehr erfahren uber",
|
||||
"download.faq.a6.shareLink": "Share-Seiten",
|
||||
"download.faq.a6.p1":
|
||||
"Deine Daten und Informationen werden nur gespeichert, wenn du teilbare Links in OpenCode erstellst.",
|
||||
"download.faq.a6.p2.beforeShare": "Erfahre mehr über",
|
||||
"download.faq.a6.shareLink": "Share-Pages",
|
||||
|
||||
"enterprise.title": "OpenCode | Enterprise-Losungen fur Ihre Organisation",
|
||||
"enterprise.meta.description": "Kontaktieren Sie OpenCode fur Enterprise-Losungen",
|
||||
"enterprise.hero.title": "Ihr Code gehort Ihnen",
|
||||
"enterprise.title": "OpenCode | Enterprise-Lösungen für Ihre Organisation",
|
||||
"enterprise.meta.description": "Kontaktieren Sie OpenCode für Enterprise-Lösungen",
|
||||
"enterprise.hero.title": "Ihr Code gehört Ihnen",
|
||||
"enterprise.hero.body1":
|
||||
"OpenCode arbeitet sicher innerhalb Ihrer Organisation, ohne dass Daten oder Kontext gespeichert werden, und ohne Lizenzbeschrankungen oder Eigentumsanspruche. Starten Sie einen Testlauf mit Ihrem Team und rollen Sie es anschliessend in der gesamten Organisation aus, indem Sie es in Ihr SSO und Ihr internes AI-Gateway integrieren.",
|
||||
"enterprise.hero.body2": "Sagen Sie uns, wie wir helfen konnen.",
|
||||
"enterprise.form.name.label": "Vollstandiger Name",
|
||||
"OpenCode arbeitet sicher innerhalb Ihrer Organisation, ohne dass Daten oder Kontext gespeichert werden und ohne Lizenzbeschränkungen oder Eigentumsansprüche. Starten Sie einen Testlauf mit Ihrem Team, dann rollen Sie es in Ihrer Organisation aus, indem Sie es in Ihr SSO und internes AI-Gateway integrieren.",
|
||||
"enterprise.hero.body2": "Lassen Sie uns wissen, wie wir helfen können.",
|
||||
"enterprise.form.name.label": "Vollständiger Name",
|
||||
"enterprise.form.name.placeholder": "Jeff Bezos",
|
||||
"enterprise.form.role.label": "Rolle",
|
||||
"enterprise.form.role.placeholder": "Executive Chairman",
|
||||
"enterprise.form.email.label": "Firmen-E-Mail",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "Welches Problem mochten Sie losen?",
|
||||
"enterprise.form.message.label": "Welches Problem versuchen Sie zu lösen?",
|
||||
"enterprise.form.message.placeholder": "Wir brauchen Hilfe bei...",
|
||||
"enterprise.form.send": "Senden",
|
||||
"enterprise.form.sending": "Wird gesendet...",
|
||||
"enterprise.form.sending": "Sende...",
|
||||
"enterprise.form.success": "Nachricht gesendet, wir melden uns bald.",
|
||||
"enterprise.faq.title": "FAQ",
|
||||
"enterprise.faq.q1": "Was ist OpenCode Enterprise?",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise richtet sich an Organisationen, die sicherstellen wollen, dass Code und Daten ihre Infrastruktur niemals verlassen. Das wird durch eine zentralisierte Konfiguration erreicht, die sich in Ihr SSO und Ihr internes AI-Gateway integrieren lasst.",
|
||||
"OpenCode Enterprise ist für Organisationen, die sicherstellen wollen, dass Code und Daten niemals ihre Infrastruktur verlassen. Dies geschieht durch eine zentrale Konfiguration, die in Ihr SSO und internes AI-Gateway integriert wird.",
|
||||
"enterprise.faq.q2": "Wie starte ich mit OpenCode Enterprise?",
|
||||
"enterprise.faq.a2":
|
||||
"Starten Sie einfach mit einem internen Testlauf mit Ihrem Team. OpenCode speichert standardmassig weder Code noch Kontextdaten, sodass der Einstieg leicht ist. Kontaktieren Sie uns anschliessend, um Preise und Implementierungsoptionen zu besprechen.",
|
||||
"enterprise.faq.q3": "Wie funktioniert die Enterprise-Preisgestaltung?",
|
||||
"Starten Sie einfach mit einem internen Testlauf mit Ihrem Team. OpenCode speichert standardmäßig weder Code noch Kontextdaten, was den Einstieg erleichtert. Kontaktieren Sie uns dann, um Preise und Implementierungsoptionen zu besprechen.",
|
||||
"enterprise.faq.q3": "Wie funktioniert das Enterprise-Pricing?",
|
||||
"enterprise.faq.a3":
|
||||
"Wir bieten Enterprise-Preise pro Sitz an. Wenn Sie ein eigenes LLM-Gateway haben, berechnen wir keine Kosten fur verwendete Token. Fur weitere Details kontaktieren Sie uns bitte fur ein individuelles Angebot basierend auf den Anforderungen Ihrer Organisation.",
|
||||
"Wir bieten eine Preisgestaltung pro Arbeitsplatz (Seat) an. Wenn Sie Ihr eigenes LLM-Gateway haben, berechnen wir keine Gebühren für genutzte Token. Für weitere Details kontaktieren Sie uns für ein individuelles Angebot basierend auf den Anforderungen Ihrer Organisation.",
|
||||
"enterprise.faq.q4": "Sind meine Daten mit OpenCode Enterprise sicher?",
|
||||
"enterprise.faq.a4":
|
||||
"Ja. OpenCode speichert weder Code noch Kontextdaten. Die Verarbeitung erfolgt lokal oder uber direkte API-Aufrufe an Ihren AI-Anbieter. Mit zentraler Konfiguration und SSO-Integration bleiben Ihre Daten sicher innerhalb Ihrer Infrastruktur.",
|
||||
"Ja. OpenCode speichert weder Ihren Code noch Kontextdaten. Alle Verarbeitungen finden lokal oder über direkte API-Aufrufe an Ihren AI-Anbieter statt. Mit zentraler Konfiguration und SSO-Integration bleiben Ihre Daten sicher innerhalb der Infrastruktur Ihrer Organisation.",
|
||||
|
||||
"brand.title": "OpenCode | Marke",
|
||||
"brand.meta.description": "OpenCode Markenrichtlinien",
|
||||
"brand.heading": "Markenrichtlinien",
|
||||
"brand.subtitle": "Ressourcen und Assets, die dir helfen, mit der OpenCode-Marke zu arbeiten.",
|
||||
"brand.downloadAll": "Alle Assets herunterladen",
|
||||
|
||||
"changelog.title": "OpenCode | Changelog",
|
||||
"changelog.meta.description": "OpenCode Release Notes und Changelog",
|
||||
"changelog.hero.title": "Changelog",
|
||||
"changelog.hero.subtitle": "Neue Updates und Verbesserungen fur OpenCode",
|
||||
"changelog.empty": "Keine Changelog-Eintrage gefunden.",
|
||||
"changelog.hero.subtitle": "Neue Updates und Verbesserungen für OpenCode",
|
||||
"changelog.empty": "Keine Changelog-Einträge gefunden.",
|
||||
"changelog.viewJson": "JSON ansehen",
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "API-Schlüssel",
|
||||
"workspace.nav.members": "Mitglieder",
|
||||
"workspace.nav.billing": "Abrechnung",
|
||||
"workspace.nav.settings": "Einstellungen",
|
||||
"workspace.home.banner.beforeLink": "Zuverlässige optimierte Modelle für Codierungsagenten.",
|
||||
"workspace.home.billing.loading": "Laden...",
|
||||
"workspace.home.billing.enable": "Abrechnung aktivieren",
|
||||
"workspace.home.billing.currentBalance": "Aktueller Kontostand",
|
||||
"workspace.newUser.feature.tested.title": "Getestete und verifizierte Modelle",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"Wir haben Modelle speziell für Codierungsagenten einem Benchmarking unterzogen und getestet, um die beste Leistung sicherzustellen.",
|
||||
"workspace.newUser.feature.quality.title": "Höchste Qualität",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"Für optimale Performance konfigurierte Zugangsmodelle – keine Downgrades oder Weiterleitung zu günstigeren Anbietern.",
|
||||
"workspace.newUser.feature.lockin.title": "Kein Lock-in",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"Verwenden Sie Zen mit einem beliebigen Codierungsagenten und nutzen Sie weiterhin andere Anbieter mit opencode, wann immer Sie möchten.",
|
||||
"workspace.newUser.copyApiKey": "API-Schlüssel kopieren",
|
||||
"workspace.newUser.copyKey": "Schlüssel kopieren",
|
||||
"workspace.newUser.copied": "Kopiert!",
|
||||
"workspace.newUser.step.enableBilling": "Abrechnung aktivieren",
|
||||
"workspace.newUser.step.login.before": "Führe",
|
||||
"workspace.newUser.step.login.after": "und wählen Sie opencode",
|
||||
"workspace.newUser.step.pasteKey": "Fügen Sie Ihren API-Schlüssel ein",
|
||||
"workspace.newUser.step.models.before": "Starte opencode und führe",
|
||||
"workspace.newUser.step.models.after": "um ein Modell auszuwählen",
|
||||
"workspace.models.title": "Modelle",
|
||||
"workspace.models.subtitle.beforeLink":
|
||||
"Verwalten Sie, auf welche Modelle Arbeitsbereichsmitglieder zugreifen können.",
|
||||
"workspace.models.table.model": "Modell",
|
||||
"workspace.models.table.enabled": "Aktiviert",
|
||||
"workspace.providers.title": "Bringen Sie Ihren eigenen Schlüssel mit",
|
||||
"workspace.providers.subtitle": "Konfigurieren Sie Ihre eigenen API-Schlüssel von KI-Anbietern.",
|
||||
"workspace.providers.placeholder": "Geben Sie den Schlüssel {{provider}} API ein ({{prefix}}...)",
|
||||
"workspace.providers.configure": "Konfigurieren",
|
||||
"workspace.providers.edit": "Bearbeiten",
|
||||
"workspace.providers.delete": "Löschen",
|
||||
"workspace.providers.saving": "Wird gespeichert...",
|
||||
"workspace.providers.save": "Speichern",
|
||||
"workspace.providers.table.provider": "Anbieter",
|
||||
"workspace.providers.table.apiKey": "API-Schlüssel",
|
||||
"workspace.usage.title": "Nutzungsverlauf",
|
||||
"workspace.usage.subtitle": "Aktuelle API-Nutzung und Kosten.",
|
||||
"workspace.usage.empty": "Machen Sie Ihren ersten API-Aufruf, um loszulegen.",
|
||||
"workspace.usage.table.date": "Datum",
|
||||
"workspace.usage.table.model": "Modell",
|
||||
"workspace.usage.table.input": "Input",
|
||||
"workspace.usage.table.output": "Output",
|
||||
"workspace.usage.table.cost": "Kosten",
|
||||
"workspace.usage.breakdown.input": "Input",
|
||||
"workspace.usage.breakdown.cacheRead": "Cache-Lesen",
|
||||
"workspace.usage.breakdown.cacheWrite": "Cache-Schreiben",
|
||||
"workspace.usage.breakdown.output": "Output",
|
||||
"workspace.usage.breakdown.reasoning": "Reasoning",
|
||||
"workspace.usage.subscription": "Abonnement (${{amount}})",
|
||||
"workspace.cost.title": "Kosten",
|
||||
"workspace.cost.subtitle": "Nutzungskosten aufgeschlüsselt nach Modell.",
|
||||
"workspace.cost.allModels": "Alle Modelle",
|
||||
"workspace.cost.allKeys": "Alle Schlüssel",
|
||||
"workspace.cost.deletedSuffix": "(gelöscht)",
|
||||
"workspace.cost.empty": "Für den ausgewählten Zeitraum sind keine Nutzungsdaten verfügbar.",
|
||||
"workspace.cost.subscriptionShort": "sub",
|
||||
"workspace.keys.title": "API-Schlüssel",
|
||||
"workspace.keys.subtitle": "Verwalten Sie Ihre API-Schlüssel für den Zugriff auf opencode-Dienste.",
|
||||
"workspace.keys.create": "Erstellen Sie einen API-Schlüssel",
|
||||
"workspace.keys.placeholder": "Geben Sie den Schlüsselnamen ein",
|
||||
"workspace.keys.empty": "Erstellen Sie einen opencode Gateway-API-Schlüssel",
|
||||
"workspace.keys.table.name": "Name",
|
||||
"workspace.keys.table.key": "Schlüssel",
|
||||
"workspace.keys.table.createdBy": "Erstellt von",
|
||||
"workspace.keys.table.lastUsed": "Zuletzt verwendet",
|
||||
"workspace.keys.copyApiKey": "API-Schlüssel kopieren",
|
||||
"workspace.keys.delete": "Löschen",
|
||||
"workspace.members.title": "Mitglieder",
|
||||
"workspace.members.subtitle": "Verwalten Sie Arbeitsbereichsmitglieder und ihre Berechtigungen.",
|
||||
"workspace.members.invite": "Mitglied einladen",
|
||||
"workspace.members.inviting": "Wird eingeladen...",
|
||||
"workspace.members.beta.beforeLink": "Während der Betaversion sind Arbeitsbereiche für Teams kostenlos.",
|
||||
"workspace.members.form.invitee": "Eingeladen",
|
||||
"workspace.members.form.emailPlaceholder": "Geben Sie Ihre E-Mail-Adresse ein",
|
||||
"workspace.members.form.role": "Rolle",
|
||||
"workspace.members.form.monthlyLimit": "Monatliches Ausgabenlimit",
|
||||
"workspace.members.noLimit": "Keine Begrenzung",
|
||||
"workspace.members.noLimitLowercase": "keine Begrenzung",
|
||||
"workspace.members.invited": "eingeladen",
|
||||
"workspace.members.edit": "Bearbeiten",
|
||||
"workspace.members.delete": "Löschen",
|
||||
"workspace.members.saving": "Wird gespeichert...",
|
||||
"workspace.members.save": "Speichern",
|
||||
"workspace.members.table.email": "E-Mail",
|
||||
"workspace.members.table.role": "Rolle",
|
||||
"workspace.members.table.monthLimit": "Monatslimit",
|
||||
"workspace.members.role.admin": "Admin",
|
||||
"workspace.members.role.adminDescription": "Kann Modelle, Mitglieder und Abrechnungen verwalten",
|
||||
"workspace.members.role.member": "Mitglied",
|
||||
"workspace.members.role.memberDescription": "Kann nur API-Schlüssel für sich selbst generieren",
|
||||
"workspace.settings.title": "Einstellungen",
|
||||
"workspace.settings.subtitle": "Aktualisieren Sie den Namen und die Einstellungen Ihres Arbeitsbereichs.",
|
||||
"workspace.settings.workspaceName": "Name des Arbeitsbereichs",
|
||||
"workspace.settings.defaultName": "Standard",
|
||||
"workspace.settings.updating": "Aktualisierung...",
|
||||
"workspace.settings.save": "Speichern",
|
||||
"workspace.settings.edit": "Bearbeiten",
|
||||
"workspace.billing.title": "Abrechnung",
|
||||
"workspace.billing.subtitle.beforeLink": "Zahlungsmethoden verwalten.",
|
||||
"workspace.billing.contactUs": "Kontaktieren Sie uns",
|
||||
"workspace.billing.subtitle.afterLink": "wenn Sie Fragen haben.",
|
||||
"workspace.billing.currentBalance": "Aktueller Kontostand",
|
||||
"workspace.billing.add": "$ hinzufügen",
|
||||
"workspace.billing.enterAmount": "Betrag eingeben",
|
||||
"workspace.billing.loading": "Laden...",
|
||||
"workspace.billing.addAction": "Hinzufügen",
|
||||
"workspace.billing.addBalance": "Guthaben hinzufügen",
|
||||
"workspace.billing.linkedToStripe": "Mit Stripe verknüpft",
|
||||
"workspace.billing.manage": "Verwalten",
|
||||
"workspace.billing.enable": "Abrechnung aktivieren",
|
||||
"workspace.monthlyLimit.title": "Monatliches Limit",
|
||||
"workspace.monthlyLimit.subtitle": "Legen Sie ein monatliches Nutzungslimit für Ihr Konto fest.",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "Wird gesetzt...",
|
||||
"workspace.monthlyLimit.set": "Festlegen",
|
||||
"workspace.monthlyLimit.edit": "Limit bearbeiten",
|
||||
"workspace.monthlyLimit.noLimit": "Kein Nutzungslimit festgelegt.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "Aktuelle Nutzung für",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "ist $",
|
||||
"workspace.reload.title": "Automatische Aufladung",
|
||||
"workspace.reload.disabled.before": "Automatische Aufladung ist",
|
||||
"workspace.reload.disabled.state": "deaktiviert",
|
||||
"workspace.reload.disabled.after":
|
||||
"Aktivieren Sie diese Option, damit bei niedrigem Kontostand automatisch aufgeladen wird.",
|
||||
"workspace.reload.enabled.before": "Automatische Aufladung ist",
|
||||
"workspace.reload.enabled.state": "aktiviert",
|
||||
"workspace.reload.enabled.middle": "Wir laden auf",
|
||||
"workspace.reload.processingFee": "Bearbeitungsgebühr",
|
||||
"workspace.reload.enabled.after": "sobald der Kontostand",
|
||||
"workspace.reload.edit": "Bearbeiten",
|
||||
"workspace.reload.enable": "Aktivieren",
|
||||
"workspace.reload.enableAutoReload": "Automatische Aufladung aktivieren",
|
||||
"workspace.reload.reloadAmount": "Aufladebetrag $",
|
||||
"workspace.reload.whenBalanceReaches": "Wenn der Kontostand $ erreicht",
|
||||
"workspace.reload.saving": "Wird gespeichert...",
|
||||
"workspace.reload.save": "Speichern",
|
||||
"workspace.reload.failedAt": "Aufladung fehlgeschlagen am",
|
||||
"workspace.reload.reason": "Grund:",
|
||||
"workspace.reload.updatePaymentMethod": "Bitte aktualisieren Sie Ihre Zahlungsmethode und versuchen Sie es erneut.",
|
||||
"workspace.reload.retrying": "Erneuter Versuch...",
|
||||
"workspace.reload.retry": "Wiederholen",
|
||||
"workspace.payments.title": "Zahlungshistorie",
|
||||
"workspace.payments.subtitle": "Letzte Zahlungsvorgänge.",
|
||||
"workspace.payments.table.date": "Datum",
|
||||
"workspace.payments.table.paymentId": "Zahlungs-ID",
|
||||
"workspace.payments.table.amount": "Betrag",
|
||||
"workspace.payments.table.receipt": "Quittung",
|
||||
"workspace.payments.type.credit": "Kredit",
|
||||
"workspace.payments.type.subscription": "Abonnement",
|
||||
"workspace.payments.view": "Anzeigen",
|
||||
"workspace.black.loading": "Laden...",
|
||||
"workspace.black.time.day": "Tag",
|
||||
"workspace.black.time.days": "Tage",
|
||||
"workspace.black.time.hour": "Stunde",
|
||||
"workspace.black.time.hours": "Std.",
|
||||
"workspace.black.time.minute": "Minute",
|
||||
"workspace.black.time.minutes": "Minuten",
|
||||
"workspace.black.time.fewSeconds": "ein paar Sekunden",
|
||||
"workspace.black.subscription.title": "Abonnement",
|
||||
"workspace.black.subscription.message": "Sie haben OpenCode Black für ${{plan}} pro Monat abonniert.",
|
||||
"workspace.black.subscription.manage": "Abonnement verwalten",
|
||||
"workspace.black.subscription.rollingUsage": "5-stündige Nutzung",
|
||||
"workspace.black.subscription.weeklyUsage": "Wöchentliche Nutzung",
|
||||
"workspace.black.subscription.resetsIn": "Zurückgesetzt in",
|
||||
"workspace.black.subscription.useBalance":
|
||||
"Nutzen Sie Ihr verfügbares Guthaben, nachdem Sie die Nutzungslimits erreicht haben",
|
||||
"workspace.black.waitlist.title": "Warteliste",
|
||||
"workspace.black.waitlist.joined":
|
||||
"Sie stehen auf der Warteliste für den OpenCode Black Tarif für ${{plan}} pro Monat.",
|
||||
"workspace.black.waitlist.ready":
|
||||
"Wir können Sie jetzt in den OpenCode Black Tarif für ${{plan}} pro Monat aufnehmen.",
|
||||
"workspace.black.waitlist.leave": "Warteliste verlassen",
|
||||
"workspace.black.waitlist.leaving": "Verlassen...",
|
||||
"workspace.black.waitlist.left": "Verlassen",
|
||||
"workspace.black.waitlist.enroll": "Einschreiben",
|
||||
"workspace.black.waitlist.enrolling": "Anmeldung...",
|
||||
"workspace.black.waitlist.enrolled": "Eingeschrieben",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"Wenn Sie auf „Anmelden“ klicken, beginnt Ihr Abonnement sofort und Ihre Karte wird belastet.",
|
||||
|
||||
"bench.list.title": "Benchmark",
|
||||
"bench.list.heading": "Benchmarks",
|
||||
"bench.list.table.agent": "Agent",
|
||||
"bench.list.table.model": "Modell",
|
||||
"bench.list.table.score": "Score",
|
||||
|
||||
"bench.detail.title": "Benchmark - {{task}}",
|
||||
"bench.detail.notFound": "Task nicht gefunden",
|
||||
"bench.detail.na": "N/A",
|
||||
"bench.detail.labels.agent": "Agent",
|
||||
"bench.detail.labels.model": "Modell",
|
||||
"bench.detail.labels.task": "Task",
|
||||
"bench.detail.labels.repo": "Repo",
|
||||
"bench.detail.labels.from": "Von",
|
||||
"bench.detail.labels.to": "Bis",
|
||||
"bench.detail.labels.prompt": "Prompt",
|
||||
"bench.detail.labels.commit": "Commit",
|
||||
"bench.detail.labels.averageDuration": "Durchschnittliche Dauer",
|
||||
"bench.detail.labels.averageScore": "Durchschnittlicher Score",
|
||||
"bench.detail.labels.averageCost": "Durchschnittliche Kosten",
|
||||
"bench.detail.labels.summary": "Zusammenfassung",
|
||||
"bench.detail.labels.runs": "Durchläufe",
|
||||
"bench.detail.labels.score": "Score",
|
||||
"bench.detail.labels.base": "Basis",
|
||||
"bench.detail.labels.penalty": "Strafe",
|
||||
"bench.detail.labels.weight": "Gewichtung",
|
||||
"bench.detail.table.run": "Durchlauf",
|
||||
"bench.detail.table.score": "Score (Basis - Strafe)",
|
||||
"bench.detail.table.cost": "Kosten",
|
||||
"bench.detail.table.duration": "Dauer",
|
||||
"bench.detail.run.title": "Durchlauf {{n}}",
|
||||
"bench.detail.rawJson": "Raw JSON",
|
||||
} satisfies Dict
|
||||
|
||||
@@ -4,220 +4,496 @@ import { dict as en } from "./en"
|
||||
export const dict = {
|
||||
...en,
|
||||
"nav.github": "GitHub",
|
||||
"nav.docs": "Documentacion",
|
||||
"nav.docs": "Documentación",
|
||||
"nav.changelog": "Registro de cambios",
|
||||
"nav.discord": "Discord",
|
||||
"nav.x": "X",
|
||||
"nav.enterprise": "Empresas",
|
||||
"nav.enterprise": "Enterprise",
|
||||
"nav.zen": "Zen",
|
||||
"nav.login": "Iniciar sesion",
|
||||
"nav.login": "Iniciar sesión",
|
||||
"nav.free": "Gratis",
|
||||
"nav.home": "Inicio",
|
||||
"nav.openMenu": "Abrir menu",
|
||||
"nav.openMenu": "Abrir menú",
|
||||
"nav.getStartedFree": "Empezar gratis",
|
||||
|
||||
"nav.context.copyLogo": "Copiar logo como SVG",
|
||||
"nav.context.copyWordmark": "Copiar logotipo como SVG",
|
||||
"nav.context.brandAssets": "Recursos de marca",
|
||||
"nav.context.copyWordmark": "Copiar marca como SVG",
|
||||
"nav.context.brandAssets": "Activos de marca",
|
||||
|
||||
"footer.github": "GitHub",
|
||||
"footer.docs": "Documentacion",
|
||||
"footer.docs": "Documentación",
|
||||
"footer.changelog": "Registro de cambios",
|
||||
"footer.discord": "Discord",
|
||||
"footer.x": "X",
|
||||
|
||||
"legal.brand": "Marca",
|
||||
"legal.privacy": "Privacidad",
|
||||
"legal.terms": "Terminos",
|
||||
"legal.terms": "Términos",
|
||||
|
||||
"email.title": "Se el primero en enterarte cuando lancemos nuevos productos",
|
||||
"email.subtitle": "Unete a la lista de espera para acceso anticipado.",
|
||||
"email.placeholder": "Correo electronico",
|
||||
"email.title": "Sé el primero en enterarte cuando lancemos nuevos productos",
|
||||
"email.subtitle": "Únete a la lista de espera para acceso anticipado.",
|
||||
"email.placeholder": "Dirección de correo",
|
||||
"email.subscribe": "Suscribirse",
|
||||
"email.success": "Casi listo: revisa tu bandeja de entrada y confirma tu correo",
|
||||
"email.success": "Casi listo, revisa tu bandeja de entrada y confirma tu correo",
|
||||
|
||||
"notFound.title": "No encontrado | opencode",
|
||||
"notFound.heading": "404 - Pagina no encontrada",
|
||||
"notFound.heading": "404 - Página no encontrada",
|
||||
"notFound.home": "Inicio",
|
||||
"notFound.docs": "Documentacion",
|
||||
"notFound.docs": "Documentación",
|
||||
"notFound.github": "GitHub",
|
||||
"notFound.discord": "Discord",
|
||||
|
||||
"user.logout": "Cerrar sesion",
|
||||
"user.logout": "Cerrar sesión",
|
||||
|
||||
"workspace.select": "Seleccionar workspace",
|
||||
"workspace.createNew": "+ Crear nuevo workspace",
|
||||
"workspace.modal.title": "Crear nuevo workspace",
|
||||
"workspace.modal.placeholder": "Introduce el nombre del workspace",
|
||||
"workspace.select": "Seleccionar espacio de trabajo",
|
||||
"workspace.createNew": "+ Crear nuevo espacio de trabajo",
|
||||
"workspace.modal.title": "Crear nuevo espacio de trabajo",
|
||||
"workspace.modal.placeholder": "Introduce nombre del espacio de trabajo",
|
||||
|
||||
"common.cancel": "Cancelar",
|
||||
"common.creating": "Creando...",
|
||||
"common.create": "Crear",
|
||||
|
||||
"common.videoUnsupported": "Tu navegador no admite la etiqueta de video.",
|
||||
"common.videoUnsupported": "Tu navegador no soporta la etiqueta de video.",
|
||||
"common.figure": "Fig {{n}}.",
|
||||
"common.faq": "FAQ",
|
||||
"common.learnMore": "Mas informacion",
|
||||
"common.learnMore": "Más información",
|
||||
|
||||
"home.title": "OpenCode | El agente de codificacion con IA de codigo abierto",
|
||||
"error.invalidPlan": "Plan inválido",
|
||||
"error.workspaceRequired": "Se requiere ID del espacio de trabajo",
|
||||
"error.alreadySubscribed": "Este espacio de trabajo ya tiene una suscripción",
|
||||
"error.limitRequired": "El límite es obligatorio.",
|
||||
"error.monthlyLimitInvalid": "Establece un límite mensual válido.",
|
||||
"error.workspaceNameRequired": "El nombre del espacio de trabajo es obligatorio.",
|
||||
"error.nameTooLong": "El nombre debe tener 255 caracteres o menos.",
|
||||
"error.emailRequired": "El correo es obligatorio",
|
||||
"error.roleRequired": "El rol es obligatorio",
|
||||
"error.idRequired": "El ID es obligatorio",
|
||||
"error.nameRequired": "El nombre es obligatorio",
|
||||
"error.providerRequired": "El proveedor es obligatorio",
|
||||
"error.apiKeyRequired": "La clave de API es obligatoria",
|
||||
"error.modelRequired": "El modelo es obligatorio",
|
||||
"error.reloadAmountMin": "La cantidad de recarga debe ser al menos ${{amount}}",
|
||||
"error.reloadTriggerMin": "El disparador de saldo debe ser al menos ${{amount}}",
|
||||
|
||||
"home.title": "OpenCode | El agente de codificación IA de código abierto",
|
||||
|
||||
"temp.title": "opencode | Agente de codificación IA creado para la terminal",
|
||||
"temp.hero.title": "El agente de codificación IA creado para la terminal",
|
||||
"temp.zen": "opencode zen",
|
||||
"temp.getStarted": "Empezar",
|
||||
"temp.feature.native.title": "TUI Nativa",
|
||||
"temp.feature.native.body": "Una interfaz de terminal responsiva, nativa y personalizable",
|
||||
"temp.feature.zen.beforeLink": "Una lista",
|
||||
"temp.feature.zen.link": "seleccionada de modelos",
|
||||
"temp.feature.zen.afterLink": "proporcionada por opencode",
|
||||
"temp.feature.models.beforeLink": "Soporta más de 75 proveedores de LLM a través de",
|
||||
"temp.feature.models.afterLink": ", incluyendo modelos locales",
|
||||
"temp.screenshot.caption": "opencode TUI con el tema tokyonight",
|
||||
"temp.screenshot.alt": "opencode TUI con tema tokyonight",
|
||||
|
||||
"home.banner.badge": "Nuevo",
|
||||
"home.banner.text": "App de escritorio disponible en beta",
|
||||
"home.banner.text": "Aplicación de escritorio disponible en beta",
|
||||
"home.banner.platforms": "en macOS, Windows y Linux",
|
||||
"home.banner.downloadNow": "Descargar ahora",
|
||||
"home.banner.downloadBetaNow": "Descargar ahora la beta de escritorio",
|
||||
"home.banner.downloadBetaNow": "Descargar la beta de escritorio ahora",
|
||||
|
||||
"home.hero.title": "El agente de codificacion con IA de codigo abierto",
|
||||
"home.hero.subtitle.a": "Modelos gratis incluidos o conecta cualquier modelo de cualquier proveedor,",
|
||||
"home.hero.subtitle.b": "incluyendo Claude, GPT, Gemini y mas.",
|
||||
"home.hero.title": "El agente de codificación IA de código abierto",
|
||||
"home.hero.subtitle.a": "Modelos gratuitos incluidos o conecta cualquier modelo de cualquier proveedor,",
|
||||
"home.hero.subtitle.b": "incluyendo Claude, GPT, Gemini y más.",
|
||||
|
||||
"home.install.ariaLabel": "Opciones de instalacion",
|
||||
"home.install.ariaLabel": "Opciones de instalación",
|
||||
|
||||
"home.what.title": "Que es OpenCode?",
|
||||
"home.what.title": "¿Qué es OpenCode?",
|
||||
"home.what.body":
|
||||
"OpenCode es un agente de codigo abierto que te ayuda a escribir codigo en tu terminal, IDE o escritorio.",
|
||||
"OpenCode es un agente de código abierto que te ayuda a escribir código en tu terminal, IDE o escritorio.",
|
||||
"home.what.lsp.title": "LSP habilitado",
|
||||
"home.what.lsp.body": "Carga automaticamente los LSP correctos para el LLM",
|
||||
"home.what.multiSession.title": "Multi-sesion",
|
||||
"home.what.multiSession.body": "Inicia multiples agentes en paralelo en el mismo proyecto",
|
||||
"home.what.lsp.body": "Carga automáticamente los LSPs correctos para el LLM",
|
||||
"home.what.multiSession.title": "Multi-sesión",
|
||||
"home.what.multiSession.body": "Inicia múltiples agentes en paralelo en el mismo proyecto",
|
||||
"home.what.shareLinks.title": "Compartir enlaces",
|
||||
"home.what.shareLinks.body": "Comparte un enlace a cualquier sesion para referencia o depuracion",
|
||||
"home.what.shareLinks.body": "Comparte un enlace a cualquier sesión para referencia o depuración",
|
||||
"home.what.copilot.title": "GitHub Copilot",
|
||||
"home.what.copilot.body": "Inicia sesion con GitHub para usar tu cuenta de Copilot",
|
||||
"home.what.copilot.body": "Inicia sesión con GitHub para usar tu cuenta de Copilot",
|
||||
"home.what.chatgptPlus.title": "ChatGPT Plus/Pro",
|
||||
"home.what.chatgptPlus.body": "Inicia sesion con OpenAI para usar tu cuenta de ChatGPT Plus o Pro",
|
||||
"home.what.chatgptPlus.body": "Inicia sesión con OpenAI para usar tu cuenta de ChatGPT Plus o Pro",
|
||||
"home.what.anyModel.title": "Cualquier modelo",
|
||||
"home.what.anyModel.body": "75+ proveedores de LLM a traves de Models.dev, incluidos modelos locales",
|
||||
"home.what.anyModel.body": "Más de 75 proveedores de LLM a través de Models.dev, incluyendo modelos locales",
|
||||
"home.what.anyEditor.title": "Cualquier editor",
|
||||
"home.what.anyEditor.body": "Disponible como interfaz de terminal, app de escritorio y extension de IDE",
|
||||
"home.what.readDocs": "Leer docs",
|
||||
"home.what.anyEditor.body": "Disponible como interfaz de terminal, aplicación de escritorio y extensión de IDE",
|
||||
"home.what.readDocs": "Leer documentación",
|
||||
|
||||
"home.growth.title": "El agente de codificacion con IA de codigo abierto",
|
||||
"home.growth.title": "El agente de codificación IA de código abierto",
|
||||
"home.growth.body":
|
||||
"Con mas de <strong>{{stars}}</strong> estrellas en GitHub, <strong>{{contributors}}</strong> colaboradores y mas de <strong>{{commits}}</strong> commits, OpenCode es usado y confiado por mas de <strong>{{monthlyUsers}}</strong> desarrolladores cada mes.",
|
||||
"home.growth.githubStars": "Estrellas de GitHub",
|
||||
"Con más de <strong>{{stars}}</strong> estrellas en GitHub, <strong>{{contributors}}</strong> colaboradores y más de <strong>{{commits}}</strong> commits, OpenCode es usado y confiado por más de <strong>{{monthlyUsers}}</strong> desarrolladores cada mes.",
|
||||
"home.growth.githubStars": "Estrellas en GitHub",
|
||||
"home.growth.contributors": "Colaboradores",
|
||||
"home.growth.monthlyDevs": "Devs mensuales",
|
||||
"home.growth.monthlyDevs": "Desarrolladores Mensuales",
|
||||
|
||||
"home.privacy.title": "Creado para la privacidad primero",
|
||||
"home.privacy.title": "Creado pensando en la privacidad",
|
||||
"home.privacy.body":
|
||||
"OpenCode no almacena tu codigo ni datos de contexto, para poder operar en entornos sensibles a la privacidad.",
|
||||
"home.privacy.learnMore": "Mas informacion sobre",
|
||||
"OpenCode no almacena tu código ni datos de contexto, para que pueda operar en entornos sensibles a la privacidad.",
|
||||
"home.privacy.learnMore": "Más información sobre",
|
||||
"home.privacy.link": "privacidad",
|
||||
|
||||
"home.faq.q1": "Que es OpenCode?",
|
||||
"home.faq.q1": "¿Qué es OpenCode?",
|
||||
"home.faq.a1":
|
||||
"OpenCode es un agente de codigo abierto que te ayuda a escribir y ejecutar codigo con cualquier modelo de IA. Esta disponible como interfaz de terminal, app de escritorio o extension de IDE.",
|
||||
"home.faq.q2": "Como uso OpenCode?",
|
||||
"home.faq.a2.before": "La forma mas facil de empezar es leer la",
|
||||
"home.faq.a2.link": "introduccion",
|
||||
"home.faq.q3": "Necesito suscripciones extra de IA para usar OpenCode?",
|
||||
"OpenCode es un agente de código abierto que te ayuda a escribir y ejecutar código con cualquier modelo de IA. Está disponible como interfaz de terminal, aplicación de escritorio o extensión de IDE.",
|
||||
"home.faq.q2": "¿Cómo uso OpenCode?",
|
||||
"home.faq.a2.before": "La forma más fácil de empezar es leer la",
|
||||
"home.faq.a2.link": "introducción",
|
||||
"home.faq.q3": "¿Necesito suscripciones extra de IA para usar OpenCode?",
|
||||
"home.faq.a3.p1":
|
||||
"No necesariamente: OpenCode incluye un conjunto de modelos gratis que puedes usar sin crear una cuenta.",
|
||||
"home.faq.a3.p2.beforeZen": "Ademas, puedes usar modelos populares para codigo creando una cuenta de",
|
||||
"No necesariamente, OpenCode viene con un conjunto de modelos gratuitos que puedes usar sin crear una cuenta.",
|
||||
"home.faq.a3.p2.beforeZen":
|
||||
"Aparte de estos, puedes usar cualquiera de los modelos de codificación populares creando una cuenta de",
|
||||
"home.faq.a3.p2.afterZen": ".",
|
||||
"home.faq.a3.p3":
|
||||
"Aunque alentamos a los usuarios a usar Zen, OpenCode tambien funciona con los proveedores populares como OpenAI, Anthropic, xAI, etc.",
|
||||
"Aunque animamos a los usuarios a usar Zen, OpenCode también funciona con todos los proveedores populares como OpenAI, Anthropic, xAI, etc.",
|
||||
"home.faq.a3.p4.beforeLocal": "Incluso puedes conectar tus",
|
||||
"home.faq.a3.p4.localLink": "modelos locales",
|
||||
"home.faq.q4": "Puedo usar mis suscripciones de IA existentes con OpenCode?",
|
||||
"home.faq.q4": "¿Puedo usar mis suscripciones de IA existentes con OpenCode?",
|
||||
"home.faq.a4.p1":
|
||||
"Si, OpenCode admite planes de suscripcion de los principales proveedores. Puedes usar Claude Pro/Max, ChatGPT Plus/Pro o GitHub Copilot.",
|
||||
"home.faq.q5": "Solo puedo usar OpenCode en la terminal?",
|
||||
"home.faq.a5.beforeDesktop": "Ya no! OpenCode ahora esta disponible como una app para",
|
||||
"Sí, OpenCode soporta planes de suscripción de los principales proveedores. Puedes usar tus suscripciones de Claude Pro/Max, ChatGPT Plus/Pro o GitHub Copilot.",
|
||||
"home.faq.q5": "¿Solo puedo usar OpenCode en la terminal?",
|
||||
"home.faq.a5.beforeDesktop": "¡Ya no! OpenCode ahora está disponible como una aplicación para tu",
|
||||
"home.faq.a5.desktop": "escritorio",
|
||||
"home.faq.a5.and": "y",
|
||||
"home.faq.a5.web": "web",
|
||||
"home.faq.q6": "Cuanto cuesta OpenCode?",
|
||||
"home.faq.q6": "¿Cuánto cuesta OpenCode?",
|
||||
"home.faq.a6":
|
||||
"OpenCode es 100% gratis. Tambien incluye modelos gratuitos. Puede haber costos adicionales si conectas otro proveedor.",
|
||||
"home.faq.q7": "Y sobre datos y privacidad?",
|
||||
"OpenCode es 100% gratuito de usar. También viene con un conjunto de modelos gratuitos. Puede haber costos adicionales si conectas cualquier otro proveedor.",
|
||||
"home.faq.q7": "¿Qué hay sobre datos y privacidad?",
|
||||
"home.faq.a7.p1":
|
||||
"Tus datos e informacion solo se almacenan cuando usas nuestros modelos gratis o creas enlaces compartibles.",
|
||||
"home.faq.a7.p2.beforeModels": "Mas informacion sobre",
|
||||
"Tus datos e información solo se almacenan cuando usas nuestros modelos gratuitos o creas enlaces compartibles.",
|
||||
"home.faq.a7.p2.beforeModels": "Más información sobre",
|
||||
"home.faq.a7.p2.modelsLink": "nuestros modelos",
|
||||
"home.faq.a7.p2.and": "y",
|
||||
"home.faq.a7.p2.shareLink": "paginas para compartir",
|
||||
"home.faq.q8": "OpenCode es de codigo abierto?",
|
||||
"home.faq.a8.p1": "Si, OpenCode es totalmente open source. El codigo fuente es publico en",
|
||||
"home.faq.a7.p2.shareLink": "páginas compartidas",
|
||||
"home.faq.q8": "¿Es OpenCode de código abierto?",
|
||||
"home.faq.a8.p1": "Sí, OpenCode es totalmente de código abierto. El código fuente es público en",
|
||||
"home.faq.a8.p2": "bajo la",
|
||||
"home.faq.a8.mitLicense": "Licencia MIT",
|
||||
"home.faq.a8.p3":
|
||||
", lo que significa que cualquiera puede usarlo, modificarlo o contribuir a su desarrollo. Cualquiera de la comunidad puede abrir issues, enviar pull requests y ampliar la funcionalidad.",
|
||||
", lo que significa que cualquiera puede usar, modificar o contribuir a su desarrollo. Cualquiera de la comunidad puede abrir problemas, enviar solicitudes de extracción y extender la funcionalidad.",
|
||||
|
||||
"home.zenCta.title": "Accede a modelos confiables y optimizados para agentes de codigo",
|
||||
"home.zenCta.title": "Accede a modelos optimizados y confiables para agentes de codificación",
|
||||
"home.zenCta.body":
|
||||
"Zen te da acceso a un conjunto seleccionado de modelos de IA que OpenCode ha probado y benchmarkeado especificamente para agentes de codigo. No necesitas preocuparte por el rendimiento y la calidad inconsistentes entre proveedores: usa modelos validados que funcionan.",
|
||||
"Zen te da acceso a un conjunto seleccionado de modelos de IA que OpenCode ha probado y evaluado específicamente para agentes de codificación. No necesitas preocuparte por el rendimiento y la calidad inconsistentes entre proveedores, usa modelos validados que funcionan.",
|
||||
"home.zenCta.link": "Aprende sobre Zen",
|
||||
|
||||
"download.title": "OpenCode | Descargar",
|
||||
|
||||
"zen.title": "OpenCode Zen | Un conjunto seleccionado de modelos confiables y optimizados para agentes de codigo",
|
||||
"zen.hero.title": "Accede a modelos confiables y optimizados para agentes de codigo",
|
||||
"zen.title":
|
||||
"OpenCode Zen | Un conjunto seleccionado de modelos optimizados y confiables para agentes de codificación",
|
||||
"zen.hero.title": "Modelos optimizados y confiables para agentes de codificación",
|
||||
"zen.hero.body":
|
||||
"Zen te da acceso a un conjunto seleccionado de modelos de IA que OpenCode ha probado y benchmarkeado especificamente para agentes de codigo. No necesitas preocuparte por el rendimiento y la calidad inconsistentes entre proveedores: usa modelos validados que funcionan.",
|
||||
"Zen te da acceso a un conjunto seleccionado de modelos de IA que OpenCode ha probado y evaluado específicamente para agentes de codificación. No necesitas preocuparte por el rendimiento y la calidad inconsistentes, usa modelos validados que funcionan.",
|
||||
|
||||
"zen.faq.q1": "Que es OpenCode Zen?",
|
||||
"zen.faq.q1": "¿Qué es OpenCode Zen?",
|
||||
"zen.faq.a1":
|
||||
"Zen es un conjunto seleccionado de modelos de IA probados y benchmarkeados para agentes de codigo, creado por el equipo detras de OpenCode.",
|
||||
"zen.faq.q2": "Que hace a Zen mas preciso?",
|
||||
"Zen es un conjunto seleccionado de modelos de IA probados y evaluados para agentes de codificación, creado por el equipo detrás de OpenCode.",
|
||||
"zen.faq.q2": "¿Qué hace a Zen más preciso?",
|
||||
"zen.faq.a2":
|
||||
"Zen solo ofrece modelos que han sido probados y benchmarkeados especificamente para agentes de codigo. No usarias un cuchillo de mantequilla para cortar un filete; no uses malos modelos para programar.",
|
||||
"zen.faq.q3": "Zen es mas barato?",
|
||||
"Zen solo proporciona modelos que han sido específicamente probados y evaluados para agentes de codificación. No usarías un cuchillo de mantequilla para cortar carne, no uses modelos pobres para codificar.",
|
||||
"zen.faq.q3": "¿Es Zen más barato?",
|
||||
"zen.faq.a3":
|
||||
"Zen no tiene fines de lucro. Zen traslada los costos de los proveedores de modelos directamente a ti. Cuanto mas uso tenga Zen, mas puede OpenCode negociar mejores tarifas y trasladartelas.",
|
||||
"zen.faq.q4": "Cuanto cuesta Zen?",
|
||||
"Zen no tiene fines de lucro. Zen te transfiere los costos de los proveedores de modelos. Cuanto mayor sea el uso de Zen, más podrá OpenCode negociar mejores tarifas y transferírtelas.",
|
||||
"zen.faq.q4": "¿Cuánto cuesta Zen?",
|
||||
"zen.faq.a4.p1.beforePricing": "Zen",
|
||||
"zen.faq.a4.p1.pricingLink": "cobra por solicitud",
|
||||
"zen.faq.a4.p1.afterPricing": "sin margenes, asi que pagas exactamente lo que cobra el proveedor del modelo.",
|
||||
"zen.faq.a4.p2.beforeAccount": "Tu costo total depende del uso, y puedes establecer limites de gasto mensuales en tu",
|
||||
"zen.faq.a4.p1.afterPricing": "sin recargos, así que pagas exactamente lo que cobra el proveedor del modelo.",
|
||||
"zen.faq.a4.p2.beforeAccount": "Tu costo total depende del uso, y puedes establecer límites de gasto mensuales en tu",
|
||||
"zen.faq.a4.p2.accountLink": "cuenta",
|
||||
"zen.faq.a4.p3":
|
||||
"Para cubrir costos, OpenCode solo agrega una pequena tarifa de procesamiento de pagos de $1.23 por cada recarga de saldo de $20.",
|
||||
"zen.faq.q5": "Y sobre datos y privacidad?",
|
||||
"Para cubrir costos, OpenCode añade solo una pequeña tarifa de procesamiento de pagos de $1.23 por cada recarga de saldo de $20.",
|
||||
"zen.faq.q5": "¿Qué hay sobre datos y privacidad?",
|
||||
"zen.faq.a5.beforeExceptions":
|
||||
"Todos los modelos de Zen estan alojados en EE. UU. Los proveedores siguen una politica de cero retencion y no usan tus datos para entrenar modelos, con las",
|
||||
"Todos los modelos Zen están alojados en EE. UU. Los proveedores siguen una política de cero retención y no usan tus datos para entrenamiento de modelos, con las",
|
||||
"zen.faq.a5.exceptionsLink": "siguientes excepciones",
|
||||
"zen.faq.q6": "Puedo establecer limites de gasto?",
|
||||
"zen.faq.a6": "Si, puedes establecer limites de gasto mensuales en tu cuenta.",
|
||||
"zen.faq.q7": "Puedo cancelar?",
|
||||
"zen.faq.a7": "Si, puedes desactivar la facturacion en cualquier momento y usar tu saldo restante.",
|
||||
"zen.faq.q8": "Puedo usar Zen con otros agentes de codigo?",
|
||||
"zen.faq.q6": "¿Puedo establecer límites de gasto?",
|
||||
"zen.faq.a6": "Sí, puedes establecer límites de gasto mensuales en tu cuenta.",
|
||||
"zen.faq.q7": "¿Puedo cancelar?",
|
||||
"zen.faq.a7": "Sí, puedes deshabilitar la facturación en cualquier momento y usar tu saldo restante.",
|
||||
"zen.faq.q8": "¿Puedo usar Zen con otros agentes de codificación?",
|
||||
"zen.faq.a8":
|
||||
"Aunque Zen funciona muy bien con OpenCode, puedes usar Zen con cualquier agente. Sigue las instrucciones de configuracion en tu agente preferido.",
|
||||
"zen.cta.start": "Comience con Zen",
|
||||
"zen.pricing.title": "Agregue $20 de saldo de pago por uso",
|
||||
"Aunque Zen funciona genial con OpenCode, puedes usar Zen con cualquier agente. Sigue las instrucciones de configuración en tu agente de codificación preferido.",
|
||||
|
||||
"zen.cta.start": "Empieza con Zen",
|
||||
"zen.pricing.title": "Añade $20 de saldo prepago",
|
||||
"zen.pricing.fee": "(+$1.23 tarifa de procesamiento de tarjeta)",
|
||||
"zen.pricing.body": "Úselo con cualquier agente. Establezca límites de gasto mensual. Cancela en cualquier momento.",
|
||||
"zen.pricing.body": "Úsalo con cualquier agente. Establece límites de gasto mensual. Cancela en cualquier momento.",
|
||||
"zen.problem.title": "¿Qué problema está resolviendo Zen?",
|
||||
"zen.problem.body":
|
||||
"Hay muchos modelos disponibles, pero sólo unos pocos funcionan bien con agentes codificadores. La mayoría de los proveedores los configuran de manera diferente con resultados variables.",
|
||||
"zen.problem.subtitle": "Estamos solucionando este problema para todos, no solo para los usuarios de OpenCode.",
|
||||
"zen.problem.item1": "Probar modelos seleccionados y consultar a sus equipos.",
|
||||
"zen.problem.item2": "Trabajar con proveedores para garantizar que se entreguen correctamente.",
|
||||
"zen.problem.item3": "Comparación de todas las combinaciones de modelo y proveedor que recomendamos",
|
||||
"Hay muchos modelos disponibles, pero solo unos pocos funcionan bien con agentes de codificación. La mayoría de los proveedores los configuran de manera diferente con resultados variables.",
|
||||
"zen.problem.subtitle": "Estamos arreglando esto para todos, no solo para usuarios de OpenCode.",
|
||||
"zen.problem.item1": "Probando modelos seleccionados y consultando a sus equipos",
|
||||
"zen.problem.item2": "Trabajando con proveedores para asegurar que se entreguen correctamente",
|
||||
"zen.problem.item3": "Evaluando todas las combinaciones modelo-proveedor que recomendamos",
|
||||
"zen.how.title": "Cómo funciona Zen",
|
||||
"zen.how.body": "Si bien le sugerimos que utilice Zen con OpenCode, puede utilizar Zen con cualquier agente.",
|
||||
"zen.how.step1.title": "Regístrese y agregue un saldo de $20",
|
||||
"zen.how.step1.beforeLink": "sigue el",
|
||||
"zen.how.body": "Aunque sugerimos usar Zen con OpenCode, puedes usar Zen con cualquier agente.",
|
||||
"zen.how.step1.title": "Regístrate y añade $20 de saldo",
|
||||
"zen.how.step1.beforeLink": "sigue las",
|
||||
"zen.how.step1.link": "instrucciones de configuración",
|
||||
"zen.how.step2.title": "Utilice Zen con precios transparentes",
|
||||
"zen.how.step2.link": "pago por solicitud",
|
||||
"zen.how.step2.afterLink": "con cero marcas",
|
||||
"zen.how.step3.title": "Recarga automática",
|
||||
"zen.how.step3.body": "cuando su saldo alcance $5, agregaremos automáticamente $20",
|
||||
"zen.how.step2.title": "Usa Zen con precios transparentes",
|
||||
"zen.how.step2.link": "paga por solicitud",
|
||||
"zen.how.step2.afterLink": "con cero recargos",
|
||||
"zen.how.step3.title": "Auto-recarga",
|
||||
"zen.how.step3.body": "cuando tu saldo alcance $5 añadiremos automáticamente $20",
|
||||
"zen.privacy.title": "Tu privacidad es importante para nosotros",
|
||||
"zen.privacy.beforeExceptions":
|
||||
"Todos los modelos Zen están alojados en EE. UU. Los proveedores siguen una política de retención cero y no utilizan sus datos para la capacitación de modelos, con la",
|
||||
"Todos los modelos Zen están alojados en EE. UU. Los proveedores siguen una política de cero retención y no usan tus datos para entrenamiento de modelos, con las",
|
||||
"zen.privacy.exceptionsLink": "siguientes excepciones",
|
||||
|
||||
"black.meta.title": "OpenCode Black | Accede a los mejores modelos de codificación del mundo",
|
||||
"black.meta.description": "Obtén acceso a Claude, GPT, Gemini y más con los planes de suscripción de OpenCode Black.",
|
||||
"black.hero.title": "Accede a los mejores modelos de codificación del mundo",
|
||||
"black.hero.subtitle": "Incluyendo Claude, GPT, Gemini y más",
|
||||
"black.title": "OpenCode Black | Precios",
|
||||
"black.plan.icon20": "Plan Black 20",
|
||||
"black.plan.icon100": "Plan Black 100",
|
||||
"black.plan.icon200": "Plan Black 200",
|
||||
"black.plan.multiplier100": "5x más uso que Black 20",
|
||||
"black.plan.multiplier200": "20x más uso que Black 20",
|
||||
"black.price.perMonth": "al mes",
|
||||
"black.price.perPersonBilledMonthly": "por persona facturado mensualmente",
|
||||
"black.terms.1": "Tu suscripción no comenzará inmediatamente",
|
||||
"black.terms.2": "Serás añadido a la lista de espera y activado pronto",
|
||||
"black.terms.3": "Tu tarjeta solo se cargará cuando tu suscripción se active",
|
||||
"black.terms.4": "Aplican límites de uso, el uso fuertemente automatizado puede alcanzar los límites antes",
|
||||
"black.terms.5": "Las suscripciones son para individuos, contacta a Enterprise para equipos",
|
||||
"black.terms.6": "Los límites pueden ajustarse y los planes pueden discontinuarse en el futuro",
|
||||
"black.terms.7": "Cancela tu suscripción en cualquier momento",
|
||||
"black.action.continue": "Continuar",
|
||||
"black.finePrint.beforeTerms": "Los precios mostrados no incluyen impuestos aplicables",
|
||||
"black.finePrint.terms": "Términos de Servicio",
|
||||
"black.workspace.title": "OpenCode Black | Seleccionar Espacio de Trabajo",
|
||||
"black.workspace.selectPlan": "Selecciona un espacio de trabajo para este plan",
|
||||
"black.workspace.name": "Espacio de trabajo {{n}}",
|
||||
"black.subscribe.title": "Suscribirse a OpenCode Black",
|
||||
"black.subscribe.paymentMethod": "Método de pago",
|
||||
"black.subscribe.loadingPaymentForm": "Cargando formulario de pago...",
|
||||
"black.subscribe.selectWorkspaceToContinue": "Selecciona un espacio de trabajo para continuar",
|
||||
"black.subscribe.failurePrefix": "¡Oh no!",
|
||||
"black.subscribe.error.generic": "Ocurrió un error",
|
||||
"black.subscribe.error.invalidPlan": "Plan inválido",
|
||||
"black.subscribe.error.workspaceRequired": "Se requiere ID del espacio de trabajo",
|
||||
"black.subscribe.error.alreadySubscribed": "Este espacio de trabajo ya tiene una suscripción",
|
||||
"black.subscribe.processing": "Procesando...",
|
||||
"black.subscribe.submit": "Suscribirse ${{plan}}",
|
||||
"black.subscribe.form.chargeNotice": "Solo se te cobrará cuando tu suscripción se active",
|
||||
"black.subscribe.success.title": "Estás en la lista de espera de OpenCode Black",
|
||||
"black.subscribe.success.subscriptionPlan": "Plan de suscripción",
|
||||
"black.subscribe.success.planName": "OpenCode Black {{plan}}",
|
||||
"black.subscribe.success.amount": "Cantidad",
|
||||
"black.subscribe.success.amountValue": "${{plan}} al mes",
|
||||
"black.subscribe.success.paymentMethod": "Método de pago",
|
||||
"black.subscribe.success.dateJoined": "Fecha de unión",
|
||||
"black.subscribe.success.chargeNotice": "Tu tarjeta se cargará cuando tu suscripción se active",
|
||||
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "Claves API",
|
||||
"workspace.nav.members": "Miembros",
|
||||
"workspace.nav.billing": "Facturación",
|
||||
"workspace.nav.settings": "Configuración",
|
||||
|
||||
"workspace.home.banner.beforeLink": "Modelos optimizados y confiables para agentes de codificación.",
|
||||
"workspace.home.billing.loading": "Cargando...",
|
||||
"workspace.home.billing.enable": "Habilitar facturación",
|
||||
"workspace.home.billing.currentBalance": "Saldo actual",
|
||||
|
||||
"workspace.newUser.feature.tested.title": "Modelos Probados y Verificados",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"Hemos evaluado y probado modelos específicamente para agentes de codificación para asegurar el mejor rendimiento.",
|
||||
"workspace.newUser.feature.quality.title": "Máxima Calidad",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"Accede a modelos configurados para un rendimiento óptimo - sin degradaciones ni enrutamiento a proveedores más baratos.",
|
||||
"workspace.newUser.feature.lockin.title": "Sin Bloqueo",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"Usa Zen con cualquier agente de codificación, y continúa usando otros proveedores con opencode cuando quieras.",
|
||||
"workspace.newUser.copyApiKey": "Copiar clave API",
|
||||
"workspace.newUser.copyKey": "Copiar Clave",
|
||||
"workspace.newUser.copied": "¡Copiada!",
|
||||
"workspace.newUser.step.enableBilling": "Habilitar facturación",
|
||||
"workspace.newUser.step.login.before": "Ejecuta",
|
||||
"workspace.newUser.step.login.after": "y selecciona opencode",
|
||||
"workspace.newUser.step.pasteKey": "Pega tu clave API",
|
||||
"workspace.newUser.step.models.before": "Inicia opencode y ejecuta",
|
||||
"workspace.newUser.step.models.after": "para seleccionar un modelo",
|
||||
|
||||
"workspace.models.title": "Modelos",
|
||||
"workspace.models.subtitle.beforeLink": "Gestiona qué modelos pueden acceder los miembros del espacio de trabajo.",
|
||||
"workspace.models.table.model": "Modelo",
|
||||
"workspace.models.table.enabled": "Habilitado",
|
||||
|
||||
"workspace.providers.title": "Trae Tu Propia Clave",
|
||||
"workspace.providers.subtitle": "Configura tus propias claves API de proveedores de IA.",
|
||||
"workspace.providers.placeholder": "Introduce clave API de {{provider}} ({{prefix}}...)",
|
||||
"workspace.providers.configure": "Configurar",
|
||||
"workspace.providers.edit": "Editar",
|
||||
"workspace.providers.delete": "Eliminar",
|
||||
"workspace.providers.saving": "Guardando...",
|
||||
"workspace.providers.save": "Guardar",
|
||||
"workspace.providers.table.provider": "Proveedor",
|
||||
"workspace.providers.table.apiKey": "Clave API",
|
||||
|
||||
"workspace.usage.title": "Historial de Uso",
|
||||
"workspace.usage.subtitle": "Uso reciente de API y costos.",
|
||||
"workspace.usage.empty": "Haz tu primera llamada a la API para empezar.",
|
||||
"workspace.usage.table.date": "Fecha",
|
||||
"workspace.usage.table.model": "Modelo",
|
||||
"workspace.usage.table.input": "Entrada",
|
||||
"workspace.usage.table.output": "Salida",
|
||||
"workspace.usage.table.cost": "Costo",
|
||||
"workspace.usage.breakdown.input": "Entrada",
|
||||
"workspace.usage.breakdown.cacheRead": "Lectura de Caché",
|
||||
"workspace.usage.breakdown.cacheWrite": "Escritura de Caché",
|
||||
"workspace.usage.breakdown.output": "Salida",
|
||||
"workspace.usage.breakdown.reasoning": "Razonamiento",
|
||||
"workspace.usage.subscription": "suscripción (${{amount}})",
|
||||
|
||||
"workspace.cost.title": "Costo",
|
||||
"workspace.cost.subtitle": "Costos de uso desglosados por modelo.",
|
||||
"workspace.cost.allModels": "Todos los Modelos",
|
||||
"workspace.cost.allKeys": "Todas las Claves",
|
||||
"workspace.cost.deletedSuffix": "(eliminado)",
|
||||
"workspace.cost.empty": "No hay datos de uso disponibles para el periodo seleccionado.",
|
||||
"workspace.cost.subscriptionShort": "sub",
|
||||
|
||||
"workspace.keys.title": "Claves API",
|
||||
"workspace.keys.subtitle": "Gestiona tus claves API para acceder a los servicios de opencode.",
|
||||
"workspace.keys.create": "Crear Clave API",
|
||||
"workspace.keys.placeholder": "Introduce nombre de la clave",
|
||||
"workspace.keys.empty": "Crea una clave API de opencode Gateway",
|
||||
"workspace.keys.table.name": "Nombre",
|
||||
"workspace.keys.table.key": "Clave",
|
||||
"workspace.keys.table.createdBy": "Creado Por",
|
||||
"workspace.keys.table.lastUsed": "Último Uso",
|
||||
"workspace.keys.copyApiKey": "Copiar clave API",
|
||||
"workspace.keys.delete": "Eliminar",
|
||||
|
||||
"workspace.members.title": "Miembros",
|
||||
"workspace.members.subtitle": "Gestiona miembros del espacio de trabajo y sus permisos.",
|
||||
"workspace.members.invite": "Invitar Miembro",
|
||||
"workspace.members.inviting": "Invitando...",
|
||||
"workspace.members.beta.beforeLink": "Los espacios de trabajo son gratuitos para equipos durante la beta.",
|
||||
"workspace.members.form.invitee": "Invitado",
|
||||
"workspace.members.form.emailPlaceholder": "Introduce correo",
|
||||
"workspace.members.form.role": "Rol",
|
||||
"workspace.members.form.monthlyLimit": "Límite de gasto mensual",
|
||||
"workspace.members.noLimit": "Sin límite",
|
||||
"workspace.members.noLimitLowercase": "sin límite",
|
||||
"workspace.members.invited": "invitado",
|
||||
"workspace.members.edit": "Editar",
|
||||
"workspace.members.delete": "Eliminar",
|
||||
"workspace.members.saving": "Guardando...",
|
||||
"workspace.members.save": "Guardar",
|
||||
"workspace.members.table.email": "Correo",
|
||||
"workspace.members.table.role": "Rol",
|
||||
"workspace.members.table.monthLimit": "Límite mensual",
|
||||
"workspace.members.role.admin": "Administrador",
|
||||
"workspace.members.role.adminDescription": "Puede gestionar modelos, miembros y facturación",
|
||||
"workspace.members.role.member": "Miembro",
|
||||
"workspace.members.role.memberDescription": "Solo puede generar claves API para sí mismo",
|
||||
|
||||
"workspace.settings.title": "Configuración",
|
||||
"workspace.settings.subtitle": "Actualiza el nombre de tu espacio de trabajo y preferencias.",
|
||||
"workspace.settings.workspaceName": "Nombre del espacio de trabajo",
|
||||
"workspace.settings.defaultName": "Por defecto",
|
||||
"workspace.settings.updating": "Actualizando...",
|
||||
"workspace.settings.save": "Guardar",
|
||||
"workspace.settings.edit": "Editar",
|
||||
|
||||
"workspace.billing.title": "Facturación",
|
||||
"workspace.billing.subtitle.beforeLink": "Gestionar métodos de pago.",
|
||||
"workspace.billing.contactUs": "Contáctanos",
|
||||
"workspace.billing.subtitle.afterLink": "si tienes alguna pregunta.",
|
||||
"workspace.billing.currentBalance": "Saldo Actual",
|
||||
"workspace.billing.add": "Añadir $",
|
||||
"workspace.billing.enterAmount": "Introduce cantidad",
|
||||
"workspace.billing.loading": "Cargando...",
|
||||
"workspace.billing.addAction": "Añadir",
|
||||
"workspace.billing.addBalance": "Añadir Saldo",
|
||||
"workspace.billing.linkedToStripe": "Vinculado con Stripe",
|
||||
"workspace.billing.manage": "Gestionar",
|
||||
"workspace.billing.enable": "Habilitar Facturación",
|
||||
|
||||
"workspace.monthlyLimit.title": "Límite Mensual",
|
||||
"workspace.monthlyLimit.subtitle": "Establece un límite de uso mensual para tu cuenta.",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "Estableciendo...",
|
||||
"workspace.monthlyLimit.set": "Establecer",
|
||||
"workspace.monthlyLimit.edit": "Editar Límite",
|
||||
"workspace.monthlyLimit.noLimit": "Sin límite de uso establecido.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "Uso actual para",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "es $",
|
||||
|
||||
"workspace.reload.title": "Auto Recarga",
|
||||
"workspace.reload.disabled.before": "La auto recarga está",
|
||||
"workspace.reload.disabled.state": "deshabilitada",
|
||||
"workspace.reload.disabled.after": "Habilita para recargar automáticamente cuando el saldo sea bajo.",
|
||||
"workspace.reload.enabled.before": "La auto recarga está",
|
||||
"workspace.reload.enabled.state": "habilitada",
|
||||
"workspace.reload.enabled.middle": "Recargaremos",
|
||||
"workspace.reload.processingFee": "tarifa de procesamiento",
|
||||
"workspace.reload.enabled.after": "cuando el saldo alcance",
|
||||
"workspace.reload.edit": "Editar",
|
||||
"workspace.reload.enable": "Habilitar",
|
||||
"workspace.reload.enableAutoReload": "Habilitar Auto Recarga",
|
||||
"workspace.reload.reloadAmount": "Recargar $",
|
||||
"workspace.reload.whenBalanceReaches": "Cuando el saldo alcance $",
|
||||
"workspace.reload.saving": "Guardando...",
|
||||
"workspace.reload.save": "Guardar",
|
||||
"workspace.reload.failedAt": "La recarga falló en",
|
||||
"workspace.reload.reason": "Razón:",
|
||||
"workspace.reload.updatePaymentMethod": "Por favor actualiza tu método de pago e intenta de nuevo.",
|
||||
"workspace.reload.retrying": "Reintentando...",
|
||||
"workspace.reload.retry": "Reintentar",
|
||||
|
||||
"workspace.payments.title": "Historial de Pagos",
|
||||
"workspace.payments.subtitle": "Transacciones de pago recientes.",
|
||||
"workspace.payments.table.date": "Fecha",
|
||||
"workspace.payments.table.paymentId": "ID de Pago",
|
||||
"workspace.payments.table.amount": "Cantidad",
|
||||
"workspace.payments.table.receipt": "Recibo",
|
||||
"workspace.payments.type.credit": "crédito",
|
||||
"workspace.payments.type.subscription": "suscripción",
|
||||
"workspace.payments.view": "Ver",
|
||||
|
||||
"workspace.black.loading": "Cargando...",
|
||||
"workspace.black.time.day": "día",
|
||||
"workspace.black.time.days": "días",
|
||||
"workspace.black.time.hour": "hora",
|
||||
"workspace.black.time.hours": "horas",
|
||||
"workspace.black.time.minute": "minuto",
|
||||
"workspace.black.time.minutes": "minutos",
|
||||
"workspace.black.time.fewSeconds": "unos pocos segundos",
|
||||
"workspace.black.subscription.title": "Suscripción",
|
||||
"workspace.black.subscription.message": "Estás suscrito a OpenCode Black por ${{plan}} al mes.",
|
||||
"workspace.black.subscription.manage": "Gestionar Suscripción",
|
||||
"workspace.black.subscription.rollingUsage": "Uso de 5 horas",
|
||||
"workspace.black.subscription.weeklyUsage": "Uso Semanal",
|
||||
"workspace.black.subscription.resetsIn": "Se reinicia en",
|
||||
"workspace.black.subscription.useBalance": "Usa tu saldo disponible después de alcanzar los límites de uso",
|
||||
"workspace.black.waitlist.title": "Lista de Espera",
|
||||
"workspace.black.waitlist.joined": "Estás en la lista de espera para el plan OpenCode Black de ${{plan}} al mes.",
|
||||
"workspace.black.waitlist.ready": "Estamos listos para inscribirte en el plan OpenCode Black de ${{plan}} al mes.",
|
||||
"workspace.black.waitlist.leave": "Abandonar Lista de Espera",
|
||||
"workspace.black.waitlist.leaving": "Abandonando...",
|
||||
"workspace.black.waitlist.left": "Abandonada",
|
||||
"workspace.black.waitlist.enroll": "Inscribirse",
|
||||
"workspace.black.waitlist.enrolling": "Inscribiéndose...",
|
||||
"workspace.black.waitlist.enrolled": "Inscrito",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"Cuando haces clic en Inscribirse, tu suscripción comienza inmediatamente y se cargará a tu tarjeta.",
|
||||
|
||||
"download.title": "OpenCode | Descargar",
|
||||
"download.meta.description": "Descarga OpenCode para macOS, Windows y Linux",
|
||||
"download.hero.title": "Descargar OpenCode",
|
||||
"download.hero.subtitle": "Disponible en Beta para macOS, Windows y Linux",
|
||||
"download.hero.button": "Descargar para {{os}}",
|
||||
"download.section.terminal": "OpenCode Terminal",
|
||||
"download.section.desktop": "OpenCode Desktop (Beta)",
|
||||
"download.section.extensions": "Extensiones de OpenCode",
|
||||
"download.section.integrations": "Integraciones de OpenCode",
|
||||
"download.section.extensions": "Extensiones OpenCode",
|
||||
"download.section.integrations": "Integraciones OpenCode",
|
||||
"download.action.download": "Descargar",
|
||||
"download.action.install": "Instalar",
|
||||
|
||||
@@ -228,244 +504,95 @@ export const dict = {
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
|
||||
"download.faq.a3.beforeLocal":
|
||||
"No necesariamente, pero probablemente. Necesitaras una suscripcion de IA si quieres conectar OpenCode a un proveedor de pago, aunque puedes trabajar con",
|
||||
"No necesariamente, pero probablemente. Necesitarás una suscripción de IA si quieres conectar OpenCode a un proveedor de pago, aunque puedes trabajar con",
|
||||
"download.faq.a3.localLink": "modelos locales",
|
||||
"download.faq.a3.afterLocal.beforeZen": "gratis. Aunque animamos a los usuarios a usar",
|
||||
"download.faq.a3.afterZen":
|
||||
", OpenCode funciona con todos los proveedores populares como OpenAI, Anthropic, xAI, etc.",
|
||||
|
||||
"download.faq.a5.p1": "OpenCode es 100% gratis.",
|
||||
"download.faq.a5.p1": "OpenCode es 100% gratuito de usar.",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"Cualquier costo adicional vendra de tu suscripcion a un proveedor de modelos. Aunque OpenCode funciona con cualquier proveedor de modelos, recomendamos usar",
|
||||
"Cualquier costo adicional vendrá de tu suscripción a un proveedor de modelos. Aunque OpenCode funciona con cualquier proveedor de modelos, recomendamos usar",
|
||||
"download.faq.a5.p2.afterZen": ".",
|
||||
|
||||
"download.faq.a6.p1": "Tus datos e informacion solo se almacenan cuando creas enlaces compartibles en OpenCode.",
|
||||
"download.faq.a6.p2.beforeShare": "Mas informacion sobre",
|
||||
"download.faq.a6.shareLink": "paginas para compartir",
|
||||
"download.faq.a6.p1": "Tus datos e información solo se almacenan cuando creas enlaces compartibles en OpenCode.",
|
||||
"download.faq.a6.p2.beforeShare": "Más información sobre",
|
||||
"download.faq.a6.shareLink": "páginas compartidas",
|
||||
|
||||
"enterprise.title": "OpenCode | Soluciones empresariales para tu organizacion",
|
||||
"enterprise.title": "OpenCode | Soluciones empresariales para tu organización",
|
||||
"enterprise.meta.description": "Contacta a OpenCode para soluciones empresariales",
|
||||
"enterprise.hero.title": "Tu codigo es tuyo",
|
||||
"enterprise.hero.title": "Tu código es tuyo",
|
||||
"enterprise.hero.body1":
|
||||
"OpenCode opera de forma segura dentro de tu organizacion sin almacenar datos ni contexto, y sin restricciones de licencia ni reclamaciones de propiedad. Inicia una prueba con tu equipo y luego despliegalo en toda tu organizacion integrandolo con tu SSO y tu gateway interno de IA.",
|
||||
"enterprise.hero.body2": "Cuentanos como podemos ayudar.",
|
||||
"OpenCode opera de forma segura dentro de tu organización sin almacenar datos ni contexto, y sin restricciones de licencia ni reclamaciones de propiedad. Inicia una prueba con tu equipo, luego despliégalo en toda tu organización integrándolo con tu SSO y pasarela de IA interna.",
|
||||
"enterprise.hero.body2": "Déjanos saber cómo podemos ayudar.",
|
||||
"enterprise.form.name.label": "Nombre completo",
|
||||
"enterprise.form.name.placeholder": "Jeff Bezos",
|
||||
"enterprise.form.role.label": "Cargo",
|
||||
"enterprise.form.role.placeholder": "Presidente ejecutivo",
|
||||
"enterprise.form.email.label": "Correo de la empresa",
|
||||
"enterprise.form.role.label": "Rol",
|
||||
"enterprise.form.role.placeholder": "Presidente Ejecutivo",
|
||||
"enterprise.form.email.label": "Correo de empresa",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "Que problema intentas resolver?",
|
||||
"enterprise.form.message.label": "¿Qué problema estás intentando resolver?",
|
||||
"enterprise.form.message.placeholder": "Necesitamos ayuda con...",
|
||||
"enterprise.form.send": "Enviar",
|
||||
"enterprise.form.sending": "Enviando...",
|
||||
"enterprise.form.success": "Mensaje enviado, nos pondremos en contacto pronto.",
|
||||
"enterprise.form.success": "Mensaje enviado, estaremos en contacto pronto.",
|
||||
"enterprise.faq.title": "FAQ",
|
||||
"enterprise.faq.q1": "Que es OpenCode Enterprise?",
|
||||
"enterprise.faq.q1": "¿Qué es OpenCode Enterprise?",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise es para organizaciones que quieren asegurarse de que su codigo y datos nunca salgan de su infraestructura. Puede lograrlo mediante una configuracion centralizada que se integra con tu SSO y tu gateway interno de IA/LLM.",
|
||||
"enterprise.faq.q2": "Como empiezo con OpenCode Enterprise?",
|
||||
"OpenCode Enterprise es para organizaciones que quieren asegurar que su código y datos nunca salgan de su infraestructura. Puede hacer esto usando una configuración centralizada que se integra con tu SSO y pasarela de IA interna.",
|
||||
"enterprise.faq.q2": "¿Cómo empiezo con OpenCode Enterprise?",
|
||||
"enterprise.faq.a2":
|
||||
"Empieza con una prueba interna con tu equipo. OpenCode por defecto no almacena tu codigo ni datos de contexto, lo que facilita comenzar. Despues, contactanos para hablar sobre precios y opciones de implementacion.",
|
||||
"enterprise.faq.q3": "Como funciona el precio para empresas?",
|
||||
"Simplemente empieza con una prueba interna con tu equipo. OpenCode por defecto no almacena tu código ni datos de contexto, haciendo fácil empezar. Luego contáctanos para discutir precios y opciones de implementación.",
|
||||
"enterprise.faq.q3": "¿Cómo funciona el precio para empresas?",
|
||||
"enterprise.faq.a3":
|
||||
"Ofrecemos precios enterprise por asiento. Si tienes tu propio gateway de LLM, no cobramos por los tokens usados. Para mas detalles, contactanos para una cotizacion personalizada segun las necesidades de tu organizacion.",
|
||||
"enterprise.faq.q4": "Mis datos estan seguros con OpenCode Enterprise?",
|
||||
"Ofrecemos precios empresariales por asiento. Si tienes tu propia pasarela de LLM, no cobramos por los tokens usados. Para más detalles, contáctanos para una cotización personalizada basada en las necesidades de tu organización.",
|
||||
"enterprise.faq.q4": "¿Están mis datos seguros con OpenCode Enterprise?",
|
||||
"enterprise.faq.a4":
|
||||
"Si. OpenCode no almacena tu codigo ni datos de contexto. Todo el procesamiento ocurre localmente o mediante llamadas directas a la API de tu proveedor de IA. Con configuracion centralizada e integracion SSO, tus datos permanecen seguros dentro de la infraestructura de tu organizacion.",
|
||||
"Sí. OpenCode no almacena tu código ni datos de contexto. Todo el procesamiento ocurre localmente o a través de llamadas directas a la API de tu proveedor de IA. Con configuración central y integración SSO, tus datos permanecen seguros dentro de la infraestructura de tu organización.",
|
||||
|
||||
"brand.title": "OpenCode | Marca",
|
||||
"brand.meta.description": "Guia de marca de OpenCode",
|
||||
"brand.heading": "Guia de marca",
|
||||
"brand.subtitle": "Recursos y materiales para ayudarte a trabajar con la marca OpenCode.",
|
||||
"brand.downloadAll": "Descargar todos los recursos",
|
||||
"brand.meta.description": "Guías de marca de OpenCode",
|
||||
"brand.heading": "Guías de marca",
|
||||
"brand.subtitle": "Recursos y activos para ayudarte a trabajar con la marca OpenCode.",
|
||||
"brand.downloadAll": "Descargar todos los activos",
|
||||
|
||||
"changelog.title": "OpenCode | Registro de cambios",
|
||||
"changelog.meta.description": "Notas de version y registro de cambios de OpenCode",
|
||||
"changelog.meta.description": "Notas de versión y registro de cambios de OpenCode",
|
||||
"changelog.hero.title": "Registro de cambios",
|
||||
"changelog.hero.subtitle": "Nuevas actualizaciones y mejoras de OpenCode",
|
||||
"changelog.hero.subtitle": "Nuevas actualizaciones y mejoras para OpenCode",
|
||||
"changelog.empty": "No se encontraron entradas en el registro de cambios.",
|
||||
"changelog.viewJson": "Ver JSON",
|
||||
"workspace.nav.zen": "zen",
|
||||
"workspace.nav.apiKeys": "API claves",
|
||||
"workspace.nav.members": "Miembros",
|
||||
"workspace.nav.billing": "Facturación",
|
||||
"workspace.nav.settings": "Ajustes",
|
||||
"workspace.home.banner.beforeLink": "Modelos optimizados confiables para agentes de codificación.",
|
||||
"workspace.home.billing.loading": "Cargando...",
|
||||
"workspace.home.billing.enable": "Habilitar facturación",
|
||||
"workspace.home.billing.currentBalance": "Saldo actual",
|
||||
"workspace.newUser.feature.tested.title": "Modelos probados y verificados",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"Hemos evaluado y probado modelos específicamente para agentes de codificación para garantizar el mejor rendimiento.",
|
||||
"workspace.newUser.feature.quality.title": "La más alta calidad",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"Acceda a modelos configurados para un rendimiento óptimo, sin degradaciones ni enrutamiento a proveedores más baratos.",
|
||||
"workspace.newUser.feature.lockin.title": "Sin bloqueo",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"Utilice Zen con cualquier agente de codificación y continúe utilizando otros proveedores con opencode cuando lo desee.",
|
||||
"workspace.newUser.copyApiKey": "Copiar la clave API",
|
||||
"workspace.newUser.copyKey": "Copiar clave",
|
||||
"workspace.newUser.copied": "¡Copiado!",
|
||||
"workspace.newUser.step.enableBilling": "Habilitar facturación",
|
||||
"workspace.newUser.step.login.before": "Correr",
|
||||
"workspace.newUser.step.login.after": "y seleccione opencode",
|
||||
"workspace.newUser.step.pasteKey": "Pega tu clave API",
|
||||
"workspace.newUser.step.models.before": "Inicie opencode y ejecute",
|
||||
"workspace.newUser.step.models.after": "para seleccionar un modelo",
|
||||
"workspace.models.title": "Modelos",
|
||||
"workspace.models.subtitle.beforeLink":
|
||||
"Administre a qué modelos pueden acceder los miembros del espacio de trabajo.",
|
||||
"workspace.models.table.model": "Modelo",
|
||||
"workspace.models.table.enabled": "Activado",
|
||||
"workspace.providers.title": "Trae tu propia llave",
|
||||
"workspace.providers.subtitle": "Configure sus propias claves API de proveedores de IA.",
|
||||
"workspace.providers.placeholder": "Ingrese la clave {{provider}} API ({{prefix}}...)",
|
||||
"workspace.providers.configure": "Configurar",
|
||||
"workspace.providers.edit": "Editar",
|
||||
"workspace.providers.delete": "Borrar",
|
||||
"workspace.providers.saving": "Ahorro...",
|
||||
"workspace.providers.save": "Ahorrar",
|
||||
"workspace.providers.table.provider": "Proveedor",
|
||||
"workspace.providers.table.apiKey": "Clave API",
|
||||
"workspace.usage.title": "Historial de uso",
|
||||
"workspace.usage.subtitle": "Uso y costos recientes de API.",
|
||||
"workspace.usage.empty": "Realice su primera llamada API para comenzar.",
|
||||
"workspace.usage.table.date": "Fecha",
|
||||
"workspace.usage.table.model": "Modelo",
|
||||
"workspace.usage.table.input": "Aporte",
|
||||
"workspace.usage.table.output": "Producción",
|
||||
"workspace.usage.table.cost": "Costo",
|
||||
"workspace.usage.breakdown.input": "Aporte",
|
||||
"workspace.usage.breakdown.cacheRead": "Lectura de caché",
|
||||
"workspace.usage.breakdown.cacheWrite": "Escritura en caché",
|
||||
"workspace.usage.breakdown.output": "Producción",
|
||||
"workspace.usage.breakdown.reasoning": "Razonamiento",
|
||||
"workspace.usage.subscription": "suscripción (${{amount}})",
|
||||
"workspace.cost.title": "Costo",
|
||||
"workspace.cost.subtitle": "Costes de uso desglosados por modelo.",
|
||||
"workspace.cost.allModels": "Todos los modelos",
|
||||
"workspace.cost.allKeys": "Todas las claves",
|
||||
"workspace.cost.deletedSuffix": "(eliminado)",
|
||||
"workspace.cost.empty": "No hay datos de uso disponibles para el período seleccionado.",
|
||||
"workspace.cost.subscriptionShort": "sub",
|
||||
"workspace.keys.title": "API claves",
|
||||
"workspace.keys.subtitle": "Administre sus claves API para acceder a los servicios opencode.",
|
||||
"workspace.keys.create": "Crear clave API",
|
||||
"workspace.keys.placeholder": "Introduzca el nombre de la clave",
|
||||
"workspace.keys.empty": "Cree una clave opencode de puerta de enlace API",
|
||||
"workspace.keys.table.name": "Nombre",
|
||||
"workspace.keys.table.key": "Llave",
|
||||
"workspace.keys.table.createdBy": "Creado por",
|
||||
"workspace.keys.table.lastUsed": "Usado por última vez",
|
||||
"workspace.keys.copyApiKey": "Copiar la clave API",
|
||||
"workspace.keys.delete": "Borrar",
|
||||
"workspace.members.title": "Miembros",
|
||||
"workspace.members.subtitle": "Administre los miembros del espacio de trabajo y sus permisos.",
|
||||
"workspace.members.invite": "Invitar miembro",
|
||||
"workspace.members.inviting": "Atractivo...",
|
||||
"workspace.members.beta.beforeLink":
|
||||
"Los espacios de trabajo son gratuitos para los equipos durante la versión beta.",
|
||||
"workspace.members.form.invitee": "invitado",
|
||||
"workspace.members.form.emailPlaceholder": "Ingrese el correo electrónico",
|
||||
"workspace.members.form.role": "Role",
|
||||
"workspace.members.form.monthlyLimit": "Límite de gasto mensual",
|
||||
"workspace.members.noLimit": "Sin límite",
|
||||
"workspace.members.noLimitLowercase": "sin limite",
|
||||
"workspace.members.invited": "invitado",
|
||||
"workspace.members.edit": "Editar",
|
||||
"workspace.members.delete": "Borrar",
|
||||
"workspace.members.saving": "Ahorro...",
|
||||
"workspace.members.save": "Ahorrar",
|
||||
"workspace.members.table.email": "Correo electrónico",
|
||||
"workspace.members.table.role": "Role",
|
||||
"workspace.members.table.monthLimit": "Límite de meses",
|
||||
"workspace.members.role.admin": "Administración",
|
||||
"workspace.members.role.adminDescription": "Puede gestionar modelos, miembros y facturación.",
|
||||
"workspace.members.role.member": "Miembro",
|
||||
"workspace.members.role.memberDescription": "Solo pueden generar claves API para ellos mismos",
|
||||
"workspace.settings.title": "Ajustes",
|
||||
"workspace.settings.subtitle": "Actualice el nombre y las preferencias de su espacio de trabajo.",
|
||||
"workspace.settings.workspaceName": "Nombre del espacio de trabajo",
|
||||
"workspace.settings.defaultName": "Por defecto",
|
||||
"workspace.settings.updating": "Actualizando...",
|
||||
"workspace.settings.save": "Ahorrar",
|
||||
"workspace.settings.edit": "Editar",
|
||||
"workspace.billing.title": "Facturación",
|
||||
"workspace.billing.subtitle.beforeLink": "Administrar métodos de pago.",
|
||||
"workspace.billing.contactUs": "Contáctenos",
|
||||
"workspace.billing.subtitle.afterLink": "si tienes alguna pregunta.",
|
||||
"workspace.billing.currentBalance": "Saldo actual",
|
||||
"workspace.billing.add": "Agregar $",
|
||||
"workspace.billing.enterAmount": "Ingrese la cantidad",
|
||||
"workspace.billing.loading": "Cargando...",
|
||||
"workspace.billing.addAction": "Agregar",
|
||||
"workspace.billing.addBalance": "Agregar saldo",
|
||||
"workspace.billing.linkedToStripe": "Vinculado a Stripe",
|
||||
"workspace.billing.manage": "Administrar",
|
||||
"workspace.billing.enable": "Habilitar facturación",
|
||||
"workspace.monthlyLimit.title": "Límite mensual",
|
||||
"workspace.monthlyLimit.subtitle": "Establezca un límite de uso mensual para su cuenta.",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "Configuración...",
|
||||
"workspace.monthlyLimit.set": "Colocar",
|
||||
"workspace.monthlyLimit.edit": "Editar límite",
|
||||
"workspace.monthlyLimit.noLimit": "No se ha establecido ningún límite de uso.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "Uso actual para",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "es $",
|
||||
"workspace.reload.title": "Recarga automática",
|
||||
"workspace.reload.disabled.before": "La recarga automática es",
|
||||
"workspace.reload.disabled.state": "desactivado",
|
||||
"workspace.reload.disabled.after": "Habilite la recarga automática cuando el saldo sea bajo.",
|
||||
"workspace.reload.enabled.before": "La recarga automática es",
|
||||
"workspace.reload.enabled.state": "activado",
|
||||
"workspace.reload.enabled.middle": "vamos a recargar",
|
||||
"workspace.reload.processingFee": "tarifa de procesamiento",
|
||||
"workspace.reload.enabled.after": "cuando el saldo llega",
|
||||
"workspace.reload.edit": "Editar",
|
||||
"workspace.reload.enable": "Permitir",
|
||||
"workspace.reload.enableAutoReload": "Habilitar recarga automática",
|
||||
"workspace.reload.reloadAmount": "Recargar $",
|
||||
"workspace.reload.whenBalanceReaches": "Cuando el saldo llega a $",
|
||||
"workspace.reload.saving": "Ahorro...",
|
||||
"workspace.reload.save": "Ahorrar",
|
||||
"workspace.reload.failedAt": "La recarga falló en",
|
||||
"workspace.reload.reason": "Razón:",
|
||||
"workspace.reload.updatePaymentMethod": "Actualice su método de pago e inténtelo nuevamente.",
|
||||
"workspace.reload.retrying": "Reintentando...",
|
||||
"workspace.reload.retry": "Rever",
|
||||
"workspace.payments.title": "Historial de pagos",
|
||||
"workspace.payments.subtitle": "Transacciones de pago recientes.",
|
||||
"workspace.payments.table.date": "Fecha",
|
||||
"workspace.payments.table.paymentId": "ID de pago",
|
||||
"workspace.payments.table.amount": "Cantidad",
|
||||
"workspace.payments.table.receipt": "Recibo",
|
||||
"workspace.payments.type.credit": "crédito",
|
||||
"workspace.payments.type.subscription": "suscripción",
|
||||
"workspace.payments.view": "Vista",
|
||||
"workspace.black.loading": "Cargando...",
|
||||
"workspace.black.time.day": "día",
|
||||
"workspace.black.time.days": "días",
|
||||
"workspace.black.time.hour": "hora",
|
||||
"workspace.black.time.hours": "horas",
|
||||
"workspace.black.time.minute": "minuto",
|
||||
"workspace.black.time.minutes": "minutos",
|
||||
"workspace.black.time.fewSeconds": "unos segundos",
|
||||
"workspace.black.subscription.title": "Suscripción",
|
||||
"workspace.black.subscription.message": "Estás suscrito a OpenCode Black por ${{plan}} al mes.",
|
||||
"workspace.black.subscription.manage": "Administrar suscripción",
|
||||
"workspace.black.subscription.rollingUsage": "Uso de 5 horas",
|
||||
"workspace.black.subscription.weeklyUsage": "Uso semanal",
|
||||
"workspace.black.subscription.resetsIn": "Se reinicia en",
|
||||
"workspace.black.subscription.useBalance": "Utilice su saldo disponible después de alcanzar los límites de uso",
|
||||
"workspace.black.waitlist.title": "Lista de espera",
|
||||
"workspace.black.waitlist.joined": "Estás en la lista de espera para el plan Black de ${{plan}} por mes OpenCode.",
|
||||
"workspace.black.waitlist.ready": "Estamos listos para inscribirlo en el plan Black de ${{plan}} por mes OpenCode.",
|
||||
"workspace.black.waitlist.leave": "Salir de la lista de espera",
|
||||
"workspace.black.waitlist.leaving": "Partida...",
|
||||
"workspace.black.waitlist.left": "Izquierda",
|
||||
"workspace.black.waitlist.enroll": "Inscribirse",
|
||||
"workspace.black.waitlist.enrolling": "Inscribiéndose...",
|
||||
"workspace.black.waitlist.enrolled": "Inscrito",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"Cuando hace clic en Inscribirse, su suscripción comienza inmediatamente y se cargará en su tarjeta.",
|
||||
} satisfies Dict
|
||||
|
||||
"bench.list.title": "Benchmark",
|
||||
"bench.list.heading": "Benchmarks",
|
||||
"bench.list.table.agent": "Agente",
|
||||
"bench.list.table.model": "Modelo",
|
||||
"bench.list.table.score": "Puntuación",
|
||||
|
||||
"bench.detail.title": "Benchmark - {{task}}",
|
||||
"bench.detail.notFound": "Tarea no encontrada",
|
||||
"bench.detail.na": "N/A",
|
||||
"bench.detail.labels.agent": "Agente",
|
||||
"bench.detail.labels.model": "Modelo",
|
||||
"bench.detail.labels.task": "Tarea",
|
||||
"bench.detail.labels.repo": "Repo",
|
||||
"bench.detail.labels.from": "De",
|
||||
"bench.detail.labels.to": "A",
|
||||
"bench.detail.labels.prompt": "Prompt",
|
||||
"bench.detail.labels.commit": "Commit",
|
||||
"bench.detail.labels.averageDuration": "Duración Promedio",
|
||||
"bench.detail.labels.averageScore": "Puntuación Promedio",
|
||||
"bench.detail.labels.averageCost": "Costo Promedio",
|
||||
"bench.detail.labels.summary": "Resumen",
|
||||
"bench.detail.labels.runs": "Ejecuciones",
|
||||
"bench.detail.labels.score": "Puntuación",
|
||||
"bench.detail.labels.base": "Base",
|
||||
"bench.detail.labels.penalty": "Penalización",
|
||||
"bench.detail.labels.weight": "peso",
|
||||
"bench.detail.table.run": "Ejecución",
|
||||
"bench.detail.table.score": "Puntuación (Base - Penalización)",
|
||||
"bench.detail.table.cost": "Costo",
|
||||
"bench.detail.table.duration": "Duración",
|
||||
"bench.detail.run.title": "Ejecución {{n}}",
|
||||
"bench.detail.rawJson": "JSON Crudo",
|
||||
} as const satisfies Dict
|
||||
|
||||
@@ -27,360 +27,370 @@ export const dict = {
|
||||
"footer.x": "X",
|
||||
|
||||
"legal.brand": "Marque",
|
||||
"legal.privacy": "Confidentialite",
|
||||
"legal.privacy": "Confidentialité",
|
||||
"legal.terms": "Conditions",
|
||||
|
||||
"email.title": "Soyez le premier a etre informe lorsque nous sortons de nouveaux produits",
|
||||
"email.subtitle": "Inscrivez-vous a la liste d'attente pour un acces anticipe.",
|
||||
"email.title": "Soyez le premier à être informé de nos nouveaux produits",
|
||||
"email.subtitle": "Inscrivez-vous à la liste d'attente pour un accès anticipé.",
|
||||
"email.placeholder": "Adresse e-mail",
|
||||
"email.subscribe": "S'abonner",
|
||||
"email.success": "Presque termine - verifiez votre boite de reception et confirmez votre adresse e-mail",
|
||||
"email.success": "Presque terminé - vérifiez votre boîte de réception et confirmez votre adresse e-mail",
|
||||
|
||||
"notFound.title": "Introuvable | opencode",
|
||||
"notFound.title": "Introuvable | OpenCode",
|
||||
"notFound.heading": "404 - Page introuvable",
|
||||
"notFound.home": "Accueil",
|
||||
"notFound.docs": "Documentation",
|
||||
"notFound.github": "GitHub",
|
||||
"notFound.discord": "Discord",
|
||||
|
||||
"user.logout": "Se deconnecter",
|
||||
"user.logout": "Se déconnecter",
|
||||
|
||||
"workspace.select": "Choisir un espace de travail",
|
||||
"workspace.createNew": "+ Creer un nouvel espace",
|
||||
"workspace.modal.title": "Creer un nouvel espace",
|
||||
"workspace.select": "Sélectionner un espace de travail",
|
||||
"workspace.createNew": "+ Créer un nouvel espace",
|
||||
"workspace.modal.title": "Créer un nouvel espace",
|
||||
"workspace.modal.placeholder": "Saisir le nom de l'espace",
|
||||
|
||||
"common.cancel": "Annuler",
|
||||
"common.creating": "Creation...",
|
||||
"common.create": "Creer",
|
||||
"common.creating": "Création...",
|
||||
"common.create": "Créer",
|
||||
|
||||
"common.videoUnsupported": "Votre navigateur ne prend pas en charge la balise video.",
|
||||
"common.videoUnsupported": "Votre navigateur ne prend pas en charge la balise vidéo.",
|
||||
"common.figure": "Fig {{n}}.",
|
||||
"common.faq": "FAQ",
|
||||
"common.learnMore": "En savoir plus",
|
||||
|
||||
"error.invalidPlan": "Forfait invalide",
|
||||
"error.workspaceRequired": "L'ID de l'espace de travail est requis",
|
||||
"error.alreadySubscribed": "Cet espace de travail a déjà un abonnement",
|
||||
"error.limitRequired": "La limite est requise.",
|
||||
"error.monthlyLimitInvalid": "Définissez une limite mensuelle valide.",
|
||||
"error.workspaceNameRequired": "Le nom de l'espace de travail est requis.",
|
||||
"error.nameTooLong": "Le nom doit comporter 255 caractères ou moins.",
|
||||
"error.emailRequired": "L'e-mail est requis",
|
||||
"error.roleRequired": "Le rôle est requis",
|
||||
"error.idRequired": "L'ID est requis",
|
||||
"error.nameRequired": "Le nom est requis",
|
||||
"error.providerRequired": "Le fournisseur est requis",
|
||||
"error.apiKeyRequired": "La clé API est requise",
|
||||
"error.modelRequired": "Le modèle est requis",
|
||||
"error.reloadAmountMin": "Le montant de recharge doit être d'au moins {{amount}} $",
|
||||
"error.reloadTriggerMin": "Le seuil de déclenchement doit être d'au moins {{amount}} $",
|
||||
|
||||
"home.title": "OpenCode | L'agent de code IA open source",
|
||||
|
||||
"temp.title": "OpenCode | Agent de code IA conçu pour le terminal",
|
||||
"temp.hero.title": "L'agent de code IA conçu pour le terminal",
|
||||
"temp.zen": "OpenCode Zen",
|
||||
"temp.getStarted": "Commencer",
|
||||
"temp.feature.native.title": "TUI Native",
|
||||
"temp.feature.native.body": "Une interface terminal native, réactive et thémable",
|
||||
"temp.feature.zen.beforeLink": "Une",
|
||||
"temp.feature.zen.link": "liste organisée de modèles",
|
||||
"temp.feature.zen.afterLink": "fournie par OpenCode",
|
||||
"temp.feature.models.beforeLink": "Prend en charge plus de 75 fournisseurs LLM via",
|
||||
"temp.feature.models.afterLink": ", y compris les modèles locaux",
|
||||
"temp.screenshot.caption": "OpenCode TUI avec le thème tokyonight",
|
||||
"temp.screenshot.alt": "OpenCode TUI avec le thème tokyonight",
|
||||
|
||||
"home.banner.badge": "Nouveau",
|
||||
"home.banner.text": "Application desktop disponible en beta",
|
||||
"home.banner.text": "Application desktop disponible en bêta",
|
||||
"home.banner.platforms": "sur macOS, Windows et Linux",
|
||||
"home.banner.downloadNow": "Telecharger maintenant",
|
||||
"home.banner.downloadBetaNow": "Telecharger la beta desktop maintenant",
|
||||
"home.banner.downloadNow": "Télécharger maintenant",
|
||||
"home.banner.downloadBetaNow": "Télécharger la bêta desktop maintenant",
|
||||
|
||||
"home.hero.title": "L'agent de code IA open source",
|
||||
"home.hero.subtitle.a":
|
||||
"Modeles gratuits inclus ou connectez n'importe quel modele depuis n'importe quel fournisseur,",
|
||||
"Modèles gratuits inclus ou connectez n'importe quel modèle depuis n'importe quel fournisseur,",
|
||||
"home.hero.subtitle.b": "dont Claude, GPT, Gemini et plus.",
|
||||
|
||||
"home.install.ariaLabel": "Options d'installation",
|
||||
|
||||
"home.what.title": "Qu'est-ce que OpenCode?",
|
||||
"home.what.title": "Qu'est-ce que OpenCode ?",
|
||||
"home.what.body":
|
||||
"OpenCode est un agent open source qui vous aide a ecrire du code dans votre terminal, IDE ou desktop.",
|
||||
"home.what.lsp.title": "LSP active",
|
||||
"OpenCode est un agent open source qui vous aide à écrire du code dans votre terminal, IDE ou desktop.",
|
||||
"home.what.lsp.title": "LSP activé",
|
||||
"home.what.lsp.body": "Charge automatiquement les bons LSP pour le LLM",
|
||||
"home.what.multiSession.title": "Multi-session",
|
||||
"home.what.multiSession.body": "Lancez plusieurs agents en parallele sur le meme projet",
|
||||
"home.what.multiSession.body": "Lancez plusieurs agents en parallèle sur le même projet",
|
||||
"home.what.shareLinks.title": "Liens de partage",
|
||||
"home.what.shareLinks.body": "Partagez un lien vers n'importe quelle session pour reference ou debug",
|
||||
"home.what.shareLinks.body": "Partagez un lien vers n'importe quelle session pour référence ou debug",
|
||||
"home.what.copilot.title": "GitHub Copilot",
|
||||
"home.what.copilot.body": "Connectez-vous avec GitHub pour utiliser votre compte Copilot",
|
||||
"home.what.chatgptPlus.title": "ChatGPT Plus/Pro",
|
||||
"home.what.chatgptPlus.body": "Connectez-vous avec OpenAI pour utiliser votre compte ChatGPT Plus ou Pro",
|
||||
"home.what.anyModel.title": "N'importe quel modele",
|
||||
"home.what.anyModel.body": "75+ fournisseurs de LLM via Models.dev, y compris des modeles locaux",
|
||||
"home.what.anyEditor.title": "N'importe quel editeur",
|
||||
"home.what.anyModel.title": "N'importe quel modèle",
|
||||
"home.what.anyModel.body": "75+ fournisseurs de LLM via Models.dev, y compris des modèles locaux",
|
||||
"home.what.anyEditor.title": "N'importe quel éditeur",
|
||||
"home.what.anyEditor.body": "Disponible en interface terminal, application desktop et extension IDE",
|
||||
"home.what.readDocs": "Lire la doc",
|
||||
|
||||
"home.growth.title": "L'agent de code IA open source",
|
||||
"home.growth.body":
|
||||
"Avec plus de <strong>{{stars}}</strong> etoiles sur GitHub, <strong>{{contributors}}</strong> contributeurs et plus de <strong>{{commits}}</strong> commits, OpenCode est utilise et approuve par plus de <strong>{{monthlyUsers}}</strong> developpeurs chaque mois.",
|
||||
"home.growth.githubStars": "Etoiles GitHub",
|
||||
"Avec plus de <strong>{{stars}}</strong> étoiles sur GitHub, <strong>{{contributors}}</strong> contributeurs et plus de <strong>{{commits}}</strong> commits, OpenCode est utilisé et approuvé par plus de <strong>{{monthlyUsers}}</strong> développeurs chaque mois.",
|
||||
"home.growth.githubStars": "Étoiles GitHub",
|
||||
"home.growth.contributors": "Contributeurs",
|
||||
"home.growth.monthlyDevs": "Devs mensuels",
|
||||
|
||||
"home.privacy.title": "Concu pour la confidentialite",
|
||||
"home.privacy.title": "Conçu pour la confidentialité",
|
||||
"home.privacy.body":
|
||||
"OpenCode ne stocke ni votre code ni vos donnees de contexte, afin de pouvoir fonctionner dans des environnements sensibles a la confidentialite.",
|
||||
"OpenCode ne stocke ni votre code ni vos données de contexte, afin de pouvoir fonctionner dans des environnements sensibles à la confidentialité.",
|
||||
"home.privacy.learnMore": "En savoir plus sur",
|
||||
"home.privacy.link": "la confidentialite",
|
||||
"home.privacy.link": "la confidentialité",
|
||||
|
||||
"home.faq.q1": "Qu'est-ce que OpenCode?",
|
||||
"home.faq.q1": "Qu'est-ce que OpenCode ?",
|
||||
"home.faq.a1":
|
||||
"OpenCode est un agent open source qui vous aide a ecrire et executer du code avec n'importe quel modele d'IA. Il est disponible en interface terminal, application desktop ou extension IDE.",
|
||||
"home.faq.q2": "Comment utiliser OpenCode?",
|
||||
"OpenCode est un agent open source qui vous aide à écrire et exécuter du code avec n'importe quel modèle d'IA. Il est disponible en interface terminal, application desktop ou extension IDE.",
|
||||
"home.faq.q2": "Comment utiliser OpenCode ?",
|
||||
"home.faq.a2.before": "Le moyen le plus simple de commencer est de lire l'",
|
||||
"home.faq.a2.link": "intro",
|
||||
"home.faq.q3": "Ai-je besoin d'abonnements IA supplementaires pour utiliser OpenCode?",
|
||||
"home.faq.q3": "Ai-je besoin d'abonnements IA supplémentaires pour utiliser OpenCode ?",
|
||||
"home.faq.a3.p1":
|
||||
"Pas forcement: OpenCode propose des modeles gratuits que vous pouvez utiliser sans creer de compte.",
|
||||
"home.faq.a3.p2.beforeZen": "En plus, vous pouvez utiliser des modeles populaires pour le code en creant un compte",
|
||||
"Pas forcément : OpenCode propose des modèles gratuits que vous pouvez utiliser sans créer de compte.",
|
||||
"home.faq.a3.p2.beforeZen": "En plus, vous pouvez utiliser des modèles populaires pour le code en créant un compte",
|
||||
"home.faq.a3.p2.afterZen": ".",
|
||||
"home.faq.a3.p3":
|
||||
"Nous encourageons l'utilisation de Zen, mais OpenCode fonctionne aussi avec les fournisseurs populaires comme OpenAI, Anthropic, xAI, etc.",
|
||||
"home.faq.a3.p4.beforeLocal": "Vous pouvez meme connecter vos",
|
||||
"home.faq.a3.p4.localLink": "modeles locaux",
|
||||
"home.faq.q4": "Puis-je utiliser mes abonnements IA existants avec OpenCode?",
|
||||
"home.faq.a3.p4.beforeLocal": "Vous pouvez même connecter vos",
|
||||
"home.faq.a3.p4.localLink": "modèles locaux",
|
||||
"home.faq.q4": "Puis-je utiliser mes abonnements IA existants avec OpenCode ?",
|
||||
"home.faq.a4.p1":
|
||||
"Oui, OpenCode prend en charge les abonnements des principaux fournisseurs. Vous pouvez utiliser Claude Pro/Max, ChatGPT Plus/Pro ou GitHub Copilot.",
|
||||
"home.faq.q5": "Puis-je utiliser OpenCode uniquement dans le terminal?",
|
||||
"home.faq.a5.beforeDesktop": "Plus maintenant! OpenCode est desormais disponible en application pour",
|
||||
"home.faq.q5": "Puis-je utiliser OpenCode uniquement dans le terminal ?",
|
||||
"home.faq.a5.beforeDesktop": "Plus maintenant ! OpenCode est désormais disponible en application pour",
|
||||
"home.faq.a5.desktop": "desktop",
|
||||
"home.faq.a5.and": "et",
|
||||
"home.faq.a5.web": "web",
|
||||
"home.faq.q6": "Combien coute OpenCode?",
|
||||
"home.faq.q6": "Combien coûte OpenCode ?",
|
||||
"home.faq.a6":
|
||||
"OpenCode est 100% gratuit. Il inclut aussi des modeles gratuits. Des couts supplementaires peuvent s'appliquer si vous connectez un autre fournisseur.",
|
||||
"home.faq.q7": "Qu'en est-il des donnees et de la confidentialite?",
|
||||
"OpenCode est 100% gratuit. Il inclut aussi des modèles gratuits. Des coûts supplémentaires peuvent s'appliquer si vous connectez un autre fournisseur.",
|
||||
"home.faq.q7": "Qu'en est-il des données et de la confidentialité ?",
|
||||
"home.faq.a7.p1":
|
||||
"Vos donnees ne sont stockees que lorsque vous utilisez nos modeles gratuits ou creez des liens partageables.",
|
||||
"Vos données ne sont stockées que lorsque vous utilisez nos modèles gratuits ou créez des liens partageables.",
|
||||
"home.faq.a7.p2.beforeModels": "En savoir plus sur",
|
||||
"home.faq.a7.p2.modelsLink": "nos modeles",
|
||||
"home.faq.a7.p2.modelsLink": "nos modèles",
|
||||
"home.faq.a7.p2.and": "et",
|
||||
"home.faq.a7.p2.shareLink": "les pages de partage",
|
||||
"home.faq.q8": "OpenCode est-il open source?",
|
||||
"home.faq.a8.p1": "Oui, OpenCode est entierement open source. Le code source est public sur",
|
||||
"home.faq.q8": "OpenCode est-il open source ?",
|
||||
"home.faq.a8.p1": "Oui, OpenCode est entièrement open source. Le code source est public sur",
|
||||
"home.faq.a8.p2": "sous la",
|
||||
"home.faq.a8.mitLicense": "Licence MIT",
|
||||
"home.faq.a8.p3":
|
||||
", ce qui signifie que tout le monde peut l'utiliser, le modifier ou contribuer a son developpement. Toute personne de la communaute peut ouvrir des issues, soumettre des pull requests et etendre les fonctionnalites.",
|
||||
", ce qui signifie que tout le monde peut l'utiliser, le modifier ou contribuer à son développement. Toute personne de la communauté peut ouvrir des tickets, soumettre des pull requests et étendre les fonctionnalités.",
|
||||
|
||||
"home.zenCta.title": "Accedez a des modeles fiables et optimises pour les agents de code",
|
||||
"home.zenCta.title": "Accédez à des modèles fiables et optimisés pour les agents de code",
|
||||
"home.zenCta.body":
|
||||
"Zen vous donne acces a un ensemble selectionne de modeles d'IA que OpenCode a testes et benchmarkes specifiquement pour les agents de code. Plus besoin de vous soucier des variations de performance et de qualite selon les fournisseurs: utilisez des modeles valides qui fonctionnent.",
|
||||
"Zen vous donne accès à un ensemble sélectionné de modèles d'IA que OpenCode a testés et benchmarkés spécifiquement pour les agents de code. Plus besoin de vous soucier des variations de performance et de qualité selon les fournisseurs : utilisez des modèles validés qui fonctionnent.",
|
||||
"home.zenCta.link": "En savoir plus sur Zen",
|
||||
|
||||
"download.title": "OpenCode | Telechargement",
|
||||
|
||||
"zen.title": "OpenCode Zen | Un ensemble selectionne de modeles fiables et optimises pour les agents de code",
|
||||
"zen.hero.title": "Accedez a des modeles fiables et optimises pour les agents de code",
|
||||
"zen.title": "OpenCode Zen | Un ensemble sélectionné de modèles fiables et optimisés pour les agents de code",
|
||||
"zen.hero.title": "Modèles fiables et optimisés pour les agents de code",
|
||||
"zen.hero.body":
|
||||
"Zen vous donne acces a un ensemble selectionne de modeles d'IA que OpenCode a testes et benchmarkes specifiquement pour les agents de code. Plus besoin de vous soucier des variations de performance et de qualite selon les fournisseurs: utilisez des modeles valides qui fonctionnent.",
|
||||
"Zen vous donne accès à un ensemble sélectionné de modèles d'IA que OpenCode a testés et benchmarkés spécifiquement pour les agents de code. Plus besoin de vous soucier des variations de performance et de qualité selon les fournisseurs : utilisez des modèles validés qui fonctionnent.",
|
||||
|
||||
"zen.faq.q1": "Qu'est-ce que OpenCode Zen?",
|
||||
"zen.faq.q1": "Qu'est-ce que OpenCode Zen ?",
|
||||
"zen.faq.a1":
|
||||
"Zen est un ensemble selectionne de modeles d'IA testes et benchmarkes pour les agents de code, cree par l'equipe derriere OpenCode.",
|
||||
"zen.faq.q2": "Qu'est-ce qui rend Zen plus precis?",
|
||||
"Zen est un ensemble sélectionné de modèles d'IA testés et benchmarkés pour les agents de code, créé par l'équipe derrière OpenCode.",
|
||||
"zen.faq.q2": "Qu'est-ce qui rend Zen plus précis ?",
|
||||
"zen.faq.a2":
|
||||
"Zen ne propose que des modeles testes et benchmarkes specifiquement pour les agents de code. Vous n'utiliseriez pas un couteau a beurre pour couper un steak; n'utilisez pas de mauvais modeles pour coder.",
|
||||
"zen.faq.q3": "Zen est-il moins cher?",
|
||||
"Zen ne propose que des modèles testés et benchmarkés spécifiquement pour les agents de code. Vous n'utiliseriez pas un couteau à beurre pour couper un steak ; n'utilisez pas de mauvais modèles pour coder.",
|
||||
"zen.faq.q3": "Zen est-il moins cher ?",
|
||||
"zen.faq.a3":
|
||||
"Zen n'est pas a but lucratif. Zen vous facture au prix coutant des fournisseurs de modeles. Plus Zen est utilise, plus OpenCode peut negocier de meilleurs tarifs et vous les repercuter.",
|
||||
"zen.faq.q4": "Combien coute Zen?",
|
||||
"Zen n'est pas à but lucratif. Zen vous facture au prix coûtant des fournisseurs de modèles. Plus Zen est utilisé, plus OpenCode peut négocier de meilleurs tarifs et vous les répercuter.",
|
||||
"zen.faq.q4": "Combien coûte Zen ?",
|
||||
"zen.faq.a4.p1.beforePricing": "Zen",
|
||||
"zen.faq.a4.p1.pricingLink": "facture par requete",
|
||||
"zen.faq.a4.p1.afterPricing": "sans marge, vous payez donc exactement ce que facture le fournisseur du modele.",
|
||||
"zen.faq.a4.p1.pricingLink": "facture par requête",
|
||||
"zen.faq.a4.p1.afterPricing": "sans marge, vous payez donc exactement ce que facture le fournisseur du modèle.",
|
||||
"zen.faq.a4.p2.beforeAccount":
|
||||
"Votre cout total depend de l'usage, et vous pouvez definir des limites de depense mensuelles dans votre",
|
||||
"Votre coût total dépend de l'usage, et vous pouvez définir des limites de dépense mensuelles dans votre",
|
||||
"zen.faq.a4.p2.accountLink": "compte",
|
||||
"zen.faq.a4.p3":
|
||||
"Pour couvrir les frais, OpenCode ajoute uniquement de petits frais de traitement de paiement de $1.23 par recharge de $20.",
|
||||
"zen.faq.q5": "Et pour les donnees et la confidentialite?",
|
||||
"Pour couvrir les coûts, OpenCode ajoute uniquement de petits frais de traitement de paiement de 1,23 $ par recharge de 20 $.",
|
||||
"zen.faq.q5": "Et pour les données et la confidentialité ?",
|
||||
"zen.faq.a5.beforeExceptions":
|
||||
"Tous les modeles Zen sont heberges aux Etats-Unis. Les fournisseurs appliquent une politique de zero retention et n'utilisent pas vos donnees pour l'entrainement des modeles, avec les",
|
||||
"Tous les modèles Zen sont hébergés aux États-Unis. Les fournisseurs appliquent une politique de rétention zéro et n'utilisent pas vos données pour l'entraînement des modèles, avec les",
|
||||
"zen.faq.a5.exceptionsLink": "exceptions suivantes",
|
||||
"zen.faq.q6": "Puis-je definir des limites de depense?",
|
||||
"zen.faq.a6": "Oui, vous pouvez definir des limites de depense mensuelles dans votre compte.",
|
||||
"zen.faq.q7": "Puis-je annuler?",
|
||||
"zen.faq.a7": "Oui, vous pouvez desactiver la facturation a tout moment et utiliser votre solde restant.",
|
||||
"zen.faq.q8": "Puis-je utiliser Zen avec d'autres agents de code?",
|
||||
"zen.faq.q6": "Puis-je définir des limites de dépense ?",
|
||||
"zen.faq.a6": "Oui, vous pouvez définir des limites de dépense mensuelles dans votre compte.",
|
||||
"zen.faq.q7": "Puis-je annuler ?",
|
||||
"zen.faq.a7": "Oui, vous pouvez désactiver la facturation à tout moment et utiliser votre solde restant.",
|
||||
"zen.faq.q8": "Puis-je utiliser Zen avec d'autres agents de code ?",
|
||||
"zen.faq.a8":
|
||||
"Zen fonctionne tres bien avec OpenCode, mais vous pouvez utiliser Zen avec n'importe quel agent. Suivez les instructions de configuration dans votre agent prefere.",
|
||||
"Zen fonctionne très bien avec OpenCode, mais vous pouvez utiliser Zen avec n'importe quel agent. Suivez les instructions de configuration dans votre agent préféré.",
|
||||
|
||||
"zen.cta.start": "Commencez avec Zen",
|
||||
"zen.pricing.title": "Ajoutez 20 $ de solde Pay as you go",
|
||||
"zen.pricing.fee": "(+1,23 $ de frais de traitement de carte)",
|
||||
"zen.pricing.body":
|
||||
"À utiliser avec n'importe quel agent. Fixez des limites de dépenses mensuelles. Annulez à tout moment.",
|
||||
"Utilisez avec n'importe quel agent. Fixez des limites de dépenses mensuelles. Annulez à tout moment.",
|
||||
"zen.problem.title": "Quel problème Zen résout-il ?",
|
||||
"zen.problem.body":
|
||||
"Il existe de nombreux modèles disponibles, mais seuls quelques-uns fonctionnent bien avec les agents de codage. La plupart des fournisseurs les configurent différemment avec des résultats variables.",
|
||||
"Il existe de nombreux modèles disponibles, mais seuls quelques-uns fonctionnent bien avec les agents de code. La plupart des fournisseurs les configurent différemment avec des résultats variables.",
|
||||
"zen.problem.subtitle":
|
||||
"Nous résolvons ce problème pour tout le monde, pas seulement pour les utilisateurs de OpenCode.",
|
||||
"zen.problem.item1": "Tester les modèles sélectionnés et consulter leurs équipes",
|
||||
"zen.problem.item2": "Travailler avec les fournisseurs pour garantir qu'ils sont livrés correctement",
|
||||
"zen.problem.item3": "Analyse comparative de toutes les combinaisons modèle-fournisseur que nous recommandons",
|
||||
"zen.problem.item1": "Test des modèles sélectionnés et consultation de leurs équipes",
|
||||
"zen.problem.item2": "Collaboration avec les fournisseurs pour garantir une livraison correcte",
|
||||
"zen.problem.item3": "Benchmark de toutes les combinaisons modèle-fournisseur que nous recommandons",
|
||||
"zen.how.title": "Comment fonctionne Zen",
|
||||
"zen.how.body":
|
||||
"Bien que nous vous suggérions d'utiliser Zen avec OpenCode, vous pouvez utiliser Zen avec n'importe quel agent.",
|
||||
"zen.how.step1.title": "Inscrivez-vous et ajoutez un solde de 20 $",
|
||||
"zen.how.step1.beforeLink": "suivre le",
|
||||
"zen.how.step1.beforeLink": "suivez les",
|
||||
"zen.how.step1.link": "instructions de configuration",
|
||||
"zen.how.step2.title": "Utilisez Zen avec une tarification transparente",
|
||||
"zen.how.step2.link": "payer par demande",
|
||||
"zen.how.step2.afterLink": "avec zéro majoration",
|
||||
"zen.how.step2.link": "payez par requête",
|
||||
"zen.how.step2.afterLink": "sans marge",
|
||||
"zen.how.step3.title": "Recharge automatique",
|
||||
"zen.how.step3.body": "lorsque votre solde atteint 5 $, nous ajouterons automatiquement 20 $",
|
||||
"zen.privacy.title": "Votre vie privée est importante pour nous",
|
||||
"zen.privacy.beforeExceptions":
|
||||
"Tous les modèles Zen sont hébergés aux États-Unis. Les fournisseurs suivent une politique de rétention zéro et n'utilisent pas vos données pour la formation de modèles, avec le",
|
||||
"Tous les modèles Zen sont hébergés aux États-Unis. Les fournisseurs suivent une politique de rétention zéro et n'utilisent pas vos données pour l'entraînement des modèles, avec les",
|
||||
"zen.privacy.exceptionsLink": "exceptions suivantes",
|
||||
"download.meta.description": "Telechargez OpenCode pour macOS, Windows et Linux",
|
||||
"download.hero.title": "Telecharger OpenCode",
|
||||
"download.hero.subtitle": "Disponible en beta pour macOS, Windows et Linux",
|
||||
"download.hero.button": "Telecharger pour {{os}}",
|
||||
"download.section.terminal": "OpenCode Terminal",
|
||||
"download.section.desktop": "OpenCode Desktop (Beta)",
|
||||
"download.section.extensions": "Extensions OpenCode",
|
||||
"download.section.integrations": "Integrations OpenCode",
|
||||
"download.action.download": "Telecharger",
|
||||
"download.action.install": "Installer",
|
||||
|
||||
"download.platform.macosAppleSilicon": "macOS (Apple Silicon)",
|
||||
"download.platform.macosIntel": "macOS (Intel)",
|
||||
"download.platform.windowsX64": "Windows (x64)",
|
||||
"download.platform.linuxDeb": "Linux (.deb)",
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
"black.meta.title": "OpenCode Black | Accédez aux meilleurs modèles de code au monde",
|
||||
"black.meta.description": "Accédez à Claude, GPT, Gemini et plus avec les forfaits d'abonnement OpenCode Black.",
|
||||
"black.hero.title": "Accédez aux meilleurs modèles de code au monde",
|
||||
"black.hero.subtitle": "Y compris Claude, GPT, Gemini et plus",
|
||||
"black.title": "OpenCode Black | Tarification",
|
||||
"black.plan.icon20": "Forfait Black 20",
|
||||
"black.plan.icon100": "Forfait Black 100",
|
||||
"black.plan.icon200": "Forfait Black 200",
|
||||
"black.plan.multiplier100": "5x plus d'utilisation que Black 20",
|
||||
"black.plan.multiplier200": "20x plus d'utilisation que Black 20",
|
||||
"black.price.perMonth": "par mois",
|
||||
"black.price.perPersonBilledMonthly": "par personne facturé mensuellement",
|
||||
"black.terms.1": "Votre abonnement ne commencera pas immédiatement",
|
||||
"black.terms.2": "Vous serez ajouté à la liste d'attente et activé bientôt",
|
||||
"black.terms.3": "Votre carte ne sera débitée que lorsque votre abonnement sera activé",
|
||||
"black.terms.4":
|
||||
"Des limites d'utilisation s'appliquent, une utilisation fortement automatisée peut atteindre les limites plus tôt",
|
||||
"black.terms.5": "Les abonnements sont pour les individus, contactez Enterprise pour les équipes",
|
||||
"black.terms.6": "Les limites peuvent être ajustées et les forfaits peuvent être interrompus à l'avenir",
|
||||
"black.terms.7": "Annulez votre abonnement à tout moment",
|
||||
"black.action.continue": "Continuer",
|
||||
"black.finePrint.beforeTerms": "Les prix affichés n'incluent pas les taxes applicables",
|
||||
"black.finePrint.terms": "Conditions d'utilisation",
|
||||
"black.workspace.title": "OpenCode Black | Sélectionner un espace de travail",
|
||||
"black.workspace.selectPlan": "Sélectionnez un espace de travail pour ce forfait",
|
||||
"black.workspace.name": "Espace de travail {{n}}",
|
||||
"black.subscribe.title": "S'abonner à OpenCode Black",
|
||||
"black.subscribe.paymentMethod": "Méthode de paiement",
|
||||
"black.subscribe.loadingPaymentForm": "Chargement du formulaire de paiement...",
|
||||
"black.subscribe.selectWorkspaceToContinue": "Sélectionnez un espace de travail pour continuer",
|
||||
"black.subscribe.failurePrefix": "Oh oh !",
|
||||
"black.subscribe.error.generic": "Une erreur est survenue",
|
||||
"black.subscribe.error.invalidPlan": "Forfait invalide",
|
||||
"black.subscribe.error.workspaceRequired": "L'ID de l'espace de travail est requis",
|
||||
"black.subscribe.error.alreadySubscribed": "Cet espace de travail a déjà un abonnement",
|
||||
"black.subscribe.processing": "Traitement...",
|
||||
"black.subscribe.submit": "S'abonner ${{plan}}",
|
||||
"black.subscribe.form.chargeNotice": "Vous ne serez débité que lorsque votre abonnement sera activé",
|
||||
"black.subscribe.success.title": "Vous êtes sur la liste d'attente OpenCode Black",
|
||||
"black.subscribe.success.subscriptionPlan": "Forfait d'abonnement",
|
||||
"black.subscribe.success.planName": "OpenCode Black {{plan}}",
|
||||
"black.subscribe.success.amount": "Montant",
|
||||
"black.subscribe.success.amountValue": "{{plan}} $ par mois",
|
||||
"black.subscribe.success.paymentMethod": "Méthode de paiement",
|
||||
"black.subscribe.success.dateJoined": "Date d'inscription",
|
||||
"black.subscribe.success.chargeNotice": "Votre carte sera débitée lorsque votre abonnement sera activé",
|
||||
|
||||
"download.faq.a3.beforeLocal":
|
||||
"Pas forcement, mais probablement. Vous aurez besoin d'un abonnement IA si vous voulez connecter OpenCode a un fournisseur payant, mais vous pouvez travailler avec",
|
||||
"download.faq.a3.localLink": "des modeles locaux",
|
||||
"download.faq.a3.afterLocal.beforeZen": "gratuitement. Meme si nous encourageons les utilisateurs a utiliser",
|
||||
"download.faq.a3.afterZen":
|
||||
", OpenCode fonctionne avec tous les fournisseurs populaires comme OpenAI, Anthropic, xAI, etc.",
|
||||
|
||||
"download.faq.a5.p1": "OpenCode est 100% gratuit a utiliser.",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"Les couts supplementaires viendront de votre abonnement a un fournisseur de modele. Meme si OpenCode fonctionne avec n'importe quel fournisseur, nous recommandons d'utiliser",
|
||||
"download.faq.a5.p2.afterZen": ".",
|
||||
|
||||
"download.faq.a6.p1":
|
||||
"Vos donnees et informations ne sont stockees que lorsque vous creez des liens partageables dans OpenCode.",
|
||||
"download.faq.a6.p2.beforeShare": "En savoir plus sur",
|
||||
"download.faq.a6.shareLink": "les pages de partage",
|
||||
|
||||
"enterprise.title": "OpenCode | Solutions entreprise pour votre organisation",
|
||||
"enterprise.meta.description": "Contactez OpenCode pour des solutions entreprise",
|
||||
"enterprise.hero.title": "Votre code vous appartient",
|
||||
"enterprise.hero.body1":
|
||||
"OpenCode fonctionne de maniere securisee au sein de votre organisation, sans stocker de donnees ni de contexte, et sans restrictions de licence ni revendications de propriete. Demarrez un essai avec votre equipe, puis deployeez-le dans votre organisation en l'integrant a votre SSO et a votre passerelle IA interne.",
|
||||
"enterprise.hero.body2": "Dites-nous comment nous pouvons vous aider.",
|
||||
"enterprise.form.name.label": "Nom complet",
|
||||
"enterprise.form.name.placeholder": "Jeff Bezos",
|
||||
"enterprise.form.role.label": "Poste",
|
||||
"enterprise.form.role.placeholder": "President executif",
|
||||
"enterprise.form.email.label": "E-mail professionnel",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "Quel probleme essayez-vous de resoudre?",
|
||||
"enterprise.form.message.placeholder": "Nous avons besoin d'aide pour...",
|
||||
"enterprise.form.send": "Envoyer",
|
||||
"enterprise.form.sending": "Envoi...",
|
||||
"enterprise.form.success": "Message envoye, nous vous contacterons bientot.",
|
||||
"enterprise.faq.title": "FAQ",
|
||||
"enterprise.faq.q1": "Qu'est-ce que OpenCode Enterprise?",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise s'adresse aux organisations qui veulent s'assurer que leur code et leurs donnees ne quittent jamais leur infrastructure. Cela est possible grace a une configuration centralisee qui s'integre a votre SSO et a votre passerelle IA/LLM interne.",
|
||||
"enterprise.faq.q2": "Comment demarrer avec OpenCode Enterprise?",
|
||||
"enterprise.faq.a2":
|
||||
"Commencez simplement par un essai interne avec votre equipe. Par defaut, OpenCode ne stocke pas votre code ni vos donnees de contexte, ce qui facilite la prise en main. Ensuite, contactez-nous pour discuter des tarifs et des options de mise en oeuvre.",
|
||||
"enterprise.faq.q3": "Comment fonctionne la tarification entreprise?",
|
||||
"enterprise.faq.a3":
|
||||
"Nous proposons une tarification entreprise par siege. Si vous avez votre propre passerelle LLM, nous ne facturons pas les tokens utilises. Pour plus de details, contactez-nous pour un devis sur mesure en fonction des besoins de votre organisation.",
|
||||
"enterprise.faq.q4": "Mes donnees sont-elles securisees avec OpenCode Enterprise?",
|
||||
"enterprise.faq.a4":
|
||||
"Oui. OpenCode ne stocke pas votre code ni vos donnees de contexte. Tout le traitement se fait localement ou via des appels API directs vers votre fournisseur d'IA. Avec une configuration centralisee et une integration SSO, vos donnees restent securisees au sein de votre infrastructure.",
|
||||
|
||||
"brand.title": "OpenCode | Marque",
|
||||
"brand.meta.description": "Guide de marque OpenCode",
|
||||
"brand.heading": "Guide de marque",
|
||||
"brand.subtitle": "Ressources et elements pour vous aider a utiliser la marque OpenCode.",
|
||||
"brand.downloadAll": "Telecharger tous les assets",
|
||||
"changelog.title": "OpenCode | Changelog",
|
||||
"changelog.meta.description": "Notes de version et changelog d'OpenCode",
|
||||
"changelog.hero.title": "Changelog",
|
||||
"changelog.hero.subtitle": "Nouvelles mises a jour et ameliorations pour OpenCode",
|
||||
"changelog.empty": "Aucune entree de changelog trouvee.",
|
||||
"changelog.viewJson": "Voir le JSON",
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "Clés API",
|
||||
"workspace.nav.members": "Membres",
|
||||
"workspace.nav.billing": "Facturation",
|
||||
"workspace.nav.settings": "Paramètres",
|
||||
"workspace.home.banner.beforeLink": "Modèles optimisés fiables pour les agents de codage.",
|
||||
|
||||
"workspace.home.banner.beforeLink": "Modèles optimisés fiables pour les agents de code.",
|
||||
"workspace.home.billing.loading": "Chargement...",
|
||||
"workspace.home.billing.enable": "Activer la facturation",
|
||||
"workspace.home.billing.currentBalance": "Solde courant",
|
||||
"workspace.home.billing.currentBalance": "Solde actuel",
|
||||
|
||||
"workspace.newUser.feature.tested.title": "Modèles testés et vérifiés",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"Nous avons comparé et testé des modèles spécifiquement pour les agents de codage afin de garantir les meilleures performances.",
|
||||
"Nous avons benchmarké et testé des modèles spécifiquement pour les agents de code afin de garantir les meilleures performances.",
|
||||
"workspace.newUser.feature.quality.title": "La plus haute qualité",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"Modèles d'accès configurés pour des performances optimales - pas de rétrogradation ni de routage vers des fournisseurs moins chers.",
|
||||
"Accédez à des modèles configurés pour des performances optimales - pas de rétrogradation ni de routage vers des fournisseurs moins chers.",
|
||||
"workspace.newUser.feature.lockin.title": "Pas de verrouillage",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"Utilisez Zen avec n'importe quel agent de codage et continuez à utiliser d'autres fournisseurs avec opencode quand vous le souhaitez.",
|
||||
"Utilisez Zen avec n'importe quel agent de code et continuez à utiliser d'autres fournisseurs avec OpenCode quand vous le souhaitez.",
|
||||
"workspace.newUser.copyApiKey": "Copier la clé API",
|
||||
"workspace.newUser.copyKey": "Copier la clé",
|
||||
"workspace.newUser.copied": "Copié!",
|
||||
"workspace.newUser.copied": "Copié !",
|
||||
"workspace.newUser.step.enableBilling": "Activer la facturation",
|
||||
"workspace.newUser.step.login.before": "Courir",
|
||||
"workspace.newUser.step.login.after": "et sélectionnez opencode",
|
||||
"workspace.newUser.step.login.before": "Exécuter",
|
||||
"workspace.newUser.step.login.after": "et sélectionnez OpenCode",
|
||||
"workspace.newUser.step.pasteKey": "Collez votre clé API",
|
||||
"workspace.newUser.step.models.before": "Démarrez opencode et exécutez",
|
||||
"workspace.newUser.step.models.before": "Démarrez OpenCode et exécutez",
|
||||
"workspace.newUser.step.models.after": "pour sélectionner un modèle",
|
||||
|
||||
"workspace.models.title": "Modèles",
|
||||
"workspace.models.subtitle.beforeLink":
|
||||
"Gérez les modèles auxquels les membres de l’espace de travail peuvent accéder.",
|
||||
"Gérez les modèles auxquels les membres de l'espace de travail peuvent accéder.",
|
||||
"workspace.models.table.model": "Modèle",
|
||||
"workspace.models.table.enabled": "Activé",
|
||||
|
||||
"workspace.providers.title": "Apportez votre propre clé",
|
||||
"workspace.providers.subtitle": "Configurez vos propres clés API auprès des fournisseurs d'IA.",
|
||||
"workspace.providers.placeholder": "Entrez la clé {{provider}} API ({{prefix}}...)",
|
||||
"workspace.providers.placeholder": "Entrez la clé API {{provider}} ({{prefix}}...)",
|
||||
"workspace.providers.configure": "Configurer",
|
||||
"workspace.providers.edit": "Modifier",
|
||||
"workspace.providers.delete": "Supprimer",
|
||||
"workspace.providers.saving": "Économie...",
|
||||
"workspace.providers.save": "Sauvegarder",
|
||||
"workspace.providers.saving": "Enregistrement...",
|
||||
"workspace.providers.save": "Enregistrer",
|
||||
"workspace.providers.table.provider": "Fournisseur",
|
||||
"workspace.providers.table.apiKey": "Clé API",
|
||||
|
||||
"workspace.usage.title": "Historique d'utilisation",
|
||||
"workspace.usage.subtitle": "Utilisation et coûts récents de API.",
|
||||
"workspace.usage.empty": "Passez votre premier appel API pour commencer.",
|
||||
"workspace.usage.subtitle": "Utilisation récente de l'API et coûts.",
|
||||
"workspace.usage.empty": "Faites votre premier appel API pour commencer.",
|
||||
"workspace.usage.table.date": "Date",
|
||||
"workspace.usage.table.model": "Modèle",
|
||||
"workspace.usage.table.input": "Saisir",
|
||||
"workspace.usage.table.output": "Sortir",
|
||||
"workspace.usage.table.input": "Entrée",
|
||||
"workspace.usage.table.output": "Sortie",
|
||||
"workspace.usage.table.cost": "Coût",
|
||||
"workspace.usage.breakdown.input": "Saisir",
|
||||
"workspace.usage.breakdown.cacheRead": "Lecture du cache",
|
||||
"workspace.usage.breakdown.cacheWrite": "Écriture du cache",
|
||||
"workspace.usage.breakdown.output": "Sortir",
|
||||
"workspace.usage.breakdown.input": "Entrée",
|
||||
"workspace.usage.breakdown.cacheRead": "Lecture cache",
|
||||
"workspace.usage.breakdown.cacheWrite": "Écriture cache",
|
||||
"workspace.usage.breakdown.output": "Sortie",
|
||||
"workspace.usage.breakdown.reasoning": "Raisonnement",
|
||||
"workspace.usage.subscription": "abonnement (${{amount}})",
|
||||
"workspace.usage.subscription": "abonnement ({{amount}} $)",
|
||||
|
||||
"workspace.cost.title": "Coût",
|
||||
"workspace.cost.subtitle": "Coûts d'utilisation répartis par modèle.",
|
||||
"workspace.cost.allModels": "Tous les modèles",
|
||||
"workspace.cost.allKeys": "Toutes les clés",
|
||||
"workspace.cost.deletedSuffix": "(supprimé)",
|
||||
"workspace.cost.empty": "Aucune donnée d'utilisation disponible pour la période sélectionnée.",
|
||||
"workspace.cost.subscriptionShort": "sous",
|
||||
"workspace.cost.subscriptionShort": "abo",
|
||||
|
||||
"workspace.keys.title": "Clés API",
|
||||
"workspace.keys.subtitle": "Gérez vos clés API pour accéder aux services opencode.",
|
||||
"workspace.keys.subtitle": "Gérez vos clés API pour accéder aux services OpenCode.",
|
||||
"workspace.keys.create": "Créer une clé API",
|
||||
"workspace.keys.placeholder": "Entrez le nom de la clé",
|
||||
"workspace.keys.empty": "Créer une clé opencode Gateway API",
|
||||
"workspace.keys.empty": "Créer une clé API OpenCode Gateway",
|
||||
"workspace.keys.table.name": "Nom",
|
||||
"workspace.keys.table.key": "Clé",
|
||||
"workspace.keys.table.createdBy": "Créé par",
|
||||
"workspace.keys.table.lastUsed": "Dernière utilisation",
|
||||
"workspace.keys.copyApiKey": "Copier la clé API",
|
||||
"workspace.keys.delete": "Supprimer",
|
||||
|
||||
"workspace.members.title": "Membres",
|
||||
"workspace.members.subtitle": "Gérez les membres de l'espace de travail et leurs autorisations.",
|
||||
"workspace.members.invite": "Inviter un membre",
|
||||
"workspace.members.inviting": "Attrayant...",
|
||||
"workspace.members.inviting": "Invitation en cours...",
|
||||
"workspace.members.beta.beforeLink": "Les espaces de travail sont gratuits pour les équipes pendant la version bêta.",
|
||||
"workspace.members.form.invitee": "Invité",
|
||||
"workspace.members.form.emailPlaceholder": "Entrez l'e-mail",
|
||||
"workspace.members.form.role": "Rôle",
|
||||
"workspace.members.form.monthlyLimit": "Limite de dépenses mensuelle",
|
||||
"workspace.members.form.monthlyLimit": "Limite de dépense mensuelle",
|
||||
"workspace.members.noLimit": "Aucune limite",
|
||||
"workspace.members.noLimitLowercase": "pas de limite",
|
||||
"workspace.members.invited": "invité",
|
||||
"workspace.members.edit": "Modifier",
|
||||
"workspace.members.delete": "Supprimer",
|
||||
"workspace.members.saving": "Économie...",
|
||||
"workspace.members.save": "Sauvegarder",
|
||||
"workspace.members.saving": "Enregistrement...",
|
||||
"workspace.members.save": "Enregistrer",
|
||||
"workspace.members.table.email": "E-mail",
|
||||
"workspace.members.table.role": "Rôle",
|
||||
"workspace.members.table.monthLimit": "Limite mensuelle",
|
||||
@@ -388,35 +398,39 @@ export const dict = {
|
||||
"workspace.members.role.adminDescription": "Peut gérer les modèles, les membres et la facturation",
|
||||
"workspace.members.role.member": "Membre",
|
||||
"workspace.members.role.memberDescription": "Ne peut générer que des clés API pour lui-même",
|
||||
|
||||
"workspace.settings.title": "Paramètres",
|
||||
"workspace.settings.subtitle": "Mettez à jour le nom et les préférences de votre espace de travail.",
|
||||
"workspace.settings.workspaceName": "Nom de l'espace de travail",
|
||||
"workspace.settings.defaultName": "Défaut",
|
||||
"workspace.settings.updating": "Mise à jour...",
|
||||
"workspace.settings.save": "Sauvegarder",
|
||||
"workspace.settings.save": "Enregistrer",
|
||||
"workspace.settings.edit": "Modifier",
|
||||
|
||||
"workspace.billing.title": "Facturation",
|
||||
"workspace.billing.subtitle.beforeLink": "Gérer les méthodes de paiement.",
|
||||
"workspace.billing.contactUs": "Contactez-nous",
|
||||
"workspace.billing.subtitle.afterLink": "si vous avez des questions.",
|
||||
"workspace.billing.currentBalance": "Solde actuel",
|
||||
"workspace.billing.add": "Ajouter $",
|
||||
"workspace.billing.enterAmount": "Entrez le montant",
|
||||
"workspace.billing.enterAmount": "Saisir le montant",
|
||||
"workspace.billing.loading": "Chargement...",
|
||||
"workspace.billing.addAction": "Ajouter",
|
||||
"workspace.billing.addBalance": "Ajouter un solde",
|
||||
"workspace.billing.linkedToStripe": "Lié à Stripe",
|
||||
"workspace.billing.manage": "Gérer",
|
||||
"workspace.billing.enable": "Activer la facturation",
|
||||
|
||||
"workspace.monthlyLimit.title": "Limite mensuelle",
|
||||
"workspace.monthlyLimit.subtitle": "Définissez une limite d'utilisation mensuelle pour votre compte.",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "Paramètre...",
|
||||
"workspace.monthlyLimit.set": "Ensemble",
|
||||
"workspace.monthlyLimit.setting": "Définition...",
|
||||
"workspace.monthlyLimit.set": "Défini",
|
||||
"workspace.monthlyLimit.edit": "Modifier la limite",
|
||||
"workspace.monthlyLimit.noLimit": "Aucune limite d'utilisation définie.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "Utilisation actuelle pour",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "est $",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "L'utilisation actuelle pour",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "est de",
|
||||
|
||||
"workspace.reload.title": "Rechargement automatique",
|
||||
"workspace.reload.disabled.before": "Le rechargement automatique est",
|
||||
"workspace.reload.disabled.state": "désactivé",
|
||||
@@ -425,28 +439,30 @@ export const dict = {
|
||||
"workspace.reload.enabled.state": "activé",
|
||||
"workspace.reload.enabled.middle": "Nous rechargerons",
|
||||
"workspace.reload.processingFee": "frais de traitement",
|
||||
"workspace.reload.enabled.after": "quand l'équilibre atteint",
|
||||
"workspace.reload.enabled.after": "quand le solde atteint",
|
||||
"workspace.reload.edit": "Modifier",
|
||||
"workspace.reload.enable": "Activer",
|
||||
"workspace.reload.enableAutoReload": "Activer le rechargement automatique",
|
||||
"workspace.reload.reloadAmount": "Recharger $",
|
||||
"workspace.reload.whenBalanceReaches": "Lorsque le solde atteint $",
|
||||
"workspace.reload.saving": "Économie...",
|
||||
"workspace.reload.save": "Sauvegarder",
|
||||
"workspace.reload.whenBalanceReaches": "Lorsque le solde atteint $",
|
||||
"workspace.reload.saving": "Enregistrement...",
|
||||
"workspace.reload.save": "Enregistrer",
|
||||
"workspace.reload.failedAt": "Le rechargement a échoué à",
|
||||
"workspace.reload.reason": "Raison:",
|
||||
"workspace.reload.updatePaymentMethod": "Veuillez mettre à jour votre mode de paiement et réessayer.",
|
||||
"workspace.reload.reason": "Raison :",
|
||||
"workspace.reload.updatePaymentMethod": "Veuillez mettre à jour votre méthode de paiement et réessayer.",
|
||||
"workspace.reload.retrying": "Nouvelle tentative...",
|
||||
"workspace.reload.retry": "Réessayer",
|
||||
|
||||
"workspace.payments.title": "Historique des paiements",
|
||||
"workspace.payments.subtitle": "Opérations de paiement récentes.",
|
||||
"workspace.payments.subtitle": "Transactions de paiement récentes.",
|
||||
"workspace.payments.table.date": "Date",
|
||||
"workspace.payments.table.paymentId": "Identifiant de paiement",
|
||||
"workspace.payments.table.paymentId": "ID de paiement",
|
||||
"workspace.payments.table.amount": "Montant",
|
||||
"workspace.payments.table.receipt": "Reçu",
|
||||
"workspace.payments.type.credit": "crédit",
|
||||
"workspace.payments.type.subscription": "abonnement",
|
||||
"workspace.payments.view": "Voir",
|
||||
|
||||
"workspace.black.loading": "Chargement...",
|
||||
"workspace.black.time.day": "jour",
|
||||
"workspace.black.time.days": "jours",
|
||||
@@ -456,23 +472,136 @@ export const dict = {
|
||||
"workspace.black.time.minutes": "minutes",
|
||||
"workspace.black.time.fewSeconds": "quelques secondes",
|
||||
"workspace.black.subscription.title": "Abonnement",
|
||||
"workspace.black.subscription.message": "Vous êtes abonné à OpenCode Black pour {{plan}} $ par mois.",
|
||||
"workspace.black.subscription.message": "Vous êtes abonné à OpenCode Black pour {{plan}} $ par mois.",
|
||||
"workspace.black.subscription.manage": "Gérer l'abonnement",
|
||||
"workspace.black.subscription.rollingUsage": "Utilisation de 5 heures",
|
||||
"workspace.black.subscription.rollingUsage": "Utilisation 5 heures",
|
||||
"workspace.black.subscription.weeklyUsage": "Utilisation hebdomadaire",
|
||||
"workspace.black.subscription.resetsIn": "Réinitialise dans",
|
||||
"workspace.black.subscription.resetsIn": "Réinitialisation dans",
|
||||
"workspace.black.subscription.useBalance":
|
||||
"Utilisez votre solde disponible après avoir atteint les limites d'utilisation",
|
||||
"workspace.black.waitlist.title": "Liste d'attente",
|
||||
"workspace.black.waitlist.joined":
|
||||
"Vous êtes sur la liste d'attente pour le forfait Black {{plan}} $ par mois OpenCode.",
|
||||
"workspace.black.waitlist.ready": "Nous sommes prêts à vous inscrire au forfait Black {{plan}} $ par mois OpenCode.",
|
||||
"Vous êtes sur la liste d'attente pour le forfait OpenCode Black à {{plan}} $ par mois.",
|
||||
"workspace.black.waitlist.ready":
|
||||
"Nous sommes prêts à vous inscrire au forfait OpenCode Black à {{plan}} $ par mois.",
|
||||
"workspace.black.waitlist.leave": "Quitter la liste d'attente",
|
||||
"workspace.black.waitlist.leaving": "Sortie...",
|
||||
"workspace.black.waitlist.left": "Gauche",
|
||||
"workspace.black.waitlist.enroll": "Inscrire",
|
||||
"workspace.black.waitlist.left": "Quitté",
|
||||
"workspace.black.waitlist.enroll": "S'inscrire",
|
||||
"workspace.black.waitlist.enrolling": "Inscription...",
|
||||
"workspace.black.waitlist.enrolled": "Inscrit",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"Lorsque vous cliquez sur S'inscrire, votre abonnement démarre immédiatement et votre carte sera débitée.",
|
||||
|
||||
"download.title": "OpenCode | Téléchargement",
|
||||
"download.meta.description": "Téléchargez OpenCode pour macOS, Windows et Linux",
|
||||
"download.hero.title": "Télécharger OpenCode",
|
||||
"download.hero.subtitle": "Disponible en bêta pour macOS, Windows et Linux",
|
||||
"download.hero.button": "Télécharger pour {{os}}",
|
||||
"download.section.terminal": "OpenCode Terminal",
|
||||
"download.section.desktop": "OpenCode Desktop (Bêta)",
|
||||
"download.section.extensions": "Extensions OpenCode",
|
||||
"download.section.integrations": "Intégrations OpenCode",
|
||||
"download.action.download": "Télécharger",
|
||||
"download.action.install": "Installer",
|
||||
|
||||
"download.platform.macosAppleSilicon": "macOS (Apple Silicon)",
|
||||
"download.platform.macosIntel": "macOS (Intel)",
|
||||
"download.platform.windowsX64": "Windows (x64)",
|
||||
"download.platform.linuxDeb": "Linux (.deb)",
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
|
||||
"download.faq.a3.beforeLocal":
|
||||
"Pas forcément, mais probablement. Vous aurez besoin d'un abonnement IA si vous voulez connecter OpenCode à un fournisseur payant, mais vous pouvez travailler avec des",
|
||||
"download.faq.a3.localLink": "modèles locaux",
|
||||
"download.faq.a3.afterLocal.beforeZen": "gratuitement. Même si nous encourageons les utilisateurs à utiliser",
|
||||
"download.faq.a3.afterZen":
|
||||
", OpenCode fonctionne avec tous les fournisseurs populaires comme OpenAI, Anthropic, xAI, etc.",
|
||||
|
||||
"download.faq.a5.p1": "OpenCode est 100% gratuit à utiliser.",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"Les coûts supplémentaires viendront de votre abonnement à un fournisseur de modèle. Même si OpenCode fonctionne avec n'importe quel fournisseur, nous recommandons d'utiliser",
|
||||
"download.faq.a5.p2.afterZen": ".",
|
||||
|
||||
"download.faq.a6.p1":
|
||||
"Vos données et informations ne sont stockées que lorsque vous créez des liens partageables dans OpenCode.",
|
||||
"download.faq.a6.p2.beforeShare": "En savoir plus sur",
|
||||
"download.faq.a6.shareLink": "les pages de partage",
|
||||
|
||||
"enterprise.title": "OpenCode | Solutions entreprise pour votre organisation",
|
||||
"enterprise.meta.description": "Contactez OpenCode pour des solutions entreprise",
|
||||
"enterprise.hero.title": "Votre code vous appartient",
|
||||
"enterprise.hero.body1":
|
||||
"OpenCode fonctionne de manière sécurisée au sein de votre organisation, sans stocker de données ni de contexte, et sans restrictions de licence ni revendications de propriété. Démarrez un essai avec votre équipe, puis déployez-le dans votre organisation en l'intégrant à votre SSO et à votre passerelle IA interne.",
|
||||
"enterprise.hero.body2": "Dites-nous comment nous pouvons vous aider.",
|
||||
"enterprise.form.name.label": "Nom complet",
|
||||
"enterprise.form.name.placeholder": "Jeff Bezos",
|
||||
"enterprise.form.role.label": "Poste",
|
||||
"enterprise.form.role.placeholder": "Président exécutif",
|
||||
"enterprise.form.email.label": "E-mail professionnel",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "Quel problème essayez-vous de résoudre ?",
|
||||
"enterprise.form.message.placeholder": "Nous avons besoin d'aide pour...",
|
||||
"enterprise.form.send": "Envoyer",
|
||||
"enterprise.form.sending": "Envoi...",
|
||||
"enterprise.form.success": "Message envoyé, nous vous contacterons bientôt.",
|
||||
"enterprise.faq.title": "FAQ",
|
||||
"enterprise.faq.q1": "Qu'est-ce que OpenCode Enterprise ?",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise s'adresse aux organisations qui veulent s'assurer que leur code et leurs données ne quittent jamais leur infrastructure. Cela est possible grâce à une configuration centralisée qui s'intègre à votre SSO et à votre passerelle IA interne.",
|
||||
"enterprise.faq.q2": "Comment démarrer avec OpenCode Enterprise ?",
|
||||
"enterprise.faq.a2":
|
||||
"Commencez simplement par un essai interne avec votre équipe. Par défaut, OpenCode ne stocke pas votre code ni vos données de contexte, ce qui facilite la prise en main. Ensuite, contactez-nous pour discuter des tarifs et des options de mise en œuvre.",
|
||||
"enterprise.faq.q3": "Comment fonctionne la tarification entreprise ?",
|
||||
"enterprise.faq.a3":
|
||||
"Nous proposons une tarification entreprise par siège. Si vous avez votre propre passerelle LLM, nous ne facturons pas les tokens utilisés. Pour plus de détails, contactez-nous pour un devis sur mesure en fonction des besoins de votre organisation.",
|
||||
"enterprise.faq.q4": "Mes données sont-elles sécurisées avec OpenCode Enterprise ?",
|
||||
"enterprise.faq.a4":
|
||||
"Oui. OpenCode ne stocke pas votre code ni vos données de contexte. Tout le traitement se fait localement ou via des appels API directs vers votre fournisseur d'IA. Avec une configuration centralisée et une intégration SSO, vos données restent sécurisées au sein de l'infrastructure de votre organisation.",
|
||||
|
||||
"brand.title": "OpenCode | Marque",
|
||||
"brand.meta.description": "Guide de marque OpenCode",
|
||||
"brand.heading": "Guide de marque",
|
||||
"brand.subtitle": "Ressources et éléments pour vous aider à travailler avec la marque OpenCode.",
|
||||
"brand.downloadAll": "Télécharger tous les assets",
|
||||
|
||||
"changelog.title": "OpenCode | Changelog",
|
||||
"changelog.meta.description": "Notes de version et changelog d'OpenCode",
|
||||
"changelog.hero.title": "Changelog",
|
||||
"changelog.hero.subtitle": "Nouvelles mises à jour et améliorations pour OpenCode",
|
||||
"changelog.empty": "Aucune entrée de changelog trouvée.",
|
||||
"changelog.viewJson": "Voir le JSON",
|
||||
|
||||
"bench.list.title": "Benchmark",
|
||||
"bench.list.heading": "Benchmarks",
|
||||
"bench.list.table.agent": "Agent",
|
||||
"bench.list.table.model": "Modèle",
|
||||
"bench.list.table.score": "Score",
|
||||
|
||||
"bench.detail.title": "Benchmark - {{task}}",
|
||||
"bench.detail.notFound": "Tâche introuvable",
|
||||
"bench.detail.na": "N/A",
|
||||
"bench.detail.labels.agent": "Agent",
|
||||
"bench.detail.labels.model": "Modèle",
|
||||
"bench.detail.labels.task": "Tâche",
|
||||
"bench.detail.labels.repo": "Dépôt",
|
||||
"bench.detail.labels.from": "De",
|
||||
"bench.detail.labels.to": "À",
|
||||
"bench.detail.labels.prompt": "Prompt",
|
||||
"bench.detail.labels.commit": "Commit",
|
||||
"bench.detail.labels.averageDuration": "Durée moyenne",
|
||||
"bench.detail.labels.averageScore": "Score moyen",
|
||||
"bench.detail.labels.averageCost": "Coût moyen",
|
||||
"bench.detail.labels.summary": "Résumé",
|
||||
"bench.detail.labels.runs": "Exécutions",
|
||||
"bench.detail.labels.score": "Score",
|
||||
"bench.detail.labels.base": "Base",
|
||||
"bench.detail.labels.penalty": "Pénalité",
|
||||
"bench.detail.labels.weight": "poids",
|
||||
"bench.detail.table.run": "Exécution",
|
||||
"bench.detail.table.score": "Score (Base - Pénalité)",
|
||||
"bench.detail.table.cost": "Coût",
|
||||
"bench.detail.table.duration": "Durée",
|
||||
"bench.detail.run.title": "Exécution {{n}}",
|
||||
"bench.detail.rawJson": "JSON brut",
|
||||
} satisfies Dict
|
||||
|
||||
@@ -34,7 +34,7 @@ export const dict = {
|
||||
"email.subtitle": "Iscriviti alla waitlist per l'accesso anticipato.",
|
||||
"email.placeholder": "Indirizzo email",
|
||||
"email.subscribe": "Iscriviti",
|
||||
"email.success": "Quasi fatto: controlla la posta in arrivo e conferma il tuo indirizzo email",
|
||||
"email.success": "Quasi fatto, controlla la posta in arrivo e conferma il tuo indirizzo email",
|
||||
|
||||
"notFound.title": "Non trovato | opencode",
|
||||
"notFound.heading": "404 - Pagina non trovata",
|
||||
@@ -57,10 +57,41 @@ export const dict = {
|
||||
"common.videoUnsupported": "Il tuo browser non supporta il tag video.",
|
||||
"common.figure": "Fig {{n}}.",
|
||||
"common.faq": "FAQ",
|
||||
"common.learnMore": "Scopri di piu",
|
||||
"common.learnMore": "Scopri di più",
|
||||
|
||||
"error.invalidPlan": "Piano non valido",
|
||||
"error.workspaceRequired": "ID Workspace richiesto",
|
||||
"error.alreadySubscribed": "Questo workspace ha già un abbonamento",
|
||||
"error.limitRequired": "Il limite è richiesto.",
|
||||
"error.monthlyLimitInvalid": "Imposta un limite mensile valido.",
|
||||
"error.workspaceNameRequired": "Il nome del workspace è richiesto.",
|
||||
"error.nameTooLong": "Il nome deve essere di 255 caratteri o meno.",
|
||||
"error.emailRequired": "L'email è richiesta",
|
||||
"error.roleRequired": "Il ruolo è richiesto",
|
||||
"error.idRequired": "L'ID è richiesto",
|
||||
"error.nameRequired": "Il nome è richiesto",
|
||||
"error.providerRequired": "Il provider è richiesto",
|
||||
"error.apiKeyRequired": "La chiave API è richiesta",
|
||||
"error.modelRequired": "Il modello è richiesto",
|
||||
"error.reloadAmountMin": "L'importo della ricarica deve essere almeno ${{amount}}",
|
||||
"error.reloadTriggerMin": "La soglia del saldo deve essere almeno ${{amount}}",
|
||||
|
||||
"home.title": "OpenCode | L'agente di coding IA open source",
|
||||
|
||||
"temp.title": "opencode | Agente di coding IA costruito per il terminale",
|
||||
"temp.hero.title": "L'agente di coding IA costruito per il terminale",
|
||||
"temp.zen": "opencode zen",
|
||||
"temp.getStarted": "Inizia",
|
||||
"temp.feature.native.title": "TUI Nativa",
|
||||
"temp.feature.native.body": "Un'interfaccia terminale reattiva, nativa e personalizzabile",
|
||||
"temp.feature.zen.beforeLink": "Una",
|
||||
"temp.feature.zen.link": "lista curata di modelli",
|
||||
"temp.feature.zen.afterLink": "fornita da opencode",
|
||||
"temp.feature.models.beforeLink": "Supporta 75+ provider LLM tramite",
|
||||
"temp.feature.models.afterLink": ", inclusi modelli locali",
|
||||
"temp.screenshot.caption": "OpenCode TUI con il tema tokyonight",
|
||||
"temp.screenshot.alt": "OpenCode TUI con tema tokyonight",
|
||||
|
||||
"home.banner.badge": "Nuovo",
|
||||
"home.banner.text": "App desktop disponibile in beta",
|
||||
"home.banner.platforms": "su macOS, Windows e Linux",
|
||||
@@ -73,12 +104,12 @@ export const dict = {
|
||||
|
||||
"home.install.ariaLabel": "Opzioni di installazione",
|
||||
|
||||
"home.what.title": "Che cos'e OpenCode?",
|
||||
"home.what.body": "OpenCode e un agente open source che ti aiuta a scrivere codice nel terminale, IDE o desktop.",
|
||||
"home.what.title": "Che cos'è OpenCode?",
|
||||
"home.what.body": "OpenCode è un agente open source che ti aiuta a scrivere codice nel terminale, IDE o desktop.",
|
||||
"home.what.lsp.title": "LSP abilitato",
|
||||
"home.what.lsp.body": "Carica automaticamente gli LSP giusti per il LLM",
|
||||
"home.what.multiSession.title": "Multi-session",
|
||||
"home.what.multiSession.body": "Avvia piu agenti in parallelo sullo stesso progetto",
|
||||
"home.what.multiSession.body": "Avvia più agenti in parallelo sullo stesso progetto",
|
||||
"home.what.shareLinks.title": "Link condivisi",
|
||||
"home.what.shareLinks.body": "Condividi un link a qualsiasi sessione per riferimento o debug",
|
||||
"home.what.copilot.title": "GitHub Copilot",
|
||||
@@ -93,22 +124,22 @@ export const dict = {
|
||||
|
||||
"home.growth.title": "L'agente di coding IA open source",
|
||||
"home.growth.body":
|
||||
"Con oltre <strong>{{stars}}</strong> stelle su GitHub, <strong>{{contributors}}</strong> contributori e oltre <strong>{{commits}}</strong> commit, OpenCode e usato e apprezzato da oltre <strong>{{monthlyUsers}}</strong> sviluppatori ogni mese.",
|
||||
"Con oltre <strong>{{stars}}</strong> stelle su GitHub, <strong>{{contributors}}</strong> contributori e oltre <strong>{{commits}}</strong> commit, OpenCode è usato e apprezzato da oltre <strong>{{monthlyUsers}}</strong> sviluppatori ogni mese.",
|
||||
"home.growth.githubStars": "Stelle GitHub",
|
||||
"home.growth.contributors": "Contributori",
|
||||
"home.growth.monthlyDevs": "Devs mensili",
|
||||
|
||||
"home.privacy.title": "Progettato per la privacy",
|
||||
"home.privacy.body":
|
||||
"OpenCode non archivia il tuo codice ne i dati di contesto, cosi puo operare in ambienti sensibili alla privacy.",
|
||||
"home.privacy.learnMore": "Scopri di piu su",
|
||||
"OpenCode non archivia il tuo codice né i dati di contesto, così può operare in ambienti sensibili alla privacy.",
|
||||
"home.privacy.learnMore": "Scopri di più su",
|
||||
"home.privacy.link": "privacy",
|
||||
|
||||
"home.faq.q1": "Che cos'e OpenCode?",
|
||||
"home.faq.q1": "Che cos'è OpenCode?",
|
||||
"home.faq.a1":
|
||||
"OpenCode e un agente open source che ti aiuta a scrivere ed eseguire codice con qualsiasi modello di IA. E disponibile come interfaccia terminale, app desktop o estensione IDE.",
|
||||
"OpenCode è un agente open source che ti aiuta a scrivere ed eseguire codice con qualsiasi modello di IA. È disponibile come interfaccia terminale, app desktop o estensione IDE.",
|
||||
"home.faq.q2": "Come uso OpenCode?",
|
||||
"home.faq.a2.before": "Il modo piu semplice per iniziare e leggere l'",
|
||||
"home.faq.a2.before": "Il modo più semplice per iniziare è leggere l'",
|
||||
"home.faq.a2.link": "introduzione",
|
||||
"home.faq.q3": "Mi servono abbonamenti IA extra per usare OpenCode?",
|
||||
"home.faq.a3.p1":
|
||||
@@ -116,59 +147,57 @@ export const dict = {
|
||||
"home.faq.a3.p2.beforeZen": "Inoltre, puoi usare modelli popolari per il coding creando un account",
|
||||
"home.faq.a3.p2.afterZen": ".",
|
||||
"home.faq.a3.p3":
|
||||
"Anche se incoraggiamo gli utenti a usare Zen, OpenCode funziona anche con i provider piu diffusi come OpenAI, Anthropic, xAI, ecc.",
|
||||
"Anche se incoraggiamo gli utenti a usare Zen, OpenCode funziona anche con i provider più diffusi come OpenAI, Anthropic, xAI, ecc.",
|
||||
"home.faq.a3.p4.beforeLocal": "Puoi anche collegare i tuoi",
|
||||
"home.faq.a3.p4.localLink": "modelli locali",
|
||||
"home.faq.q4": "Posso usare i miei abbonamenti IA esistenti con OpenCode?",
|
||||
"home.faq.a4.p1":
|
||||
"Si, OpenCode supporta gli abbonamenti dei principali provider. Puoi usare Claude Pro/Max, ChatGPT Plus/Pro o GitHub Copilot.",
|
||||
"Sì, OpenCode supporta gli abbonamenti dei principali provider. Puoi usare Claude Pro/Max, ChatGPT Plus/Pro o GitHub Copilot.",
|
||||
"home.faq.q5": "Posso usare OpenCode solo nel terminale?",
|
||||
"home.faq.a5.beforeDesktop": "Non piu! OpenCode ora e disponibile come app per",
|
||||
"home.faq.a5.beforeDesktop": "Non più! OpenCode ora è disponibile come app per",
|
||||
"home.faq.a5.desktop": "desktop",
|
||||
"home.faq.a5.and": "e",
|
||||
"home.faq.a5.web": "web",
|
||||
"home.faq.q6": "Quanto costa OpenCode?",
|
||||
"home.faq.a6":
|
||||
"OpenCode e gratuito al 100%. Include anche un set di modelli gratuiti. Potrebbero esserci costi aggiuntivi se colleghi altri provider.",
|
||||
"OpenCode è gratuito al 100%. Include anche un set di modelli gratuiti. Potrebbero esserci costi aggiuntivi se colleghi altri provider.",
|
||||
"home.faq.q7": "E per quanto riguarda dati e privacy?",
|
||||
"home.faq.a7.p1":
|
||||
"I tuoi dati vengono archiviati solo quando usi i nostri modelli gratuiti o crei link condivisibili.",
|
||||
"home.faq.a7.p2.beforeModels": "Scopri di piu su",
|
||||
"home.faq.a7.p2.beforeModels": "Scopri di più su",
|
||||
"home.faq.a7.p2.modelsLink": "i nostri modelli",
|
||||
"home.faq.a7.p2.and": "e",
|
||||
"home.faq.a7.p2.shareLink": "le pagine di condivisione",
|
||||
"home.faq.q8": "OpenCode e open source?",
|
||||
"home.faq.a8.p1": "Si, OpenCode e completamente open source. Il codice sorgente e pubblico su",
|
||||
"home.faq.q8": "OpenCode è open source?",
|
||||
"home.faq.a8.p1": "Sì, OpenCode è completamente open source. Il codice sorgente è pubblico su",
|
||||
"home.faq.a8.p2": "sotto la",
|
||||
"home.faq.a8.mitLicense": "Licenza MIT",
|
||||
"home.faq.a8.p3":
|
||||
", il che significa che chiunque puo usarlo, modificarlo o contribuire al suo sviluppo. Chiunque nella comunita puo aprire issue, inviare pull request ed estendere le funzionalita.",
|
||||
", il che significa che chiunque può usarlo, modificarlo o contribuire al suo sviluppo. Chiunque nella comunità può aprire issue, inviare pull request ed estendere le funzionalità.",
|
||||
|
||||
"home.zenCta.title": "Accedi a modelli affidabili e ottimizzati per agenti di coding",
|
||||
"home.zenCta.body":
|
||||
"Zen ti da accesso a una selezione di modelli di IA che OpenCode ha testato e benchmarkato specificamente per agenti di coding. Niente piu preoccupazioni per prestazioni e qualita incoerenti tra provider: usa modelli validati che funzionano.",
|
||||
"Zen ti dà accesso a una selezione di modelli di IA che OpenCode ha testato e benchmarkato specificamente per agenti di coding. Niente più preoccupazioni per prestazioni e qualità incoerenti tra provider: usa modelli validati che funzionano.",
|
||||
"home.zenCta.link": "Scopri Zen",
|
||||
|
||||
"download.title": "OpenCode | Download",
|
||||
|
||||
"zen.title": "OpenCode Zen | Una selezione curata di modelli affidabili e ottimizzati per agenti di coding",
|
||||
"zen.hero.title": "Accedi a modelli affidabili e ottimizzati per agenti di coding",
|
||||
"zen.hero.body":
|
||||
"Zen ti da accesso a una selezione di modelli di IA che OpenCode ha testato e benchmarkato specificamente per agenti di coding. Niente piu preoccupazioni per prestazioni e qualita incoerenti tra provider: usa modelli validati che funzionano.",
|
||||
"Zen ti dà accesso a una selezione di modelli di IA che OpenCode ha testato e benchmarkato specificamente per agenti di coding. Niente più preoccupazioni per prestazioni e qualità incoerenti tra provider: usa modelli validati che funzionano.",
|
||||
|
||||
"zen.faq.q1": "Cos'e OpenCode Zen?",
|
||||
"zen.faq.q1": "Cos'è OpenCode Zen?",
|
||||
"zen.faq.a1":
|
||||
"Zen e un set curato di modelli di IA testati e benchmarkati per agenti di coding, creato dal team dietro OpenCode.",
|
||||
"zen.faq.q2": "Cosa rende Zen piu accurato?",
|
||||
"Zen è un set curato di modelli di IA testati e benchmarkati per agenti di coding, creato dal team dietro OpenCode.",
|
||||
"zen.faq.q2": "Cosa rende Zen più accurato?",
|
||||
"zen.faq.a2":
|
||||
"Zen offre solo modelli testati e benchmarkati specificamente per agenti di coding. Non useresti un coltello da burro per tagliare una bistecca; non usare modelli scarsi per programmare.",
|
||||
"zen.faq.q3": "Zen e piu economico?",
|
||||
"zen.faq.q3": "Zen è più economico?",
|
||||
"zen.faq.a3":
|
||||
"Zen non e a scopo di lucro. Zen ribalta i costi dei provider di modelli direttamente su di te. Piu Zen viene usato, piu OpenCode puo negoziare tariffe migliori e passarle a te.",
|
||||
"Zen non è a scopo di lucro. Zen ribalta i costi dei provider di modelli direttamente su di te. Più Zen viene usato, più OpenCode può negoziare tariffe migliori e passarle a te.",
|
||||
"zen.faq.q4": "Quanto costa Zen?",
|
||||
"zen.faq.a4.p1.beforePricing": "Zen",
|
||||
"zen.faq.a4.p1.pricingLink": "addebita per richiesta",
|
||||
"zen.faq.a4.p1.afterPricing": "senza ricarichi, quindi paghi esattamente cio che addebita il provider del modello.",
|
||||
"zen.faq.a4.p1.afterPricing": "senza ricarichi, quindi paghi esattamente ciò che addebita il provider del modello.",
|
||||
"zen.faq.a4.p2.beforeAccount": "Il costo totale dipende dall'uso e puoi impostare limiti di spesa mensili nel tuo",
|
||||
"zen.faq.a4.p2.accountLink": "account",
|
||||
"zen.faq.a4.p3":
|
||||
@@ -178,45 +207,292 @@ export const dict = {
|
||||
"Tutti i modelli Zen sono ospitati negli Stati Uniti. I provider seguono una policy di zero-retention e non usano i tuoi dati per l'addestramento dei modelli, con le",
|
||||
"zen.faq.a5.exceptionsLink": "seguenti eccezioni",
|
||||
"zen.faq.q6": "Posso impostare limiti di spesa?",
|
||||
"zen.faq.a6": "Si, puoi impostare limiti di spesa mensuali nel tuo account.",
|
||||
"zen.faq.a6": "Sì, puoi impostare limiti di spesa mensuali nel tuo account.",
|
||||
"zen.faq.q7": "Posso annullare?",
|
||||
"zen.faq.a7": "Si, puoi disattivare la fatturazione in qualsiasi momento e usare il saldo rimanente.",
|
||||
"zen.faq.a7": "Sì, puoi disattivare la fatturazione in qualsiasi momento e usare il saldo rimanente.",
|
||||
"zen.faq.q8": "Posso usare Zen con altri agenti di coding?",
|
||||
"zen.faq.a8":
|
||||
"Anche se Zen funziona alla grande con OpenCode, puoi usare Zen con qualsiasi agente. Segui le istruzioni di configurazione nel tuo agente di coding preferito.",
|
||||
|
||||
"zen.cta.start": "Inizia con Zen",
|
||||
"zen.pricing.title": "Aggiungi $ 20 di saldo a consumo",
|
||||
"zen.pricing.fee": "(+$ 1,23 commissione di elaborazione della carta)",
|
||||
"zen.pricing.body": "Utilizzare con qualsiasi agente. Imposta limiti di spesa mensili. Annulla in qualsiasi momento.",
|
||||
"zen.problem.title": "Quale problema sta risolvendo Zen?",
|
||||
"zen.pricing.title": "Aggiungi $20 di saldo a consumo",
|
||||
"zen.pricing.fee": "(+$1.23 commissione di elaborazione carta)",
|
||||
"zen.pricing.body": "Usa con qualsiasi agente. Imposta limiti di spesa mensili. Annulla in qualsiasi momento.",
|
||||
"zen.problem.title": "Quale problema risolve Zen?",
|
||||
"zen.problem.body":
|
||||
"Sono disponibili numerosi modelli, ma solo pochi funzionano bene con gli agenti di codifica. La maggior parte dei provider li configura in modo diverso con risultati diversi.",
|
||||
"Sono disponibili numerosi modelli, ma solo pochi funzionano bene con gli agenti di coding. La maggior parte dei provider li configura in modo diverso con risultati variabili.",
|
||||
"zen.problem.subtitle": "Stiamo risolvendo questo problema per tutti, non solo per gli utenti OpenCode.",
|
||||
"zen.problem.item1": "Testare modelli selezionati e consultare i loro team",
|
||||
"zen.problem.item2": "Collaborare con i fornitori per garantire che vengano consegnati correttamente",
|
||||
"zen.problem.item3": "Eseguiamo il benchmarking di tutte le combinazioni di fornitori di modelli che consigliamo",
|
||||
"zen.problem.item2": "Collaborare con i provider per garantire che vengano consegnati correttamente",
|
||||
"zen.problem.item3": "Benchmark di tutte le combinazioni modello-provider che raccomandiamo",
|
||||
"zen.how.title": "Come funziona Zen",
|
||||
"zen.how.body": "Anche se ti consigliamo di utilizzare Zen con OpenCode, puoi utilizzare Zen con qualsiasi agente.",
|
||||
"zen.how.step1.title": "Iscriviti e aggiungi un saldo di $ 20",
|
||||
"zen.how.step1.beforeLink": "seguire il",
|
||||
"zen.how.step1.title": "Iscriviti e aggiungi un saldo di $20",
|
||||
"zen.how.step1.beforeLink": "segui le",
|
||||
"zen.how.step1.link": "istruzioni di configurazione",
|
||||
"zen.how.step2.title": "Utilizza Zen con prezzi trasparenti",
|
||||
"zen.how.step2.link": "pagare per richiesta",
|
||||
"zen.how.step2.afterLink": "con zero ricarichi",
|
||||
"zen.how.step2.title": "Usa Zen con prezzi trasparenti",
|
||||
"zen.how.step2.link": "paga per richiesta",
|
||||
"zen.how.step2.afterLink": "senza ricarichi",
|
||||
"zen.how.step3.title": "Ricarica automatica",
|
||||
"zen.how.step3.body": "quando il tuo saldo raggiunge $ 5, aggiungeremo automaticamente $ 20",
|
||||
"zen.how.step3.body": "quando il tuo saldo raggiunge $5, aggiungeremo automaticamente $20",
|
||||
"zen.privacy.title": "La tua privacy è importante per noi",
|
||||
"zen.privacy.beforeExceptions":
|
||||
"Tutti i modelli Zen sono ospitati negli Stati Uniti. I fornitori seguono una politica di conservazione zero e non utilizzano i tuoi dati per l'addestramento del modello, con il",
|
||||
"Tutti i modelli Zen sono ospitati negli Stati Uniti. I provider seguono una policy di zero-retention e non usano i tuoi dati per l'addestramento dei modelli, con le",
|
||||
"zen.privacy.exceptionsLink": "seguenti eccezioni",
|
||||
|
||||
"black.meta.title": "OpenCode Black | Accedi ai migliori modelli di coding al mondo",
|
||||
"black.meta.description":
|
||||
"Ottieni l'accesso a Claude, GPT, Gemini e altri con i piani di abbonamento OpenCode Black.",
|
||||
"black.hero.title": "Accedi ai migliori modelli di coding al mondo",
|
||||
"black.hero.subtitle": "Inclusi Claude, GPT, Gemini e altri",
|
||||
"black.title": "OpenCode Black | Prezzi",
|
||||
"black.plan.icon20": "Piano Black 20",
|
||||
"black.plan.icon100": "Piano Black 100",
|
||||
"black.plan.icon200": "Piano Black 200",
|
||||
"black.plan.multiplier100": "5x più utilizzo rispetto a Black 20",
|
||||
"black.plan.multiplier200": "20x più utilizzo rispetto a Black 20",
|
||||
"black.price.perMonth": "al mese",
|
||||
"black.price.perPersonBilledMonthly": "per persona fatturato mensilmente",
|
||||
"black.terms.1": "Il tuo abbonamento non inizierà immediatamente",
|
||||
"black.terms.2": "Verrai aggiunto alla lista d'attesa e attivato presto",
|
||||
"black.terms.3": "La tua carta verrà addebitata solo quando il tuo abbonamento sarà attivato",
|
||||
"black.terms.4":
|
||||
"Si applicano limiti di utilizzo, un uso fortemente automatizzato potrebbe raggiungere i limiti prima",
|
||||
"black.terms.5": "Gli abbonamenti sono per individui, contatta Enterprise per i team",
|
||||
"black.terms.6": "I limiti potrebbero essere modificati e i piani potrebbero essere interrotti in futuro",
|
||||
"black.terms.7": "Annulla il tuo abbonamento in qualsiasi momento",
|
||||
"black.action.continue": "Continua",
|
||||
"black.finePrint.beforeTerms": "I prezzi mostrati non includono le tasse applicabili",
|
||||
"black.finePrint.terms": "Termini di servizio",
|
||||
"black.workspace.title": "OpenCode Black | Seleziona Workspace",
|
||||
"black.workspace.selectPlan": "Seleziona un workspace per questo piano",
|
||||
"black.workspace.name": "Workspace {{n}}",
|
||||
"black.subscribe.title": "Abbonati a OpenCode Black",
|
||||
"black.subscribe.paymentMethod": "Metodo di pagamento",
|
||||
"black.subscribe.loadingPaymentForm": "Caricamento modulo di pagamento...",
|
||||
"black.subscribe.selectWorkspaceToContinue": "Seleziona un workspace per continuare",
|
||||
"black.subscribe.failurePrefix": "Oh no!",
|
||||
"black.subscribe.error.generic": "Si è verificato un errore",
|
||||
"black.subscribe.error.invalidPlan": "Piano non valido",
|
||||
"black.subscribe.error.workspaceRequired": "ID Workspace richiesto",
|
||||
"black.subscribe.error.alreadySubscribed": "Questo workspace ha già un abbonamento",
|
||||
"black.subscribe.processing": "Elaborazione...",
|
||||
"black.subscribe.submit": "Abbonati ${{plan}}",
|
||||
"black.subscribe.form.chargeNotice": "Ti verrà addebitato solo quando il tuo abbonamento sarà attivato",
|
||||
"black.subscribe.success.title": "Sei nella lista d'attesa di OpenCode Black",
|
||||
"black.subscribe.success.subscriptionPlan": "Piano di abbonamento",
|
||||
"black.subscribe.success.planName": "OpenCode Black {{plan}}",
|
||||
"black.subscribe.success.amount": "Importo",
|
||||
"black.subscribe.success.amountValue": "${{plan}} al mese",
|
||||
"black.subscribe.success.paymentMethod": "Metodo di pagamento",
|
||||
"black.subscribe.success.dateJoined": "Data di adesione",
|
||||
"black.subscribe.success.chargeNotice": "La tua carta verrà addebitata quando il tuo abbonamento sarà attivato",
|
||||
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "Chiavi API",
|
||||
"workspace.nav.members": "Membri",
|
||||
"workspace.nav.billing": "Fatturazione",
|
||||
"workspace.nav.settings": "Impostazioni",
|
||||
|
||||
"workspace.home.banner.beforeLink": "Modelli ottimizzati e affidabili per agenti di coding.",
|
||||
"workspace.home.billing.loading": "Caricamento...",
|
||||
"workspace.home.billing.enable": "Abilita fatturazione",
|
||||
"workspace.home.billing.currentBalance": "Saldo attuale",
|
||||
|
||||
"workspace.newUser.feature.tested.title": "Modelli testati e verificati",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"Abbiamo benchmarkato e testato modelli specificamente per agenti di coding per garantire le migliori prestazioni.",
|
||||
"workspace.newUser.feature.quality.title": "Massima qualità",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"Accedi a modelli configurati per prestazioni ottimali - nessun downgrade o instradamento verso provider più economici.",
|
||||
"workspace.newUser.feature.lockin.title": "Nessun lock-in",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"Usa Zen con qualsiasi agente di coding, e continua a usare altri provider con opencode quando vuoi.",
|
||||
"workspace.newUser.copyApiKey": "Copia chiave API",
|
||||
"workspace.newUser.copyKey": "Copia Chiave",
|
||||
"workspace.newUser.copied": "Copiato!",
|
||||
"workspace.newUser.step.enableBilling": "Abilita fatturazione",
|
||||
"workspace.newUser.step.login.before": "Esegui",
|
||||
"workspace.newUser.step.login.after": "e seleziona opencode",
|
||||
"workspace.newUser.step.pasteKey": "Incolla la tua chiave API",
|
||||
"workspace.newUser.step.models.before": "Avvia opencode ed esegui",
|
||||
"workspace.newUser.step.models.after": "per selezionare un modello",
|
||||
|
||||
"workspace.models.title": "Modelli",
|
||||
"workspace.models.subtitle.beforeLink": "Gestisci i modelli a cui possono accedere i membri del workspace.",
|
||||
"workspace.models.table.model": "Modello",
|
||||
"workspace.models.table.enabled": "Abilitato",
|
||||
|
||||
"workspace.providers.title": "Bring Your Own Key",
|
||||
"workspace.providers.subtitle": "Configura le tue chiavi API dai provider di IA.",
|
||||
"workspace.providers.placeholder": "Inserisci chiave API {{provider}} ({{prefix}}...)",
|
||||
"workspace.providers.configure": "Configura",
|
||||
"workspace.providers.edit": "Modifica",
|
||||
"workspace.providers.delete": "Elimina",
|
||||
"workspace.providers.saving": "Salvataggio...",
|
||||
"workspace.providers.save": "Salva",
|
||||
"workspace.providers.table.provider": "Provider",
|
||||
"workspace.providers.table.apiKey": "Chiave API",
|
||||
|
||||
"workspace.usage.title": "Cronologia Utilizzo",
|
||||
"workspace.usage.subtitle": "Utilizzo API recente e costi.",
|
||||
"workspace.usage.empty": "Effettua la tua prima chiamata API per iniziare.",
|
||||
"workspace.usage.table.date": "Data",
|
||||
"workspace.usage.table.model": "Modello",
|
||||
"workspace.usage.table.input": "Input",
|
||||
"workspace.usage.table.output": "Output",
|
||||
"workspace.usage.table.cost": "Costo",
|
||||
"workspace.usage.breakdown.input": "Input",
|
||||
"workspace.usage.breakdown.cacheRead": "Lettura Cache",
|
||||
"workspace.usage.breakdown.cacheWrite": "Scrittura Cache",
|
||||
"workspace.usage.breakdown.output": "Output",
|
||||
"workspace.usage.breakdown.reasoning": "Reasoning",
|
||||
"workspace.usage.subscription": "abbonamento (${{amount}})",
|
||||
|
||||
"workspace.cost.title": "Costo",
|
||||
"workspace.cost.subtitle": "Costi di utilizzo suddivisi per modello.",
|
||||
"workspace.cost.allModels": "Tutti i Modelli",
|
||||
"workspace.cost.allKeys": "Tutte le Chiavi",
|
||||
"workspace.cost.deletedSuffix": "(eliminato)",
|
||||
"workspace.cost.empty": "Nessun dato di utilizzo disponibile per il periodo selezionato.",
|
||||
"workspace.cost.subscriptionShort": "sub",
|
||||
|
||||
"workspace.keys.title": "Chiavi API",
|
||||
"workspace.keys.subtitle": "Gestisci le tue chiavi API per accedere ai servizi opencode.",
|
||||
"workspace.keys.create": "Crea Chiave API",
|
||||
"workspace.keys.placeholder": "Inserisci nome chiave",
|
||||
"workspace.keys.empty": "Crea una chiave API opencode Gateway",
|
||||
"workspace.keys.table.name": "Nome",
|
||||
"workspace.keys.table.key": "Chiave",
|
||||
"workspace.keys.table.createdBy": "Creato da",
|
||||
"workspace.keys.table.lastUsed": "Ultimo Utilizzo",
|
||||
"workspace.keys.copyApiKey": "Copia chiave API",
|
||||
"workspace.keys.delete": "Elimina",
|
||||
|
||||
"workspace.members.title": "Membri",
|
||||
"workspace.members.subtitle": "Gestisci i membri del workspace e le loro autorizzazioni.",
|
||||
"workspace.members.invite": "Invita Membro",
|
||||
"workspace.members.inviting": "Invito in corso...",
|
||||
"workspace.members.beta.beforeLink": "I workspace sono gratuiti per i team durante la beta.",
|
||||
"workspace.members.form.invitee": "Invitato",
|
||||
"workspace.members.form.emailPlaceholder": "Inserisci email",
|
||||
"workspace.members.form.role": "Ruolo",
|
||||
"workspace.members.form.monthlyLimit": "Limite di spesa mensile",
|
||||
"workspace.members.noLimit": "Nessun limite",
|
||||
"workspace.members.noLimitLowercase": "nessun limite",
|
||||
"workspace.members.invited": "invitato",
|
||||
"workspace.members.edit": "Modifica",
|
||||
"workspace.members.delete": "Elimina",
|
||||
"workspace.members.saving": "Salvataggio...",
|
||||
"workspace.members.save": "Salva",
|
||||
"workspace.members.table.email": "Email",
|
||||
"workspace.members.table.role": "Ruolo",
|
||||
"workspace.members.table.monthLimit": "Limite mensile",
|
||||
"workspace.members.role.admin": "Admin",
|
||||
"workspace.members.role.adminDescription": "Può gestire modelli, membri e fatturazione",
|
||||
"workspace.members.role.member": "Membro",
|
||||
"workspace.members.role.memberDescription": "Può generare chiavi API solo per sé",
|
||||
|
||||
"workspace.settings.title": "Impostazioni",
|
||||
"workspace.settings.subtitle": "Aggiorna il nome e le preferenze del workspace.",
|
||||
"workspace.settings.workspaceName": "Nome Workspace",
|
||||
"workspace.settings.defaultName": "Predefinito",
|
||||
"workspace.settings.updating": "Aggiornamento...",
|
||||
"workspace.settings.save": "Salva",
|
||||
"workspace.settings.edit": "Modifica",
|
||||
|
||||
"workspace.billing.title": "Fatturazione",
|
||||
"workspace.billing.subtitle.beforeLink": "Gestisci i metodi di pagamento.",
|
||||
"workspace.billing.contactUs": "Contattaci",
|
||||
"workspace.billing.subtitle.afterLink": "se hai domande.",
|
||||
"workspace.billing.currentBalance": "Saldo Attuale",
|
||||
"workspace.billing.add": "Aggiungi $",
|
||||
"workspace.billing.enterAmount": "Inserisci importo",
|
||||
"workspace.billing.loading": "Caricamento...",
|
||||
"workspace.billing.addAction": "Aggiungi",
|
||||
"workspace.billing.addBalance": "Aggiungi Saldo",
|
||||
"workspace.billing.linkedToStripe": "Collegato a Stripe",
|
||||
"workspace.billing.manage": "Gestisci",
|
||||
"workspace.billing.enable": "Abilita Fatturazione",
|
||||
|
||||
"workspace.monthlyLimit.title": "Limite Mensile",
|
||||
"workspace.monthlyLimit.subtitle": "Imposta un limite di utilizzo mensile per il tuo account.",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "Impostazione...",
|
||||
"workspace.monthlyLimit.set": "Impostato",
|
||||
"workspace.monthlyLimit.edit": "Modifica Limite",
|
||||
"workspace.monthlyLimit.noLimit": "Nessun limite di utilizzo impostato.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "Utilizzo attuale per",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "è $",
|
||||
|
||||
"workspace.reload.title": "Ricarica Auto",
|
||||
"workspace.reload.disabled.before": "La ricarica auto è",
|
||||
"workspace.reload.disabled.state": "disabilitata",
|
||||
"workspace.reload.disabled.after": "Abilita per ricaricare automaticamente quando il saldo è basso.",
|
||||
"workspace.reload.enabled.before": "La ricarica auto è",
|
||||
"workspace.reload.enabled.state": "abilitata",
|
||||
"workspace.reload.enabled.middle": "Ricaricheremo",
|
||||
"workspace.reload.processingFee": "commissione",
|
||||
"workspace.reload.enabled.after": "quando il saldo raggiunge",
|
||||
"workspace.reload.edit": "Modifica",
|
||||
"workspace.reload.enable": "Abilita",
|
||||
"workspace.reload.enableAutoReload": "Abilita Ricarica Auto",
|
||||
"workspace.reload.reloadAmount": "Ricarica $",
|
||||
"workspace.reload.whenBalanceReaches": "Quando il saldo raggiunge $",
|
||||
"workspace.reload.saving": "Salvataggio...",
|
||||
"workspace.reload.save": "Salva",
|
||||
"workspace.reload.failedAt": "Ricarica fallita il",
|
||||
"workspace.reload.reason": "Motivo:",
|
||||
"workspace.reload.updatePaymentMethod": "Aggiorna il tuo metodo di pagamento e riprova.",
|
||||
"workspace.reload.retrying": "Riprovo...",
|
||||
"workspace.reload.retry": "Riprova",
|
||||
|
||||
"workspace.payments.title": "Cronologia Pagamenti",
|
||||
"workspace.payments.subtitle": "Transazioni di pagamento recenti.",
|
||||
"workspace.payments.table.date": "Data",
|
||||
"workspace.payments.table.paymentId": "ID Pagamento",
|
||||
"workspace.payments.table.amount": "Importo",
|
||||
"workspace.payments.table.receipt": "Ricevuta",
|
||||
"workspace.payments.type.credit": "credito",
|
||||
"workspace.payments.type.subscription": "abbonamento",
|
||||
"workspace.payments.view": "Visualizza",
|
||||
|
||||
"workspace.black.loading": "Caricamento...",
|
||||
"workspace.black.time.day": "giorno",
|
||||
"workspace.black.time.days": "giorni",
|
||||
"workspace.black.time.hour": "ora",
|
||||
"workspace.black.time.hours": "ore",
|
||||
"workspace.black.time.minute": "minuto",
|
||||
"workspace.black.time.minutes": "minuti",
|
||||
"workspace.black.time.fewSeconds": "pochi secondi",
|
||||
"workspace.black.subscription.title": "Abbonamento",
|
||||
"workspace.black.subscription.message": "Sei abbonato a OpenCode Black per ${{plan}} al mese.",
|
||||
"workspace.black.subscription.manage": "Gestisci Abbonamento",
|
||||
"workspace.black.subscription.rollingUsage": "Utilizzo 5-ore",
|
||||
"workspace.black.subscription.weeklyUsage": "Utilizzo Settimanale",
|
||||
"workspace.black.subscription.resetsIn": "Si resetta tra",
|
||||
"workspace.black.subscription.useBalance": "Usa il tuo saldo disponibile dopo aver raggiunto i limiti di utilizzo",
|
||||
"workspace.black.waitlist.title": "Waitlist",
|
||||
"workspace.black.waitlist.joined": "Sei nella waitlist per il piano OpenCode Black da ${{plan}} al mese.",
|
||||
"workspace.black.waitlist.ready": "Siamo pronti per iscriverti al piano OpenCode Black da ${{plan}} al mese.",
|
||||
"workspace.black.waitlist.leave": "Lascia Waitlist",
|
||||
"workspace.black.waitlist.leaving": "Uscita...",
|
||||
"workspace.black.waitlist.left": "Uscito",
|
||||
"workspace.black.waitlist.enroll": "Iscriviti",
|
||||
"workspace.black.waitlist.enrolling": "Iscrizione...",
|
||||
"workspace.black.waitlist.enrolled": "Iscritto",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"Quando clicchi su Iscriviti, il tuo abbonamento inizia immediatamente e la tua carta verrà addebitata.",
|
||||
|
||||
"download.title": "OpenCode | Download",
|
||||
"download.meta.description": "Scarica OpenCode per macOS, Windows e Linux",
|
||||
"download.hero.title": "Scarica OpenCode",
|
||||
"download.hero.subtitle": "Disponibile in beta per macOS, Windows e Linux",
|
||||
"download.hero.subtitle": "Disponibile in Beta per macOS, Windows e Linux",
|
||||
"download.hero.button": "Scarica per {{os}}",
|
||||
"download.section.terminal": "OpenCode Terminal",
|
||||
"download.section.desktop": "OpenCode Desktop (Beta)",
|
||||
"download.section.extensions": "Estensioni OpenCode",
|
||||
"download.section.integrations": "Integrazioni OpenCode",
|
||||
"download.section.extensions": "OpenCode Extensions",
|
||||
"download.section.integrations": "OpenCode Integrations",
|
||||
"download.action.download": "Scarica",
|
||||
"download.action.install": "Installa",
|
||||
|
||||
@@ -227,242 +503,94 @@ export const dict = {
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
|
||||
"download.faq.a3.beforeLocal":
|
||||
"Non necessariamente, ma probabilmente. Ti serve un abbonamento IA se vuoi collegare OpenCode a un provider a pagamento, ma puoi lavorare con",
|
||||
"Non necessariamente, ma probabilmente. Avrai bisogno di un abbonamento IA se vuoi collegare OpenCode a un provider a pagamento, sebbene tu possa lavorare con",
|
||||
"download.faq.a3.localLink": "modelli locali",
|
||||
"download.faq.a3.afterLocal.beforeZen": "gratis. Anche se incoraggiamo gli utenti a usare",
|
||||
"download.faq.a3.afterZen": ", OpenCode funziona con tutti i provider popolari come OpenAI, Anthropic, xAI, ecc.",
|
||||
"download.faq.a3.afterLocal.beforeZen": "gratuitamente. Mentre incoraggiamo gli utenti a usare",
|
||||
"download.faq.a3.afterZen": ", OpenCode funziona con tutti i provider popolari come OpenAI, Anthropic, xAI ecc.",
|
||||
|
||||
"download.faq.a5.p1": "OpenCode e gratuito al 100%.",
|
||||
"download.faq.a5.p1": "OpenCode è gratuito al 100%.",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"Eventuali costi aggiuntivi dipendono dal tuo abbonamento a un provider di modelli. Anche se OpenCode funziona con qualsiasi provider, consigliamo di usare",
|
||||
"Eventuali costi aggiuntivi proverranno dal tuo abbonamento a un provider di modelli. Mentre OpenCode funziona con qualsiasi provider di modelli, raccomandiamo di usare",
|
||||
"download.faq.a5.p2.afterZen": ".",
|
||||
|
||||
"download.faq.a6.p1":
|
||||
"I tuoi dati e le tue informazioni vengono archiviati solo quando crei link condivisibili in OpenCode.",
|
||||
"download.faq.a6.p2.beforeShare": "Scopri di piu su",
|
||||
"download.faq.a6.shareLink": "le pagine di condivisione",
|
||||
"download.faq.a6.p1": "I tuoi dati e informazioni sono archiviati solo quando crei link condivisibili in OpenCode.",
|
||||
"download.faq.a6.p2.beforeShare": "Scopri di più sulle",
|
||||
"download.faq.a6.shareLink": "pagine condivise",
|
||||
|
||||
"enterprise.title": "OpenCode | Soluzioni enterprise per la tua organizzazione",
|
||||
"enterprise.title": "OpenCode | Soluzioni Enterprise per la tua organizzazione",
|
||||
"enterprise.meta.description": "Contatta OpenCode per soluzioni enterprise",
|
||||
"enterprise.hero.title": "Il tuo codice e tuo",
|
||||
"enterprise.hero.title": "Il tuo codice è tuo",
|
||||
"enterprise.hero.body1":
|
||||
"OpenCode opera in modo sicuro all'interno della tua organizzazione senza archiviare dati o contesto e senza restrizioni di licenza o rivendicazioni di proprieta. Avvia una prova con il tuo team, poi distribuiscilo in tutta l'organizzazione integrandolo con il tuo SSO e il tuo gateway IA interno.",
|
||||
"enterprise.hero.body2": "Dicci come possiamo aiutarti.",
|
||||
"OpenCode opera in modo sicuro all'interno della tua organizzazione senza dati o contesto archiviati e senza restrizioni di licenza o rivendicazioni di proprietà. Inizia una prova con il tuo team, poi distribuisci attraverso la tua organizzazione integrandolo con il tuo SSO e gateway IA interno.",
|
||||
"enterprise.hero.body2": "Facci sapere come possiamo aiutare.",
|
||||
"enterprise.form.name.label": "Nome completo",
|
||||
"enterprise.form.name.placeholder": "Jeff Bezos",
|
||||
"enterprise.form.role.label": "Ruolo",
|
||||
"enterprise.form.role.placeholder": "Presidente esecutivo",
|
||||
"enterprise.form.role.placeholder": "Presidente Esecutivo",
|
||||
"enterprise.form.email.label": "Email aziendale",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "Quale problema stai cercando di risolvere?",
|
||||
"enterprise.form.message.placeholder": "Abbiamo bisogno di aiuto per...",
|
||||
"enterprise.form.message.placeholder": "Abbiamo bisogno di aiuto con...",
|
||||
"enterprise.form.send": "Invia",
|
||||
"enterprise.form.sending": "Invio...",
|
||||
"enterprise.form.success": "Messaggio inviato, ti contatteremo a breve.",
|
||||
"enterprise.form.success": "Messaggio inviato, ti contatteremo presto.",
|
||||
"enterprise.faq.title": "FAQ",
|
||||
"enterprise.faq.q1": "Cos'e OpenCode Enterprise?",
|
||||
"enterprise.faq.q1": "Cos'è OpenCode Enterprise?",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise e pensato per le organizzazioni che vogliono assicurarsi che il loro codice e i loro dati non lascino mai la propria infrastruttura. Lo fa tramite una configurazione centralizzata che si integra con il tuo SSO e il tuo gateway IA interno.",
|
||||
"enterprise.faq.q2": "Come posso iniziare con OpenCode Enterprise?",
|
||||
"OpenCode Enterprise è per le organizzazioni che vogliono garantire che il loro codice e dati non lascino mai la loro infrastruttura. Può farlo usando una configurazione centralizzata che si integra con il tuo SSO e gateway IA interno.",
|
||||
"enterprise.faq.q2": "Come inizio con OpenCode Enterprise?",
|
||||
"enterprise.faq.a2":
|
||||
"Inizia semplicemente con una prova interna con il tuo team. OpenCode, per impostazione predefinita, non archivia il tuo codice ne i dati di contesto, rendendo facile partire. Poi contattaci per discutere prezzi e opzioni di implementazione.",
|
||||
"enterprise.faq.q3": "Come funziona la tariffazione enterprise?",
|
||||
"Inizia semplicemente con una prova interna con il tuo team. OpenCode per impostazione predefinita non archivia il tuo codice o dati di contesto, rendendo facile iniziare. Poi contattaci per discutere prezzi e opzioni di implementazione.",
|
||||
"enterprise.faq.q3": "Come funziona il prezzo enterprise?",
|
||||
"enterprise.faq.a3":
|
||||
"Offriamo una tariffazione enterprise per postazione. Se hai il tuo gateway LLM, non addebitiamo i token utilizzati. Per ulteriori dettagli, contattaci per un preventivo personalizzato in base alle esigenze della tua organizzazione.",
|
||||
"enterprise.faq.q4": "I miei dati sono al sicuro con OpenCode Enterprise?",
|
||||
"Offriamo prezzi enterprise per postazione. Se hai il tuo gateway LLM, non addebitiamo per i token usati. Per ulteriori dettagli, contattaci per un preventivo personalizzato basato sulle esigenze della tua organizzazione.",
|
||||
"enterprise.faq.q4": "I miei dati sono sicuri con OpenCode Enterprise?",
|
||||
"enterprise.faq.a4":
|
||||
"Si. OpenCode non archivia il tuo codice ne i dati di contesto. Tutta l'elaborazione avviene localmente o tramite chiamate API dirette al tuo provider di IA. Con configurazione centralizzata e integrazione SSO, i tuoi dati rimangono al sicuro all'interno dell'infrastruttura della tua organizzazione.",
|
||||
"Sì. OpenCode non archivia il tuo codice o dati di contesto. Tutto il trattamento avviene localmente o attraverso chiamate API dirette al tuo provider IA. Con configurazione centrale e integrazione SSO, i tuoi dati rimangono sicuri all'interno dell'infrastruttura della tua organizzazione.",
|
||||
|
||||
"brand.title": "OpenCode | Brand",
|
||||
"brand.meta.description": "Linee guida del brand OpenCode",
|
||||
"brand.heading": "Linee guida del brand",
|
||||
"brand.subtitle": "Risorse e asset per aiutarti a lavorare con il brand OpenCode.",
|
||||
"brand.downloadAll": "Scarica tutti gli asset",
|
||||
|
||||
"changelog.title": "OpenCode | Changelog",
|
||||
"changelog.meta.description": "Note di rilascio e changelog di OpenCode",
|
||||
"changelog.meta.description": "Note di rilascio e changelog OpenCode",
|
||||
"changelog.hero.title": "Changelog",
|
||||
"changelog.hero.subtitle": "Nuovi aggiornamenti e miglioramenti per OpenCode",
|
||||
"changelog.empty": "Nessuna voce di changelog trovata.",
|
||||
"changelog.viewJson": "Visualizza JSON",
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "Chiavi API",
|
||||
"workspace.nav.members": "Membri",
|
||||
"workspace.nav.billing": "Fatturazione",
|
||||
"workspace.nav.settings": "Impostazioni",
|
||||
"workspace.home.banner.beforeLink": "Modelli ottimizzati affidabili per agenti di codifica.",
|
||||
"workspace.home.billing.loading": "Caricamento...",
|
||||
"workspace.home.billing.enable": "Abilita fatturazione",
|
||||
"workspace.home.billing.currentBalance": "Saldo attuale",
|
||||
"workspace.newUser.feature.tested.title": "Modelli testati e verificati",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"Abbiamo confrontato e testato modelli specifici per gli agenti di codifica per garantire le migliori prestazioni.",
|
||||
"workspace.newUser.feature.quality.title": "Massima qualità",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"Modelli di accesso configurati per prestazioni ottimali: senza downgrade o instradamento verso fornitori più economici.",
|
||||
"workspace.newUser.feature.lockin.title": "Nessun lock-in",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"Utilizza Zen con qualsiasi agente di codifica e continua a utilizzare altri provider con opencode ogni volta che vuoi.",
|
||||
"workspace.newUser.copyApiKey": "Copia la chiave API",
|
||||
"workspace.newUser.copyKey": "Copia chiave",
|
||||
"workspace.newUser.copied": "Copiato!",
|
||||
"workspace.newUser.step.enableBilling": "Abilita fatturazione",
|
||||
"workspace.newUser.step.login.before": "Esegui",
|
||||
"workspace.newUser.step.login.after": "e seleziona opencode",
|
||||
"workspace.newUser.step.pasteKey": "Incolla la tua chiave API",
|
||||
"workspace.newUser.step.models.before": "Avvia opencode ed esegui",
|
||||
"workspace.newUser.step.models.after": "per selezionare un modello",
|
||||
"workspace.models.title": "Modelli",
|
||||
"workspace.models.subtitle.beforeLink": "Gestire i modelli a cui possono accedere i membri dell'area di lavoro.",
|
||||
"workspace.models.table.model": "Modello",
|
||||
"workspace.models.table.enabled": "Abilitato",
|
||||
"workspace.providers.title": "Bring Your Own Key (BYOK)",
|
||||
"workspace.providers.subtitle": "Configura le tue chiavi API dai fornitori di intelligenza artificiale.",
|
||||
"workspace.providers.placeholder": "Inserisci la chiave {{provider}} API ({{prefix}}...)",
|
||||
"workspace.providers.configure": "Configura",
|
||||
"workspace.providers.edit": "Modificare",
|
||||
"workspace.providers.delete": "Eliminare",
|
||||
"workspace.providers.saving": "Salvataggio in corso...",
|
||||
"workspace.providers.save": "Salva",
|
||||
"workspace.providers.table.provider": "Fornitore",
|
||||
"workspace.providers.table.apiKey": "Chiave API",
|
||||
"workspace.usage.title": "Cronologia dell'utilizzo",
|
||||
"workspace.usage.subtitle": "Utilizzo e costi recenti di API.",
|
||||
"workspace.usage.empty": "Effettua la tua prima chiamata API per iniziare.",
|
||||
"workspace.usage.table.date": "Data",
|
||||
"workspace.usage.table.model": "Modello",
|
||||
"workspace.usage.table.input": "Ingresso",
|
||||
"workspace.usage.table.output": "Produzione",
|
||||
"workspace.usage.table.cost": "Costo",
|
||||
"workspace.usage.breakdown.input": "Ingresso",
|
||||
"workspace.usage.breakdown.cacheRead": "Lettura cache",
|
||||
"workspace.usage.breakdown.cacheWrite": "Scrittura nella cache",
|
||||
"workspace.usage.breakdown.output": "Produzione",
|
||||
"workspace.usage.breakdown.reasoning": "Ragionamento",
|
||||
"workspace.usage.subscription": "abbonamento (${{amount}})",
|
||||
"workspace.cost.title": "Costo",
|
||||
"workspace.cost.subtitle": "Costi di utilizzo suddivisi per modello.",
|
||||
"workspace.cost.allModels": "Tutti i modelli",
|
||||
"workspace.cost.allKeys": "Tutte le chiavi",
|
||||
"workspace.cost.deletedSuffix": "(eliminato)",
|
||||
"workspace.cost.empty": "Nessun dato di utilizzo disponibile per il periodo selezionato.",
|
||||
"workspace.cost.subscriptionShort": "sub",
|
||||
"workspace.keys.title": "Chiavi API",
|
||||
"workspace.keys.subtitle": "Gestisci le tue chiavi API per accedere ai servizi opencode.",
|
||||
"workspace.keys.create": "Crea chiave API",
|
||||
"workspace.keys.placeholder": "Inserisci il nome della chiave",
|
||||
"workspace.keys.empty": "Crea una chiave opencode Gateway API",
|
||||
"workspace.keys.table.name": "Nome",
|
||||
"workspace.keys.table.key": "Chiave",
|
||||
"workspace.keys.table.createdBy": "Creato da",
|
||||
"workspace.keys.table.lastUsed": "Ultimo utilizzo",
|
||||
"workspace.keys.copyApiKey": "Copia la chiave API",
|
||||
"workspace.keys.delete": "Eliminare",
|
||||
"workspace.members.title": "Membri",
|
||||
"workspace.members.subtitle": "Gestire i membri dell'area di lavoro e le relative autorizzazioni.",
|
||||
"workspace.members.invite": "Invita membro",
|
||||
"workspace.members.inviting": "Invito in corso...",
|
||||
"workspace.members.beta.beforeLink": "Gli spazi di lavoro sono gratuiti per i team durante la beta.",
|
||||
"workspace.members.form.invitee": "Invitato",
|
||||
"workspace.members.form.emailPlaceholder": "Inserisci l'e-mail",
|
||||
"workspace.members.form.role": "Ruolo",
|
||||
"workspace.members.form.monthlyLimit": "Limite di spesa mensile",
|
||||
"workspace.members.noLimit": "Nessun limite",
|
||||
"workspace.members.noLimitLowercase": "nessun limite",
|
||||
"workspace.members.invited": "invitato",
|
||||
"workspace.members.edit": "Modificare",
|
||||
"workspace.members.delete": "Eliminare",
|
||||
"workspace.members.saving": "Salvataggio in corso...",
|
||||
"workspace.members.save": "Salva",
|
||||
"workspace.members.table.email": "E-mail",
|
||||
"workspace.members.table.role": "Ruolo",
|
||||
"workspace.members.table.monthLimit": "Limite mensile",
|
||||
"workspace.members.role.admin": "Admin",
|
||||
"workspace.members.role.adminDescription": "Può gestire modelli, membri e fatturazione",
|
||||
"workspace.members.role.member": "Membro",
|
||||
"workspace.members.role.memberDescription": "Possono generare chiavi API solo per se stessi",
|
||||
"workspace.settings.title": "Impostazioni",
|
||||
"workspace.settings.subtitle": "Aggiorna il nome e le preferenze dell'area di lavoro.",
|
||||
"workspace.settings.workspaceName": "Nome dell'area di lavoro",
|
||||
"workspace.settings.defaultName": "Predefinito",
|
||||
"workspace.settings.updating": "Aggiornamento...",
|
||||
"workspace.settings.save": "Salva",
|
||||
"workspace.settings.edit": "Modificare",
|
||||
"workspace.billing.title": "Fatturazione",
|
||||
"workspace.billing.subtitle.beforeLink": "Gestisci i metodi di pagamento.",
|
||||
"workspace.billing.contactUs": "Contattaci",
|
||||
"workspace.billing.subtitle.afterLink": "se hai qualche domanda",
|
||||
"workspace.billing.currentBalance": "Saldo attuale",
|
||||
"workspace.billing.add": "Aggiungi $",
|
||||
"workspace.billing.enterAmount": "Inserisci l'importo",
|
||||
"workspace.billing.loading": "Caricamento...",
|
||||
"workspace.billing.addAction": "Aggiungi",
|
||||
"workspace.billing.addBalance": "Aggiungi saldo",
|
||||
"workspace.billing.linkedToStripe": "Collegato a Stripe",
|
||||
"workspace.billing.manage": "Gestisci",
|
||||
"workspace.billing.enable": "Abilita fatturazione",
|
||||
"workspace.monthlyLimit.title": "Limite mensile",
|
||||
"workspace.monthlyLimit.subtitle": "Imposta un limite di utilizzo mensile per il tuo account.",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "Impostazione in corso...",
|
||||
"workspace.monthlyLimit.set": "Impostato",
|
||||
"workspace.monthlyLimit.edit": "Modifica limite",
|
||||
"workspace.monthlyLimit.noLimit": "Nessun limite di utilizzo impostato.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "Utilizzo attuale per",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "è $",
|
||||
"workspace.reload.title": "Ricarica automatica",
|
||||
"workspace.reload.disabled.before": "La ricarica automatica è",
|
||||
"workspace.reload.disabled.state": "disabilitato",
|
||||
"workspace.reload.disabled.after": "Abilita la ricarica automatica quando il saldo è basso.",
|
||||
"workspace.reload.enabled.before": "La ricarica automatica è",
|
||||
"workspace.reload.enabled.state": "abilitato",
|
||||
"workspace.reload.enabled.middle": "Ricaricheremo",
|
||||
"workspace.reload.processingFee": "tassa di elaborazione",
|
||||
"workspace.reload.enabled.after": "quando il saldo raggiunge",
|
||||
"workspace.reload.edit": "Modificare",
|
||||
"workspace.reload.enable": "Abilitare",
|
||||
"workspace.reload.enableAutoReload": "Abilita ricarica automatica",
|
||||
"workspace.reload.reloadAmount": "Ricarica $",
|
||||
"workspace.reload.whenBalanceReaches": "Quando il saldo raggiunge $",
|
||||
"workspace.reload.saving": "Salvataggio in corso...",
|
||||
"workspace.reload.save": "Salva",
|
||||
"workspace.reload.failedAt": "Ricarica non riuscita a",
|
||||
"workspace.reload.reason": "Motivo:",
|
||||
"workspace.reload.updatePaymentMethod": "Aggiorna il tuo metodo di pagamento e riprova.",
|
||||
"workspace.reload.retrying": "Nuovo tentativo...",
|
||||
"workspace.reload.retry": "Riprova",
|
||||
"workspace.payments.title": "Cronologia dei pagamenti",
|
||||
"workspace.payments.subtitle": "Transazioni di pagamento recenti.",
|
||||
"workspace.payments.table.date": "Data",
|
||||
"workspace.payments.table.paymentId": "ID pagamento",
|
||||
"workspace.payments.table.amount": "Importo",
|
||||
"workspace.payments.table.receipt": "Ricevuta",
|
||||
"workspace.payments.type.credit": "credito",
|
||||
"workspace.payments.type.subscription": "sottoscrizione",
|
||||
"workspace.payments.view": "Visualizza",
|
||||
"workspace.black.loading": "Caricamento...",
|
||||
"workspace.black.time.day": "giorno",
|
||||
"workspace.black.time.days": "giorni",
|
||||
"workspace.black.time.hour": "ora",
|
||||
"workspace.black.time.hours": "ore",
|
||||
"workspace.black.time.minute": "minuto",
|
||||
"workspace.black.time.minutes": "minuti",
|
||||
"workspace.black.time.fewSeconds": "pochi secondi",
|
||||
"workspace.black.subscription.title": "Sottoscrizione",
|
||||
"workspace.black.subscription.message": "Sei abbonato a OpenCode Black per ${{plan}} al mese.",
|
||||
"workspace.black.subscription.manage": "Gestisci abbonamento",
|
||||
"workspace.black.subscription.rollingUsage": "Utilizzo di 5 ore",
|
||||
"workspace.black.subscription.weeklyUsage": "Utilizzo settimanale",
|
||||
"workspace.black.subscription.resetsIn": "Si reimposta tra",
|
||||
"workspace.black.subscription.useBalance": "Utilizza il saldo disponibile dopo aver raggiunto i limiti di utilizzo",
|
||||
"workspace.black.waitlist.title": "Lista d'attesa",
|
||||
"workspace.black.waitlist.joined": "Sei in lista d'attesa per il piano OpenCode Black da ${{plan}} al mese.",
|
||||
"workspace.black.waitlist.ready": "Siamo pronti per iscriverti al piano OpenCode Black da ${{plan}} al mese.",
|
||||
"workspace.black.waitlist.leave": "Lascia la lista d'attesa",
|
||||
"workspace.black.waitlist.leaving": "Uscita in corso...",
|
||||
"workspace.black.waitlist.left": "Uscito dalla lista d'attesa",
|
||||
"workspace.black.waitlist.enroll": "Iscriversi",
|
||||
"workspace.black.waitlist.enrolling": "Iscrizione...",
|
||||
"workspace.black.waitlist.enrolled": "Iscritto",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"Quando fai clic su Iscriviti, l'abbonamento inizia immediatamente e l'importo verrà addebitato sulla tua carta.",
|
||||
"changelog.hero.subtitle": "Nuovi aggiornamenti e miglioramenti a OpenCode",
|
||||
"changelog.empty": "Nessuna voce del changelog trovata.",
|
||||
"changelog.viewJson": "Vedi JSON",
|
||||
|
||||
"bench.list.title": "Benchmark",
|
||||
"bench.list.heading": "Benchmark",
|
||||
"bench.list.table.agent": "Agente",
|
||||
"bench.list.table.model": "Modello",
|
||||
"bench.list.table.score": "Punteggio",
|
||||
|
||||
"bench.detail.title": "Benchmark - {{task}}",
|
||||
"bench.detail.notFound": "Task non trovato",
|
||||
"bench.detail.na": "N/D",
|
||||
"bench.detail.labels.agent": "Agente",
|
||||
"bench.detail.labels.model": "Modello",
|
||||
"bench.detail.labels.task": "Task",
|
||||
"bench.detail.labels.repo": "Repo",
|
||||
"bench.detail.labels.from": "Da",
|
||||
"bench.detail.labels.to": "A",
|
||||
"bench.detail.labels.prompt": "Prompt",
|
||||
"bench.detail.labels.commit": "Commit",
|
||||
"bench.detail.labels.averageDuration": "Durata Media",
|
||||
"bench.detail.labels.averageScore": "Punteggio Medio",
|
||||
"bench.detail.labels.averageCost": "Costo Medio",
|
||||
"bench.detail.labels.summary": "Riepilogo",
|
||||
"bench.detail.labels.runs": "Esecuzioni",
|
||||
"bench.detail.labels.score": "Punteggio",
|
||||
"bench.detail.labels.base": "Base",
|
||||
"bench.detail.labels.penalty": "Penalità",
|
||||
"bench.detail.labels.weight": "peso",
|
||||
"bench.detail.table.run": "Esecuzione",
|
||||
"bench.detail.table.score": "Punteggio (Base - Penalità)",
|
||||
"bench.detail.table.cost": "Costo",
|
||||
"bench.detail.table.duration": "Durata",
|
||||
"bench.detail.run.title": "Esecuzione {{n}}",
|
||||
"bench.detail.rawJson": "Raw JSON",
|
||||
} satisfies Dict
|
||||
|
||||
@@ -4,420 +4,392 @@ import { dict as en } from "./en"
|
||||
export const dict = {
|
||||
...en,
|
||||
"nav.github": "GitHub",
|
||||
"nav.docs": "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8",
|
||||
"nav.changelog": "\u5909\u66f4\u5c65\u6b74",
|
||||
"nav.docs": "ドキュメント",
|
||||
"nav.changelog": "変更履歴",
|
||||
"nav.discord": "Discord",
|
||||
"nav.x": "X",
|
||||
"nav.enterprise": "\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba",
|
||||
"nav.enterprise": "エンタープライズ",
|
||||
"nav.zen": "Zen",
|
||||
"nav.login": "\u30ed\u30b0\u30a4\u30f3",
|
||||
"nav.free": "\u7121\u6599",
|
||||
"nav.home": "\u30db\u30fc\u30e0",
|
||||
"nav.openMenu": "\u30e1\u30cb\u30e5\u30fc\u3092\u958b\u304f",
|
||||
"nav.getStartedFree": "\u7121\u6599\u3067\u306f\u3058\u3081\u308b",
|
||||
"nav.login": "ログイン",
|
||||
"nav.free": "無料",
|
||||
"nav.home": "ホーム",
|
||||
"nav.openMenu": "メニューを開く",
|
||||
"nav.getStartedFree": "無料ではじめる",
|
||||
|
||||
"nav.context.copyLogo": "\u30ed\u30b4\u3092SVG\u3067\u30b3\u30d4\u30fc",
|
||||
"nav.context.copyWordmark": "\u30ef\u30fc\u30c9\u30de\u30fc\u30af\u3092SVG\u3067\u30b3\u30d4\u30fc",
|
||||
"nav.context.brandAssets": "\u30d6\u30e9\u30f3\u30c9\u7d20\u6750",
|
||||
"nav.context.copyLogo": "ロゴをSVGでコピー",
|
||||
"nav.context.copyWordmark": "ワードマークをSVGでコピー",
|
||||
"nav.context.brandAssets": "ブランド素材",
|
||||
|
||||
"footer.github": "GitHub",
|
||||
"footer.docs": "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8",
|
||||
"footer.changelog": "\u5909\u66f4\u5c65\u6b74",
|
||||
"footer.docs": "ドキュメント",
|
||||
"footer.changelog": "変更履歴",
|
||||
"footer.discord": "Discord",
|
||||
"footer.x": "X",
|
||||
|
||||
"legal.brand": "\u30d6\u30e9\u30f3\u30c9",
|
||||
"legal.privacy": "\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc",
|
||||
"legal.terms": "\u5229\u7528\u898f\u7d04",
|
||||
"legal.brand": "ブランド",
|
||||
"legal.privacy": "プライバシー",
|
||||
"legal.terms": "利用規約",
|
||||
|
||||
"email.title":
|
||||
"\u65b0\u88fd\u54c1\u30ea\u30ea\u30fc\u30b9\u306e\u60c5\u5831\u3092\u3044\u3061\u65e9\u304f\u53d7\u3051\u53d6\u308b",
|
||||
"email.subtitle":
|
||||
"\u65e9\u671f\u30a2\u30af\u30bb\u30b9\u306e\u305f\u3081\u306b\u30a6\u30a7\u30a4\u30c8\u30ea\u30b9\u30c8\u306b\u767b\u9332\u3057\u3066\u304f\u3060\u3055\u3044\u3002",
|
||||
"email.placeholder": "\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9",
|
||||
"email.subscribe": "\u767b\u9332",
|
||||
"email.success":
|
||||
"\u307b\u307c\u5b8c\u4e86\u3067\u3059\u3002\u53d7\u4fe1\u30c8\u30ec\u30a4\u3092\u78ba\u8a8d\u3057\u3066\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044",
|
||||
"email.title": "新製品リリースの情報をいち早く受け取る",
|
||||
"email.subtitle": "早期アクセスのためにウェイトリストに登録してください。",
|
||||
"email.placeholder": "メールアドレス",
|
||||
"email.subscribe": "登録",
|
||||
"email.success": "ほぼ完了です。受信トレイを確認してメールアドレスを認証してください",
|
||||
|
||||
"notFound.title": "\u898b\u3064\u304b\u308a\u307e\u305b\u3093 | opencode",
|
||||
"notFound.heading": "404 - \u30da\u30fc\u30b8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093",
|
||||
"notFound.home": "\u30db\u30fc\u30e0",
|
||||
"notFound.docs": "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8",
|
||||
"notFound.title": "見つかりません | OpenCode",
|
||||
"notFound.heading": "404 - ページが見つかりません",
|
||||
"notFound.home": "ホーム",
|
||||
"notFound.docs": "ドキュメント",
|
||||
"notFound.github": "GitHub",
|
||||
"notFound.discord": "Discord",
|
||||
|
||||
"user.logout": "\u30ed\u30b0\u30a2\u30a6\u30c8",
|
||||
"user.logout": "ログアウト",
|
||||
|
||||
"workspace.select": "\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u9078\u629e",
|
||||
"workspace.createNew": "+ \u65b0\u3057\u3044\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u4f5c\u6210",
|
||||
"workspace.modal.title": "\u65b0\u3057\u3044\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u4f5c\u6210",
|
||||
"workspace.modal.placeholder": "\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u540d\u3092\u5165\u529b",
|
||||
"workspace.select": "ワークスペースを選択",
|
||||
"workspace.createNew": "+ 新しいワークスペースを作成",
|
||||
"workspace.modal.title": "新しいワークスペースを作成",
|
||||
"workspace.modal.placeholder": "ワークスペース名を入力",
|
||||
|
||||
"common.cancel": "\u30ad\u30e3\u30f3\u30bb\u30eb",
|
||||
"common.creating": "\u4f5c\u6210\u4e2d...",
|
||||
"common.create": "\u4f5c\u6210",
|
||||
"common.cancel": "キャンセル",
|
||||
"common.creating": "作成中...",
|
||||
"common.create": "作成",
|
||||
|
||||
"common.videoUnsupported":
|
||||
"\u304a\u4f7f\u3044\u306e\u30d6\u30e9\u30a6\u30b6\u306f video \u30bf\u30b0\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093\u3002",
|
||||
"common.figure": "\u56f3{{n}}",
|
||||
"common.videoUnsupported": "お使いのブラウザは video タグをサポートしていません。",
|
||||
"common.figure": "図 {{n}}.",
|
||||
"common.faq": "FAQ",
|
||||
"common.learnMore": "\u8a73\u3057\u304f\u898b\u308b",
|
||||
"common.learnMore": "詳しく見る",
|
||||
|
||||
"home.title":
|
||||
"OpenCode | \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306eAI\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8",
|
||||
"error.invalidPlan": "無効なプラン",
|
||||
"error.workspaceRequired": "ワークスペースIDが必要です",
|
||||
"error.alreadySubscribed": "このワークスペースは既にサブスクリプションを持っています",
|
||||
"error.limitRequired": "制限値が必要です。",
|
||||
"error.monthlyLimitInvalid": "有効な月間制限を設定してください。",
|
||||
"error.workspaceNameRequired": "ワークスペース名が必要です。",
|
||||
"error.nameTooLong": "名前は255文字以下である必要があります。",
|
||||
"error.emailRequired": "メールアドレスが必要です",
|
||||
"error.roleRequired": "ロールが必要です",
|
||||
"error.idRequired": "IDが必要です",
|
||||
"error.nameRequired": "名前が必要です",
|
||||
"error.providerRequired": "プロバイダーが必要です",
|
||||
"error.apiKeyRequired": "APIキーが必要です",
|
||||
"error.modelRequired": "モデルが必要です",
|
||||
"error.reloadAmountMin": "リロード額は少なくとも ${{amount}} である必要があります",
|
||||
"error.reloadTriggerMin": "残高トリガーは少なくとも ${{amount}} である必要があります",
|
||||
|
||||
"home.banner.badge": "\u65b0\u7740",
|
||||
"home.banner.text":
|
||||
"\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u304c\u30d9\u30fc\u30bf\u7248\u3067\u5229\u7528\u53ef\u80fd",
|
||||
"home.banner.platforms": "macOS\u3001Windows\u3001Linux\u3067",
|
||||
"home.banner.downloadNow": "\u4eca\u3059\u3050\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9",
|
||||
"home.banner.downloadBetaNow":
|
||||
"\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u306e\u30d9\u30fc\u30bf\u7248\u3092\u4eca\u3059\u3050\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9",
|
||||
"home.title": "OpenCode | オープンソースのAIコーディングエージェント",
|
||||
|
||||
"home.hero.title":
|
||||
"\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306eAI\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8",
|
||||
"home.hero.subtitle.a":
|
||||
"\u7121\u6599\u30e2\u30c7\u30eb\u4ed8\u304d\u3002\u4efb\u610f\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u306e\u4efb\u610f\u306e\u30e2\u30c7\u30eb\u306b\u63a5\u7d9a\u3067\u304d\u3001",
|
||||
"home.hero.subtitle.b": "Claude\u3001GPT\u3001Gemini\u306a\u3069\u306b\u3082\u5bfe\u5fdc\u3057\u307e\u3059\u3002",
|
||||
"temp.title": "OpenCode | ターミナル向けに構築されたAIコーディングエージェント",
|
||||
"temp.hero.title": "ターミナル向けに構築されたAIコーディングエージェント",
|
||||
"temp.zen": "OpenCode Zen",
|
||||
"temp.getStarted": "はじめる",
|
||||
"temp.feature.native.title": "ネイティブ TUI",
|
||||
"temp.feature.native.body": "レスポンシブでネイティブ、テーマ変更可能なターミナルUI",
|
||||
"temp.feature.zen.beforeLink": "OpenCodeが提供する",
|
||||
"temp.feature.zen.link": "厳選されたモデルリスト",
|
||||
"temp.feature.zen.afterLink": "",
|
||||
"temp.feature.models.beforeLink": "ローカルモデルを含む、",
|
||||
"temp.feature.models.afterLink": "を通じて75以上のLLMプロバイダーをサポート",
|
||||
"temp.screenshot.caption": "tokyonight テーマを使用した OpenCode TUI",
|
||||
"temp.screenshot.alt": "tokyonight テーマの OpenCode TUI",
|
||||
|
||||
"home.install.ariaLabel": "\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5",
|
||||
"home.banner.badge": "新着",
|
||||
"home.banner.text": "デスクトップアプリのベータ版が利用可能",
|
||||
"home.banner.platforms": "macOS、Windows、Linux で",
|
||||
"home.banner.downloadNow": "今すぐダウンロード",
|
||||
"home.banner.downloadBetaNow": "デスクトップベータ版を今すぐダウンロード",
|
||||
|
||||
"home.what.title": "OpenCode\u3068\u306f\uff1f",
|
||||
"home.hero.title": "オープンソースのAIコーディングエージェント",
|
||||
"home.hero.subtitle.a": "無料モデルが含まれています。また、任意のプロバイダーの任意のモデルに接続でき、",
|
||||
"home.hero.subtitle.b": "Claude、GPT、Gemini などにも対応します。",
|
||||
|
||||
"home.install.ariaLabel": "インストールオプション",
|
||||
|
||||
"home.what.title": "OpenCodeとは?",
|
||||
"home.what.body":
|
||||
"OpenCode\u306f\u3001\u30bf\u30fc\u30df\u30ca\u30eb\u3001IDE\u3001\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u3067\u306e\u30b3\u30fc\u30c9\u4f5c\u6210\u3092\u652f\u63f4\u3059\u308b\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3067\u3059\u3002",
|
||||
"home.what.lsp.title": "LSP\u5bfe\u5fdc",
|
||||
"home.what.lsp.body": "LLM\u306b\u9069\u3057\u305fLSP\u3092\u81ea\u52d5\u3067\u8aad\u307f\u8fbc\u307f\u307e\u3059",
|
||||
"home.what.multiSession.title": "\u30de\u30eb\u30c1\u30bb\u30c3\u30b7\u30e7\u30f3",
|
||||
"home.what.multiSession.body":
|
||||
"\u540c\u3058\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u8907\u6570\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u4e26\u884c\u5b9f\u884c\u3067\u304d\u307e\u3059",
|
||||
"home.what.shareLinks.title": "\u5171\u6709\u30ea\u30f3\u30af",
|
||||
"home.what.shareLinks.body":
|
||||
"\u53c2\u7167\u3084\u30c7\u30d0\u30c3\u30b0\u306e\u305f\u3081\u306b\u3001\u4efb\u610f\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u3078\u306e\u30ea\u30f3\u30af\u3092\u5171\u6709\u3067\u304d\u307e\u3059",
|
||||
"OpenCodeは、ターミナル、IDE、またはデスクトップでのコード作成を支援するオープンソースのエージェントです。",
|
||||
"home.what.lsp.title": "LSP対応",
|
||||
"home.what.lsp.body": "LLMに適したLSPを自動的に読み込みます",
|
||||
"home.what.multiSession.title": "マルチセッション",
|
||||
"home.what.multiSession.body": "同じプロジェクトで複数のエージェントを並行実行できます",
|
||||
"home.what.shareLinks.title": "共有リンク",
|
||||
"home.what.shareLinks.body": "参照やデバッグのために、任意のセッションへのリンクを共有できます",
|
||||
"home.what.copilot.title": "GitHub Copilot",
|
||||
"home.what.copilot.body":
|
||||
"GitHub\u3067\u30ed\u30b0\u30a4\u30f3\u3057\u3066Copilot\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u5229\u7528\u3067\u304d\u307e\u3059",
|
||||
"home.what.copilot.body": "GitHubでログインしてCopilotアカウントを利用できます",
|
||||
"home.what.chatgptPlus.title": "ChatGPT Plus/Pro",
|
||||
"home.what.chatgptPlus.body":
|
||||
"OpenAI\u3067\u30ed\u30b0\u30a4\u30f3\u3057\u3066ChatGPT Plus/Pro\u3092\u5229\u7528\u3067\u304d\u307e\u3059",
|
||||
"home.what.anyModel.title": "\u3042\u3089\u3086\u308b\u30e2\u30c7\u30eb",
|
||||
"home.what.anyModel.body":
|
||||
"Models.dev\u7d4c\u7531\u306775\u4ee5\u4e0a\u306eLLM\u30d7\u30ed\u30d0\u30a4\u30c0\u306b\u5bfe\u5fdc\uff08\u30ed\u30fc\u30ab\u30eb\u30e2\u30c7\u30eb\u542b\u3080\uff09",
|
||||
"home.what.anyEditor.title": "\u3042\u3089\u3086\u308b\u30a8\u30c7\u30a3\u30bf",
|
||||
"home.what.anyEditor.body":
|
||||
"\u30bf\u30fc\u30df\u30ca\u30ebUI\u3001\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u3001IDE\u62e1\u5f35\u3068\u3057\u3066\u5229\u7528\u3067\u304d\u307e\u3059",
|
||||
"home.what.readDocs": "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u8aad\u3080",
|
||||
"home.what.chatgptPlus.body": "OpenAIでログインしてChatGPT PlusまたはProアカウントを利用できます",
|
||||
"home.what.anyModel.title": "あらゆるモデル",
|
||||
"home.what.anyModel.body": "Models.dev経由で75以上のLLMプロバイダーに対応(ローカルモデル含む)",
|
||||
"home.what.anyEditor.title": "あらゆるエディタ",
|
||||
"home.what.anyEditor.body": "ターミナルインターフェース、デスクトップアプリ、IDE拡張機能として利用できます",
|
||||
"home.what.readDocs": "ドキュメントを読む",
|
||||
|
||||
"home.growth.title":
|
||||
"\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306eAI\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8",
|
||||
"home.growth.title": "オープンソースのAIコーディングエージェント",
|
||||
"home.growth.body":
|
||||
"GitHub\u30b9\u30bf\u30fc<strong>{{stars}}</strong>\u4ee5\u4e0a\u3001\u30b3\u30f3\u30c8\u30ea\u30d3\u30e5\u30fc\u30bf\u30fc<strong>{{contributors}}</strong>\u4eba\u3001\u30b3\u30df\u30c3\u30c8<strong>{{commits}}</strong>\u4ef6\u4ee5\u4e0a\u3002\u6bce\u6708<strong>{{monthlyUsers}}</strong>\u4eba\u4ee5\u4e0a\u306e\u958b\u767a\u8005\u306b\u5229\u7528\u30fb\u4fe1\u983c\u3055\u308c\u3066\u3044\u307e\u3059\u3002",
|
||||
"home.growth.githubStars": "GitHub\u30b9\u30bf\u30fc",
|
||||
"home.growth.contributors": "\u30b3\u30f3\u30c8\u30ea\u30d3\u30e5\u30fc\u30bf\u30fc",
|
||||
"home.growth.monthlyDevs": "\u6708\u9593\u958b\u767a\u8005\u6570",
|
||||
"GitHubスター<strong>{{stars}}</strong>以上、コントリビューター<strong>{{contributors}}</strong>人、コミット<strong>{{commits}}</strong>件以上。毎月<strong>{{monthlyUsers}}</strong>人以上の開発者に利用・信頼されています。",
|
||||
"home.growth.githubStars": "GitHubスター",
|
||||
"home.growth.contributors": "コントリビューター",
|
||||
"home.growth.monthlyDevs": "月間開発者数",
|
||||
|
||||
"home.privacy.title": "\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u3092\u6700\u512a\u5148\u306b\u8a2d\u8a08",
|
||||
"home.privacy.title": "プライバシーを最優先に設計",
|
||||
"home.privacy.body":
|
||||
"OpenCode\u306f\u30b3\u30fc\u30c9\u3084\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30c7\u30fc\u30bf\u3092\u4e00\u5207\u4fdd\u5b58\u3057\u306a\u3044\u305f\u3081\u3001\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u304c\u91cd\u8996\u3055\u308c\u308b\u74b0\u5883\u3067\u3082\u5229\u7528\u3067\u304d\u307e\u3059\u3002",
|
||||
"home.privacy.learnMore": "\u8a73\u3057\u304f\u306f",
|
||||
"home.privacy.link": "\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc",
|
||||
"OpenCodeはコードやコンテキストデータを一切保存しないため、プライバシーが重視される環境でも利用できます。",
|
||||
"home.privacy.learnMore": "詳しくは",
|
||||
"home.privacy.link": "プライバシー",
|
||||
|
||||
"home.faq.q1": "OpenCode\u3068\u306f\uff1f",
|
||||
"home.faq.q1": "OpenCodeとは?",
|
||||
"home.faq.a1":
|
||||
"OpenCode\u306f\u3001\u4efb\u610f\u306eAI\u30e2\u30c7\u30eb\u3067\u30b3\u30fc\u30c9\u306e\u4f5c\u6210\u30fb\u5b9f\u884c\u3092\u652f\u63f4\u3059\u308b\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3067\u3059\u3002\u30bf\u30fc\u30df\u30ca\u30eb\u30d9\u30fc\u30b9\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3001\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u3001IDE\u62e1\u5f35\u3068\u3057\u3066\u5229\u7528\u3067\u304d\u307e\u3059\u3002",
|
||||
"home.faq.q2": "OpenCode\u306e\u4f7f\u3044\u65b9\u306f\uff1f",
|
||||
"home.faq.a2.before": "\u6700\u3082\u7c21\u5358\u306a\u59cb\u3081\u65b9\u306f",
|
||||
"home.faq.a2.link": "\u30a4\u30f3\u30c8\u30ed\u3092\u8aad\u3080",
|
||||
"home.faq.q3":
|
||||
"OpenCode\u306b\u306f\u8ffd\u52a0\u306eAI\u30b5\u30d6\u30b9\u30af\u304c\u5fc5\u8981\u3067\u3059\u304b\uff1f",
|
||||
"home.faq.a3.p1":
|
||||
"\u5fc5\u305a\u3057\u3082\u5fc5\u8981\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002OpenCode\u306b\u306f\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u4e0d\u8981\u3067\u4f7f\u3048\u308b\u7121\u6599\u30e2\u30c7\u30eb\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002",
|
||||
"home.faq.a3.p2.beforeZen": "\u307e\u305f\u3001",
|
||||
"home.faq.a3.p2.afterZen":
|
||||
"\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u3067\u3001\u4eba\u6c17\u306e\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30e2\u30c7\u30eb\u3092\u5229\u7528\u3067\u304d\u307e\u3059\u3002",
|
||||
"OpenCodeは、任意のAIモデルでコードの作成・実行を支援するオープンソースのエージェントです。ターミナルベースのインターフェース、デスクトップアプリ、IDE拡張として利用できます。",
|
||||
"home.faq.q2": "OpenCodeの使い方は?",
|
||||
"home.faq.a2.before": "最も簡単な始め方は",
|
||||
"home.faq.a2.link": "イントロを読む",
|
||||
"home.faq.q3": "OpenCodeには追加のAIサブスクリプションが必要ですか?",
|
||||
"home.faq.a3.p1": "必ずしも必要ではありません。OpenCodeには、アカウント不要で使える無料モデルが含まれています。",
|
||||
"home.faq.a3.p2.beforeZen": "これらに加えて、",
|
||||
"home.faq.a3.p2.afterZen": " アカウントを作成することで、人気のコーディングモデルを利用できます。",
|
||||
"home.faq.a3.p3":
|
||||
"Zen\u306e\u5229\u7528\u3092\u63a8\u5968\u3057\u3066\u3044\u307e\u3059\u304c\u3001OpenCode\u306fOpenAI\u3001Anthropic\u3001xAI\u306a\u3069\u306e\u4e3b\u8981\u30d7\u30ed\u30d0\u30a4\u30c0\u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002",
|
||||
"home.faq.a3.p4.beforeLocal": "\u3055\u3089\u306b\u3001",
|
||||
"home.faq.a3.p4.localLink": "\u30ed\u30fc\u30ab\u30eb\u30e2\u30c7\u30eb",
|
||||
"home.faq.q4": "\u65e2\u5b58\u306eAI\u30b5\u30d6\u30b9\u30af\u3092OpenCode\u3067\u4f7f\u3048\u307e\u3059\u304b\uff1f",
|
||||
"Zenの利用を推奨していますが、OpenCodeはOpenAI、Anthropic、xAIなどの主要プロバイダーにも対応しています。",
|
||||
"home.faq.a3.p4.beforeLocal": "さらに、",
|
||||
"home.faq.a3.p4.localLink": "ローカルモデル",
|
||||
"home.faq.q4": "既存のAIサブスクリプションをOpenCodeで使えますか?",
|
||||
"home.faq.a4.p1":
|
||||
"\u306f\u3044\u3002OpenCode\u306f\u4e3b\u8981\u30d7\u30ed\u30d0\u30a4\u30c0\u306e\u30b5\u30d6\u30b9\u30af\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002Claude Pro/Max\u3001ChatGPT Plus/Pro\u3001GitHub Copilot\u3092\u5229\u7528\u3067\u304d\u307e\u3059\u3002",
|
||||
"home.faq.q5": "\u30bf\u30fc\u30df\u30ca\u30eb\u3060\u3051\u3067\u4f7f\u3048\u307e\u3059\u304b\uff1f",
|
||||
"home.faq.a5.beforeDesktop": "\u3082\u3046\u9055\u3044\u307e\u3059! OpenCode\u306f\u4eca\u306f",
|
||||
"home.faq.a5.desktop": "\u30c7\u30b9\u30af\u30c8\u30c3\u30d7",
|
||||
"home.faq.a5.and": "\u3068",
|
||||
"home.faq.a5.web": "\u30a6\u30a7\u30d6",
|
||||
"home.faq.q6": "OpenCode\u306e\u4fa1\u683c\u306f\uff1f",
|
||||
"はい、OpenCodeは主要プロバイダーのサブスクリプションプランに対応しています。Claude Pro/Max、ChatGPT Plus/Pro、GitHub Copilotのサブスクリプションを利用できます。",
|
||||
"home.faq.q5": "ターミナルだけで使えますか?",
|
||||
"home.faq.a5.beforeDesktop": "もう違います!OpenCodeは今は",
|
||||
"home.faq.a5.desktop": "デスクトップ",
|
||||
"home.faq.a5.and": "と",
|
||||
"home.faq.a5.web": "ウェブ",
|
||||
"home.faq.q6": "OpenCodeの価格は?",
|
||||
"home.faq.a6":
|
||||
"OpenCode\u306f100%\u7121\u6599\u3067\u4f7f\u3048\u307e\u3059\u3002\u7121\u6599\u30e2\u30c7\u30eb\u3082\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u4ed6\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u306b\u63a5\u7d9a\u3059\u308b\u5834\u5408\u306f\u8ffd\u52a0\u8cbb\u7528\u304c\u767a\u751f\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002",
|
||||
"home.faq.q7": "\u30c7\u30fc\u30bf\u3068\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u306f\uff1f",
|
||||
"home.faq.a7.p1":
|
||||
"\u7121\u6599\u30e2\u30c7\u30eb\u3092\u4f7f\u3046\u5834\u5408\u3084\u5171\u6709\u30ea\u30f3\u30af\u3092\u4f5c\u6210\u3059\u308b\u5834\u5408\u306b\u306e\u307f\u3001\u30c7\u30fc\u30bf\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002",
|
||||
"home.faq.a7.p2.beforeModels": "\u8a73\u3057\u304f\u306f",
|
||||
"home.faq.a7.p2.modelsLink": "\u30e2\u30c7\u30eb\u306e\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc",
|
||||
"home.faq.a7.p2.and": "\u3068",
|
||||
"home.faq.a7.p2.shareLink": "\u5171\u6709\u30da\u30fc\u30b8\u306e\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc",
|
||||
"home.faq.q8": "OpenCode\u306f\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3067\u3059\u304b\uff1f",
|
||||
"home.faq.a8.p1":
|
||||
"\u306f\u3044\u3002OpenCode\u306f\u5b8c\u5168\u306b\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3067\u3059\u3002\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f",
|
||||
"home.faq.a8.p2": "\u306e",
|
||||
"home.faq.a8.mitLicense": "MIT\u30e9\u30a4\u30bb\u30f3\u30b9",
|
||||
"OpenCodeは100%無料で使えます。無料モデルも含まれています。他のプロバイダーに接続する場合は追加費用が発生することがあります。",
|
||||
"home.faq.q7": "データとプライバシーは?",
|
||||
"home.faq.a7.p1": "無料モデルを使う場合や共有リンクを作成する場合にのみ、データが保存されます。",
|
||||
"home.faq.a7.p2.beforeModels": "詳しくは",
|
||||
"home.faq.a7.p2.modelsLink": "モデルのプライバシー",
|
||||
"home.faq.a7.p2.and": "と",
|
||||
"home.faq.a7.p2.shareLink": "共有ページのプライバシー",
|
||||
"home.faq.q8": "OpenCodeはオープンソースですか?",
|
||||
"home.faq.a8.p1": "はい、OpenCodeは完全にオープンソースです。ソースコードは",
|
||||
"home.faq.a8.p2": "の",
|
||||
"home.faq.a8.mitLicense": "MITライセンス",
|
||||
"home.faq.a8.p3":
|
||||
"\u306e\u3082\u3068\u3067\u516c\u958b\u3055\u308c\u3066\u304a\u308a\u3001\u8ab0\u3067\u3082\u4f7f\u7528\u30fb\u5909\u66f4\u30fb\u958b\u767a\u3078\u306e\u53c2\u52a0\u304c\u3067\u304d\u307e\u3059\u3002\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u8ab0\u3067\u3082issue\u3092\u8d77\u3053\u3057\u305f\u308a\u3001pull request\u3092\u9001\u3063\u305f\u308a\u3001\u6a5f\u80fd\u3092\u62e1\u5f35\u3067\u304d\u307e\u3059\u3002",
|
||||
"のもとで公開されており、誰でも使用、変更、開発への参加ができます。コミュニティの誰でもissueを起こしたり、pull requestを送ったり、機能を拡張できます。",
|
||||
|
||||
"home.zenCta.title":
|
||||
"\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5411\u3051\u306e\u4fe1\u983c\u3067\u304d\u308b\u6700\u9069\u5316\u30e2\u30c7\u30eb",
|
||||
"home.zenCta.title": "コーディングエージェント向けの信頼できる最適化モデル",
|
||||
"home.zenCta.body":
|
||||
"Zen\u306f\u3001OpenCode\u304c\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5411\u3051\u306b\u30c6\u30b9\u30c8\u30fb\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u6e08\u307f\u306eAI\u30e2\u30c7\u30eb\u3092\u53b3\u9078\u3057\u3066\u63d0\u4f9b\u3057\u307e\u3059\u3002\u30d7\u30ed\u30d0\u30a4\u30c0\u9593\u306e\u6027\u80fd\u30fb\u54c1\u8cea\u306e\u30d6\u30ec\u3092\u6c17\u306b\u305b\u305a\u3001\u691c\u8a3c\u6e08\u307f\u306e\u30e2\u30c7\u30eb\u3092\u5229\u7528\u3067\u304d\u307e\u3059\u3002",
|
||||
"home.zenCta.link": "Zen\u306b\u3064\u3044\u3066\u77e5\u308b",
|
||||
"Zenは、OpenCodeがコーディングエージェント向けにテスト・ベンチマーク済みのAIモデルを厳選して提供します。プロバイダー間の性能・品質のブレを気にせず、検証済みのモデルを利用できます。",
|
||||
"home.zenCta.link": "Zenについて知る",
|
||||
|
||||
"download.title": "OpenCode | \u30c0\u30a6\u30f3\u30ed\u30fc\u30c9",
|
||||
|
||||
"zen.title":
|
||||
"OpenCode Zen | \u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5411\u3051\u306e\u4fe1\u983c\u3067\u304d\u308b\u6700\u9069\u5316\u30e2\u30c7\u30eb\u3092\u53b3\u9078",
|
||||
"zen.hero.title":
|
||||
"\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5411\u3051\u306e\u4fe1\u983c\u3067\u304d\u308b\u6700\u9069\u5316\u30e2\u30c7\u30eb",
|
||||
"zen.title": "OpenCode Zen | コーディングエージェント向けの信頼できる最適化モデル",
|
||||
"zen.hero.title": "コーディングエージェント向けの信頼できる最適化モデル",
|
||||
"zen.hero.body":
|
||||
"Zen\u306f\u3001OpenCode\u304c\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5411\u3051\u306b\u30c6\u30b9\u30c8\u30fb\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u6e08\u307f\u306eAI\u30e2\u30c7\u30eb\u3092\u53b3\u9078\u3057\u3066\u63d0\u4f9b\u3057\u307e\u3059\u3002\u30d7\u30ed\u30d0\u30a4\u30c0\u9593\u306e\u6027\u80fd\u30fb\u54c1\u8cea\u306e\u30d6\u30ec\u3092\u6c17\u306b\u305b\u305a\u3001\u691c\u8a3c\u6e08\u307f\u306e\u30e2\u30c7\u30eb\u3092\u5229\u7528\u3067\u304d\u307e\u3059\u3002",
|
||||
"Zenは、OpenCodeがコーディングエージェント向けにテスト・ベンチマーク済みのAIモデルを厳選して提供します。プロバイダー間の性能・品質のブレを気にせず、検証済みのモデルを利用できます。",
|
||||
|
||||
"zen.faq.q1": "OpenCode Zen\u3068\u306f?",
|
||||
"zen.faq.q1": "OpenCode Zenとは?",
|
||||
"zen.faq.a1":
|
||||
"Zen \u306f\u3001OpenCode \u306e\u30c1\u30fc\u30e0\u304c\u4f5c\u6210\u3057\u305f\u3001\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5411\u3051\u306b\u30c6\u30b9\u30c8\u30fb\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u3055\u308c\u305f AI \u30e2\u30c7\u30eb\u306e\u53b3\u9078\u30bb\u30c3\u30c8\u3067\u3059\u3002",
|
||||
"zen.faq.q2": "Zen \u306f\u306a\u305c\u7cbe\u5ea6\u304c\u9ad8\u3044\u306e\u3067\u3059\u304b?",
|
||||
"Zenは、OpenCodeのチームが作成した、コーディングエージェント向けにテスト・ベンチマークされたAIモデルの厳選セットです。",
|
||||
"zen.faq.q2": "Zenはなぜ精度が高いのですか?",
|
||||
"zen.faq.a2":
|
||||
"Zen \u306f\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5411\u3051\u306b\u30c6\u30b9\u30c8\u30fb\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u3055\u308c\u305f\u30e2\u30c7\u30eb\u3060\u3051\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u30d0\u30bf\u30fc\u30ca\u30a4\u30d5\u3067\u30b9\u30c6\u30fc\u30ad\u3092\u5207\u3089\u306a\u3044\u3088\u3046\u306b\u3001\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u306b\u306f\u8cea\u306e\u4f4e\u3044\u30e2\u30c7\u30eb\u3092\u4f7f\u308f\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002",
|
||||
"zen.faq.q3": "Zen \u306f\u5b89\u3044\u3067\u3059\u304b?",
|
||||
"Zenはコーディングエージェント向けにテスト・ベンチマークされたモデルだけを提供します。ステーキを切るのにバターナイフを使わないように、コーディングには品質の低いモデルを使わないでください。",
|
||||
"zen.faq.q3": "Zenは安いですか?",
|
||||
"zen.faq.a3":
|
||||
"Zen \u306f\u55b6\u5229\u76ee\u7684\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002Zen \u306f\u30e2\u30c7\u30eb\u63d0\u4f9b\u5143\u306e\u30b3\u30b9\u30c8\u3092\u305d\u306e\u307e\u307e\u3042\u306a\u305f\u306b\u6e21\u3057\u307e\u3059\u3002Zen \u306e\u5229\u7528\u304c\u5897\u3048\u308b\u307b\u3069\u3001OpenCode \u306f\u3088\u308a\u826f\u3044\u30ec\u30fc\u30c8\u3092\u4ea4\u6e09\u3057\u3001\u305d\u306e\u5206\u3092\u3042\u306a\u305f\u306b\u9084\u5143\u3067\u304d\u307e\u3059\u3002",
|
||||
"zen.faq.q4": "Zen \u306e\u6599\u91d1\u306f?",
|
||||
"zen.faq.a4.p1.beforePricing": "Zen \u306f",
|
||||
"zen.faq.a4.p1.pricingLink": "\u30ea\u30af\u30a8\u30b9\u30c8\u5358\u4f4d\u3067\u8ab2\u91d1",
|
||||
"zen.faq.a4.p1.afterPricing":
|
||||
"\u3057\u3001\u30de\u30fc\u30af\u30a2\u30c3\u30d7\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3064\u307e\u308a\u3001\u30e2\u30c7\u30eb\u63d0\u4f9b\u5143\u306e\u8acb\u6c42\u984d\u3092\u305d\u306e\u307e\u307e\u652f\u6255\u3044\u307e\u3059\u3002",
|
||||
"zen.faq.a4.p2.beforeAccount":
|
||||
"\u7dcf\u30b3\u30b9\u30c8\u306f\u5229\u7528\u91cf\u306b\u4f9d\u5b58\u3057\u3001\u6708\u6b21\u306e\u652f\u51fa\u4e0a\u9650\u3092",
|
||||
"zen.faq.a4.p2.accountLink": "\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u8a2d\u5b9a\u3067\u304d\u307e\u3059",
|
||||
"zen.faq.a4.p3":
|
||||
"\u30b3\u30b9\u30c8\u3092\u8cc4\u3046\u305f\u3081\u306b\u3001OpenCode \u306f $20 \u306e\u6b8b\u9ad8\u30c1\u30e3\u30fc\u30b8\u3042\u305f\u308a $1.23 \u306e\u5c0f\u3055\u306a\u6c7a\u6e08\u624b\u6570\u6599\u306e\u307f\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002",
|
||||
"zen.faq.q5": "\u30c7\u30fc\u30bf\u3068\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u306f?",
|
||||
"Zenは営利目的ではありません。Zenはモデル提供元のコストをそのままあなたに渡します。Zenの利用が増えるほど、OpenCodeはより良いレートを交渉し、その分をあなたに還元できます。",
|
||||
"zen.faq.q4": "Zenの料金は?",
|
||||
"zen.faq.a4.p1.beforePricing": "Zenは",
|
||||
"zen.faq.a4.p1.pricingLink": "リクエスト単位で課金",
|
||||
"zen.faq.a4.p1.afterPricing": "し、マークアップはありません。つまり、モデル提供元の請求額をそのまま支払います。",
|
||||
"zen.faq.a4.p2.beforeAccount": "総コストは利用量に依存し、月次の支出上限を",
|
||||
"zen.faq.a4.p2.accountLink": "アカウント",
|
||||
"zen.faq.a4.p3": "コストを賄うために、OpenCodeは$20の残高チャージあたり$1.23の小さな決済手数料のみを追加します。",
|
||||
"zen.faq.q5": "データとプライバシーは?",
|
||||
"zen.faq.a5.beforeExceptions":
|
||||
"Zen \u306e\u30e2\u30c7\u30eb\u306f\u3059\u3079\u3066\u7c73\u56fd\u3067\u30db\u30b9\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30d7\u30ed\u30d0\u30a4\u30c0\u306f\u30bc\u30ed\u4fdd\u6301\u30dd\u30ea\u30b7\u30fc\u3092\u5b88\u308a\u3001\u30c7\u30fc\u30bf\u3092\u30e2\u30c7\u30eb\u5b66\u7fd2\u306b\u4f7f\u7528\u3057\u307e\u305b\u3093\u3002",
|
||||
"zen.faq.a5.exceptionsLink": "\u4f8b\u5916\u306f\u3053\u3061\u3089",
|
||||
"zen.faq.q6": "\u652f\u51fa\u4e0a\u9650\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u304b?",
|
||||
"zen.faq.a6":
|
||||
"\u306f\u3044\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u6708\u6b21\u306e\u652f\u51fa\u4e0a\u9650\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002",
|
||||
"zen.faq.q7": "\u30ad\u30e3\u30f3\u30bb\u30eb\u3067\u304d\u307e\u3059\u304b?",
|
||||
"zen.faq.a7":
|
||||
"\u306f\u3044\u3001\u3044\u3064\u3067\u3082\u8acb\u6c42\u3092\u7121\u52b9\u5316\u3057\u3001\u6b8b\u308a\u306e\u6b8b\u9ad8\u3092\u5229\u7528\u3067\u304d\u307e\u3059\u3002",
|
||||
"zen.faq.q8":
|
||||
"\u4ed6\u306e\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3067\u3082 Zen \u3092\u4f7f\u3048\u307e\u3059\u304b?",
|
||||
"Zenのモデルはすべて米国でホストされています。プロバイダーはゼロ保持ポリシーを守り、データをモデル学習に使用しません(",
|
||||
"zen.faq.a5.exceptionsLink": "以下の例外",
|
||||
"zen.faq.q6": "支出上限を設定できますか?",
|
||||
"zen.faq.a6": "はい、アカウントで月次の支出上限を設定できます。",
|
||||
"zen.faq.q7": "キャンセルできますか?",
|
||||
"zen.faq.a7": "はい、いつでも請求を無効化し、残りの残高を利用できます。",
|
||||
"zen.faq.q8": "他のコーディングエージェントでもZenを使えますか?",
|
||||
"zen.faq.a8":
|
||||
"Zen \u306f OpenCode \u3068\u306e\u76f8\u6027\u304c\u826f\u3044\u3067\u3059\u304c\u3001\u3069\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3067\u3082 Zen \u3092\u5229\u7528\u3067\u304d\u307e\u3059\u3002\u304a\u4f7f\u3044\u306e\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806\u306b\u5f93\u3063\u3066\u304f\u3060\u3055\u3044\u3002",
|
||||
"zen.cta.start": "Zen を始めましょう",
|
||||
"zen.pricing.title": "$20 の従量課金制残高を追加",
|
||||
"ZenはOpenCodeとの相性が良いですが、どのエージェントでもZenを利用できます。お使いのコーディングエージェントのセットアップ手順に従ってください。",
|
||||
|
||||
"zen.cta.start": "Zenをはじめる",
|
||||
"zen.pricing.title": "$20の従量課金制残高を追加",
|
||||
"zen.pricing.fee": "(+$1.23 カード処理手数料)",
|
||||
"zen.pricing.body":
|
||||
"任意のエージェントと一緒に使用します。毎月の支出制限を設定します。いつでもキャンセルしてください。",
|
||||
"zen.problem.title": "Zen はどのような問題を解決していますか?",
|
||||
"任意のエージェントと一緒に使用できます。毎月の支出制限を設定できます。いつでもキャンセルできます。",
|
||||
"zen.problem.title": "Zenはどのような問題を解決していますか?",
|
||||
"zen.problem.body":
|
||||
"利用可能なモデルは非常に多くありますが、コーディング エージェントで適切に機能するモデルはほんのわずかです。ほとんどのプロバイダーは、それらを異なる方法で構成し、結果も異なります。",
|
||||
"zen.problem.subtitle": "OpenCode ユーザーだけでなく、すべての人を対象にこの問題を修正しています。",
|
||||
"利用可能なモデルは非常に多くありますが、コーディングエージェントで適切に機能するモデルはほんのわずかです。ほとんどのプロバイダーは、それらを異なる設定で提供し、結果も異なります。",
|
||||
"zen.problem.subtitle": "OpenCodeユーザーだけでなく、すべての人を対象にこの問題を修正しています。",
|
||||
"zen.problem.item1": "選択したモデルをテストし、チームに相談する",
|
||||
"zen.problem.item2": "プロバイダーと連携して適切に配信されるようにする",
|
||||
"zen.problem.item3": "私たちが推奨するすべてのモデルとプロバイダーの組み合わせのベンチマーク",
|
||||
"zen.how.title": "Zen の仕組み",
|
||||
"zen.how.body": "Zen を OpenCode とともに使用することをお勧めしますが、Zen はどのエージェントでも使用できます。",
|
||||
"zen.how.step1.title": "サインアップして 20 ドルの残高を追加してください",
|
||||
"zen.how.step1.beforeLink": "に従ってください",
|
||||
"zen.problem.item2": "プロバイダーと連携して適切に提供されるようにする",
|
||||
"zen.problem.item3": "私たちが推奨するすべてのモデルとプロバイダーの組み合わせをベンチマークする",
|
||||
"zen.how.title": "Zenの仕組み",
|
||||
"zen.how.body": "ZenをOpenCodeとともに使用することをお勧めしますが、Zenはどのエージェントでも使用できます。",
|
||||
"zen.how.step1.title": "サインアップして$20の残高を追加",
|
||||
"zen.how.step1.beforeLink": "",
|
||||
"zen.how.step1.link": "セットアップ手順",
|
||||
"zen.how.step2.title": "透明性のある価格設定で Zen を使用する",
|
||||
"zen.how.step2.title": "透明性のある価格設定でZenを使用する",
|
||||
"zen.how.step2.link": "リクエストごとに支払う",
|
||||
"zen.how.step2.afterLink": "値上げゼロで",
|
||||
"zen.how.step3.title": "自動補充",
|
||||
"zen.how.step3.body": "残高が 5 ドルに達すると、自動的に 20 ドルが追加されます",
|
||||
"zen.how.step2.afterLink": "(マークアップなし)",
|
||||
"zen.how.step3.title": "自動チャージ",
|
||||
"zen.how.step3.body": "残高が$5に達すると、自動的に$20が追加されます",
|
||||
"zen.privacy.title": "あなたのプライバシーは私たちにとって重要です",
|
||||
"zen.privacy.beforeExceptions":
|
||||
"すべての Zen モデルは米国でホストされています。プロバイダーはゼロ保持ポリシーに従い、モデルのトレーニングにデータを使用しません。",
|
||||
"すべてのZenモデルは米国でホストされています。プロバイダーはゼロ保持ポリシーに従い、モデルのトレーニングにデータを使用しません(",
|
||||
"zen.privacy.exceptionsLink": "以下の例外",
|
||||
"download.meta.description":
|
||||
"macOS\u3001Windows\u3001Linux \u5411\u3051\u306b OpenCode \u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3059",
|
||||
"download.hero.title": "OpenCode \u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9",
|
||||
"download.hero.subtitle":
|
||||
"macOS\u3001Windows\u3001Linux \u5411\u3051\u306b\u30d9\u30fc\u30bf\u7248\u3092\u63d0\u4f9b\u4e2d",
|
||||
"download.hero.button": "{{os}} \u5411\u3051\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9",
|
||||
"download.section.terminal": "OpenCode \u30bf\u30fc\u30df\u30ca\u30eb",
|
||||
"download.section.desktop": "OpenCode \u30c7\u30b9\u30af\u30c8\u30c3\u30d7\uff08Beta\uff09",
|
||||
"download.section.extensions": "OpenCode \u62e1\u5f35\u6a5f\u80fd",
|
||||
"download.section.integrations": "OpenCode \u9023\u643a",
|
||||
"download.action.download": "\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9",
|
||||
"download.action.install": "\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb",
|
||||
|
||||
"download.platform.macosAppleSilicon": "macOS (Apple Silicon)",
|
||||
"download.platform.macosIntel": "macOS (Intel)",
|
||||
"download.platform.windowsX64": "Windows (x64)",
|
||||
"download.platform.linuxDeb": "Linux (.deb)",
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
"download.faq.a3.beforeLocal":
|
||||
"\u5fc5\u305a\u3057\u3082\u305d\u3046\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u304a\u305d\u3089\u304f\u5fc5\u8981\u3067\u3059\u3002OpenCode \u3092\u6709\u6599\u30d7\u30ed\u30d0\u30a4\u30c0\u306b\u63a5\u7d9a\u3057\u305f\u3044\u5834\u5408\u306f AI \u306e\u30b5\u30d6\u30b9\u30af\u30ea\u30d7\u30b7\u30e7\u30f3\u304c\u5fc5\u8981\u3067\u3059\u304c\u3001",
|
||||
"download.faq.a3.localLink": "\u30ed\u30fc\u30ab\u30eb\u30e2\u30c7\u30eb",
|
||||
"download.faq.a3.afterLocal.beforeZen":
|
||||
"\u306f\u7121\u6599\u3067\u5229\u7528\u3067\u304d\u307e\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u306b",
|
||||
"download.faq.a3.afterZen":
|
||||
"\u306e\u5229\u7528\u3092\u52e7\u3081\u3066\u3044\u307e\u3059\u304c\u3001OpenCode \u306f OpenAI\u3001Anthropic\u3001xAI \u306a\u3069\u306e\u4e3b\u8981\u306a\u30d7\u30ed\u30d0\u30a4\u30c0\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002",
|
||||
"download.faq.a5.p1": "OpenCode \u306f 100% \u7121\u6599\u3067\u5229\u7528\u3067\u304d\u307e\u3059\u3002",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"\u8ffd\u52a0\u30b3\u30b9\u30c8\u306f\u30e2\u30c7\u30eb\u30d7\u30ed\u30d0\u30a4\u30c0\u306e\u30b5\u30d6\u30b9\u30af\u30ea\u30d7\u30b7\u30e7\u30f3\u304b\u3089\u767a\u751f\u3057\u307e\u3059\u3002OpenCode \u306f\u3069\u306e\u30e2\u30c7\u30eb\u30d7\u30ed\u30d0\u30a4\u30c0\u3067\u3082\u5229\u7528\u3067\u304d\u307e\u3059\u304c\u3001",
|
||||
"download.faq.a5.p2.afterZen": "\u306e\u5229\u7528\u3092\u304a\u3059\u3059\u3081\u3057\u307e\u3059\u3002",
|
||||
"download.faq.a6.p1":
|
||||
"\u3042\u306a\u305f\u306e\u30c7\u30fc\u30bf\u3068\u60c5\u5831\u306f\u3001OpenCode \u3067\u5171\u6709\u53ef\u80fd\u306a\u30ea\u30f3\u30af\u3092\u4f5c\u6210\u3057\u305f\u3068\u304d\u306b\u306e\u307f\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002",
|
||||
"download.faq.a6.p2.beforeShare": "\u8a73\u3057\u304f\u306f",
|
||||
"download.faq.a6.shareLink": "\u5171\u6709\u30da\u30fc\u30b8",
|
||||
"black.meta.title": "OpenCode Black | 世界最高峰のコーディングモデルすべてにアクセス",
|
||||
"black.meta.description": "OpenCode Black サブスクリプションプランで、Claude、GPT、Gemini などにアクセス。",
|
||||
"black.hero.title": "世界最高峰のコーディングモデルすべてにアクセス",
|
||||
"black.hero.subtitle": "Claude、GPT、Gemini などを含む",
|
||||
"black.title": "OpenCode Black | 料金",
|
||||
"black.plan.icon20": "Black 20 プラン",
|
||||
"black.plan.icon100": "Black 100 プラン",
|
||||
"black.plan.icon200": "Black 200 プラン",
|
||||
"black.plan.multiplier100": "Black 20 の5倍の利用量",
|
||||
"black.plan.multiplier200": "Black 20 の20倍の利用量",
|
||||
"black.price.perMonth": "/月",
|
||||
"black.price.perPersonBilledMonthly": "1人あたり / 月額請求",
|
||||
"black.terms.1": "サブスクリプションはすぐには開始されません",
|
||||
"black.terms.2": "ウェイトリストに追加され、まもなく有効化されます",
|
||||
"black.terms.3": "サブスクリプションが有効化された時点でのみカードに請求されます",
|
||||
"black.terms.4": "利用制限が適用されます。過度な自動化利用は早く制限に達する可能性があります",
|
||||
"black.terms.5": "サブスクリプションは個人向けです。チーム利用はエンタープライズにお問い合わせください",
|
||||
"black.terms.6": "将来的に制限が調整されたり、プランが廃止される可能性があります",
|
||||
"black.terms.7": "サブスクリプションはいつでもキャンセル可能です",
|
||||
"black.action.continue": "続ける",
|
||||
"black.finePrint.beforeTerms": "表示価格には適用される税金は含まれていません",
|
||||
"black.finePrint.terms": "利用規約",
|
||||
"black.workspace.title": "OpenCode Black | ワークスペースの選択",
|
||||
"black.workspace.selectPlan": "このプランのワークスペースを選択してください",
|
||||
"black.workspace.name": "ワークスペース {{n}}",
|
||||
"black.subscribe.title": "OpenCode Black を購読する",
|
||||
"black.subscribe.paymentMethod": "支払い方法",
|
||||
"black.subscribe.loadingPaymentForm": "支払いフォームを読み込み中...",
|
||||
"black.subscribe.selectWorkspaceToContinue": "続けるにはワークスペースを選択してください",
|
||||
"black.subscribe.failurePrefix": "おっと!",
|
||||
"black.subscribe.error.generic": "エラーが発生しました",
|
||||
"black.subscribe.error.invalidPlan": "無効なプランです",
|
||||
"black.subscribe.error.workspaceRequired": "ワークスペースIDが必要です",
|
||||
"black.subscribe.error.alreadySubscribed": "このワークスペースは既にサブスクリプションを持っています",
|
||||
"black.subscribe.processing": "処理中...",
|
||||
"black.subscribe.submit": "購読する ${{plan}}",
|
||||
"black.subscribe.form.chargeNotice": "サブスクリプションが有効化された時点でのみ請求されます",
|
||||
"black.subscribe.success.title": "OpenCode Black ウェイトリストに登録されました",
|
||||
"black.subscribe.success.subscriptionPlan": "サブスクリプションプラン",
|
||||
"black.subscribe.success.planName": "OpenCode Black {{plan}}",
|
||||
"black.subscribe.success.amount": "金額",
|
||||
"black.subscribe.success.amountValue": "${{plan}} / 月",
|
||||
"black.subscribe.success.paymentMethod": "支払い方法",
|
||||
"black.subscribe.success.dateJoined": "登録日",
|
||||
"black.subscribe.success.chargeNotice": "サブスクリプションが有効化された時点でカードに請求されます",
|
||||
|
||||
"enterprise.title":
|
||||
"OpenCode | \u7d44\u7e54\u5411\u3051\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3",
|
||||
"enterprise.meta.description":
|
||||
"\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u306b\u3064\u3044\u3066 OpenCode \u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044",
|
||||
"enterprise.hero.title": "\u3042\u306a\u305f\u306e\u30b3\u30fc\u30c9\u306f\u3042\u306a\u305f\u306e\u3082\u306e",
|
||||
"enterprise.hero.body1":
|
||||
"OpenCode \u306f\u3001\u30c7\u30fc\u30bf\u3084\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u4fdd\u5b58\u305b\u305a\u3001\u30e9\u30a4\u30bb\u30f3\u30b9\u306e\u5236\u9650\u3084\u6240\u6709\u6a29\u306e\u4e3b\u5f35\u3082\u306a\u304f\u3001\u7d44\u7e54\u5185\u3067\u5b89\u5168\u306b\u52d5\u4f5c\u3057\u307e\u3059\u3002\u30c1\u30fc\u30e0\u3067\u30c8\u30e9\u30a4\u30a2\u30eb\u3092\u958b\u59cb\u3057\u3001\u305d\u306e\u5f8c SSO \u3068\u793e\u5185 AI \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u3068\u7d71\u5408\u3057\u3066\u7d44\u7e54\u5168\u4f53\u306b\u5c55\u958b\u3067\u304d\u307e\u3059\u3002",
|
||||
"enterprise.hero.body2":
|
||||
"\u3069\u306e\u3088\u3046\u306b\u304a\u624b\u4f1d\u3044\u3067\u304d\u308b\u304b\u304a\u805e\u304b\u305b\u304f\u3060\u3055\u3044\u3002",
|
||||
"enterprise.form.name.label": "\u6c0f\u540d",
|
||||
"enterprise.form.name.placeholder": "\u30b8\u30a7\u30d5\u30fb\u30d9\u30be\u30b9",
|
||||
"enterprise.form.role.label": "\u5f79\u8077",
|
||||
"enterprise.form.role.placeholder": "\u53d6\u7de0\u5f79\u4f1a\u4f1a\u9577",
|
||||
"enterprise.form.email.label": "\u4f1a\u793e\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "\u89e3\u6c7a\u3057\u305f\u3044\u8ab2\u984c\u306f\u4f55\u3067\u3059\u304b\uff1f",
|
||||
"enterprise.form.message.placeholder":
|
||||
"\u79c1\u305f\u3061\u306f...\u306b\u3064\u3044\u3066\u52a9\u3051\u304c\u5fc5\u8981\u3067\u3059",
|
||||
"enterprise.form.send": "\u9001\u4fe1",
|
||||
"enterprise.form.sending": "\u9001\u4fe1\u4e2d...",
|
||||
"enterprise.form.success":
|
||||
"\u9001\u4fe1\u3057\u307e\u3057\u305f\u3002\u8fd1\u65e5\u4e2d\u306b\u3054\u9023\u7d61\u3057\u307e\u3059\u3002",
|
||||
"enterprise.faq.title": "\u3088\u304f\u3042\u308b\u8cea\u554f",
|
||||
"enterprise.faq.q1": "OpenCode Enterprise \u3068\u306f\uff1f",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise \u306f\u3001\u30b3\u30fc\u30c9\u3068\u30c7\u30fc\u30bf\u304c\u6c7a\u3057\u3066\u30a4\u30f3\u30d5\u30e9\u306e\u5916\u306b\u51fa\u306a\u3044\u3053\u3068\u3092\u4fdd\u8a3c\u3057\u305f\u3044\u7d44\u7e54\u5411\u3051\u3067\u3059\u3002SSO \u3068\u793e\u5185 AI \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u3068\u9023\u643a\u3059\u308b\u96c6\u4e2d\u7ba1\u7406\u306e\u8a2d\u5b9a\u306b\u3088\u3063\u3066\u5b9f\u73fe\u3057\u307e\u3059\u3002",
|
||||
"enterprise.faq.q2": "OpenCode Enterprise \u3092\u59cb\u3081\u308b\u306b\u306f\uff1f",
|
||||
"enterprise.faq.a2":
|
||||
"\u307e\u305a\u306f\u30c1\u30fc\u30e0\u3067\u793e\u5185\u30c8\u30e9\u30a4\u30a2\u30eb\u3092\u59cb\u3081\u3066\u304f\u3060\u3055\u3044\u3002OpenCode \u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u30b3\u30fc\u30c9\u3084\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3057\u306a\u3044\u305f\u3081\u3001\u7c21\u5358\u306b\u59cb\u3081\u3089\u308c\u307e\u3059\u3002\u305d\u306e\u5f8c\u3001\u4fa1\u683c\u3084\u5c0e\u5165\u65b9\u6cd5\u306b\u3064\u3044\u3066\u3054\u76f8\u8ac7\u304f\u3060\u3055\u3044\u3002",
|
||||
"enterprise.faq.q3":
|
||||
"\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u4fa1\u683c\u306f\u3069\u306e\u3088\u3046\u306b\u6c7a\u307e\u308a\u307e\u3059\u304b\uff1f",
|
||||
"enterprise.faq.a3":
|
||||
"\u5e2d\u5358\u4f4d\uff08\u30e6\u30fc\u30b6\u30fc\u6570\uff09\u3067\u306e\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u4fa1\u683c\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u72ec\u81ea\u306e LLM \u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u304c\u3042\u308b\u5834\u5408\u3001\u4f7f\u7528\u3057\u305f\u30c8\u30fc\u30af\u30f3\u306b\u5bfe\u3057\u3066\u8ab2\u91d1\u3057\u307e\u305b\u3093\u3002\u8a73\u7d30\u306f\u3001\u7d44\u7e54\u306e\u8981\u4ef6\u306b\u57fa\u3065\u3044\u305f\u304a\u898b\u7a4d\u308a\u306e\u305f\u3081\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002",
|
||||
"enterprise.faq.q4": "OpenCode Enterprise \u3067\u30c7\u30fc\u30bf\u306f\u5b89\u5168\u3067\u3059\u304b\uff1f",
|
||||
"enterprise.faq.a4":
|
||||
"\u306f\u3044\u3002OpenCode \u306f\u30b3\u30fc\u30c9\u3084\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3057\u307e\u305b\u3093\u3002\u51e6\u7406\u306f\u30ed\u30fc\u30ab\u30eb\u3067\u884c\u308f\u308c\u308b\u304b\u3001AI \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3078\u306e\u76f4\u63a5 API \u547c\u3073\u51fa\u3057\u3092\u901a\u3058\u3066\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002\u96c6\u4e2d\u7ba1\u7406\u306e\u8a2d\u5b9a\u3068 SSO \u9023\u643a\u306b\u3088\u308a\u3001\u30c7\u30fc\u30bf\u306f\u7d44\u7e54\u306e\u30a4\u30f3\u30d5\u30e9\u5185\u3067\u5b89\u5168\u306b\u4fdd\u305f\u308c\u307e\u3059\u3002",
|
||||
|
||||
"brand.title": "OpenCode | \u30d6\u30e9\u30f3\u30c9",
|
||||
"brand.meta.description": "OpenCode \u30d6\u30e9\u30f3\u30c9\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3",
|
||||
"brand.heading": "\u30d6\u30e9\u30f3\u30c9\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3",
|
||||
"brand.subtitle":
|
||||
"OpenCode \u30d6\u30e9\u30f3\u30c9\u3092\u6271\u3046\u305f\u3081\u306e\u30ea\u30bd\u30fc\u30b9\u3068\u7d20\u6750\u3067\u3059\u3002",
|
||||
"brand.downloadAll": "\u3059\u3079\u3066\u306e\u7d20\u6750\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9",
|
||||
"changelog.title": "OpenCode | \u5909\u66f4\u5c65\u6b74",
|
||||
"changelog.meta.description":
|
||||
"OpenCode \u306e\u30ea\u30ea\u30fc\u30b9\u30ce\u30fc\u30c8\u3068\u5909\u66f4\u5c65\u6b74",
|
||||
"changelog.hero.title": "\u5909\u66f4\u5c65\u6b74",
|
||||
"changelog.hero.subtitle": "OpenCode \u306e\u66f4\u65b0\u3068\u6539\u5584",
|
||||
"changelog.empty": "\u5909\u66f4\u5c65\u6b74\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002",
|
||||
"changelog.viewJson": "JSON \u3092\u8868\u793a",
|
||||
"workspace.nav.zen": "禅",
|
||||
"workspace.nav.apiKeys": "API キー",
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "APIキー",
|
||||
"workspace.nav.members": "メンバー",
|
||||
"workspace.nav.billing": "請求する",
|
||||
"workspace.nav.billing": "請求",
|
||||
"workspace.nav.settings": "設定",
|
||||
|
||||
"workspace.home.banner.beforeLink": "コーディングエージェント向けに信頼性の高い最適化されたモデル。",
|
||||
"workspace.home.billing.loading": "読み込み中...",
|
||||
"workspace.home.billing.enable": "課金を有効にする",
|
||||
"workspace.home.billing.currentBalance": "現在の残高",
|
||||
"workspace.newUser.feature.tested.title": "テストおよび検証されたモデル",
|
||||
|
||||
"workspace.newUser.feature.tested.title": "テスト・検証済みモデル",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"最高のパフォーマンスを保証するために、コーディング エージェントに特化したモデルのベンチマークとテストを行いました。",
|
||||
"workspace.newUser.feature.quality.title": "最高の品質",
|
||||
"最高のパフォーマンスを保証するために、コーディングエージェントに特化したモデルのベンチマークとテストを行いました。",
|
||||
"workspace.newUser.feature.quality.title": "最高品質",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"最適なパフォーマンスを実現するように構成されたモデルにアクセスします。ダウングレードしたり、より安価なプロバイダーにルーティングしたりする必要はありません。",
|
||||
"最適なパフォーマンスを実現するように構成されたモデルにアクセスします。ダウングレードや安価なプロバイダーへのルーティングはありません。",
|
||||
"workspace.newUser.feature.lockin.title": "ロックインなし",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"任意のコーディング エージェントで Zen を使用し、必要に応じていつでも opencode を備えた他のプロバイダーを使用し続けます。",
|
||||
"workspace.newUser.copyApiKey": "API キーをコピーします",
|
||||
"workspace.newUser.copyKey": "キーをコピーする",
|
||||
"任意のコーディングエージェントでZenを使用でき、必要に応じていつでもOpenCodeを備えた他のプロバイダーを使用し続けることができます。",
|
||||
"workspace.newUser.copyApiKey": "APIキーをコピー",
|
||||
"workspace.newUser.copyKey": "キーをコピー",
|
||||
"workspace.newUser.copied": "コピーしました!",
|
||||
"workspace.newUser.step.enableBilling": "課金を有効にする",
|
||||
"workspace.newUser.step.login.before": "走る",
|
||||
"workspace.newUser.step.login.after": "opencode を選択します",
|
||||
"workspace.newUser.step.pasteKey": "API キーを貼り付けます",
|
||||
"workspace.newUser.step.models.before": "opencode を開始して実行します",
|
||||
"workspace.newUser.step.models.after": "モデルを選択するには",
|
||||
"workspace.newUser.step.login.before": "実行",
|
||||
"workspace.newUser.step.login.after": "してOpenCodeを選択",
|
||||
"workspace.newUser.step.pasteKey": "APIキーを貼り付け",
|
||||
"workspace.newUser.step.models.before": "OpenCodeを起動し実行",
|
||||
"workspace.newUser.step.models.after": "してモデルを選択",
|
||||
|
||||
"workspace.models.title": "モデル",
|
||||
"workspace.models.subtitle.beforeLink": "ワークスペースのメンバーがアクセスできるモデルを管理します。",
|
||||
"workspace.models.table.model": "モデル",
|
||||
"workspace.models.table.enabled": "有効",
|
||||
"workspace.providers.title": "自分の鍵を持参する",
|
||||
"workspace.providers.subtitle": "AI プロバイダーから独自の API キーを構成します。",
|
||||
"workspace.providers.placeholder": "{{provider}} API キー ({{prefix}}...) を入力してください",
|
||||
"workspace.providers.configure": "設定する",
|
||||
|
||||
"workspace.providers.title": "APIキーの設定",
|
||||
"workspace.providers.subtitle": "AIプロバイダーの独自のAPIキーを設定します。",
|
||||
"workspace.providers.placeholder": "{{provider}} APIキーを入力 ({{prefix}}...)",
|
||||
"workspace.providers.configure": "設定",
|
||||
"workspace.providers.edit": "編集",
|
||||
"workspace.providers.delete": "消去",
|
||||
"workspace.providers.delete": "削除",
|
||||
"workspace.providers.saving": "保存中...",
|
||||
"workspace.providers.save": "保存",
|
||||
"workspace.providers.table.provider": "プロバイダー",
|
||||
"workspace.providers.table.apiKey": "API キー",
|
||||
"workspace.providers.table.apiKey": "APIキー",
|
||||
|
||||
"workspace.usage.title": "利用履歴",
|
||||
"workspace.usage.subtitle": "最近の API の使用状況とコスト。",
|
||||
"workspace.usage.empty": "開始するには、最初の API 呼び出しを行ってください。",
|
||||
"workspace.usage.subtitle": "最近のAPIの使用状況とコスト。",
|
||||
"workspace.usage.empty": "開始するには、最初のAPI呼び出しを行ってください。",
|
||||
"workspace.usage.table.date": "日付",
|
||||
"workspace.usage.table.model": "モデル",
|
||||
"workspace.usage.table.input": "入力",
|
||||
"workspace.usage.table.output": "出力",
|
||||
"workspace.usage.table.cost": "料金",
|
||||
"workspace.usage.table.cost": "コスト",
|
||||
"workspace.usage.breakdown.input": "入力",
|
||||
"workspace.usage.breakdown.cacheRead": "キャッシュ読み取り",
|
||||
"workspace.usage.breakdown.cacheWrite": "キャッシュ書き込み",
|
||||
"workspace.usage.breakdown.output": "出力",
|
||||
"workspace.usage.breakdown.reasoning": "推論",
|
||||
"workspace.usage.subscription": "サブスクリプション (${{amount}})",
|
||||
"workspace.cost.title": "料金",
|
||||
|
||||
"workspace.cost.title": "コスト",
|
||||
"workspace.cost.subtitle": "モデルごとの使用料金の内訳。",
|
||||
"workspace.cost.allModels": "全モデル",
|
||||
"workspace.cost.allKeys": "すべてのキー",
|
||||
"workspace.cost.deletedSuffix": "(削除されました)",
|
||||
"workspace.cost.deletedSuffix": "(削除済み)",
|
||||
"workspace.cost.empty": "選択した期間の使用状況データはありません。",
|
||||
"workspace.cost.subscriptionShort": "サブ",
|
||||
"workspace.keys.title": "API キー",
|
||||
"workspace.keys.subtitle": "opencode サービスにアクセスするための API キーを管理します。",
|
||||
"workspace.keys.create": "API キーの作成",
|
||||
|
||||
"workspace.keys.title": "APIキー",
|
||||
"workspace.keys.subtitle": "OpenCodeサービスにアクセスするためのAPIキーを管理します。",
|
||||
"workspace.keys.create": "APIキーの作成",
|
||||
"workspace.keys.placeholder": "キー名を入力してください",
|
||||
"workspace.keys.empty": "opencode ゲートウェイ API キーを作成する",
|
||||
"workspace.keys.empty": "OpenCodeゲートウェイAPIキーを作成する",
|
||||
"workspace.keys.table.name": "名前",
|
||||
"workspace.keys.table.key": "鍵",
|
||||
"workspace.keys.table.key": "キー",
|
||||
"workspace.keys.table.createdBy": "作成者",
|
||||
"workspace.keys.table.lastUsed": "最後に使用したもの",
|
||||
"workspace.keys.copyApiKey": "API キーをコピーします",
|
||||
"workspace.keys.delete": "消去",
|
||||
"workspace.keys.table.lastUsed": "最終利用",
|
||||
"workspace.keys.copyApiKey": "APIキーをコピー",
|
||||
"workspace.keys.delete": "削除",
|
||||
|
||||
"workspace.members.title": "メンバー",
|
||||
"workspace.members.subtitle": "ワークスペースのメンバーとその権限を管理します。",
|
||||
"workspace.members.invite": "メンバーを招待する",
|
||||
"workspace.members.invite": "メンバーを招待",
|
||||
"workspace.members.inviting": "招待中...",
|
||||
"workspace.members.beta.beforeLink": "ベータ期間中、チームはワークスペースを無料で利用できます。",
|
||||
"workspace.members.form.invitee": "招待者",
|
||||
"workspace.members.form.emailPlaceholder": "メールアドレスを入力してください",
|
||||
"workspace.members.form.role": "役割",
|
||||
"workspace.members.form.monthlyLimit": "月々の利用限度額",
|
||||
"workspace.members.form.invitee": "招待する人",
|
||||
"workspace.members.form.emailPlaceholder": "メールアドレスを入力",
|
||||
"workspace.members.form.role": "ロール",
|
||||
"workspace.members.form.monthlyLimit": "月間支出上限",
|
||||
"workspace.members.noLimit": "制限なし",
|
||||
"workspace.members.noLimitLowercase": "制限なし",
|
||||
"workspace.members.invited": "招待されました",
|
||||
"workspace.members.invited": "招待済み",
|
||||
"workspace.members.edit": "編集",
|
||||
"workspace.members.delete": "消去",
|
||||
"workspace.members.delete": "削除",
|
||||
"workspace.members.saving": "保存中...",
|
||||
"workspace.members.save": "保存",
|
||||
"workspace.members.table.email": "電子メール",
|
||||
"workspace.members.table.role": "役割",
|
||||
"workspace.members.table.monthLimit": "月の制限",
|
||||
"workspace.members.table.email": "メールアドレス",
|
||||
"workspace.members.table.role": "ロール",
|
||||
"workspace.members.table.monthLimit": "月間上限",
|
||||
"workspace.members.role.admin": "管理者",
|
||||
"workspace.members.role.adminDescription": "モデル、メンバー、請求を管理できる",
|
||||
"workspace.members.role.adminDescription": "モデル、メンバー、請求を管理できます",
|
||||
"workspace.members.role.member": "メンバー",
|
||||
"workspace.members.role.memberDescription": "自分自身の API キーのみを生成できます",
|
||||
"workspace.members.role.memberDescription": "自分自身のAPIキーのみを生成できます",
|
||||
|
||||
"workspace.settings.title": "設定",
|
||||
"workspace.settings.subtitle": "ワークスペース名と設定を更新します。",
|
||||
"workspace.settings.workspaceName": "ワークスペース名",
|
||||
@@ -425,58 +397,63 @@ export const dict = {
|
||||
"workspace.settings.updating": "更新中...",
|
||||
"workspace.settings.save": "保存",
|
||||
"workspace.settings.edit": "編集",
|
||||
"workspace.billing.title": "請求する",
|
||||
|
||||
"workspace.billing.title": "請求",
|
||||
"workspace.billing.subtitle.beforeLink": "支払い方法を管理します。",
|
||||
"workspace.billing.contactUs": "お問い合わせ",
|
||||
"workspace.billing.subtitle.afterLink": "ご質問がございましたら。",
|
||||
"workspace.billing.currentBalance": "現在の残高",
|
||||
"workspace.billing.add": "$を追加",
|
||||
"workspace.billing.enterAmount": "金額を入力してください",
|
||||
"workspace.billing.enterAmount": "金額を入力",
|
||||
"workspace.billing.loading": "読み込み中...",
|
||||
"workspace.billing.addAction": "追加",
|
||||
"workspace.billing.addBalance": "残高を追加",
|
||||
"workspace.billing.linkedToStripe": "ストライプにリンク",
|
||||
"workspace.billing.linkedToStripe": "Stripeと連携済み",
|
||||
"workspace.billing.manage": "管理",
|
||||
"workspace.billing.enable": "課金を有効にする",
|
||||
"workspace.monthlyLimit.title": "月間限度額",
|
||||
|
||||
"workspace.monthlyLimit.title": "月間上限",
|
||||
"workspace.monthlyLimit.subtitle": "アカウントの月間使用制限を設定します。",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "設定...",
|
||||
"workspace.monthlyLimit.set": "セット",
|
||||
"workspace.monthlyLimit.edit": "編集制限",
|
||||
"workspace.monthlyLimit.setting": "設定中...",
|
||||
"workspace.monthlyLimit.set": "設定",
|
||||
"workspace.monthlyLimit.edit": "上限を編集",
|
||||
"workspace.monthlyLimit.noLimit": "使用制限は設定されていません。",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "現在の使用状況",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "は$です",
|
||||
"workspace.reload.title": "オートリロード",
|
||||
"workspace.reload.disabled.before": "オートリロードは",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "現在の使用状況(",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": ")は $",
|
||||
|
||||
"workspace.reload.title": "自動チャージ",
|
||||
"workspace.reload.disabled.before": "自動チャージは",
|
||||
"workspace.reload.disabled.state": "無効",
|
||||
"workspace.reload.disabled.after": "残高が少なくなったときに自動的にリロードできるようにします。",
|
||||
"workspace.reload.enabled.before": "オートリロードは",
|
||||
"workspace.reload.disabled.after": "です。残高が少なくなったときに自動的にチャージするには有効にしてください。",
|
||||
"workspace.reload.enabled.before": "自動チャージは",
|
||||
"workspace.reload.enabled.state": "有効",
|
||||
"workspace.reload.enabled.middle": "リロードします",
|
||||
"workspace.reload.enabled.middle": "チャージします(",
|
||||
"workspace.reload.processingFee": "手数料",
|
||||
"workspace.reload.enabled.after": "残高が達したとき",
|
||||
"workspace.reload.enabled.after": ")。残高が以下に達したとき:",
|
||||
"workspace.reload.edit": "編集",
|
||||
"workspace.reload.enable": "有効にする",
|
||||
"workspace.reload.enableAutoReload": "自動リロードを有効にする",
|
||||
"workspace.reload.reloadAmount": "$をリロード",
|
||||
"workspace.reload.whenBalanceReaches": "残高が$に達すると",
|
||||
"workspace.reload.enableAutoReload": "自動チャージを有効にする",
|
||||
"workspace.reload.reloadAmount": "チャージ額 $",
|
||||
"workspace.reload.whenBalanceReaches": "残高が $ に達したとき",
|
||||
"workspace.reload.saving": "保存中...",
|
||||
"workspace.reload.save": "保存",
|
||||
"workspace.reload.failedAt": "リロードに失敗しました",
|
||||
"workspace.reload.failedAt": "チャージ失敗:",
|
||||
"workspace.reload.reason": "理由:",
|
||||
"workspace.reload.updatePaymentMethod": "お支払い方法を更新して、もう一度お試しください。",
|
||||
"workspace.reload.updatePaymentMethod": "支払い方法を更新して、もう一度お試しください。",
|
||||
"workspace.reload.retrying": "再試行中...",
|
||||
"workspace.reload.retry": "リトライ",
|
||||
"workspace.reload.retry": "再試行",
|
||||
|
||||
"workspace.payments.title": "支払い履歴",
|
||||
"workspace.payments.subtitle": "最近の支払い取引。",
|
||||
"workspace.payments.table.date": "日付",
|
||||
"workspace.payments.table.paymentId": "支払いID",
|
||||
"workspace.payments.table.amount": "額",
|
||||
"workspace.payments.table.receipt": "レシート",
|
||||
"workspace.payments.table.amount": "金額",
|
||||
"workspace.payments.table.receipt": "領収書",
|
||||
"workspace.payments.type.credit": "クレジット",
|
||||
"workspace.payments.type.subscription": "サブスクリプション",
|
||||
"workspace.payments.view": "ビュー",
|
||||
"workspace.payments.view": "表示",
|
||||
|
||||
"workspace.black.loading": "読み込み中...",
|
||||
"workspace.black.time.day": "日",
|
||||
"workspace.black.time.days": "日",
|
||||
@@ -486,22 +463,133 @@ export const dict = {
|
||||
"workspace.black.time.minutes": "分",
|
||||
"workspace.black.time.fewSeconds": "数秒",
|
||||
"workspace.black.subscription.title": "サブスクリプション",
|
||||
"workspace.black.subscription.message": "あなたは、OpenCode Black を月額 ${{plan}} で購読しています。",
|
||||
"workspace.black.subscription.message": "あなたは OpenCode Black を月額 ${{plan}} で購読しています。",
|
||||
"workspace.black.subscription.manage": "サブスクリプションの管理",
|
||||
"workspace.black.subscription.rollingUsage": "5時間利用",
|
||||
"workspace.black.subscription.weeklyUsage": "毎週の使用量",
|
||||
"workspace.black.subscription.resetsIn": "でリセットします",
|
||||
"workspace.black.subscription.useBalance": "利用限度額に達したら利用可能な残高を使い切る",
|
||||
"workspace.black.waitlist.title": "順番待ちリスト",
|
||||
"workspace.black.subscription.weeklyUsage": "週間利用量",
|
||||
"workspace.black.subscription.resetsIn": "リセットまで",
|
||||
"workspace.black.subscription.useBalance": "利用限度額に達したら利用可能な残高を使用する",
|
||||
"workspace.black.waitlist.title": "ウェイトリスト",
|
||||
"workspace.black.waitlist.joined":
|
||||
"あなたは、月額 ${{plan}} OpenCode ブラック プランの待機リストに登録されています。",
|
||||
"workspace.black.waitlist.ready": "月額 ${{plan}} の OpenCode ブラック プランに登録する準備ができました。",
|
||||
"workspace.black.waitlist.leave": "順番待ちリストを残す",
|
||||
"workspace.black.waitlist.leaving": "出発中...",
|
||||
"workspace.black.waitlist.left": "左",
|
||||
"あなたは月額 ${{plan}} の OpenCode Black プランのウェイトリストに登録されています。",
|
||||
"workspace.black.waitlist.ready": "月額 ${{plan}} の OpenCode Black プランに登録する準備ができました。",
|
||||
"workspace.black.waitlist.leave": "ウェイトリストから抜ける",
|
||||
"workspace.black.waitlist.leaving": "処理中...",
|
||||
"workspace.black.waitlist.left": "退会済み",
|
||||
"workspace.black.waitlist.enroll": "登録する",
|
||||
"workspace.black.waitlist.enrolling": "登録中...",
|
||||
"workspace.black.waitlist.enrolled": "登録済み",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"[登録] をクリックすると、サブスクリプションがすぐに開始され、カードに請求されます。",
|
||||
"「登録する」をクリックすると、サブスクリプションがすぐに開始され、カードに請求されます。",
|
||||
|
||||
"download.title": "OpenCode | ダウンロード",
|
||||
"download.meta.description": "OpenCode を macOS、Windows、Linux 向けにダウンロード",
|
||||
"download.hero.title": "OpenCode をダウンロード",
|
||||
"download.hero.subtitle": "macOS、Windows、Linux 向けベータ版を利用可能",
|
||||
"download.hero.button": "{{os}} 向けダウンロード",
|
||||
"download.section.terminal": "OpenCode Terminal",
|
||||
"download.section.desktop": "OpenCode Desktop (Beta)",
|
||||
"download.section.extensions": "OpenCode Extensions",
|
||||
"download.section.integrations": "OpenCode Integrations",
|
||||
"download.action.download": "ダウンロード",
|
||||
"download.action.install": "インストール",
|
||||
|
||||
"download.platform.macosAppleSilicon": "macOS (Apple Silicon)",
|
||||
"download.platform.macosIntel": "macOS (Intel)",
|
||||
"download.platform.windowsX64": "Windows (x64)",
|
||||
"download.platform.linuxDeb": "Linux (.deb)",
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
|
||||
"download.faq.a3.beforeLocal":
|
||||
"必ずしもそうではありませんが、おそらく必要です。OpenCodeを有料プロバイダーに接続したい場合はAIサブスクリプションが必要ですが、",
|
||||
"download.faq.a3.localLink": "ローカルモデル",
|
||||
"download.faq.a3.afterLocal.beforeZen": "であれば無料で利用できます。ユーザーには",
|
||||
"download.faq.a3.afterZen":
|
||||
"の利用をお勧めしていますが、OpenCodeはOpenAI、Anthropic、xAIなどの主要なプロバイダーに対応しています。",
|
||||
|
||||
"download.faq.a5.p1": "OpenCodeは100%無料で利用できます。",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"追加コストはモデルプロバイダーのサブスクリプションから発生します。OpenCodeはどのモデルプロバイダーでも利用できますが、",
|
||||
"download.faq.a5.p2.afterZen": "の利用をおすすめします。",
|
||||
|
||||
"download.faq.a6.p1": "あなたのデータと情報は、OpenCodeで共有リンクを作成したときにのみ保存されます。",
|
||||
"download.faq.a6.p2.beforeShare": "詳しくは",
|
||||
"download.faq.a6.shareLink": "共有ページ",
|
||||
|
||||
"enterprise.title": "OpenCode | 組織向けエンタープライズソリューション",
|
||||
"enterprise.meta.description": "エンタープライズソリューションについてOpenCodeに問い合わせる",
|
||||
"enterprise.hero.title": "あなたのコードはあなたのもの",
|
||||
"enterprise.hero.body1":
|
||||
"OpenCodeは、データやコンテキストを一切保存せず、ライセンス制限や所有権の主張もなく、組織内で安全に動作します。チームでのトライアルから始め、SSOや社内AIゲートウェイと統合して組織全体に展開できます。",
|
||||
"enterprise.hero.body2": "どのような支援ができるか、お聞かせください。",
|
||||
"enterprise.form.name.label": "氏名",
|
||||
"enterprise.form.name.placeholder": "ジェフ・ベゾス",
|
||||
"enterprise.form.role.label": "役職",
|
||||
"enterprise.form.role.placeholder": "会長",
|
||||
"enterprise.form.email.label": "会社メールアドレス",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "どのような課題を解決したいですか?",
|
||||
"enterprise.form.message.placeholder": "これについて支援が必要です...",
|
||||
"enterprise.form.send": "送信",
|
||||
"enterprise.form.sending": "送信中...",
|
||||
"enterprise.form.success": "送信しました。まもなくご連絡いたします。",
|
||||
"enterprise.faq.title": "FAQ",
|
||||
"enterprise.faq.q1": "OpenCode Enterpriseとは?",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterpriseは、コードとデータが決してインフラの外に出ないことを保証したい組織向けです。SSOや社内AIゲートウェイと統合する集中設定を使用することでこれを実現します。",
|
||||
"enterprise.faq.q2": "OpenCode Enterpriseを始めるには?",
|
||||
"enterprise.faq.a2":
|
||||
"まずはチームでの社内トライアルから始めてください。OpenCodeはデフォルトでコードやコンテキストデータを保存しないため、簡単に始められます。その後、価格や導入オプションについてお問い合わせください。",
|
||||
"enterprise.faq.q3": "エンタープライズ価格の仕組みは?",
|
||||
"enterprise.faq.a3":
|
||||
"シート単位(ユーザー数)でのエンタープライズ価格を提供します。独自のLLMゲートウェイをお持ちの場合、使用トークンに対する課金はありません。詳細は、組織の要件に基づいた見積もりのためにお問い合わせください。",
|
||||
"enterprise.faq.q4": "OpenCode Enterpriseでデータは安全ですか?",
|
||||
"enterprise.faq.a4":
|
||||
"はい。OpenCodeはコードやコンテキストデータを保存しません。すべての処理はローカル、またはAIプロバイダーへの直接API呼び出しを通じて行われます。集中設定とSSO統合により、データは組織のインフラ内で安全に保たれます。",
|
||||
|
||||
"brand.title": "OpenCode | ブランド",
|
||||
"brand.meta.description": "OpenCode ブランドガイドライン",
|
||||
"brand.heading": "ブランドガイドライン",
|
||||
"brand.subtitle": "OpenCodeブランドを扱うためのリソースと素材です。",
|
||||
"brand.downloadAll": "すべての素材をダウンロード",
|
||||
|
||||
"changelog.title": "OpenCode | 変更履歴",
|
||||
"changelog.meta.description": "OpenCode リリースノートと変更履歴",
|
||||
"changelog.hero.title": "変更履歴",
|
||||
"changelog.hero.subtitle": "OpenCodeの新しいアップデートと改善",
|
||||
"changelog.empty": "変更履歴が見つかりませんでした。",
|
||||
"changelog.viewJson": "JSONを表示",
|
||||
|
||||
"bench.list.title": "ベンチマーク",
|
||||
"bench.list.heading": "ベンチマーク",
|
||||
"bench.list.table.agent": "エージェント",
|
||||
"bench.list.table.model": "モデル",
|
||||
"bench.list.table.score": "スコア",
|
||||
|
||||
"bench.detail.title": "ベンチマーク - {{task}}",
|
||||
"bench.detail.notFound": "タスクが見つかりません",
|
||||
"bench.detail.na": "N/A",
|
||||
"bench.detail.labels.agent": "エージェント",
|
||||
"bench.detail.labels.model": "モデル",
|
||||
"bench.detail.labels.task": "タスク",
|
||||
"bench.detail.labels.repo": "リポジトリ",
|
||||
"bench.detail.labels.from": "From",
|
||||
"bench.detail.labels.to": "To",
|
||||
"bench.detail.labels.prompt": "プロンプト",
|
||||
"bench.detail.labels.commit": "コミット",
|
||||
"bench.detail.labels.averageDuration": "平均所要時間",
|
||||
"bench.detail.labels.averageScore": "平均スコア",
|
||||
"bench.detail.labels.averageCost": "平均コスト",
|
||||
"bench.detail.labels.summary": "概要",
|
||||
"bench.detail.labels.runs": "実行回数",
|
||||
"bench.detail.labels.score": "スコア",
|
||||
"bench.detail.labels.base": "ベース",
|
||||
"bench.detail.labels.penalty": "ペナルティ",
|
||||
"bench.detail.labels.weight": "重み",
|
||||
"bench.detail.table.run": "実行",
|
||||
"bench.detail.table.score": "スコア (ベース - ペナルティ)",
|
||||
"bench.detail.table.cost": "コスト",
|
||||
"bench.detail.table.duration": "所要時間",
|
||||
"bench.detail.run.title": "実行 {{n}}",
|
||||
"bench.detail.rawJson": "Raw JSON",
|
||||
} satisfies Dict
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -13,12 +13,12 @@ export const dict = {
|
||||
"nav.login": "Logg inn",
|
||||
"nav.free": "Gratis",
|
||||
"nav.home": "Hjem",
|
||||
"nav.openMenu": "Aapne meny",
|
||||
"nav.openMenu": "Åpne meny",
|
||||
"nav.getStartedFree": "Kom i gang gratis",
|
||||
|
||||
"nav.context.copyLogo": "Kopier logo som SVG",
|
||||
"nav.context.copyWordmark": "Kopier wordmark som SVG",
|
||||
"nav.context.brandAssets": "Brand-ressurser",
|
||||
"nav.context.brandAssets": "Merkevareressurser",
|
||||
|
||||
"footer.github": "GitHub",
|
||||
"footer.docs": "Dokumentasjon",
|
||||
@@ -26,12 +26,12 @@ export const dict = {
|
||||
"footer.discord": "Discord",
|
||||
"footer.x": "X",
|
||||
|
||||
"legal.brand": "Brand",
|
||||
"legal.brand": "Merkevare",
|
||||
"legal.privacy": "Personvern",
|
||||
"legal.terms": "Vilkår",
|
||||
|
||||
"email.title": "Fa beskjed forst nar vi lanserer nye produkter",
|
||||
"email.subtitle": "Meld deg pa ventelisten for tidlig tilgang.",
|
||||
"email.title": "Få beskjed først når vi lanserer nye produkter",
|
||||
"email.subtitle": "Meld deg på ventelisten for tidlig tilgang.",
|
||||
"email.placeholder": "E-postadresse",
|
||||
"email.subscribe": "Abonner",
|
||||
"email.success": "Nesten ferdig - sjekk innboksen din og bekreft e-postadressen",
|
||||
@@ -45,169 +45,444 @@ export const dict = {
|
||||
|
||||
"user.logout": "Logg ut",
|
||||
|
||||
"workspace.select": "Velg workspace",
|
||||
"workspace.createNew": "+ Opprett nytt workspace",
|
||||
"workspace.modal.title": "Opprett nytt workspace",
|
||||
"workspace.modal.placeholder": "Skriv inn workspace-navn",
|
||||
"workspace.select": "Velg arbeidsområde",
|
||||
"workspace.createNew": "+ Opprett nytt arbeidsområde",
|
||||
"workspace.modal.title": "Opprett nytt arbeidsområde",
|
||||
"workspace.modal.placeholder": "Skriv inn navn på arbeidsområde",
|
||||
|
||||
"common.cancel": "Avbryt",
|
||||
"common.creating": "Oppretter...",
|
||||
"common.create": "Opprett",
|
||||
|
||||
"common.videoUnsupported": "Nettleseren din stotter ikke video-taggen.",
|
||||
"common.videoUnsupported": "Nettleseren din støtter ikke video-taggen.",
|
||||
"common.figure": "Fig {{n}}.",
|
||||
"common.faq": "FAQ",
|
||||
"common.learnMore": "Les mer",
|
||||
|
||||
"home.title": "OpenCode | Den apne kildekode AI-kodingsagenten",
|
||||
"error.invalidPlan": "Ugyldig plan",
|
||||
"error.workspaceRequired": "Arbeidsområde-ID er påkrevd",
|
||||
"error.alreadySubscribed": "Dette arbeidsområdet har allerede et abonnement",
|
||||
"error.limitRequired": "Grense er påkrevd.",
|
||||
"error.monthlyLimitInvalid": "Angi en gyldig månedlig grense.",
|
||||
"error.workspaceNameRequired": "Navn på arbeidsområde er påkrevd.",
|
||||
"error.nameTooLong": "Navnet må være 255 tegn eller mindre.",
|
||||
"error.emailRequired": "E-post er påkrevd",
|
||||
"error.roleRequired": "Rolle er påkrevd",
|
||||
"error.idRequired": "ID er påkrevd",
|
||||
"error.nameRequired": "Navn er påkrevd",
|
||||
"error.providerRequired": "Leverandør er påkrevd",
|
||||
"error.apiKeyRequired": "API-nøkkel er påkrevd",
|
||||
"error.modelRequired": "Modell er påkrevd",
|
||||
"error.reloadAmountMin": "Påfyllingsbeløp må være minst ${{amount}}",
|
||||
"error.reloadTriggerMin": "Saldo-trigger må være minst ${{amount}}",
|
||||
|
||||
"home.title": "OpenCode | Den åpne kildekode AI-kodingsagenten",
|
||||
|
||||
"temp.title": "opencode | AI-kodingsagent bygget for terminalen",
|
||||
"temp.hero.title": "AI-kodingsagenten bygget for terminalen",
|
||||
"temp.zen": "opencode zen",
|
||||
"temp.getStarted": "Kom i gang",
|
||||
"temp.feature.native.title": "Native TUI",
|
||||
"temp.feature.native.body": "Et responsivt, native terminal-brukergrensesnitt som kan temes",
|
||||
"temp.feature.zen.beforeLink": "En",
|
||||
"temp.feature.zen.link": "kuratert liste over modeller",
|
||||
"temp.feature.zen.afterLink": "levert av opencode",
|
||||
"temp.feature.models.beforeLink": "Støtter 75+ LLM-leverandører gjennom",
|
||||
"temp.feature.models.afterLink": ", inkludert lokale modeller",
|
||||
"temp.screenshot.caption": "opencode TUI med tokyonight-tema",
|
||||
"temp.screenshot.alt": "opencode TUI med tokyonight-tema",
|
||||
|
||||
"home.banner.badge": "Ny",
|
||||
"home.banner.text": "Desktop-app tilgjengelig i beta",
|
||||
"home.banner.platforms": "pa macOS, Windows og Linux",
|
||||
"home.banner.downloadNow": "Last ned na",
|
||||
"home.banner.downloadBetaNow": "Last ned desktop-betaen na",
|
||||
"home.banner.platforms": "på macOS, Windows og Linux",
|
||||
"home.banner.downloadNow": "Last ned nå",
|
||||
"home.banner.downloadBetaNow": "Last ned desktop-betaen nå",
|
||||
|
||||
"home.hero.title": "Den apne kildekode AI-kodingsagenten",
|
||||
"home.hero.title": "Den åpne kildekode AI-kodingsagenten",
|
||||
"home.hero.subtitle.a":
|
||||
"Gratis modeller inkludert, eller koble til hvilken som helst modell fra hvilken som helst leverandor,",
|
||||
"Gratis modeller inkludert, eller koble til hvilken som helst modell fra hvilken som helst leverandør,",
|
||||
"home.hero.subtitle.b": "inkludert Claude, GPT, Gemini og mer.",
|
||||
|
||||
"home.install.ariaLabel": "Installeringsalternativer",
|
||||
|
||||
"home.what.title": "Hva er OpenCode?",
|
||||
"home.what.body": "OpenCode er en apen kildekode-agent som hjelper deg a skrive kode i terminal, IDE eller desktop.",
|
||||
"home.what.body": "OpenCode er en åpen kildekode-agent som hjelper deg å skrive kode i terminal, IDE eller desktop.",
|
||||
"home.what.lsp.title": "LSP aktivert",
|
||||
"home.what.lsp.body": "Laster automatisk de riktige LSP-ene for LLM-en",
|
||||
"home.what.multiSession.title": "Multi-sesjon",
|
||||
"home.what.multiSession.body": "Start flere agenter parallelt pa samme prosjekt",
|
||||
"home.what.multiSession.body": "Start flere agenter parallelt på samme prosjekt",
|
||||
"home.what.shareLinks.title": "Del lenker",
|
||||
"home.what.shareLinks.body": "Del en lenke til en sesjon for referanse eller feilsoking",
|
||||
"home.what.shareLinks.body": "Del en lenke til en sesjon for referanse eller feilsøking",
|
||||
"home.what.copilot.title": "GitHub Copilot",
|
||||
"home.what.copilot.body": "Logg inn med GitHub for a bruke Copilot-kontoen din",
|
||||
"home.what.copilot.body": "Logg inn med GitHub for å bruke Copilot-kontoen din",
|
||||
"home.what.chatgptPlus.title": "ChatGPT Plus/Pro",
|
||||
"home.what.chatgptPlus.body": "Logg inn med OpenAI for a bruke ChatGPT Plus- eller Pro-kontoen din",
|
||||
"home.what.chatgptPlus.body": "Logg inn med OpenAI for å bruke ChatGPT Plus- eller Pro-kontoen din",
|
||||
"home.what.anyModel.title": "Hvilken som helst modell",
|
||||
"home.what.anyModel.body": "75+ LLM-leverandorer via Models.dev, inkludert lokale modeller",
|
||||
"home.what.anyModel.body": "75+ LLM-leverandører via Models.dev, inkludert lokale modeller",
|
||||
"home.what.anyEditor.title": "Hvilken som helst editor",
|
||||
"home.what.anyEditor.body": "Tilgjengelig som terminalgrensesnitt, desktop-app og IDE-utvidelse",
|
||||
"home.what.readDocs": "Les docs",
|
||||
"home.what.readDocs": "Les dokumentasjonen",
|
||||
|
||||
"home.growth.title": "Den apne kildekode AI-kodingsagenten",
|
||||
"home.growth.title": "Den åpne kildekode AI-kodingsagenten",
|
||||
"home.growth.body":
|
||||
"Med over <strong>{{stars}}</strong> GitHub-stjerner, <strong>{{contributors}}</strong> bidragsytere og over <strong>{{commits}}</strong> commits, brukes OpenCode av over <strong>{{monthlyUsers}}</strong> utviklere hver maned.",
|
||||
"Med over <strong>{{stars}}</strong> GitHub-stjerner, <strong>{{contributors}}</strong> bidragsytere og over <strong>{{commits}}</strong> commits, brukes OpenCode av over <strong>{{monthlyUsers}}</strong> utviklere hver måned.",
|
||||
"home.growth.githubStars": "GitHub-stjerner",
|
||||
"home.growth.contributors": "Bidragsytere",
|
||||
"home.growth.monthlyDevs": "Manedlige devs",
|
||||
"home.growth.monthlyDevs": "Månedlige utviklere",
|
||||
|
||||
"home.privacy.title": "Bygget med personvern forst",
|
||||
"home.privacy.title": "Bygget med personvern først",
|
||||
"home.privacy.body":
|
||||
"OpenCode lagrer ikke koden din eller kontekstdata, slik at den kan fungere i personvernsensitive miljoer.",
|
||||
"OpenCode lagrer ikke koden din eller kontekstdata, slik at den kan fungere i personvernsensitive miljøer.",
|
||||
"home.privacy.learnMore": "Les mer om",
|
||||
"home.privacy.link": "personvern",
|
||||
|
||||
"home.faq.q1": "Hva er OpenCode?",
|
||||
"home.faq.a1":
|
||||
"OpenCode er en apen kildekode-agent som hjelper deg a skrive og kjore kode med hvilken som helst AI-modell. Den er tilgjengelig som terminalgrensesnitt, desktop-app eller IDE-utvidelse.",
|
||||
"OpenCode er en åpen kildekode-agent som hjelper deg å skrive og kjøre kode med hvilken som helst AI-modell. Den er tilgjengelig som terminalgrensesnitt, desktop-app eller IDE-utvidelse.",
|
||||
"home.faq.q2": "Hvordan bruker jeg OpenCode?",
|
||||
"home.faq.a2.before": "Den enkleste maten a komme i gang pa er a lese",
|
||||
"home.faq.a2.before": "Den enkleste måten å komme i gang på er å lese",
|
||||
"home.faq.a2.link": "introen",
|
||||
"home.faq.q3": "Trenger jeg ekstra AI-abonnementer for a bruke OpenCode?",
|
||||
"home.faq.a3.p1": "Ikke nodvendigvis. OpenCode kommer med gratis modeller du kan bruke uten a opprette en konto.",
|
||||
"home.faq.a3.p2.beforeZen": "I tillegg kan du bruke populære kodemodeller ved a opprette en",
|
||||
"home.faq.q3": "Trenger jeg ekstra AI-abonnementer for å bruke OpenCode?",
|
||||
"home.faq.a3.p1":
|
||||
"Ikke nødvendigvis. OpenCode kommer med et sett gratis modeller du kan bruke uten å opprette en konto.",
|
||||
"home.faq.a3.p2.beforeZen": "I tillegg kan du bruke populære kodemodeller ved å opprette en",
|
||||
"home.faq.a3.p2.afterZen": " konto.",
|
||||
"home.faq.a3.p3":
|
||||
"Vi oppfordrer til a bruke Zen, men OpenCode fungerer ogsa med populære leverandorer som OpenAI, Anthropic, xAI osv.",
|
||||
"Vi oppfordrer til å bruke Zen, men OpenCode fungerer også med populære leverandører som OpenAI, Anthropic, xAI osv.",
|
||||
"home.faq.a3.p4.beforeLocal": "Du kan til og med koble til dine",
|
||||
"home.faq.a3.p4.localLink": "lokale modeller",
|
||||
"home.faq.q4": "Kan jeg bruke mine eksisterende AI-abonnementer med OpenCode?",
|
||||
"home.faq.a4.p1":
|
||||
"Ja. OpenCode stotter abonnementer fra alle store leverandorer. Du kan bruke Claude Pro/Max, ChatGPT Plus/Pro eller GitHub Copilot.",
|
||||
"Ja, OpenCode støtter abonnementer fra alle store leverandører. Du kan bruke Claude Pro/Max, ChatGPT Plus/Pro eller GitHub Copilot-abonnementer.",
|
||||
"home.faq.q5": "Kan jeg bare bruke OpenCode i terminalen?",
|
||||
"home.faq.a5.beforeDesktop": "Ikke lenger! OpenCode er na tilgjengelig som en app for",
|
||||
"home.faq.a5.beforeDesktop": "Ikke lenger! OpenCode er nå tilgjengelig som en app for",
|
||||
"home.faq.a5.desktop": "desktop",
|
||||
"home.faq.a5.and": "og",
|
||||
"home.faq.a5.web": "web",
|
||||
"home.faq.q6": "Hva koster OpenCode?",
|
||||
"home.faq.a6":
|
||||
"OpenCode er 100% gratis a bruke. Det kommer ogsa med et sett gratis modeller. Det kan vare ekstra kostnader hvis du kobler til en annen leverandor.",
|
||||
"OpenCode er 100% gratis å bruke. Det kommer også med et sett gratis modeller. Det kan være ekstra kostnader hvis du kobler til en annen leverandør.",
|
||||
"home.faq.q7": "Hva med data og personvern?",
|
||||
"home.faq.a7.p1": "Dataene dine lagres kun nar du bruker vare gratis modeller eller lager delbare lenker.",
|
||||
"home.faq.a7.p1": "Dataene dine lagres kun når du bruker våre gratis modeller eller lager delbare lenker.",
|
||||
"home.faq.a7.p2.beforeModels": "Les mer om",
|
||||
"home.faq.a7.p2.modelsLink": "vare modeller",
|
||||
"home.faq.a7.p2.modelsLink": "våre modeller",
|
||||
"home.faq.a7.p2.and": "og",
|
||||
"home.faq.a7.p2.shareLink": "delingssider",
|
||||
"home.faq.q8": "Er OpenCode apen kildekode?",
|
||||
"home.faq.a8.p1": "Ja, OpenCode er fullt open source. Kildekoden er offentlig pa",
|
||||
"home.faq.q8": "Er OpenCode åpen kildekode?",
|
||||
"home.faq.a8.p1": "Ja, OpenCode er fullt open source. Kildekoden er offentlig på",
|
||||
"home.faq.a8.p2": "under",
|
||||
"home.faq.a8.mitLicense": "MIT-lisensen",
|
||||
"home.faq.a8.p3":
|
||||
", som betyr at hvem som helst kan bruke, endre eller bidra til utviklingen. Alle i communityet kan opprette issues, sende inn pull requests og utvide funksjonalitet.",
|
||||
|
||||
"home.zenCta.title": "Fa tilgang til palitelige, optimaliserte modeller for kodingsagenter",
|
||||
"home.zenCta.title": "Få tilgang til pålitelige, optimaliserte modeller for kodeagenter",
|
||||
"home.zenCta.body":
|
||||
"Zen gir deg tilgang til et handplukket sett med AI-modeller som OpenCode har testet og benchmarked spesielt for kodingsagenter. Du slipper a bekymre deg for ujevn ytelse og kvalitet pa tvers av leverandorer: bruk validerte modeller som fungerer.",
|
||||
"Zen gir deg tilgang til et håndplukket sett med AI-modeller som OpenCode har testet og benchmarked spesielt for kodeagenter. Du slipper å bekymre deg for ujevn ytelse og kvalitet på tvers av leverandører; bruk validerte modeller som fungerer.",
|
||||
"home.zenCta.link": "Les om Zen",
|
||||
|
||||
"download.title": "OpenCode | Nedlasting",
|
||||
|
||||
"zen.title": "OpenCode Zen | Et kuratert sett med palitelige, optimaliserte modeller for kodingsagenter",
|
||||
"zen.hero.title": "Fa tilgang til palitelige, optimaliserte modeller for kodingsagenter",
|
||||
"zen.title": "OpenCode Zen | Et kuratert sett med pålitelige, optimaliserte modeller for kodeagenter",
|
||||
"zen.hero.title": "Pålitelige optimaliserte modeller for kodeagenter",
|
||||
"zen.hero.body":
|
||||
"Zen gir deg tilgang til et handplukket sett med AI-modeller som OpenCode har testet og benchmarked spesielt for kodingsagenter. Du slipper a bekymre deg for ujevn ytelse og kvalitet pa tvers av leverandorer: bruk validerte modeller som fungerer.",
|
||||
"Zen gir deg tilgang til et kuratert sett med AI-modeller som OpenCode har testet og benchmarked spesielt for kodeagenter. Du slipper å bekymre deg for ujevn ytelse og kvalitet; bruk validerte modeller som fungerer.",
|
||||
|
||||
"zen.faq.q1": "Hva er OpenCode Zen?",
|
||||
"zen.faq.a1":
|
||||
"Zen er et kuratert sett med AI-modeller testet og benchmarked for kodingsagenter, laget av teamet bak OpenCode.",
|
||||
"zen.faq.q2": "Hva gjor Zen mer presis?",
|
||||
"Zen er et kuratert sett med AI-modeller testet og benchmarked for kodeagenter, laget av teamet bak OpenCode.",
|
||||
"zen.faq.q2": "Hva gjør Zen mer presis?",
|
||||
"zen.faq.a2":
|
||||
"Zen tilbyr bare modeller som er testet og benchmarked spesifikt for kodingsagenter. Du ville ikke brukt en smorkniv til a skjare biff; ikke bruk darlige modeller til koding.",
|
||||
"Zen tilbyr bare modeller som er testet og benchmarked spesifikt for kodeagenter. Du ville ikke brukt en smørkniv til å skjære biff; ikke bruk dårlige modeller til koding.",
|
||||
"zen.faq.q3": "Er Zen billigere?",
|
||||
"zen.faq.a3":
|
||||
"Zen er ikke for profitt. Zen videreformidler kostnadene fra modellleverandorene direkte til deg. Jo mer Zen brukes, desto mer kan OpenCode forhandle bedre priser og gi dem videre til deg.",
|
||||
"Zen er ikke for profitt. Zen videreformidler kostnadene fra modellleverandørene direkte til deg. Jo mer Zen brukes, desto bedre priser kan OpenCode forhandle og gi videre til deg.",
|
||||
"zen.faq.q4": "Hva koster Zen?",
|
||||
"zen.faq.a4.p1.beforePricing": "Zen",
|
||||
"zen.faq.a4.p1.pricingLink": "tar betalt per foresporsel",
|
||||
"zen.faq.a4.p1.afterPricing": "uten paslag, sa du betaler akkurat det modellleverandoren tar betalt.",
|
||||
"zen.faq.a4.p2.beforeAccount": "Totalprisen avhenger av bruk, og du kan sette manedlige utgiftsgrenser i din",
|
||||
"zen.faq.a4.p1.pricingLink": "tar betalt per forespørsel",
|
||||
"zen.faq.a4.p1.afterPricing": "uten påslag, så du betaler akkurat det modellleverandøren tar betalt.",
|
||||
"zen.faq.a4.p2.beforeAccount": "Totalprisen avhenger av bruk, og du kan sette månedlige utgiftsgrenser i din",
|
||||
"zen.faq.a4.p2.accountLink": "konto",
|
||||
"zen.faq.a4.p3":
|
||||
"For a dekke kostnader legger OpenCode til bare en liten betalingsbehandlingsavgift pa $1.23 per $20 saldo-pafyll.",
|
||||
"For å dekke kostnader legger OpenCode til bare et lite betalingsbehandlingsgebyr på $1.23 per $20 saldo-påfyll.",
|
||||
"zen.faq.q5": "Hva med data og personvern?",
|
||||
"zen.faq.a5.beforeExceptions":
|
||||
"Alle Zen-modeller hostes i USA. Leverandorer folger en zero-retention-policy og bruker ikke dataene dine til modelltrening, med de",
|
||||
"zen.faq.a5.exceptionsLink": "folgende unntakene",
|
||||
"Alle Zen-modeller hostes i USA. Leverandører følger en policy om null oppbevaring og bruker ikke dataene dine til modelltrening, med de",
|
||||
"zen.faq.a5.exceptionsLink": "følgende unntakene",
|
||||
"zen.faq.q6": "Kan jeg sette utgiftsgrenser?",
|
||||
"zen.faq.a6": "Ja, du kan sette manedlige utgiftsgrenser i kontoen din.",
|
||||
"zen.faq.a6": "Ja, du kan sette månedlige utgiftsgrenser i kontoen din.",
|
||||
"zen.faq.q7": "Kan jeg avslutte?",
|
||||
"zen.faq.a7": "Ja, du kan deaktivere fakturering nar som helst og bruke resterende saldo.",
|
||||
"zen.faq.q8": "Kan jeg bruke Zen med andre kodingsagenter?",
|
||||
"zen.faq.a7": "Ja, du kan deaktivere fakturering når som helst og bruke gjenværende saldo.",
|
||||
"zen.faq.q8": "Kan jeg bruke Zen med andre kodeagenter?",
|
||||
"zen.faq.a8":
|
||||
"Zen fungerer veldig bra med OpenCode, men du kan bruke Zen med hvilken som helst agent. Folg oppsettinstruksjonene i din foretrukne kodingsagent.",
|
||||
"Selv om Zen fungerer veldig bra med OpenCode, kan du bruke Zen med hvilken som helst agent. Følg oppsettinstruksjonene i din foretrukne kodeagent.",
|
||||
|
||||
"zen.cta.start": "Kom i gang med Zen",
|
||||
"zen.pricing.title": "Legg til $20 Pay as you go-saldo",
|
||||
"zen.pricing.fee": "(+$1,23 kortbehandlingsgebyr)",
|
||||
"zen.pricing.body": "Bruk med ethvert middel. Angi månedlige forbruksgrenser. Avbryt når som helst.",
|
||||
"zen.pricing.fee": "(+$1.23 kortbehandlingsgebyr)",
|
||||
"zen.pricing.body": "Bruk med hvilken som helst agent. Angi månedlige forbruksgrenser. Avslutt når som helst.",
|
||||
"zen.problem.title": "Hvilket problem løser Zen?",
|
||||
"zen.problem.body":
|
||||
"Det er så mange modeller tilgjengelig, men bare noen få fungerer bra med kodemidler. De fleste leverandører konfigurerer dem annerledes med varierende resultater.",
|
||||
"Det er så mange modeller tilgjengelig, men bare noen få fungerer bra med kodeagenter. De fleste leverandører konfigurerer dem annerledes med varierende resultater.",
|
||||
"zen.problem.subtitle": "Vi fikser dette for alle, ikke bare OpenCode-brukere.",
|
||||
"zen.problem.item1": "Tester utvalgte modeller og konsulterer teamene deres",
|
||||
"zen.problem.item2": "Samarbeide med leverandører for å sikre at de blir levert riktig",
|
||||
"zen.problem.item3": "Benchmarking av alle modellleverandørkombinasjoner anbefaler vi",
|
||||
"zen.problem.item2": "Samarbeider med leverandører for å sikre at de blir levert riktig",
|
||||
"zen.problem.item3": "Benchmarker alle modell-leverandør-kombinasjoner vi anbefaler",
|
||||
"zen.how.title": "Hvordan Zen fungerer",
|
||||
"zen.how.body": "Selv om vi foreslår at du bruker Zen med OpenCode, kan du bruke Zen med hvilken som helst agent.",
|
||||
"zen.how.step1.title": "Registrer deg og legg til $20-saldo",
|
||||
"zen.how.step1.title": "Registrer deg og legg til $20 saldo",
|
||||
"zen.how.step1.beforeLink": "følg",
|
||||
"zen.how.step1.link": "oppsettsinstruksjoner",
|
||||
"zen.how.step1.link": "oppsettsinstruksjonene",
|
||||
"zen.how.step2.title": "Bruk Zen med transparente priser",
|
||||
"zen.how.step2.link": "betale per forespørsel",
|
||||
"zen.how.step2.afterLink": "med null markeringer",
|
||||
"zen.how.step3.title": "Automatisk påfylling",
|
||||
"zen.how.step2.link": "betal per forespørsel",
|
||||
"zen.how.step2.afterLink": "uten påslag",
|
||||
"zen.how.step3.title": "Auto-påfyll",
|
||||
"zen.how.step3.body": "når saldoen din når $5, fyller vi automatisk på $20",
|
||||
"zen.privacy.title": "Personvernet ditt er viktig for oss",
|
||||
"zen.privacy.beforeExceptions":
|
||||
"Alle Zen-modeller er vert i USA. Leverandører følger en nulloppbevaringspolicy og bruker ikke dataene dine til modelltrening, med",
|
||||
"Alle Zen-modeller hostes i USA. Leverandører følger en policy om null oppbevaring og bruker ikke dataene dine til modelltrening, med",
|
||||
"zen.privacy.exceptionsLink": "følgende unntak",
|
||||
|
||||
"black.meta.title": "OpenCode Black | Få tilgang til verdens beste kodemodeller",
|
||||
"black.meta.description": "Få tilgang til Claude, GPT, Gemini og mer med OpenCode Black-abonnementer.",
|
||||
"black.hero.title": "Få tilgang til verdens beste kodemodeller",
|
||||
"black.hero.subtitle": "Inkludert Claude, GPT, Gemini og mer",
|
||||
"black.title": "OpenCode Black | Priser",
|
||||
"black.plan.icon20": "Black 20-plan",
|
||||
"black.plan.icon100": "Black 100-plan",
|
||||
"black.plan.icon200": "Black 200-plan",
|
||||
"black.plan.multiplier100": "5x mer bruk enn Black 20",
|
||||
"black.plan.multiplier200": "20x mer bruk enn Black 20",
|
||||
"black.price.perMonth": "per måned",
|
||||
"black.price.perPersonBilledMonthly": "per person fakturert månedlig",
|
||||
"black.terms.1": "Abonnementet ditt starter ikke umiddelbart",
|
||||
"black.terms.2": "Du blir lagt til i ventelisten og aktivert snart",
|
||||
"black.terms.3": "Kortet ditt belastes kun når abonnementet aktiveres",
|
||||
"black.terms.4": "Bruksgrenser gjelder, tung automatisert bruk kan nå grensene raskere",
|
||||
"black.terms.5": "Abonnementer er for enkeltpersoner, kontakt Enterprise for team",
|
||||
"black.terms.6": "Grenser kan justeres og planer kan avvikles i fremtiden",
|
||||
"black.terms.7": "Avslutt abonnementet når som helst",
|
||||
"black.action.continue": "Fortsett",
|
||||
"black.finePrint.beforeTerms": "Priser vist inkluderer ikke gjeldende skatt",
|
||||
"black.finePrint.terms": "Vilkår for bruk",
|
||||
"black.workspace.title": "OpenCode Black | Velg arbeidsområde",
|
||||
"black.workspace.selectPlan": "Velg et arbeidsområde for denne planen",
|
||||
"black.workspace.name": "Arbeidsområde {{n}}",
|
||||
"black.subscribe.title": "Abonner på OpenCode Black",
|
||||
"black.subscribe.paymentMethod": "Betalingsmetode",
|
||||
"black.subscribe.loadingPaymentForm": "Laster betalingsskjema...",
|
||||
"black.subscribe.selectWorkspaceToContinue": "Velg et arbeidsområde for å fortsette",
|
||||
"black.subscribe.failurePrefix": "Å nei!",
|
||||
"black.subscribe.error.generic": "Det oppstod en feil",
|
||||
"black.subscribe.error.invalidPlan": "Ugyldig plan",
|
||||
"black.subscribe.error.workspaceRequired": "Arbeidsområde-ID er påkrevd",
|
||||
"black.subscribe.error.alreadySubscribed": "Dette arbeidsområdet har allerede et abonnement",
|
||||
"black.subscribe.processing": "Behandler...",
|
||||
"black.subscribe.submit": "Abonner ${{plan}}",
|
||||
"black.subscribe.form.chargeNotice": "Du blir kun belastet når abonnementet ditt aktiveres",
|
||||
"black.subscribe.success.title": "Du er på ventelisten for OpenCode Black",
|
||||
"black.subscribe.success.subscriptionPlan": "Abonnementsplan",
|
||||
"black.subscribe.success.planName": "OpenCode Black {{plan}}",
|
||||
"black.subscribe.success.amount": "Beløp",
|
||||
"black.subscribe.success.amountValue": "${{plan}} per måned",
|
||||
"black.subscribe.success.paymentMethod": "Betalingsmetode",
|
||||
"black.subscribe.success.dateJoined": "Dato meldt på",
|
||||
"black.subscribe.success.chargeNotice": "Kortet ditt vil bli belastet når abonnementet aktiveres",
|
||||
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "API-nøkler",
|
||||
"workspace.nav.members": "Medlemmer",
|
||||
"workspace.nav.billing": "Fakturering",
|
||||
"workspace.nav.settings": "Innstillinger",
|
||||
|
||||
"workspace.home.banner.beforeLink": "Pålitelige optimaliserte modeller for kodeagenter.",
|
||||
"workspace.home.billing.loading": "Laster...",
|
||||
"workspace.home.billing.enable": "Aktiver fakturering",
|
||||
"workspace.home.billing.currentBalance": "Gjeldende saldo",
|
||||
|
||||
"workspace.newUser.feature.tested.title": "Testede og verifiserte modeller",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"Vi har benchmarked og testet modeller spesifikt for kodeagenter for å sikre best mulig ytelse.",
|
||||
"workspace.newUser.feature.quality.title": "Høyeste kvalitet",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"Få tilgang til modeller konfigurert for optimal ytelse – ingen nedgraderinger eller ruting til billigere leverandører.",
|
||||
"workspace.newUser.feature.lockin.title": "Ingen innlåsing",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"Bruk Zen med hvilken som helst kodeagent, og fortsett å bruke andre leverandører med opencode når du vil.",
|
||||
"workspace.newUser.copyApiKey": "Kopier API-nøkkel",
|
||||
"workspace.newUser.copyKey": "Kopier nøkkel",
|
||||
"workspace.newUser.copied": "Kopiert!",
|
||||
"workspace.newUser.step.enableBilling": "Aktiver fakturering",
|
||||
"workspace.newUser.step.login.before": "Kjør",
|
||||
"workspace.newUser.step.login.after": "og velg opencode",
|
||||
"workspace.newUser.step.pasteKey": "Lim inn API-nøkkelen",
|
||||
"workspace.newUser.step.models.before": "Start opencode og kjør",
|
||||
"workspace.newUser.step.models.after": "for å velge en modell",
|
||||
|
||||
"workspace.models.title": "Modeller",
|
||||
"workspace.models.subtitle.beforeLink": "Administrer hvilke modeller medlemmene i arbeidsområdet har tilgang til.",
|
||||
"workspace.models.table.model": "Modell",
|
||||
"workspace.models.table.enabled": "Aktivert",
|
||||
|
||||
"workspace.providers.title": "Ta med din egen nøkkel",
|
||||
"workspace.providers.subtitle": "Konfigurer dine egne API-nøkler fra AI-leverandører.",
|
||||
"workspace.providers.placeholder": "Skriv inn {{provider}} API-nøkkel ({{prefix}}...)",
|
||||
"workspace.providers.configure": "Konfigurer",
|
||||
"workspace.providers.edit": "Rediger",
|
||||
"workspace.providers.delete": "Slett",
|
||||
"workspace.providers.saving": "Lagrer...",
|
||||
"workspace.providers.save": "Lagre",
|
||||
"workspace.providers.table.provider": "Leverandør",
|
||||
"workspace.providers.table.apiKey": "API-nøkkel",
|
||||
|
||||
"workspace.usage.title": "Brukshistorikk",
|
||||
"workspace.usage.subtitle": "Nylig API-bruk og kostnader.",
|
||||
"workspace.usage.empty": "Gjør ditt første API-kall for å komme i gang.",
|
||||
"workspace.usage.table.date": "Dato",
|
||||
"workspace.usage.table.model": "Modell",
|
||||
"workspace.usage.table.input": "Input",
|
||||
"workspace.usage.table.output": "Output",
|
||||
"workspace.usage.table.cost": "Kostnad",
|
||||
"workspace.usage.breakdown.input": "Input",
|
||||
"workspace.usage.breakdown.cacheRead": "Cache Lest",
|
||||
"workspace.usage.breakdown.cacheWrite": "Cache Skrevet",
|
||||
"workspace.usage.breakdown.output": "Output",
|
||||
"workspace.usage.breakdown.reasoning": "Resonnering",
|
||||
"workspace.usage.subscription": "abonnement (${{amount}})",
|
||||
|
||||
"workspace.cost.title": "Kostnad",
|
||||
"workspace.cost.subtitle": "Brukskostnader fordelt på modell.",
|
||||
"workspace.cost.allModels": "Alle modeller",
|
||||
"workspace.cost.allKeys": "Alle nøkler",
|
||||
"workspace.cost.deletedSuffix": "(slettet)",
|
||||
"workspace.cost.empty": "Ingen bruksdata tilgjengelig for den valgte perioden.",
|
||||
"workspace.cost.subscriptionShort": "sub",
|
||||
|
||||
"workspace.keys.title": "API-nøkler",
|
||||
"workspace.keys.subtitle": "Administrer API-nøklene dine for å få tilgang til opencode-tjenester.",
|
||||
"workspace.keys.create": "Opprett API-nøkkel",
|
||||
"workspace.keys.placeholder": "Skriv inn navn på nøkkel",
|
||||
"workspace.keys.empty": "Opprett en opencode Gateway API-nøkkel",
|
||||
"workspace.keys.table.name": "Navn",
|
||||
"workspace.keys.table.key": "Nøkkel",
|
||||
"workspace.keys.table.createdBy": "Opprettet av",
|
||||
"workspace.keys.table.lastUsed": "Sist brukt",
|
||||
"workspace.keys.copyApiKey": "Kopier API-nøkkel",
|
||||
"workspace.keys.delete": "Slett",
|
||||
|
||||
"workspace.members.title": "Medlemmer",
|
||||
"workspace.members.subtitle": "Administrer medlemmer i arbeidsområdet og deres tillatelser.",
|
||||
"workspace.members.invite": "Inviter medlem",
|
||||
"workspace.members.inviting": "Inviterer...",
|
||||
"workspace.members.beta.beforeLink": "Arbeidsområder er gratis for team i beta-perioden.",
|
||||
"workspace.members.form.invitee": "Invitert",
|
||||
"workspace.members.form.emailPlaceholder": "Skriv inn e-post",
|
||||
"workspace.members.form.role": "Rolle",
|
||||
"workspace.members.form.monthlyLimit": "Månedlig utgiftsgrense",
|
||||
"workspace.members.noLimit": "Ingen grense",
|
||||
"workspace.members.noLimitLowercase": "ingen grense",
|
||||
"workspace.members.invited": "invitert",
|
||||
"workspace.members.edit": "Rediger",
|
||||
"workspace.members.delete": "Slett",
|
||||
"workspace.members.saving": "Lagrer...",
|
||||
"workspace.members.save": "Lagre",
|
||||
"workspace.members.table.email": "E-post",
|
||||
"workspace.members.table.role": "Rolle",
|
||||
"workspace.members.table.monthLimit": "Månedsgrense",
|
||||
"workspace.members.role.admin": "Admin",
|
||||
"workspace.members.role.adminDescription": "Kan administrere modeller, medlemmer og fakturering",
|
||||
"workspace.members.role.member": "Medlem",
|
||||
"workspace.members.role.memberDescription": "Kan kun generere API-nøkler for seg selv",
|
||||
|
||||
"workspace.settings.title": "Innstillinger",
|
||||
"workspace.settings.subtitle": "Oppdater arbeidsområdets navn og preferanser.",
|
||||
"workspace.settings.workspaceName": "Navn på arbeidsområde",
|
||||
"workspace.settings.defaultName": "Standard",
|
||||
"workspace.settings.updating": "Oppdaterer...",
|
||||
"workspace.settings.save": "Lagre",
|
||||
"workspace.settings.edit": "Rediger",
|
||||
|
||||
"workspace.billing.title": "Fakturering",
|
||||
"workspace.billing.subtitle.beforeLink": "Administrer betalingsmetoder.",
|
||||
"workspace.billing.contactUs": "Kontakt oss",
|
||||
"workspace.billing.subtitle.afterLink": "hvis du har spørsmål.",
|
||||
"workspace.billing.currentBalance": "Gjeldende saldo",
|
||||
"workspace.billing.add": "Legg til $",
|
||||
"workspace.billing.enterAmount": "Angi beløp",
|
||||
"workspace.billing.loading": "Laster...",
|
||||
"workspace.billing.addAction": "Legg til",
|
||||
"workspace.billing.addBalance": "Legg til saldo",
|
||||
"workspace.billing.linkedToStripe": "Koblet til Stripe",
|
||||
"workspace.billing.manage": "Administrer",
|
||||
"workspace.billing.enable": "Aktiver fakturering",
|
||||
|
||||
"workspace.monthlyLimit.title": "Månedlig grense",
|
||||
"workspace.monthlyLimit.subtitle": "Angi en månedlig bruksgrense for kontoen din.",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "Angir...",
|
||||
"workspace.monthlyLimit.set": "Sett",
|
||||
"workspace.monthlyLimit.edit": "Rediger grense",
|
||||
"workspace.monthlyLimit.noLimit": "Ingen bruksgrense satt.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "Gjeldende forbruk for",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "er $",
|
||||
|
||||
"workspace.reload.title": "Auto-påfyll",
|
||||
"workspace.reload.disabled.before": "Auto-påfyll er",
|
||||
"workspace.reload.disabled.state": "deaktivert",
|
||||
"workspace.reload.disabled.after": "Aktiver for å fylle på automatisk når saldoen er lav.",
|
||||
"workspace.reload.enabled.before": "Auto-påfyll er",
|
||||
"workspace.reload.enabled.state": "aktivert",
|
||||
"workspace.reload.enabled.middle": "Vi fyller på",
|
||||
"workspace.reload.processingFee": "behandlingsgebyr",
|
||||
"workspace.reload.enabled.after": "når saldoen når",
|
||||
"workspace.reload.edit": "Rediger",
|
||||
"workspace.reload.enable": "Aktiver",
|
||||
"workspace.reload.enableAutoReload": "Aktiver Auto-påfyll",
|
||||
"workspace.reload.reloadAmount": "Fyll på $",
|
||||
"workspace.reload.whenBalanceReaches": "Når saldoen når $",
|
||||
"workspace.reload.saving": "Lagrer...",
|
||||
"workspace.reload.save": "Lagre",
|
||||
"workspace.reload.failedAt": "Påfylling mislyktes kl",
|
||||
"workspace.reload.reason": "Årsak:",
|
||||
"workspace.reload.updatePaymentMethod": "Vennligst oppdater betalingsmetoden din og prøv på nytt.",
|
||||
"workspace.reload.retrying": "Prøver på nytt...",
|
||||
"workspace.reload.retry": "Prøv på nytt",
|
||||
|
||||
"workspace.payments.title": "Betalingshistorikk",
|
||||
"workspace.payments.subtitle": "Nylige betalingstransaksjoner.",
|
||||
"workspace.payments.table.date": "Dato",
|
||||
"workspace.payments.table.paymentId": "Betalings-ID",
|
||||
"workspace.payments.table.amount": "Beløp",
|
||||
"workspace.payments.table.receipt": "Kvittering",
|
||||
"workspace.payments.type.credit": "kreditt",
|
||||
"workspace.payments.type.subscription": "abonnement",
|
||||
"workspace.payments.view": "Vis",
|
||||
|
||||
"workspace.black.loading": "Laster...",
|
||||
"workspace.black.time.day": "dag",
|
||||
"workspace.black.time.days": "dager",
|
||||
"workspace.black.time.hour": "time",
|
||||
"workspace.black.time.hours": "timer",
|
||||
"workspace.black.time.minute": "minutt",
|
||||
"workspace.black.time.minutes": "minutter",
|
||||
"workspace.black.time.fewSeconds": "noen få sekunder",
|
||||
"workspace.black.subscription.title": "Abonnement",
|
||||
"workspace.black.subscription.message": "Du abonnerer på OpenCode Black for ${{plan}} per måned.",
|
||||
"workspace.black.subscription.manage": "Administrer abonnement",
|
||||
"workspace.black.subscription.rollingUsage": "5-timers bruk",
|
||||
"workspace.black.subscription.weeklyUsage": "Ukentlig bruk",
|
||||
"workspace.black.subscription.resetsIn": "Nullstilles om",
|
||||
"workspace.black.subscription.useBalance": "Bruk din tilgjengelige saldo etter å ha nådd bruksgrensene",
|
||||
"workspace.black.waitlist.title": "Venteliste",
|
||||
"workspace.black.waitlist.joined": "Du står på venteliste for OpenCode Black-planen til ${{plan}} per måned.",
|
||||
"workspace.black.waitlist.ready": "Vi er klare til å melde deg på OpenCode Black-planen til ${{plan}} per måned.",
|
||||
"workspace.black.waitlist.leave": "Forlat venteliste",
|
||||
"workspace.black.waitlist.leaving": "Forlater...",
|
||||
"workspace.black.waitlist.left": "Forlot",
|
||||
"workspace.black.waitlist.enroll": "Meld på",
|
||||
"workspace.black.waitlist.enrolling": "Melder på...",
|
||||
"workspace.black.waitlist.enrolled": "Påmeldt",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"Når du klikker på Meld på, starter abonnementet umiddelbart og kortet ditt belastes.",
|
||||
|
||||
"download.title": "OpenCode | Last ned",
|
||||
"download.meta.description": "Last ned OpenCode for macOS, Windows og Linux",
|
||||
"download.hero.title": "Last ned OpenCode",
|
||||
"download.hero.subtitle": "Tilgjengelig i beta for macOS, Windows og Linux",
|
||||
@@ -226,33 +501,33 @@ export const dict = {
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
|
||||
"download.faq.a3.beforeLocal":
|
||||
"Ikke nodvendigvis, men sannsynligvis. Du trenger et AI-abonnement hvis du vil koble OpenCode til en betalt leverandor, men du kan jobbe med",
|
||||
"Ikke nødvendigvis, men sannsynligvis. Du trenger et AI-abonnement hvis du vil koble OpenCode til en betalt leverandør, selv om du kan jobbe med",
|
||||
"download.faq.a3.localLink": "lokale modeller",
|
||||
"download.faq.a3.afterLocal.beforeZen": "gratis. Selv om vi oppfordrer brukere til a bruke",
|
||||
"download.faq.a3.afterZen": ", fungerer OpenCode med alle populære leverandorer som OpenAI, Anthropic, xAI osv.",
|
||||
"download.faq.a3.afterLocal.beforeZen": "gratis. Selv om vi oppfordrer brukere til å bruke",
|
||||
"download.faq.a3.afterZen": ", fungerer OpenCode med alle populære leverandører som OpenAI, Anthropic, xAI osv.",
|
||||
|
||||
"download.faq.a5.p1": "OpenCode er 100% gratis a bruke.",
|
||||
"download.faq.a5.p1": "OpenCode er 100% gratis å bruke.",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"Eventuelle ekstra kostnader kommer fra abonnementet ditt hos en modellleverandor. Selv om OpenCode fungerer med enhver modellleverandor, anbefaler vi a bruke",
|
||||
"Eventuelle ekstra kostnader kommer fra abonnementet ditt hos en modellleverandør. Selv om OpenCode fungerer med enhver modellleverandør, anbefaler vi å bruke",
|
||||
"download.faq.a5.p2.afterZen": ".",
|
||||
|
||||
"download.faq.a6.p1": "Dataene og informasjonen din lagres bare nar du oppretter delbare lenker i OpenCode.",
|
||||
"download.faq.a6.p1": "Dataene og informasjonen din lagres bare når du oppretter delbare lenker i OpenCode.",
|
||||
"download.faq.a6.p2.beforeShare": "Les mer om",
|
||||
"download.faq.a6.shareLink": "delingssider",
|
||||
|
||||
"enterprise.title": "OpenCode | Enterprise-losninger for din organisasjon",
|
||||
"enterprise.meta.description": "Kontakt OpenCode for enterprise-losninger",
|
||||
"enterprise.title": "OpenCode | Enterprise-løsninger for din organisasjon",
|
||||
"enterprise.meta.description": "Kontakt OpenCode for enterprise-løsninger",
|
||||
"enterprise.hero.title": "Koden din er din",
|
||||
"enterprise.hero.body1":
|
||||
"OpenCode opererer sikkert inne i organisasjonen din uten at data eller kontekst lagres, og uten lisensbegrensninger eller eierskapskrav. Start en proveperiode med teamet ditt, og rull den deretter ut i hele organisasjonen ved a integrere den med SSO-en din og den interne AI-gatewayen.",
|
||||
"OpenCode opererer sikkert inne i organisasjonen din uten at data eller kontekst lagres, og uten lisensbegrensninger eller eierskapskrav. Start en prøveperiode med teamet ditt, og rull den deretter ut i hele organisasjonen ved å integrere den med SSO og din interne AI-gateway.",
|
||||
"enterprise.hero.body2": "Fortell oss hvordan vi kan hjelpe.",
|
||||
"enterprise.form.name.label": "Fullt navn",
|
||||
"enterprise.form.name.placeholder": "Jeff Bezos",
|
||||
"enterprise.form.role.label": "Rolle",
|
||||
"enterprise.form.role.placeholder": "Styrets leder",
|
||||
"enterprise.form.email.label": "Bedriftens e-post",
|
||||
"enterprise.form.role.placeholder": "Styreleder",
|
||||
"enterprise.form.email.label": "Bedrifts-e-post",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "Hvilket problem prover du a lose?",
|
||||
"enterprise.form.message.label": "Hvilket problem prøver dere å løse?",
|
||||
"enterprise.form.message.placeholder": "Vi trenger hjelp med...",
|
||||
"enterprise.form.send": "Send",
|
||||
"enterprise.form.sending": "Sender...",
|
||||
@@ -260,207 +535,60 @@ export const dict = {
|
||||
"enterprise.faq.title": "FAQ",
|
||||
"enterprise.faq.q1": "Hva er OpenCode Enterprise?",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise er for organisasjoner som vil sikre at koden og dataene deres aldri forlater infrastrukturen deres. Dette kan gjores med en sentral konfigurasjon som integreres med SSO-en din og den interne AI-gatewayen.",
|
||||
"OpenCode Enterprise er for organisasjoner som vil sikre at koden og dataene deres aldri forlater infrastrukturen. Dette kan gjøres med en sentral konfigurasjon som integreres med SSO og intern AI-gateway.",
|
||||
"enterprise.faq.q2": "Hvordan kommer jeg i gang med OpenCode Enterprise?",
|
||||
"enterprise.faq.a2":
|
||||
"Start enkelt med en intern proveperiode med teamet ditt. OpenCode lagrer som standard ikke koden din eller kontekstdata, noe som gjor det enkelt a komme i gang. Kontakt oss deretter for a diskutere priser og implementeringsalternativer.",
|
||||
"Start enkelt med en intern prøveperiode med teamet ditt. OpenCode lagrer som standard ikke koden din eller kontekstdata, noe som gjør det enkelt å komme i gang. Kontakt oss deretter for å diskutere priser og implementeringsalternativer.",
|
||||
"enterprise.faq.q3": "Hvordan fungerer enterprise-prising?",
|
||||
"enterprise.faq.a3":
|
||||
"Vi tilbyr enterprise-prising per sete. Har du din egen LLM-gateway, tar vi ikke betalt for brukte tokens. Kontakt oss for flere detaljer og et tilpasset tilbud basert pa organisasjonens behov.",
|
||||
"Vi tilbyr enterprise-prising per sete. Har du din egen LLM-gateway, tar vi ikke betalt for brukte tokens. Kontakt oss for flere detaljer og et tilpasset tilbud basert på organisasjonens behov.",
|
||||
"enterprise.faq.q4": "Er dataene mine sikre med OpenCode Enterprise?",
|
||||
"enterprise.faq.a4":
|
||||
"Ja. OpenCode lagrer ikke koden din eller kontekstdata. All behandling skjer lokalt eller gjennom direkte API-kall til AI-leverandoren din. Med sentral konfigurasjon og SSO-integrasjon forblir dataene dine sikre innenfor organisasjonens infrastruktur.",
|
||||
"Ja. OpenCode lagrer ikke koden din eller kontekstdata. All behandling skjer lokalt eller gjennom direkte API-kall til AI-leverandøren din. Med sentral konfigurasjon og SSO-integrasjon forblir dataene dine sikre innenfor organisasjonens infrastruktur.",
|
||||
|
||||
"brand.title": "OpenCode | Brand",
|
||||
"brand.meta.description": "OpenCode retningslinjer for merkevaren",
|
||||
"brand.heading": "Retningslinjer for merkevaren",
|
||||
"brand.title": "OpenCode | Merkevare",
|
||||
"brand.meta.description": "OpenCode retningslinjer for merkevare",
|
||||
"brand.heading": "Retningslinjer for merkevare",
|
||||
"brand.subtitle": "Ressurser og assets som hjelper deg å jobbe med OpenCode-brandet.",
|
||||
"brand.downloadAll": "Last ned alle assets",
|
||||
|
||||
"changelog.title": "OpenCode | Endringslogg",
|
||||
"changelog.meta.description": "Utgivelsesnotater og endringslogg for OpenCode",
|
||||
"changelog.hero.title": "Endringslogg",
|
||||
"changelog.hero.subtitle": "Nye oppdateringer og forbedringer for OpenCode",
|
||||
"changelog.empty": "Ingen endringsloggoppforinger funnet.",
|
||||
"changelog.empty": "Ingen endringsloggoppføringer funnet.",
|
||||
"changelog.viewJson": "Vis JSON",
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "API Nøkler",
|
||||
"workspace.nav.members": "Medlemmer",
|
||||
"workspace.nav.billing": "Fakturering",
|
||||
"workspace.nav.settings": "Innstillinger",
|
||||
"workspace.home.banner.beforeLink": "Pålitelige optimaliserte modeller for kodingsagenter.",
|
||||
"workspace.home.billing.loading": "Laster inn...",
|
||||
"workspace.home.billing.enable": "Aktiver fakturering",
|
||||
"workspace.home.billing.currentBalance": "Gjeldende saldo",
|
||||
"workspace.newUser.feature.tested.title": "Testede og verifiserte modeller",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"Vi har benchmarked og testet modeller spesifikt for kodingsagenter for å sikre best mulig ytelse.",
|
||||
"workspace.newUser.feature.quality.title": "Høyeste kvalitet",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"Få tilgang til modeller konfigurert for optimal ytelse – ingen nedgraderinger eller ruting til billigere leverandører.",
|
||||
"workspace.newUser.feature.lockin.title": "Ingen innlåsing",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"Bruk Zen med hvilken som helst kodeagent, og fortsett å bruke andre leverandører med opencode når du vil.",
|
||||
"workspace.newUser.copyApiKey": "Kopier API-nøkkelen",
|
||||
"workspace.newUser.copyKey": "Kopier nøkkel",
|
||||
"workspace.newUser.copied": "Kopiert!",
|
||||
"workspace.newUser.step.enableBilling": "Aktiver fakturering",
|
||||
"workspace.newUser.step.login.before": "Løp",
|
||||
"workspace.newUser.step.login.after": "og velg opencode",
|
||||
"workspace.newUser.step.pasteKey": "Lim inn API-nøkkelen",
|
||||
"workspace.newUser.step.models.before": "Start opencode og kjør",
|
||||
"workspace.newUser.step.models.after": "for å velge en modell",
|
||||
"workspace.models.title": "Modeller",
|
||||
"workspace.models.subtitle.beforeLink": "Administrer hvilke modeller arbeidsområdemedlemmer har tilgang til.",
|
||||
"workspace.models.table.model": "Modell",
|
||||
"workspace.models.table.enabled": "Aktivert",
|
||||
"workspace.providers.title": "Ta med din egen nøkkel",
|
||||
"workspace.providers.subtitle": "Konfigurer dine egne API-nøkler fra AI-leverandører.",
|
||||
"workspace.providers.placeholder": "Skriv inn {{provider}} API nøkkel ({{prefix}}...)",
|
||||
"workspace.providers.configure": "Konfigurer",
|
||||
"workspace.providers.edit": "Redigere",
|
||||
"workspace.providers.delete": "Slett",
|
||||
"workspace.providers.saving": "Lagrer...",
|
||||
"workspace.providers.save": "Lagre",
|
||||
"workspace.providers.table.provider": "Leverandør",
|
||||
"workspace.providers.table.apiKey": "API nøkkel",
|
||||
"workspace.usage.title": "Brukshistorikk",
|
||||
"workspace.usage.subtitle": "Nylig API bruk og kostnader.",
|
||||
"workspace.usage.empty": "Foreta ditt første API-anrop for å komme i gang.",
|
||||
"workspace.usage.table.date": "Dato",
|
||||
"workspace.usage.table.model": "Modell",
|
||||
"workspace.usage.table.input": "Inndata",
|
||||
"workspace.usage.table.output": "Produksjon",
|
||||
"workspace.usage.table.cost": "Kostnad",
|
||||
"workspace.usage.breakdown.input": "Inndata",
|
||||
"workspace.usage.breakdown.cacheRead": "Cache lest",
|
||||
"workspace.usage.breakdown.cacheWrite": "Cache-skriving",
|
||||
"workspace.usage.breakdown.output": "Produksjon",
|
||||
"workspace.usage.breakdown.reasoning": "Argumentasjon",
|
||||
"workspace.usage.subscription": "abonnement (${{amount}})",
|
||||
"workspace.cost.title": "Kostnad",
|
||||
"workspace.cost.subtitle": "Brukskostnader fordelt på modell.",
|
||||
"workspace.cost.allModels": "Alle modeller",
|
||||
"workspace.cost.allKeys": "Alle nøkler",
|
||||
"workspace.cost.deletedSuffix": "(slettet)",
|
||||
"workspace.cost.empty": "Ingen bruksdata tilgjengelig for den valgte perioden.",
|
||||
"workspace.cost.subscriptionShort": "sub",
|
||||
"workspace.keys.title": "API Nøkler",
|
||||
"workspace.keys.subtitle": "Administrer API-nøklene dine for å få tilgang til opencode-tjenester.",
|
||||
"workspace.keys.create": "Opprett API-nøkkel",
|
||||
"workspace.keys.placeholder": "Skriv inn nøkkelnavn",
|
||||
"workspace.keys.empty": "Opprett en opencode Gateway API nøkkel",
|
||||
"workspace.keys.table.name": "Navn",
|
||||
"workspace.keys.table.key": "Nøkkel",
|
||||
"workspace.keys.table.createdBy": "Laget av",
|
||||
"workspace.keys.table.lastUsed": "Sist brukt",
|
||||
"workspace.keys.copyApiKey": "Kopier API-nøkkelen",
|
||||
"workspace.keys.delete": "Slett",
|
||||
"workspace.members.title": "Medlemmer",
|
||||
"workspace.members.subtitle": "Administrer arbeidsområdemedlemmer og deres tillatelser.",
|
||||
"workspace.members.invite": "Inviter medlem",
|
||||
"workspace.members.inviting": "Inviterer...",
|
||||
"workspace.members.beta.beforeLink": "Arbeidsområder er gratis for team under betaversjonen.",
|
||||
"workspace.members.form.invitee": "Invitert",
|
||||
"workspace.members.form.emailPlaceholder": "Skriv inn e-post",
|
||||
"workspace.members.form.role": "Rolle",
|
||||
"workspace.members.form.monthlyLimit": "Månedlig utgiftsgrense",
|
||||
"workspace.members.noLimit": "Ingen grense",
|
||||
"workspace.members.noLimitLowercase": "ingen grense",
|
||||
"workspace.members.invited": "invitert",
|
||||
"workspace.members.edit": "Redigere",
|
||||
"workspace.members.delete": "Slett",
|
||||
"workspace.members.saving": "Lagrer...",
|
||||
"workspace.members.save": "Lagre",
|
||||
"workspace.members.table.email": "E-post",
|
||||
"workspace.members.table.role": "Rolle",
|
||||
"workspace.members.table.monthLimit": "Månedsgrense",
|
||||
"workspace.members.role.admin": "Admin",
|
||||
"workspace.members.role.adminDescription": "Kan administrere modeller, medlemmer og fakturering",
|
||||
"workspace.members.role.member": "Medlem",
|
||||
"workspace.members.role.memberDescription": "Kan bare generere API-nøkler for seg selv",
|
||||
"workspace.settings.title": "Innstillinger",
|
||||
"workspace.settings.subtitle": "Oppdater arbeidsområdets navn og preferanser.",
|
||||
"workspace.settings.workspaceName": "Navn på arbeidsområde",
|
||||
"workspace.settings.defaultName": "Misligholde",
|
||||
"workspace.settings.updating": "Oppdaterer...",
|
||||
"workspace.settings.save": "Lagre",
|
||||
"workspace.settings.edit": "Redigere",
|
||||
"workspace.billing.title": "Fakturering",
|
||||
"workspace.billing.subtitle.beforeLink": "Administrer betalingsmåter.",
|
||||
"workspace.billing.contactUs": "Kontakt oss",
|
||||
"workspace.billing.subtitle.afterLink": "hvis du har spørsmål.",
|
||||
"workspace.billing.currentBalance": "Nåværende saldo",
|
||||
"workspace.billing.add": "Legg til $",
|
||||
"workspace.billing.enterAmount": "Angi beløp",
|
||||
"workspace.billing.loading": "Laster inn...",
|
||||
"workspace.billing.addAction": "Legge til",
|
||||
"workspace.billing.addBalance": "Legg til saldo",
|
||||
"workspace.billing.linkedToStripe": "Knyttet til Stripe",
|
||||
"workspace.billing.manage": "Administrer",
|
||||
"workspace.billing.enable": "Aktiver fakturering",
|
||||
"workspace.monthlyLimit.title": "Månedlig grense",
|
||||
"workspace.monthlyLimit.subtitle": "Angi en månedlig bruksgrense for kontoen din.",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "Innstilling...",
|
||||
"workspace.monthlyLimit.set": "Sett",
|
||||
"workspace.monthlyLimit.edit": "Rediger grense",
|
||||
"workspace.monthlyLimit.noLimit": "Ingen bruksgrense satt.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "Gjeldende bruk for",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "er $",
|
||||
"workspace.reload.title": "Automatisk påfylling",
|
||||
"workspace.reload.disabled.before": "Automatisk påfylling er",
|
||||
"workspace.reload.disabled.state": "deaktivert",
|
||||
"workspace.reload.disabled.after": "Aktiver for å automatisk påfylle på nytt når saldoen er lav.",
|
||||
"workspace.reload.enabled.before": "Automatisk påfylling er",
|
||||
"workspace.reload.enabled.state": "aktivert",
|
||||
"workspace.reload.enabled.middle": "Vi fyller på",
|
||||
"workspace.reload.processingFee": "behandlingsgebyr",
|
||||
"workspace.reload.enabled.after": "når saldoen når",
|
||||
"workspace.reload.edit": "Redigere",
|
||||
"workspace.reload.enable": "Aktiver",
|
||||
"workspace.reload.enableAutoReload": "Aktiver automatisk påfylling",
|
||||
"workspace.reload.reloadAmount": "Last inn $",
|
||||
"workspace.reload.whenBalanceReaches": "Når saldoen når $",
|
||||
"workspace.reload.saving": "Lagrer...",
|
||||
"workspace.reload.save": "Lagre",
|
||||
"workspace.reload.failedAt": "Omlasting mislyktes kl",
|
||||
"workspace.reload.reason": "Grunn:",
|
||||
"workspace.reload.updatePaymentMethod": "Oppdater betalingsmåten og prøv på nytt.",
|
||||
"workspace.reload.retrying": "Prøver på nytt...",
|
||||
"workspace.reload.retry": "Prøv på nytt",
|
||||
"workspace.payments.title": "Betalingshistorikk",
|
||||
"workspace.payments.subtitle": "Nylige betalingstransaksjoner.",
|
||||
"workspace.payments.table.date": "Dato",
|
||||
"workspace.payments.table.paymentId": "Betalings-ID",
|
||||
"workspace.payments.table.amount": "Beløp",
|
||||
"workspace.payments.table.receipt": "Kvittering",
|
||||
"workspace.payments.type.credit": "kreditt",
|
||||
"workspace.payments.type.subscription": "abonnement",
|
||||
"workspace.payments.view": "Vis",
|
||||
"workspace.black.loading": "Laster inn...",
|
||||
"workspace.black.time.day": "dag",
|
||||
"workspace.black.time.days": "dager",
|
||||
"workspace.black.time.hour": "time",
|
||||
"workspace.black.time.hours": "timer",
|
||||
"workspace.black.time.minute": "minutt",
|
||||
"workspace.black.time.minutes": "minutter",
|
||||
"workspace.black.time.fewSeconds": "noen få sekunder",
|
||||
"workspace.black.subscription.title": "Abonnement",
|
||||
"workspace.black.subscription.message": "Du abonnerer på OpenCode Black for ${{plan}} per måned.",
|
||||
"workspace.black.subscription.manage": "Administrer abonnement",
|
||||
"workspace.black.subscription.rollingUsage": "5-timers bruk",
|
||||
"workspace.black.subscription.weeklyUsage": "Ukentlig bruk",
|
||||
"workspace.black.subscription.resetsIn": "Tilbakestilles inn",
|
||||
"workspace.black.subscription.useBalance": "Bruk din tilgjengelige saldo etter å ha nådd bruksgrensene",
|
||||
"workspace.black.waitlist.title": "Venteliste",
|
||||
"workspace.black.waitlist.joined": "Du er på ventelisten for ${{plan}} per måned OpenCode Black plan.",
|
||||
"workspace.black.waitlist.ready": "Vi er klare til å melde deg på ${{plan}} per måned OpenCode Black plan.",
|
||||
"workspace.black.waitlist.leave": "Gå ut av venteliste",
|
||||
"workspace.black.waitlist.leaving": "Forlater...",
|
||||
"workspace.black.waitlist.left": "Igjen",
|
||||
"workspace.black.waitlist.enroll": "Registrere",
|
||||
"workspace.black.waitlist.enrolling": "Registrerer...",
|
||||
"workspace.black.waitlist.enrolled": "Påmeldt",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"Når du klikker på Registrer, starter abonnementet umiddelbart og kortet ditt belastes.",
|
||||
|
||||
"bench.list.title": "Benchmark",
|
||||
"bench.list.heading": "Benchmarks",
|
||||
"bench.list.table.agent": "Agent",
|
||||
"bench.list.table.model": "Modell",
|
||||
"bench.list.table.score": "Poengsum",
|
||||
|
||||
"bench.detail.title": "Benchmark - {{task}}",
|
||||
"bench.detail.notFound": "Oppgave ikke funnet",
|
||||
"bench.detail.na": "I/T",
|
||||
"bench.detail.labels.agent": "Agent",
|
||||
"bench.detail.labels.model": "Modell",
|
||||
"bench.detail.labels.task": "Oppgave",
|
||||
"bench.detail.labels.repo": "Repo",
|
||||
"bench.detail.labels.from": "Fra",
|
||||
"bench.detail.labels.to": "Til",
|
||||
"bench.detail.labels.prompt": "Prompt",
|
||||
"bench.detail.labels.commit": "Commit",
|
||||
"bench.detail.labels.averageDuration": "Gjennomsnittlig varighet",
|
||||
"bench.detail.labels.averageScore": "Gjennomsnittlig poengsum",
|
||||
"bench.detail.labels.averageCost": "Gjennomsnittlig kostnad",
|
||||
"bench.detail.labels.summary": "Sammendrag",
|
||||
"bench.detail.labels.runs": "Kjøringer",
|
||||
"bench.detail.labels.score": "Poengsum",
|
||||
"bench.detail.labels.base": "Basis",
|
||||
"bench.detail.labels.penalty": "Straff",
|
||||
"bench.detail.labels.weight": "vekt",
|
||||
"bench.detail.table.run": "Kjøring",
|
||||
"bench.detail.table.score": "Poengsum (Basis - Straff)",
|
||||
"bench.detail.table.cost": "Kostnad",
|
||||
"bench.detail.table.duration": "Varighet",
|
||||
"bench.detail.run.title": "Kjøring {{n}}",
|
||||
"bench.detail.rawJson": "Rå JSON",
|
||||
} satisfies Dict
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import type { Dict } from "./en"
|
||||
import { dict as en } from "./en"
|
||||
|
||||
export const dict = {
|
||||
@@ -10,15 +9,15 @@ export const dict = {
|
||||
"nav.x": "X",
|
||||
"nav.enterprise": "Enterprise",
|
||||
"nav.zen": "Zen",
|
||||
"nav.login": "Zaloguj sie",
|
||||
"nav.free": "Za darmo",
|
||||
"nav.home": "Strona glowna",
|
||||
"nav.openMenu": "Otworz menu",
|
||||
"nav.login": "Zaloguj się",
|
||||
"nav.free": "Darmowe",
|
||||
"nav.home": "Strona główna",
|
||||
"nav.openMenu": "Otwórz menu",
|
||||
"nav.getStartedFree": "Zacznij za darmo",
|
||||
|
||||
"nav.context.copyLogo": "Skopiuj logo jako SVG",
|
||||
"nav.context.copyWordmark": "Skopiuj wordmark jako SVG",
|
||||
"nav.context.brandAssets": "Materialy marki",
|
||||
"nav.context.copyWordmark": "Skopiuj logotyp jako SVG",
|
||||
"nav.context.brandAssets": "Zasoby marki",
|
||||
|
||||
"footer.github": "GitHub",
|
||||
"footer.docs": "Dokumentacja",
|
||||
@@ -27,195 +26,470 @@ export const dict = {
|
||||
"footer.x": "X",
|
||||
|
||||
"legal.brand": "Marka",
|
||||
"legal.privacy": "Prywatnosc",
|
||||
"legal.privacy": "Prywatność",
|
||||
"legal.terms": "Warunki",
|
||||
|
||||
"email.title": "Badz pierwszy, aby dowiedziec sie o nowych produktach",
|
||||
"email.subtitle": "Dolacz do listy oczekujacych po wczesny dostep.",
|
||||
"email.title": "Bądź pierwszym, który dowie się o nowych produktach",
|
||||
"email.subtitle": "Dołącz do listy oczekujących na wczesny dostęp.",
|
||||
"email.placeholder": "Adres e-mail",
|
||||
"email.subscribe": "Subskrybuj",
|
||||
"email.success": "Prawie gotowe - sprawdz skrzynke i potwierdz adres e-mail",
|
||||
"email.success": "Prawie gotowe, sprawdź skrzynkę i potwierdź swój adres e-mail",
|
||||
|
||||
"notFound.title": "Nie znaleziono | opencode",
|
||||
"notFound.heading": "404 - Strona nie znaleziona",
|
||||
"notFound.home": "Strona glowna",
|
||||
"notFound.heading": "404 - Nie znaleziono strony",
|
||||
"notFound.home": "Strona główna",
|
||||
"notFound.docs": "Dokumentacja",
|
||||
"notFound.github": "GitHub",
|
||||
"notFound.discord": "Discord",
|
||||
|
||||
"user.logout": "Wyloguj sie",
|
||||
"user.logout": "Wyloguj się",
|
||||
|
||||
"workspace.select": "Wybierz workspace",
|
||||
"workspace.createNew": "+ Utworz nowy workspace",
|
||||
"workspace.modal.title": "Utworz nowy workspace",
|
||||
"workspace.modal.placeholder": "Wpisz nazwe workspace",
|
||||
"workspace.select": "Wybierz obszar roboczy",
|
||||
"workspace.createNew": "+ Utwórz nowy obszar roboczy",
|
||||
"workspace.modal.title": "Utwórz nowy obszar roboczy",
|
||||
"workspace.modal.placeholder": "Wpisz nazwę obszaru roboczego",
|
||||
|
||||
"common.cancel": "Anuluj",
|
||||
"common.creating": "Tworzenie...",
|
||||
"common.create": "Utworz",
|
||||
"common.create": "Utwórz",
|
||||
|
||||
"common.videoUnsupported": "Twoja przegladarka nie obsluguje tagu video.",
|
||||
"common.videoUnsupported": "Twoja przeglądarka nie obsługuje znacznika wideo.",
|
||||
"common.figure": "Rys. {{n}}.",
|
||||
"common.faq": "FAQ",
|
||||
"common.learnMore": "Dowiedz sie wiecej",
|
||||
"common.learnMore": "Dowiedz się więcej",
|
||||
|
||||
"home.title": "OpenCode | Open source AI agent do kodowania",
|
||||
"error.invalidPlan": "Nieprawidłowy plan",
|
||||
"error.workspaceRequired": "ID obszaru roboczego jest wymagane",
|
||||
"error.alreadySubscribed": "Ten obszar roboczy ma już subskrypcję",
|
||||
"error.limitRequired": "Limit jest wymagany.",
|
||||
"error.monthlyLimitInvalid": "Ustaw prawidłowy limit miesięczny.",
|
||||
"error.workspaceNameRequired": "Nazwa obszaru roboczego jest wymagana.",
|
||||
"error.nameTooLong": "Nazwa musi mieć 255 znaków lub mniej.",
|
||||
"error.emailRequired": "E-mail jest wymagany",
|
||||
"error.roleRequired": "Rola jest wymagana",
|
||||
"error.idRequired": "ID jest wymagane",
|
||||
"error.nameRequired": "Nazwa jest wymagana",
|
||||
"error.providerRequired": "Dostawca jest wymagany",
|
||||
"error.apiKeyRequired": "Klucz API jest wymagany",
|
||||
"error.modelRequired": "Model jest wymagany",
|
||||
"error.reloadAmountMin": "Kwota doładowania musi wynosić co najmniej ${{amount}}",
|
||||
"error.reloadTriggerMin": "Próg salda musi wynosić co najmniej ${{amount}}",
|
||||
|
||||
"home.banner.badge": "Nowosc",
|
||||
"home.banner.text": "Aplikacja desktopowa dostepna w wersji beta",
|
||||
"home.title": "OpenCode | Open source'owy agent AI do kodowania",
|
||||
|
||||
"temp.title": "opencode | Agent AI do kodowania zbudowany dla terminala",
|
||||
"temp.hero.title": "Agent AI do kodowania zbudowany dla terminala",
|
||||
"temp.zen": "opencode zen",
|
||||
"temp.getStarted": "Rozpocznij",
|
||||
"temp.feature.native.title": "Natywny TUI",
|
||||
"temp.feature.native.body": "Responsywny, natywny, tematyczny interfejs terminala",
|
||||
"temp.feature.zen.beforeLink": "A",
|
||||
"temp.feature.zen.link": "wyselekcjonowana lista modeli",
|
||||
"temp.feature.zen.afterLink": "dostarczana przez opencode",
|
||||
"temp.feature.models.beforeLink": "Obsługuje 75+ dostawców LLM przez",
|
||||
"temp.feature.models.afterLink": ", w tym modele lokalne",
|
||||
"temp.screenshot.caption": "OpenCode TUI z motywem tokyonight",
|
||||
"temp.screenshot.alt": "OpenCode TUI z motywem tokyonight",
|
||||
|
||||
"home.banner.badge": "Nowość",
|
||||
"home.banner.text": "Aplikacja desktopowa dostępna w wersji beta",
|
||||
"home.banner.platforms": "na macOS, Windows i Linux",
|
||||
"home.banner.downloadNow": "Pobierz teraz",
|
||||
"home.banner.downloadBetaNow": "Pobierz teraz bete desktop",
|
||||
"home.banner.downloadBetaNow": "Pobierz betę wersji desktopowej",
|
||||
|
||||
"home.hero.title": "Open source AI agent do kodowania",
|
||||
"home.hero.subtitle.a": "Darmowe modele w zestawie lub podlacz dowolny model od dowolnego dostawcy,",
|
||||
"home.hero.title": "Open source'owy agent AI do kodowania",
|
||||
"home.hero.subtitle.a": "Darmowe modele w zestawie lub podłącz dowolny model od dowolnego dostawcy,",
|
||||
"home.hero.subtitle.b": "w tym Claude, GPT, Gemini i inne.",
|
||||
|
||||
"home.install.ariaLabel": "Opcje instalacji",
|
||||
|
||||
"home.what.title": "Czym jest OpenCode?",
|
||||
"home.what.body": "OpenCode to open source agent, ktory pomaga pisac kod w terminalu, IDE lub na desktopie.",
|
||||
"home.what.lsp.title": "LSP wlaczone",
|
||||
"home.what.lsp.body": "Automatycznie laduje odpowiednie LSP dla LLM",
|
||||
"home.what.multiSession.title": "Multi-session",
|
||||
"home.what.multiSession.body": "Uruchom wiele agentow rownolegle w tym samym projekcie",
|
||||
"home.what.shareLinks.title": "Linki do udostepniania",
|
||||
"home.what.shareLinks.body": "Udostepnij link do dowolnej sesji do wgladu lub debugowania",
|
||||
"home.what.body":
|
||||
"OpenCode to open source'owy agent, który pomaga pisać kod w terminalu, IDE lub aplikacji desktopowej.",
|
||||
"home.what.lsp.title": "LSP włączone",
|
||||
"home.what.lsp.body": "Automatycznie ładuje odpowiednie LSP dla LLM",
|
||||
"home.what.multiSession.title": "Wielosesyjność",
|
||||
"home.what.multiSession.body": "Uruchom wiele agentów równolegle w tym samym projekcie",
|
||||
"home.what.shareLinks.title": "Udostępnianie linków",
|
||||
"home.what.shareLinks.body": "Udostępnij link do dowolnej sesji w celach referencyjnych lub do debugowania",
|
||||
"home.what.copilot.title": "GitHub Copilot",
|
||||
"home.what.copilot.body": "Zaloguj sie przez GitHub, aby uzyc konta Copilot",
|
||||
"home.what.copilot.body": "Zaloguj się przez GitHub, aby używać swojego konta Copilot",
|
||||
"home.what.chatgptPlus.title": "ChatGPT Plus/Pro",
|
||||
"home.what.chatgptPlus.body": "Zaloguj sie przez OpenAI, aby uzyc konta ChatGPT Plus lub Pro",
|
||||
"home.what.chatgptPlus.body": "Zaloguj się przez OpenAI, aby używać swojego konta ChatGPT Plus lub Pro",
|
||||
"home.what.anyModel.title": "Dowolny model",
|
||||
"home.what.anyModel.body": "75+ dostawcow LLM przez Models.dev, w tym modele lokalne",
|
||||
"home.what.anyModel.body": "75+ dostawców LLM przez Models.dev, w tym modele lokalne",
|
||||
"home.what.anyEditor.title": "Dowolny edytor",
|
||||
"home.what.anyEditor.body": "Dostepny jako interfejs terminalowy, aplikacja desktopowa i rozszerzenie IDE",
|
||||
"home.what.readDocs": "Czytaj docs",
|
||||
"home.what.anyEditor.body": "Dostępny jako interfejs terminalowy, aplikacja desktopowa i rozszerzenie IDE",
|
||||
"home.what.readDocs": "Czytaj dokumentację",
|
||||
|
||||
"home.growth.title": "Open source AI agent do kodowania",
|
||||
"home.growth.title": "Open source'owy agent AI do kodowania",
|
||||
"home.growth.body":
|
||||
"Ponad <strong>{{stars}}</strong> gwiazdek na GitHub, <strong>{{contributors}}</strong> wspoltworcow i ponad <strong>{{commits}}</strong> commitow - OpenCode jest uzywany i ceniony przez ponad <strong>{{monthlyUsers}}</strong> deweloperow co miesiac.",
|
||||
"Z ponad <strong>{{stars}}</strong> gwiazdkami na GitHubie, <strong>{{contributors}}</strong> współtwórcami i ponad <strong>{{commits}}</strong> commitami, OpenCode jest używany i ceniony przez ponad <strong>{{monthlyUsers}}</strong> deweloperów każdego miesiąca.",
|
||||
"home.growth.githubStars": "Gwiazdki GitHub",
|
||||
"home.growth.contributors": "Wspoltworcy",
|
||||
"home.growth.monthlyDevs": "Deweloperzy miesiecznie",
|
||||
"home.growth.contributors": "Współtwórcy",
|
||||
"home.growth.monthlyDevs": "Miesięczni użytkownicy",
|
||||
|
||||
"home.privacy.title": "Stworzone z mysla o prywatnosci",
|
||||
"home.privacy.title": "Zbudowany z myślą o prywatności",
|
||||
"home.privacy.body":
|
||||
"OpenCode nie przechowuje Twojego kodu ani danych kontekstowych, dzieki czemu moze dzialac w srodowiskach wrazliwych na prywatnosc.",
|
||||
"home.privacy.learnMore": "Dowiedz sie wiecej o",
|
||||
"home.privacy.link": "prywatnosci",
|
||||
"OpenCode nie przechowuje Twojego kodu ani danych kontekstowych, dzięki czemu może działać w środowiskach wrażliwych na prywatność.",
|
||||
"home.privacy.learnMore": "Dowiedz się więcej o",
|
||||
"home.privacy.link": "prywatności",
|
||||
|
||||
"home.faq.q1": "Czym jest OpenCode?",
|
||||
"home.faq.a1":
|
||||
"OpenCode to open source agent, ktory pomaga pisac i uruchamiac kod z dowolnym modelem AI. Jest dostepny jako interfejs terminalowy, aplikacja desktopowa lub rozszerzenie IDE.",
|
||||
"home.faq.q2": "Jak korzystac z OpenCode?",
|
||||
"home.faq.a2.before": "Najlatwiej zaczac od przeczytania",
|
||||
"OpenCode to open source'owy agent, który pomaga pisać i uruchamiać kod z dowolnym modelem AI. Jest dostępny jako interfejs terminalowy, aplikacja desktopowa lub rozszerzenie IDE.",
|
||||
"home.faq.q2": "Jak korzystać z OpenCode?",
|
||||
"home.faq.a2.before": "Najłatwiej zacząć od przeczytania",
|
||||
"home.faq.a2.link": "wprowadzenia",
|
||||
"home.faq.q3": "Czy potrzebuje dodatkowych subskrypcji AI, aby uzywac OpenCode?",
|
||||
"home.faq.q3": "Czy potrzebuję dodatkowych subskrypcji AI, aby używać OpenCode?",
|
||||
"home.faq.a3.p1":
|
||||
"Niekoniecznie. OpenCode ma zestaw darmowych modeli, z ktorych mozesz korzystac bez zakladania konta.",
|
||||
"home.faq.a3.p2.beforeZen": "Poza tym mozesz uzywac popularnych modeli do kodowania tworzac konto",
|
||||
"Niekoniecznie. OpenCode posiada zestaw darmowych modeli, z których możesz korzystać bez zakładania konta.",
|
||||
"home.faq.a3.p2.beforeZen": "Poza tym możesz używać dowolnych popularnych modeli do kodowania, tworząc konto",
|
||||
"home.faq.a3.p2.afterZen": ".",
|
||||
"home.faq.a3.p3":
|
||||
"Choc zachecamy do Zen, OpenCode dziala tez z popularnymi dostawcami, takimi jak OpenAI, Anthropic, xAI itd.",
|
||||
"home.faq.a3.p4.beforeLocal": "Mozesz nawet podlaczyc swoje",
|
||||
"home.faq.a3.p4.localLink": "modele lokalne",
|
||||
"home.faq.q4": "Czy moge uzywac moich istniejacych subskrypcji AI z OpenCode?",
|
||||
"Chociaż zachęcamy do korzystania z Zen, OpenCode działa również ze wszystkimi popularnymi dostawcami, takimi jak OpenAI, Anthropic, xAI itp.",
|
||||
"home.faq.a3.p4.beforeLocal": "Możesz nawet podłączyć swoje",
|
||||
"home.faq.a3.p4.localLink": "lokalne modele",
|
||||
"home.faq.q4": "Czy mogę używać moich istniejących subskrypcji AI z OpenCode?",
|
||||
"home.faq.a4.p1":
|
||||
"Tak. OpenCode wspiera subskrypcje u wszystkich glownych dostawcow. Mozesz uzywac Claude Pro/Max, ChatGPT Plus/Pro lub GitHub Copilot.",
|
||||
"home.faq.q5": "Czy moge uzywac OpenCode tylko w terminalu?",
|
||||
"home.faq.a5.beforeDesktop": "Juz nie! OpenCode jest teraz dostepny jako aplikacja na",
|
||||
"home.faq.a5.desktop": "desktop",
|
||||
"Tak, OpenCode obsługuje plany subskrypcyjne od wszystkich głównych dostawców. Możesz używać swoich subskrypcji Claude Pro/Max, ChatGPT Plus/Pro lub GitHub Copilot.",
|
||||
"home.faq.q5": "Czy mogę używać OpenCode tylko w terminalu?",
|
||||
"home.faq.a5.beforeDesktop": "Już nie! OpenCode jest teraz dostępny jako aplikacja na",
|
||||
"home.faq.a5.desktop": "pulpit (desktop)",
|
||||
"home.faq.a5.and": "i",
|
||||
"home.faq.a5.web": "web",
|
||||
"home.faq.q6": "Ile kosztuje OpenCode?",
|
||||
"home.faq.a6":
|
||||
"OpenCode jest w 100% darmowy. Zawiera tez zestaw darmowych modeli. Moga pojawic sie dodatkowe koszty, jesli podlaczysz innego dostawce.",
|
||||
"home.faq.q7": "A co z danymi i prywatnoscia?",
|
||||
"OpenCode jest w 100% darmowy. Zawiera również zestaw darmowych modeli. Mogą pojawić się dodatkowe koszty, jeśli podłączysz innego dostawcę.",
|
||||
"home.faq.q7": "A co z danymi i prywatnością?",
|
||||
"home.faq.a7.p1":
|
||||
"Twoje dane sa przechowywane tylko gdy uzywasz naszych darmowych modeli lub tworzysz linki do udostepniania.",
|
||||
"home.faq.a7.p2.beforeModels": "Dowiedz sie wiecej o",
|
||||
"Twoje dane i informacje są przechowywane tylko wtedy, gdy używasz naszych darmowych modeli lub tworzysz linki do udostępniania.",
|
||||
"home.faq.a7.p2.beforeModels": "Dowiedz się więcej o",
|
||||
"home.faq.a7.p2.modelsLink": "naszych modelach",
|
||||
"home.faq.a7.p2.and": "i",
|
||||
"home.faq.a7.p2.shareLink": "stronach udostepniania",
|
||||
"home.faq.a7.p2.shareLink": "stronach udostępniania",
|
||||
"home.faq.q8": "Czy OpenCode jest open source?",
|
||||
"home.faq.a8.p1": "Tak, OpenCode jest w pelni open source. Kod zrodlowy jest publiczny na",
|
||||
"home.faq.a8.p2": "na podstawie",
|
||||
"home.faq.a8.mitLicense": "Licencji MIT",
|
||||
"home.faq.a8.p1": "Tak, OpenCode jest w pełni open source. Kod źródłowy jest publicznie dostępny na",
|
||||
"home.faq.a8.p2": "na licencji",
|
||||
"home.faq.a8.mitLicense": "MIT License",
|
||||
"home.faq.a8.p3":
|
||||
", co oznacza ze kazdy moze go uzywac, modyfikowac i wspoltworzyc. Kazdy z community moze zglaszac issues, wysylac pull requesty i rozszerzac funkcjonalnosc.",
|
||||
", co oznacza, że każdy może go używać, modyfikować i wspierać jego rozwój. Każdy ze społeczności może zgłaszać błędy, przesyłać pull requesty i rozszerzać funkcjonalność.",
|
||||
|
||||
"home.zenCta.title": "Uzyskaj dostep do niezawodnych, zoptymalizowanych modeli dla agentow kodowania",
|
||||
"home.zenCta.title": "Uzyskaj dostęp do niezawodnych, zoptymalizowanych modeli dla agentów kodujących",
|
||||
"home.zenCta.body":
|
||||
"Zen daje dostep do wyselekcjonowanego zestawu modeli AI, ktore OpenCode przetestowal i zbenchmarkowal specjalnie dla agentow kodowania. Nie musisz martwic sie o niespojne wyniki i jakosc miedzy dostawcami - uzywaj zweryfikowanych modeli, ktore dzialaja.",
|
||||
"home.zenCta.link": "Dowiedz sie o Zen",
|
||||
"Zen daje dostęp do wyselekcjonowanego zestawu modeli AI, które OpenCode przetestował i sprawdził (benchmark) specjalnie dla agentów kodujących. Nie musisz martwić się o niespójną wydajność i jakość u różnych dostawców, używaj sprawdzonych modeli, które działają.",
|
||||
"home.zenCta.link": "Dowiedz się więcej o Zen",
|
||||
|
||||
"download.title": "OpenCode | Pobieranie",
|
||||
|
||||
"zen.title": "OpenCode Zen | Wyselekcjonowany zestaw niezawodnych, zoptymalizowanych modeli dla agentow kodowania",
|
||||
"zen.hero.title": "Uzyskaj dostep do niezawodnych, zoptymalizowanych modeli dla agentow kodowania",
|
||||
"zen.title": "OpenCode Zen | Wyselekcjonowany zestaw niezawodnych, zoptymalizowanych modeli dla agentów kodujących",
|
||||
"zen.hero.title": "Niezawodne, zoptymalizowane modele dla agentów kodujących",
|
||||
"zen.hero.body":
|
||||
"Zen daje dostep do wyselekcjonowanego zestawu modeli AI, ktore OpenCode przetestowal i zbenchmarkowal specjalnie dla agentow kodowania. Nie musisz martwic sie o niespojne wyniki i jakosc miedzy dostawcami - uzywaj zweryfikowanych modeli, ktore dzialaja.",
|
||||
"Zen daje dostęp do wyselekcjonowanego zestawu modeli AI, które OpenCode przetestował i sprawdził (benchmark) specjalnie dla agentów kodujących. Nie musisz martwić się o niespójną wydajność i jakość, używaj sprawdzonych modeli, które działają.",
|
||||
|
||||
"zen.faq.q1": "Czym jest OpenCode Zen?",
|
||||
"zen.faq.a1":
|
||||
"Zen to wyselekcjonowany zestaw modeli AI przetestowanych i zbenchmarkowanych pod agentow kodowania, stworzony przez zespol stojacy za OpenCode.",
|
||||
"zen.faq.q2": "Co sprawia, ze Zen jest dokladniejszy?",
|
||||
"Zen to wyselekcjonowany zestaw modeli AI przetestowanych i sprawdzonych pod kątem agentów kodujących, stworzony przez zespół stojący za OpenCode.",
|
||||
"zen.faq.q2": "Co sprawia, że Zen jest bardziej precyzyjny?",
|
||||
"zen.faq.a2":
|
||||
"Zen oferuje tylko modele, ktore zostaly specjalnie przetestowane i zbenchmarkowane pod agentow kodowania. Nie uzywalbys nozna do masla, zeby kroic stek; nie uzywaj slabych modeli do kodowania.",
|
||||
"zen.faq.q3": "Czy Zen jest tanszy?",
|
||||
"Zen oferuje tylko modele, które zostały specjalnie przetestowane i sprawdzone dla agentów kodujących. Nie używasz noża do masła do krojenia steku, więc nie używaj słabych modeli do kodowania.",
|
||||
"zen.faq.q3": "Czy Zen jest tańszy?",
|
||||
"zen.faq.a3":
|
||||
"Zen nie jest nastawiony na zysk. Zen przekazuje koszty dostawcow modeli bezposrednio do Ciebie. Im wieksze uzycie Zen, tym bardziej OpenCode moze negocjowac lepsze stawki i przekazywac je Tobie.",
|
||||
"Zen nie jest nastawiony na zysk. Zen przekazuje koszty od dostawców modeli bezpośrednio do Ciebie. Im większe użycie Zen, tym lepsze stawki OpenCode może wynegocjować i przekazać Tobie.",
|
||||
"zen.faq.q4": "Ile kosztuje Zen?",
|
||||
"zen.faq.a4.p1.beforePricing": "Zen",
|
||||
"zen.faq.a4.p1.pricingLink": "nalicza oplaty za request",
|
||||
"zen.faq.a4.p1.afterPricing": "bez narzutow, wiec placisz dokladnie tyle, ile nalicza dostawca modelu.",
|
||||
"zen.faq.a4.p1.pricingLink": "pobiera opłaty za żądanie",
|
||||
"zen.faq.a4.p1.afterPricing": "bez marży, więc płacisz dokładnie tyle, ile pobiera dostawca modelu.",
|
||||
"zen.faq.a4.p2.beforeAccount":
|
||||
"Twoj calkowity koszt zalezy od uzycia, i mozesz ustawic miesieczne limity wydatkow w swoim",
|
||||
"Twój całkowity koszt zależy od użycia, i możesz ustawić miesięczne limity wydatków na swoim",
|
||||
"zen.faq.a4.p2.accountLink": "koncie",
|
||||
"zen.faq.a4.p3":
|
||||
"Aby pokryc koszty, OpenCode dodaje tylko niewielka oplate za przetwarzanie platnosci w wysokosci $1.23 za kazde doladowanie salda $20.",
|
||||
"zen.faq.q5": "A co z danymi i prywatnoscia?",
|
||||
"Aby pokryć koszty, OpenCode dolicza jedynie niewielką opłatę za przetwarzanie płatności w wysokości $1.23 przy każdym doładowaniu salda o $20.",
|
||||
"zen.faq.q5": "A co z danymi i prywatnością?",
|
||||
"zen.faq.a5.beforeExceptions":
|
||||
"Wszystkie modele Zen sa hostowane w USA. Dostawcy stosuja polityke zero-retention i nie uzywaja twoich danych do trenowania modeli, z",
|
||||
"zen.faq.a5.exceptionsLink": "nastepujacymi wyjatkami",
|
||||
"zen.faq.q6": "Czy moge ustawic limity wydatkow?",
|
||||
"zen.faq.a6": "Tak, mozesz ustawic miesieczne limity wydatkow w swoim koncie.",
|
||||
"zen.faq.q7": "Czy moge anulowac?",
|
||||
"zen.faq.a7": "Tak, mozesz wylaczyc rozliczenia w dowolnym momencie i wykorzystac pozostale saldo.",
|
||||
"zen.faq.q8": "Czy moge uzywac Zen z innymi agentami kodowania?",
|
||||
"Wszystkie modele Zen są hostowane w USA. Dostawcy stosują politykę zerowej retencji i nie używają Twoich danych do trenowania modeli, z",
|
||||
"zen.faq.a5.exceptionsLink": "następującymi wyjątkami",
|
||||
"zen.faq.q6": "Czy mogę ustawić limity wydatków?",
|
||||
"zen.faq.a6": "Tak, możesz ustawić miesięczne limity wydatków na swoim koncie.",
|
||||
"zen.faq.q7": "Czy mogę anulować?",
|
||||
"zen.faq.a7": "Tak, możesz wyłączyć rozliczenia w dowolnym momencie i wykorzystać pozostałe saldo.",
|
||||
"zen.faq.q8": "Czy mogę używać Zen z innymi agentami kodującymi?",
|
||||
"zen.faq.a8":
|
||||
"Zen swietnie dziala z OpenCode, ale mozesz uzywac Zen z dowolnym agentem. Postepuj zgodnie z instrukcjami konfiguracji w swoim ulubionym agencie kodowania.",
|
||||
"zen.cta.start": "Zacznij od Zen",
|
||||
"zen.pricing.title": "Dodaj saldo w wysokości 20 USD w formie płatności w miarę upływu czasu",
|
||||
"zen.pricing.fee": "(+1,23 USD opłaty za przetwarzanie karty)",
|
||||
"zen.pricing.body": "Używaj z dowolnym środkiem. Ustaw miesięczne limity wydatków. Anuluj w dowolnym momencie.",
|
||||
"Chociaż Zen świetnie działa z OpenCode, możesz używać Zen z dowolnym agentem. Postępuj zgodnie z instrukcjami konfiguracji w swoim preferowanym agencie.",
|
||||
|
||||
"zen.cta.start": "Zacznij korzystać z Zen",
|
||||
"zen.pricing.title": "Dodaj 20$ salda Pay as you go",
|
||||
"zen.pricing.fee": "(+$1.23 opłaty za przetwarzanie karty)",
|
||||
"zen.pricing.body": "Używaj z dowolnym agentem. Ustaw miesięczne limity wydatków. Anuluj w dowolnym momencie.",
|
||||
"zen.problem.title": "Jaki problem rozwiązuje Zen?",
|
||||
"zen.problem.body":
|
||||
"Dostępnych jest wiele modeli, ale tylko kilka dobrze współpracuje z agentami kodującymi. Większość dostawców konfiguruje je inaczej, z różnymi wynikami.",
|
||||
"Dostępnych jest wiele modeli, ale tylko nieliczne dobrze współpracują z agentami kodującymi. Większość dostawców konfiguruje je inaczej, co daje różne wyniki.",
|
||||
"zen.problem.subtitle": "Naprawiamy to dla wszystkich, nie tylko dla użytkowników OpenCode.",
|
||||
"zen.problem.item1": "Testowanie wybranych modeli i konsultacje z ich zespołami",
|
||||
"zen.problem.item2": "Współpraca z dostawcami w celu zapewnienia ich prawidłowej dostawy",
|
||||
"zen.problem.item3": "Benchmarking wszystkich zalecanych przez nas kombinacji modeli i dostawców",
|
||||
"zen.problem.item2": "Współpraca z dostawcami w celu zapewnienia ich prawidłowego dostarczania",
|
||||
"zen.problem.item3": "Benchmark wszystkich rekomendowanych przez nas kombinacji modeli i dostawców",
|
||||
"zen.how.title": "Jak działa Zen",
|
||||
"zen.how.body": "Chociaż sugerujemy używanie Zen z OpenCode, możesz używać Zen z dowolnym agentem.",
|
||||
"zen.how.step1.title": "Zarejestruj się i dodaj saldo 20 $",
|
||||
"zen.how.step1.beforeLink": "podążaj za",
|
||||
"zen.how.step1.link": "instrukcje konfiguracji",
|
||||
"zen.how.step2.title": "Użyj Zen z przejrzystymi cenami",
|
||||
"zen.how.step2.link": "płacić za żądanie",
|
||||
"zen.how.step2.afterLink": "z zerowymi znacznikami",
|
||||
"zen.how.step1.title": "Zarejestruj się i doładuj saldo 20$",
|
||||
"zen.how.step1.beforeLink": "postępuj zgodnie z",
|
||||
"zen.how.step1.link": "instrukcją konfiguracji",
|
||||
"zen.how.step2.title": "Używaj Zen z przejrzystym cennikiem",
|
||||
"zen.how.step2.link": "płać za żądanie",
|
||||
"zen.how.step2.afterLink": "bez marży",
|
||||
"zen.how.step3.title": "Automatyczne doładowanie",
|
||||
"zen.how.step3.body": "kiedy saldo osiągnie 5 USD, automatycznie dodamy 20 USD",
|
||||
"zen.how.step3.body": "gdy Twoje saldo osiągnie 5$, automatycznie dodamy 20$",
|
||||
"zen.privacy.title": "Twoja prywatność jest dla nas ważna",
|
||||
"zen.privacy.beforeExceptions":
|
||||
"Wszystkie modele Zen są hostowane w USA. Dostawcy przestrzegają polityki zerowego przechowywania i nie wykorzystują Twoich danych do szkolenia modeli, przy czym",
|
||||
"zen.privacy.exceptionsLink": "następujące wyjątki",
|
||||
"download.meta.description": "Pobierz OpenCode dla macOS, Windows i Linux",
|
||||
"Wszystkie modele Zen są hostowane w USA. Dostawcy stosują politykę zerowej retencji i nie wykorzystują Twoich danych do trenowania modeli, z",
|
||||
"zen.privacy.exceptionsLink": "następującymi wyjątkami",
|
||||
|
||||
"black.meta.title": "OpenCode Black | Dostęp do najlepszych na świecie modeli kodujących",
|
||||
"black.meta.description": "Uzyskaj dostęp do Claude, GPT, Gemini i innych dzięki planom subskrypcji OpenCode Black.",
|
||||
"black.hero.title": "Dostęp do najlepszych na świecie modeli kodujących",
|
||||
"black.hero.subtitle": "W tym Claude, GPT, Gemini i inne",
|
||||
"black.title": "OpenCode Black | Cennik",
|
||||
"black.plan.icon20": "Plan Black 20",
|
||||
"black.plan.icon100": "Plan Black 100",
|
||||
"black.plan.icon200": "Plan Black 200",
|
||||
"black.plan.multiplier100": "5x większe użycie niż Black 20",
|
||||
"black.plan.multiplier200": "20x większe użycie niż Black 20",
|
||||
"black.price.perMonth": "miesięcznie",
|
||||
"black.price.perPersonBilledMonthly": "za osobę rozliczane miesięcznie",
|
||||
"black.terms.1": "Twoja subskrypcja nie rozpocznie się natychmiast",
|
||||
"black.terms.2": "Zostaniesz dodany do listy oczekujących i aktywowany wkrótce",
|
||||
"black.terms.3": "Twoja karta zostanie obciążona dopiero po aktywacji subskrypcji",
|
||||
"black.terms.4": "Obowiązują limity użycia, intensywne automatyczne użycie może wyczerpać limity szybciej",
|
||||
"black.terms.5": "Subskrypcje są dla osób indywidualnych, skontaktuj się z Enterprise dla zespołów",
|
||||
"black.terms.6": "Limity mogą zostać dostosowane, a plany mogą zostać wycofane w przyszłości",
|
||||
"black.terms.7": "Anuluj subskrypcję w dowolnym momencie",
|
||||
"black.action.continue": "Kontynuuj",
|
||||
"black.finePrint.beforeTerms": "Podane ceny nie zawierają stosownego podatku",
|
||||
"black.finePrint.terms": "Warunki świadczenia usług",
|
||||
"black.workspace.title": "OpenCode Black | Wybierz obszar roboczy",
|
||||
"black.workspace.selectPlan": "Wybierz obszar roboczy dla tego planu",
|
||||
"black.workspace.name": "Obszar roboczy {{n}}",
|
||||
"black.subscribe.title": "Subskrybuj OpenCode Black",
|
||||
"black.subscribe.paymentMethod": "Metoda płatności",
|
||||
"black.subscribe.loadingPaymentForm": "Ładowanie formularza płatności...",
|
||||
"black.subscribe.selectWorkspaceToContinue": "Wybierz obszar roboczy, aby kontynuować",
|
||||
"black.subscribe.failurePrefix": "O nie!",
|
||||
"black.subscribe.error.generic": "Wystąpił błąd",
|
||||
"black.subscribe.error.invalidPlan": "Nieprawidłowy plan",
|
||||
"black.subscribe.error.workspaceRequired": "ID obszaru roboczego jest wymagane",
|
||||
"black.subscribe.error.alreadySubscribed": "Ten obszar roboczy ma już subskrypcję",
|
||||
"black.subscribe.processing": "Przetwarzanie...",
|
||||
"black.subscribe.submit": "Subskrybuj ${{plan}}",
|
||||
"black.subscribe.form.chargeNotice": "Zostaniesz obciążony dopiero po aktywacji subskrypcji",
|
||||
"black.subscribe.success.title": "Jesteś na liście oczekujących OpenCode Black",
|
||||
"black.subscribe.success.subscriptionPlan": "Plan subskrypcji",
|
||||
"black.subscribe.success.planName": "OpenCode Black {{plan}}",
|
||||
"black.subscribe.success.amount": "Kwota",
|
||||
"black.subscribe.success.amountValue": "${{plan}} miesięcznie",
|
||||
"black.subscribe.success.paymentMethod": "Metoda płatności",
|
||||
"black.subscribe.success.dateJoined": "Data dołączenia",
|
||||
"black.subscribe.success.chargeNotice": "Twoja karta zostanie obciążona po aktywacji subskrypcji",
|
||||
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "Klucze API",
|
||||
"workspace.nav.members": "Członkowie",
|
||||
"workspace.nav.billing": "Rozliczenia",
|
||||
"workspace.nav.settings": "Ustawienia",
|
||||
|
||||
"workspace.home.banner.beforeLink": "Niezawodne, zoptymalizowane modele dla agentów kodujących.",
|
||||
"workspace.home.billing.loading": "Ładowanie...",
|
||||
"workspace.home.billing.enable": "Włącz rozliczenia",
|
||||
"workspace.home.billing.currentBalance": "Aktualne saldo",
|
||||
|
||||
"workspace.newUser.feature.tested.title": "Przetestowane i zweryfikowane modele",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"Przeprowadziliśmy testy porównawcze i przetestowaliśmy modele specjalnie dla agentów kodujących, aby zapewnić najlepszą wydajność.",
|
||||
"workspace.newUser.feature.quality.title": "Najwyższa jakość",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"Dostęp do modeli skonfigurowanych pod kątem optymalnej wydajności - bez degradacji jakości czy przekierowywania do tańszych dostawców.",
|
||||
"workspace.newUser.feature.lockin.title": "Brak blokady (Lock-in)",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"Używaj Zen z dowolnym agentem kodującym i kontynuuj korzystanie z innych dostawców z OpenCode, kiedy tylko chcesz.",
|
||||
"workspace.newUser.copyApiKey": "Skopiuj klucz API",
|
||||
"workspace.newUser.copyKey": "Skopiuj klucz",
|
||||
"workspace.newUser.copied": "Skopiowano!",
|
||||
"workspace.newUser.step.enableBilling": "Włącz rozliczenia",
|
||||
"workspace.newUser.step.login.before": "Uruchom",
|
||||
"workspace.newUser.step.login.after": "i wybierz opencode",
|
||||
"workspace.newUser.step.pasteKey": "Wklej swój klucz API",
|
||||
"workspace.newUser.step.models.before": "Uruchom opencode i wpisz",
|
||||
"workspace.newUser.step.models.after": "aby wybrać model",
|
||||
|
||||
"workspace.models.title": "Modele",
|
||||
"workspace.models.subtitle.beforeLink": "Zarządzaj dostępem członków obszaru roboczego do modeli.",
|
||||
"workspace.models.table.model": "Model",
|
||||
"workspace.models.table.enabled": "Włączony",
|
||||
|
||||
"workspace.providers.title": "Przynieś własny klucz (BYOK)",
|
||||
"workspace.providers.subtitle": "Skonfiguruj własne klucze API od dostawców AI.",
|
||||
"workspace.providers.placeholder": "Wprowadź klucz API {{provider}} ({{prefix}}...)",
|
||||
"workspace.providers.configure": "Konfiguruj",
|
||||
"workspace.providers.edit": "Edytuj",
|
||||
"workspace.providers.delete": "Usuń",
|
||||
"workspace.providers.saving": "Zapisywanie...",
|
||||
"workspace.providers.save": "Zapisz",
|
||||
"workspace.providers.table.provider": "Dostawca",
|
||||
"workspace.providers.table.apiKey": "Klucz API",
|
||||
|
||||
"workspace.usage.title": "Historia użycia",
|
||||
"workspace.usage.subtitle": "Ostatnie użycie API i koszty.",
|
||||
"workspace.usage.empty": "Wykonaj pierwsze wywołanie API, aby rozpocząć.",
|
||||
"workspace.usage.table.date": "Data",
|
||||
"workspace.usage.table.model": "Model",
|
||||
"workspace.usage.table.input": "Wejście",
|
||||
"workspace.usage.table.output": "Wyjście",
|
||||
"workspace.usage.table.cost": "Koszt",
|
||||
"workspace.usage.breakdown.input": "Wejście",
|
||||
"workspace.usage.breakdown.cacheRead": "Odczyt Cache",
|
||||
"workspace.usage.breakdown.cacheWrite": "Zapis Cache",
|
||||
"workspace.usage.breakdown.output": "Wyjście",
|
||||
"workspace.usage.breakdown.reasoning": "Rozumowanie",
|
||||
"workspace.usage.subscription": "subskrypcja (${{amount}})",
|
||||
|
||||
"workspace.cost.title": "Koszt",
|
||||
"workspace.cost.subtitle": "Koszty użycia w podziale na modele.",
|
||||
"workspace.cost.allModels": "Wszystkie modele",
|
||||
"workspace.cost.allKeys": "Wszystkie klucze",
|
||||
"workspace.cost.deletedSuffix": "(usunięte)",
|
||||
"workspace.cost.empty": "Brak danych o użyciu dla wybranego okresu.",
|
||||
"workspace.cost.subscriptionShort": "sub",
|
||||
|
||||
"workspace.keys.title": "Klucze API",
|
||||
"workspace.keys.subtitle": "Zarządzaj kluczami API do usług opencode.",
|
||||
"workspace.keys.create": "Utwórz klucz API",
|
||||
"workspace.keys.placeholder": "Wpisz nazwę klucza",
|
||||
"workspace.keys.empty": "Utwórz klucz API bramy opencode",
|
||||
"workspace.keys.table.name": "Nazwa",
|
||||
"workspace.keys.table.key": "Klucz",
|
||||
"workspace.keys.table.createdBy": "Utworzony przez",
|
||||
"workspace.keys.table.lastUsed": "Ostatnio użyty",
|
||||
"workspace.keys.copyApiKey": "Skopiuj klucz API",
|
||||
"workspace.keys.delete": "Usuń",
|
||||
|
||||
"workspace.members.title": "Członkowie",
|
||||
"workspace.members.subtitle": "Zarządzaj członkami obszaru roboczego i ich uprawnieniami.",
|
||||
"workspace.members.invite": "Zaproś członka",
|
||||
"workspace.members.inviting": "Zapraszanie...",
|
||||
"workspace.members.beta.beforeLink": "Obszary robocze są darmowe dla zespołów w fazie beta.",
|
||||
"workspace.members.form.invitee": "Zaproszona osoba",
|
||||
"workspace.members.form.emailPlaceholder": "Wpisz e-mail",
|
||||
"workspace.members.form.role": "Rola",
|
||||
"workspace.members.form.monthlyLimit": "Miesięczny limit wydatków",
|
||||
"workspace.members.noLimit": "Bez limitu",
|
||||
"workspace.members.noLimitLowercase": "bez limitu",
|
||||
"workspace.members.invited": "zaproszono",
|
||||
"workspace.members.edit": "Edytuj",
|
||||
"workspace.members.delete": "Usuń",
|
||||
"workspace.members.saving": "Zapisywanie...",
|
||||
"workspace.members.save": "Zapisz",
|
||||
"workspace.members.table.email": "E-mail",
|
||||
"workspace.members.table.role": "Rola",
|
||||
"workspace.members.table.monthLimit": "Limit miesięczny",
|
||||
"workspace.members.role.admin": "Administrator",
|
||||
"workspace.members.role.adminDescription": "Może zarządzać modelami, członkami i rozliczeniami",
|
||||
"workspace.members.role.member": "Członek",
|
||||
"workspace.members.role.memberDescription": "Może generować klucze API tylko dla siebie",
|
||||
|
||||
"workspace.settings.title": "Ustawienia",
|
||||
"workspace.settings.subtitle": "Zaktualizuj nazwę i preferencje obszaru roboczego.",
|
||||
"workspace.settings.workspaceName": "Nazwa obszaru roboczego",
|
||||
"workspace.settings.defaultName": "Domyślny",
|
||||
"workspace.settings.updating": "Aktualizowanie...",
|
||||
"workspace.settings.save": "Zapisz",
|
||||
"workspace.settings.edit": "Edytuj",
|
||||
|
||||
"workspace.billing.title": "Rozliczenia",
|
||||
"workspace.billing.subtitle.beforeLink": "Zarządzaj metodami płatności.",
|
||||
"workspace.billing.contactUs": "Skontaktuj się z nami",
|
||||
"workspace.billing.subtitle.afterLink": "jeśli masz jakiekolwiek pytania.",
|
||||
"workspace.billing.currentBalance": "Aktualne saldo",
|
||||
"workspace.billing.add": "Dodaj $",
|
||||
"workspace.billing.enterAmount": "Wpisz kwotę",
|
||||
"workspace.billing.loading": "Ładowanie...",
|
||||
"workspace.billing.addAction": "Dodaj",
|
||||
"workspace.billing.addBalance": "Doładuj saldo",
|
||||
"workspace.billing.linkedToStripe": "Połączono ze Stripe",
|
||||
"workspace.billing.manage": "Zarządzaj",
|
||||
"workspace.billing.enable": "Włącz rozliczenia",
|
||||
|
||||
"workspace.monthlyLimit.title": "Limit miesięczny",
|
||||
"workspace.monthlyLimit.subtitle": "Ustaw miesięczny limit użycia dla swojego konta.",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "Ustawianie...",
|
||||
"workspace.monthlyLimit.set": "Ustaw",
|
||||
"workspace.monthlyLimit.edit": "Edytuj limit",
|
||||
"workspace.monthlyLimit.noLimit": "Brak ustawionego limitu użycia.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "Aktualne użycie za",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "wynosi $",
|
||||
|
||||
"workspace.reload.title": "Automatyczne doładowanie",
|
||||
"workspace.reload.disabled.before": "Automatyczne doładowanie jest",
|
||||
"workspace.reload.disabled.state": "wyłączone",
|
||||
"workspace.reload.disabled.after": "Włącz, aby automatycznie doładować, gdy saldo jest niskie.",
|
||||
"workspace.reload.enabled.before": "Automatyczne doładowanie jest",
|
||||
"workspace.reload.enabled.state": "włączone",
|
||||
"workspace.reload.enabled.middle": "Doładujemy",
|
||||
"workspace.reload.processingFee": "opłata procesowa",
|
||||
"workspace.reload.enabled.after": "gdy saldo osiągnie",
|
||||
"workspace.reload.edit": "Edytuj",
|
||||
"workspace.reload.enable": "Włącz",
|
||||
"workspace.reload.enableAutoReload": "Włącz automatyczne doładowanie",
|
||||
"workspace.reload.reloadAmount": "Doładuj kwotą $",
|
||||
"workspace.reload.whenBalanceReaches": "Gdy saldo osiągnie $",
|
||||
"workspace.reload.saving": "Zapisywanie...",
|
||||
"workspace.reload.save": "Zapisz",
|
||||
"workspace.reload.failedAt": "Doładowanie nie powiodło się o",
|
||||
"workspace.reload.reason": "Powód:",
|
||||
"workspace.reload.updatePaymentMethod": "Zaktualizuj metodę płatności i spróbuj ponownie.",
|
||||
"workspace.reload.retrying": "Ponawianie...",
|
||||
"workspace.reload.retry": "Spróbuj ponownie",
|
||||
|
||||
"workspace.payments.title": "Historia płatności",
|
||||
"workspace.payments.subtitle": "Ostatnie transakcje płatnicze.",
|
||||
"workspace.payments.table.date": "Data",
|
||||
"workspace.payments.table.paymentId": "ID płatności",
|
||||
"workspace.payments.table.amount": "Kwota",
|
||||
"workspace.payments.table.receipt": "Rachunek",
|
||||
"workspace.payments.type.credit": "środki",
|
||||
"workspace.payments.type.subscription": "subskrypcja",
|
||||
"workspace.payments.view": "Zobacz",
|
||||
|
||||
"workspace.black.loading": "Ładowanie...",
|
||||
"workspace.black.time.day": "dzień",
|
||||
"workspace.black.time.days": "dni",
|
||||
"workspace.black.time.hour": "godzina",
|
||||
"workspace.black.time.hours": "godzin(y)",
|
||||
"workspace.black.time.minute": "minuta",
|
||||
"workspace.black.time.minutes": "minut(y)",
|
||||
"workspace.black.time.fewSeconds": "kilka sekund",
|
||||
"workspace.black.subscription.title": "Subskrypcja",
|
||||
"workspace.black.subscription.message": "Subskrybujesz OpenCode Black za ${{plan}} miesięcznie.",
|
||||
"workspace.black.subscription.manage": "Zarządzaj subskrypcją",
|
||||
"workspace.black.subscription.rollingUsage": "Użycie (okno 5h)",
|
||||
"workspace.black.subscription.weeklyUsage": "Użycie tygodniowe",
|
||||
"workspace.black.subscription.resetsIn": "Resetuje się za",
|
||||
"workspace.black.subscription.useBalance": "Użyj dostępnego salda po osiągnięciu limitów użycia",
|
||||
"workspace.black.waitlist.title": "Lista oczekujących",
|
||||
"workspace.black.waitlist.joined": "Jesteś na liście oczekujących na plan OpenCode Black za ${{plan}} miesięcznie.",
|
||||
"workspace.black.waitlist.ready": "Jesteśmy gotowi zapisać Cię do planu OpenCode Black za ${{plan}} miesięcznie.",
|
||||
"workspace.black.waitlist.leave": "Opuść listę oczekujących",
|
||||
"workspace.black.waitlist.leaving": "Opuszczanie...",
|
||||
"workspace.black.waitlist.left": "Opuszczono",
|
||||
"workspace.black.waitlist.enroll": "Zapisz się",
|
||||
"workspace.black.waitlist.enrolling": "Zapisywanie...",
|
||||
"workspace.black.waitlist.enrolled": "Zapisano",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"Po kliknięciu Zapisz się, Twoja subskrypcja rozpocznie się natychmiast, a karta zostanie obciążona.",
|
||||
|
||||
"download.title": "OpenCode | Pobierz",
|
||||
"download.meta.description": "Pobierz OpenCode na macOS, Windows i Linux",
|
||||
"download.hero.title": "Pobierz OpenCode",
|
||||
"download.hero.subtitle": "Dostepne w wersji beta dla macOS, Windows i Linux",
|
||||
"download.hero.button": "Pobierz dla {{os}}",
|
||||
"download.section.terminal": "OpenCode Terminal",
|
||||
"download.section.desktop": "OpenCode Desktop (Beta)",
|
||||
"download.hero.subtitle": "Dostępne w wersji Beta na macOS, Windows i Linux",
|
||||
"download.hero.button": "Pobierz na {{os}}",
|
||||
"download.section.terminal": "Terminal OpenCode",
|
||||
"download.section.desktop": "Pulpit OpenCode (Beta)",
|
||||
"download.section.extensions": "Rozszerzenia OpenCode",
|
||||
"download.section.integrations": "Integracje OpenCode",
|
||||
"download.action.download": "Pobierz",
|
||||
@@ -228,244 +502,99 @@ export const dict = {
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
|
||||
"download.faq.a3.beforeLocal":
|
||||
"Niekoniecznie, ale prawdopodobnie. Potrzebujesz subskrypcji AI, jesli chcesz podlaczyc OpenCode do platnego dostawcy, ale mozesz korzystac z",
|
||||
"download.faq.a3.localLink": "lokalnych modeli",
|
||||
"download.faq.a3.afterLocal.beforeZen": "za darmo. Chociaz zachecamy uzytkownikow do korzystania z",
|
||||
"Niekoniecznie, ale prawdopodobnie. Będziesz potrzebować subskrypcji AI, jeśli chcesz połączyć OpenCode z płatnym dostawcą, chociaż możesz pracować z",
|
||||
"download.faq.a3.localLink": "modelami lokalnymi",
|
||||
"download.faq.a3.afterLocal.beforeZen": "za darmo. Chociaż zachęcamy użytkowników do korzystania z",
|
||||
"download.faq.a3.afterZen":
|
||||
", OpenCode dziala ze wszystkimi popularnymi dostawcami, takimi jak OpenAI, Anthropic, xAI itd.",
|
||||
", OpenCode współpracuje ze wszystkimi popularnymi dostawcami, takimi jak OpenAI, Anthropic, xAI itp.",
|
||||
|
||||
"download.faq.a5.p1": "OpenCode jest w 100% darmowy.",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"Wszelkie dodatkowe koszty wynikaja z Twojej subskrypcji u dostawcy modeli. OpenCode dziala z kazdym dostawca modeli, ale polecamy korzystac z",
|
||||
"Wszelkie dodatkowe koszty będą pochodzić z Twojej subskrypcji u dostawcy modelu. Chociaż OpenCode współpracuje z dowolnym dostawcą modeli, zalecamy korzystanie z",
|
||||
"download.faq.a5.p2.afterZen": ".",
|
||||
|
||||
"download.faq.a6.p1":
|
||||
"Twoje dane i informacje sa przechowywane tylko gdy tworzysz linki do udostepniania w OpenCode.",
|
||||
"download.faq.a6.p2.beforeShare": "Dowiedz sie wiecej o",
|
||||
"download.faq.a6.shareLink": "stronach udostepniania",
|
||||
"Twoje dane i informacje są przechowywane tylko wtedy, gdy tworzysz linki do udostępniania w OpenCode.",
|
||||
"download.faq.a6.p2.beforeShare": "Dowiedz się więcej o",
|
||||
"download.faq.a6.shareLink": "stronach udostępniania",
|
||||
|
||||
"enterprise.title": "OpenCode | Rozwiazania enterprise dla twojej organizacji",
|
||||
"enterprise.meta.description": "Skontaktuj sie z OpenCode w sprawie rozwiazan enterprise",
|
||||
"enterprise.hero.title": "Twoj kod nalezy do Ciebie",
|
||||
"enterprise.title": "OpenCode | Rozwiązania Enterprise dla Twojej organizacji",
|
||||
"enterprise.meta.description": "Skontaktuj się z OpenCode w sprawie rozwiązań dla przedsiębiorstw",
|
||||
"enterprise.hero.title": "Twój kod jest Twój",
|
||||
"enterprise.hero.body1":
|
||||
"OpenCode dziala bezpiecznie w obrebie Twojej organizacji, nie przechowuje danych ani kontekstu oraz nie narzuca ograniczen licencyjnych ani roszczen do wlasnosci. Rozpocznij okres probny z zespolem, a nastepnie wdroz OpenCode w calej organizacji, integrujac go z Twoim SSO i wewnetrzna brama AI.",
|
||||
"enterprise.hero.body2": "Daj nam znac, jak mozemy pomoc.",
|
||||
"enterprise.form.name.label": "Imie i nazwisko",
|
||||
"OpenCode działa bezpiecznie wewnątrz Twojej organizacji bez przechowywania danych czy kontekstu, oraz bez ograniczeń licencyjnych czy roszczeń własnościowych. Rozpocznij okres próbny ze swoim zespołem, a następnie wdróż go w całej organizacji, integrując z SSO i wewnętrzną bramą AI.",
|
||||
"enterprise.hero.body2": "Daj nam znać, jak możemy pomóc.",
|
||||
"enterprise.form.name.label": "Imię i nazwisko",
|
||||
"enterprise.form.name.placeholder": "Jeff Bezos",
|
||||
"enterprise.form.role.label": "Rola",
|
||||
"enterprise.form.role.placeholder": "Przewodniczacy zarzadu",
|
||||
"enterprise.form.email.label": "Firmowy e-mail",
|
||||
"enterprise.form.role.placeholder": "Prezes Zarządu",
|
||||
"enterprise.form.email.label": "E-mail firmowy",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "Jaki problem probujesz rozwiazac?",
|
||||
"enterprise.form.message.label": "Jaki problem próbujesz rozwiązać?",
|
||||
"enterprise.form.message.placeholder": "Potrzebujemy pomocy z...",
|
||||
"enterprise.form.send": "Wyslij",
|
||||
"enterprise.form.sending": "Wysylanie...",
|
||||
"enterprise.form.success": "Wiadomosc wyslana, wkrotce sie odezwiemy.",
|
||||
"enterprise.form.send": "Wyślij",
|
||||
"enterprise.form.sending": "Wysyłanie...",
|
||||
"enterprise.form.success": "Wiadomość wysłana, skontaktujemy się wkrótce.",
|
||||
"enterprise.faq.title": "FAQ",
|
||||
"enterprise.faq.q1": "Czym jest OpenCode Enterprise?",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise jest dla organizacji, ktore chca miec pewnosc, ze ich kod i dane nigdy nie opuszcza ich infrastruktury. Osiaga to dzieki scentralizowanej konfiguracji, ktora integruje sie z Twoim SSO i wewnetrzna brama AI.",
|
||||
"enterprise.faq.q2": "Jak zaczac korzystac z OpenCode Enterprise?",
|
||||
"OpenCode Enterprise jest dla organizacji, które chcą mieć pewność, że ich kod i dane nigdy nie opuszczą ich infrastruktury. Można to osiągnąć dzięki scentralizowanej konfiguracji, która integruje się z Twoim SSO i wewnętrzną bramą AI.",
|
||||
"enterprise.faq.q2": "Jak zacząć z OpenCode Enterprise?",
|
||||
"enterprise.faq.a2":
|
||||
"Po prostu zacznij od wewnetrznego okresu probnego z Twoim zespolem. OpenCode domyslnie nie przechowuje Twojego kodu ani danych kontekstowych, dzieki czemu latwo zaczac. Nastepnie skontaktuj sie z nami, aby omowic ceny i opcje wdrozenia.",
|
||||
"enterprise.faq.q3": "Jak dziala wycena enterprise?",
|
||||
"Po prostu rozpocznij wewnętrzny okres próbny ze swoim zespołem. OpenCode domyślnie nie przechowuje Twojego kodu ani danych kontekstowych, co ułatwia start. Następnie skontaktuj się z nami, aby omówić opcje cenowe i wdrożeniowe.",
|
||||
"enterprise.faq.q3": "Jak działa cennik enterprise?",
|
||||
"enterprise.faq.a3":
|
||||
"Oferujemy wycene enterprise per uzytkownik (per-seat). Jesli masz wlasna brame LLM, nie naliczamy oplat za wykorzystane tokeny. Aby poznac szczegoly, skontaktuj sie z nami po indywidualna wycene dopasowana do potrzeb Twojej organizacji.",
|
||||
"enterprise.faq.q4": "Czy moje dane sa bezpieczne z OpenCode Enterprise?",
|
||||
"Oferujemy cennik enterprise za stanowisko (per-seat). Jeśli masz własną bramę LLM, nie pobieramy opłat za wykorzystane tokeny. Aby uzyskać więcej szczegółów, skontaktuj się z nami w celu uzyskania wyceny dostosowanej do potrzeb Twojej organizacji.",
|
||||
"enterprise.faq.q4": "Czy moje dane są bezpieczne z OpenCode Enterprise?",
|
||||
"enterprise.faq.a4":
|
||||
"Tak. OpenCode nie przechowuje Twojego kodu ani danych kontekstowych. Cale przetwarzanie odbywa sie lokalnie lub poprzez bezposrednie wywolania API do Twojego dostawcy AI. Dzieki scentralizowanej konfiguracji i integracji SSO Twoje dane pozostaja bezpieczne w obrebie infrastruktury Twojej organizacji.",
|
||||
"Tak. OpenCode nie przechowuje Twojego kodu ani danych kontekstowych. Całe przetwarzanie odbywa się lokalnie lub poprzez bezpośrednie wywołania API do Twojego dostawcy AI. Dzięki centralnej konfiguracji i integracji SSO, Twoje dane pozostają bezpieczne w infrastrukturze Twojej organizacji.",
|
||||
|
||||
"brand.title": "OpenCode | Marka",
|
||||
"brand.meta.description": "Wytyczne marki OpenCode",
|
||||
"brand.heading": "Wytyczne marki",
|
||||
"brand.subtitle": "Zasoby i materialy, ktore pomoga Ci pracowac z marka OpenCode.",
|
||||
"brand.downloadAll": "Pobierz wszystkie materialy",
|
||||
"brand.subtitle": "Zasoby i aktywa, które pomogą Ci pracować z marką OpenCode.",
|
||||
"brand.downloadAll": "Pobierz wszystkie zasoby",
|
||||
|
||||
"changelog.title": "OpenCode | Dziennik zmian",
|
||||
"changelog.meta.description": "Informacje o wydaniach i dziennik zmian OpenCode",
|
||||
"changelog.meta.description": "Notatki o wydaniu i dziennik zmian OpenCode",
|
||||
"changelog.hero.title": "Dziennik zmian",
|
||||
"changelog.hero.subtitle": "Nowe aktualizacje i ulepszenia OpenCode",
|
||||
"changelog.empty": "Nie znaleziono wpisow w dzienniku zmian.",
|
||||
"changelog.empty": "Nie znaleziono wpisów w dzienniku zmian.",
|
||||
"changelog.viewJson": "Zobacz JSON",
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "API Klucze",
|
||||
"workspace.nav.members": "Członkowie",
|
||||
"workspace.nav.billing": "Rozliczenia",
|
||||
"workspace.nav.settings": "Ustawienia",
|
||||
"workspace.home.banner.beforeLink": "Niezawodne, zoptymalizowane modele dla agentów kodujących.",
|
||||
"workspace.home.billing.loading": "Załadunek...",
|
||||
"workspace.home.billing.enable": "Włącz rozliczenia",
|
||||
"workspace.home.billing.currentBalance": "Aktualne saldo",
|
||||
"workspace.newUser.feature.tested.title": "Przetestowane i zweryfikowane modele",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"Przeprowadziliśmy testy porównawcze i przetestowaliśmy modele specjalnie dla agentów kodujących, aby zapewnić najlepszą wydajność.",
|
||||
"workspace.newUser.feature.quality.title": "Najwyższa jakość",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"Modele dostępu skonfigurowane pod kątem optymalnej wydajności – bez konieczności zmiany wersji na wyższą lub przekierowania do tańszych dostawców.",
|
||||
"workspace.newUser.feature.lockin.title": "Brak blokady",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"Używaj Zen z dowolnym agentem kodującym i kontynuuj korzystanie z innych dostawców z opencode, kiedy tylko chcesz.",
|
||||
"workspace.newUser.copyApiKey": "Skopiuj klucz API",
|
||||
"workspace.newUser.copyKey": "Skopiuj klucz",
|
||||
"workspace.newUser.copied": "Skopiowano!",
|
||||
"workspace.newUser.step.enableBilling": "Włącz rozliczenia",
|
||||
"workspace.newUser.step.login.before": "Uruchomić",
|
||||
"workspace.newUser.step.login.after": "i wybierz opencode",
|
||||
"workspace.newUser.step.pasteKey": "Wklej swój klucz API",
|
||||
"workspace.newUser.step.models.before": "Uruchom opencode i uruchom",
|
||||
"workspace.newUser.step.models.after": "aby wybrać model",
|
||||
"workspace.models.title": "Modele",
|
||||
"workspace.models.subtitle.beforeLink": "Zarządzaj, do których modeli mają dostęp członkowie obszaru roboczego.",
|
||||
"workspace.models.table.model": "Model",
|
||||
"workspace.models.table.enabled": "Włączony",
|
||||
"workspace.providers.title": "Przynieś swój własny klucz",
|
||||
"workspace.providers.subtitle": "Skonfiguruj własne klucze API od dostawców AI.",
|
||||
"workspace.providers.placeholder": "Wprowadź klucz {{provider}} API ({{prefix}}...)",
|
||||
"workspace.providers.configure": "Skonfiguruj",
|
||||
"workspace.providers.edit": "Redagować",
|
||||
"workspace.providers.delete": "Usuwać",
|
||||
"workspace.providers.saving": "Oszczędność...",
|
||||
"workspace.providers.save": "Ratować",
|
||||
"workspace.providers.table.provider": "Dostawca",
|
||||
"workspace.providers.table.apiKey": "API Klucz",
|
||||
"workspace.usage.title": "Historia użytkowania",
|
||||
"workspace.usage.subtitle": "Ostatnie użycie i koszty API.",
|
||||
"workspace.usage.empty": "Aby rozpocząć, wykonaj pierwsze połączenie API.",
|
||||
"workspace.usage.table.date": "Data",
|
||||
"workspace.usage.table.model": "Model",
|
||||
"workspace.usage.table.input": "Wejście",
|
||||
"workspace.usage.table.output": "Wyjście",
|
||||
"workspace.usage.table.cost": "Koszt",
|
||||
"workspace.usage.breakdown.input": "Wejście",
|
||||
"workspace.usage.breakdown.cacheRead": "Odczyt pamięci podręcznej",
|
||||
"workspace.usage.breakdown.cacheWrite": "Zapis w pamięci podręcznej",
|
||||
"workspace.usage.breakdown.output": "Wyjście",
|
||||
"workspace.usage.breakdown.reasoning": "Rozumowanie",
|
||||
"workspace.usage.subscription": "subskrypcja (${{amount}})",
|
||||
"workspace.cost.title": "Koszt",
|
||||
"workspace.cost.subtitle": "Koszty użytkowania w podziale na modele.",
|
||||
"workspace.cost.allModels": "Wszystkie modele",
|
||||
"workspace.cost.allKeys": "Wszystkie klucze",
|
||||
"workspace.cost.deletedSuffix": "(usunięte)",
|
||||
"workspace.cost.empty": "Brak dostępnych danych o użytkowaniu w wybranym okresie.",
|
||||
"workspace.cost.subscriptionShort": "zastąpić",
|
||||
"workspace.keys.title": "API Klucze",
|
||||
"workspace.keys.subtitle": "Zarządzaj kluczami API umożliwiającymi dostęp do usług opencode.",
|
||||
"workspace.keys.create": "Utwórz klucz API",
|
||||
"workspace.keys.placeholder": "Wprowadź nazwę klucza",
|
||||
"workspace.keys.empty": "Utwórz klucz opencode bramy API",
|
||||
"workspace.keys.table.name": "Nazwa",
|
||||
"workspace.keys.table.key": "Klawisz",
|
||||
"workspace.keys.table.createdBy": "Stworzony przez",
|
||||
"workspace.keys.table.lastUsed": "Ostatnio używany",
|
||||
"workspace.keys.copyApiKey": "Skopiuj klucz API",
|
||||
"workspace.keys.delete": "Usuwać",
|
||||
"workspace.members.title": "Członkowie",
|
||||
"workspace.members.subtitle": "Zarządzaj członkami obszaru roboczego i ich uprawnieniami.",
|
||||
"workspace.members.invite": "Zaproś członka",
|
||||
"workspace.members.inviting": "Atrakcyjny...",
|
||||
"workspace.members.beta.beforeLink": "Obszary robocze są bezpłatne dla zespołów w fazie beta.",
|
||||
"workspace.members.form.invitee": "Zaproś",
|
||||
"workspace.members.form.emailPlaceholder": "Wpisz adres e-mail",
|
||||
"workspace.members.form.role": "Rola",
|
||||
"workspace.members.form.monthlyLimit": "Miesięczny limit wydatków",
|
||||
"workspace.members.noLimit": "Bez limitu",
|
||||
"workspace.members.noLimitLowercase": "bez limitu",
|
||||
"workspace.members.invited": "zaproszony",
|
||||
"workspace.members.edit": "Redagować",
|
||||
"workspace.members.delete": "Usuwać",
|
||||
"workspace.members.saving": "Oszczędność...",
|
||||
"workspace.members.save": "Ratować",
|
||||
"workspace.members.table.email": "E-mail",
|
||||
"workspace.members.table.role": "Rola",
|
||||
"workspace.members.table.monthLimit": "Limit miesiąca",
|
||||
"workspace.members.role.admin": "Administrator",
|
||||
"workspace.members.role.adminDescription": "Może zarządzać modelami, członkami i rozliczeniami",
|
||||
"workspace.members.role.member": "Członek",
|
||||
"workspace.members.role.memberDescription": "Może generować klucze API tylko dla siebie",
|
||||
"workspace.settings.title": "Ustawienia",
|
||||
"workspace.settings.subtitle": "Zaktualizuj nazwę i preferencje obszaru roboczego.",
|
||||
"workspace.settings.workspaceName": "Nazwa obszaru roboczego",
|
||||
"workspace.settings.defaultName": "Domyślny",
|
||||
"workspace.settings.updating": "Aktualizowanie...",
|
||||
"workspace.settings.save": "Ratować",
|
||||
"workspace.settings.edit": "Redagować",
|
||||
"workspace.billing.title": "Rozliczenia",
|
||||
"workspace.billing.subtitle.beforeLink": "Zarządzaj metodami płatności.",
|
||||
"workspace.billing.contactUs": "Skontaktuj się z nami",
|
||||
"workspace.billing.subtitle.afterLink": "jeśli masz jakieś pytania.",
|
||||
"workspace.billing.currentBalance": "Aktualne saldo",
|
||||
"workspace.billing.add": "Dodaj $",
|
||||
"workspace.billing.enterAmount": "Wpisz kwotę",
|
||||
"workspace.billing.loading": "Załadunek...",
|
||||
"workspace.billing.addAction": "Dodać",
|
||||
"workspace.billing.addBalance": "Dodaj równowagę",
|
||||
"workspace.billing.linkedToStripe": "Powiązany ze Stripem",
|
||||
"workspace.billing.manage": "Zarządzać",
|
||||
"workspace.billing.enable": "Włącz rozliczenia",
|
||||
"workspace.monthlyLimit.title": "Limit miesięczny",
|
||||
"workspace.monthlyLimit.subtitle": "Ustaw miesięczny limit wykorzystania dla swojego konta.",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "Ustawienie...",
|
||||
"workspace.monthlyLimit.set": "Ustawić",
|
||||
"workspace.monthlyLimit.edit": "Edytuj limit",
|
||||
"workspace.monthlyLimit.noLimit": "Nie ustawiono limitu wykorzystania.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "Obecne wykorzystanie dla",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "jest $",
|
||||
"workspace.reload.title": "Automatyczne przeładowanie",
|
||||
"workspace.reload.disabled.before": "Automatyczne przeładowanie jest",
|
||||
"workspace.reload.disabled.state": "wyłączony",
|
||||
"workspace.reload.disabled.after": "Włącz automatyczne przeładowywanie, gdy saldo jest niskie.",
|
||||
"workspace.reload.enabled.before": "Automatyczne przeładowanie jest",
|
||||
"workspace.reload.enabled.state": "włączony",
|
||||
"workspace.reload.enabled.middle": "Załadujemy ponownie",
|
||||
"workspace.reload.processingFee": "opłata manipulacyjna",
|
||||
"workspace.reload.enabled.after": "kiedy równowaga osiągnie",
|
||||
"workspace.reload.edit": "Redagować",
|
||||
"workspace.reload.enable": "Włączać",
|
||||
"workspace.reload.enableAutoReload": "Włącz automatyczne ładowanie",
|
||||
"workspace.reload.reloadAmount": "Załaduj ponownie $",
|
||||
"workspace.reload.whenBalanceReaches": "Kiedy saldo osiągnie $",
|
||||
"workspace.reload.saving": "Oszczędność...",
|
||||
"workspace.reload.save": "Ratować",
|
||||
"workspace.reload.failedAt": "Nie udało się przeładować o godz",
|
||||
"workspace.reload.reason": "Powód:",
|
||||
"workspace.reload.updatePaymentMethod": "Zaktualizuj metodę płatności i spróbuj ponownie.",
|
||||
"workspace.reload.retrying": "Ponawiam próbę...",
|
||||
"workspace.reload.retry": "Spróbować ponownie",
|
||||
"workspace.payments.title": "Historia płatności",
|
||||
"workspace.payments.subtitle": "Ostatnie transakcje płatnicze.",
|
||||
"workspace.payments.table.date": "Data",
|
||||
"workspace.payments.table.paymentId": "Identyfikator płatności",
|
||||
"workspace.payments.table.amount": "Kwota",
|
||||
"workspace.payments.table.receipt": "Paragon",
|
||||
"workspace.payments.type.credit": "kredyt",
|
||||
"workspace.payments.type.subscription": "prenumerata",
|
||||
"workspace.payments.view": "Pogląd",
|
||||
"workspace.black.loading": "Załadunek...",
|
||||
"workspace.black.time.day": "dzień",
|
||||
"workspace.black.time.days": "dni",
|
||||
"workspace.black.time.hour": "godzina",
|
||||
"workspace.black.time.hours": "godziny",
|
||||
"workspace.black.time.minute": "chwila",
|
||||
"workspace.black.time.minutes": "protokół",
|
||||
"workspace.black.time.fewSeconds": "kilka sekund",
|
||||
"workspace.black.subscription.title": "Prenumerata",
|
||||
"workspace.black.subscription.message": "Subskrybujesz OpenCode Black za {{plan}} miesięcznie.",
|
||||
"workspace.black.subscription.manage": "Zarządzaj subskrypcją",
|
||||
"workspace.black.subscription.rollingUsage": "5-godzinne użycie",
|
||||
"workspace.black.subscription.weeklyUsage": "Tygodniowe użycie",
|
||||
"workspace.black.subscription.resetsIn": "Resetuje się",
|
||||
"workspace.black.subscription.useBalance": "Wykorzystaj dostępne saldo po osiągnięciu limitów wykorzystania",
|
||||
"workspace.black.waitlist.title": "Lista oczekujących",
|
||||
"workspace.black.waitlist.joined": "Jesteś na liście oczekujących na plan ${{plan}} miesięcznie OpenCode Black.",
|
||||
"workspace.black.waitlist.ready":
|
||||
"Jesteśmy gotowi zapisać Cię do planu Black o wartości {{plan}} miesięcznie OpenCode.",
|
||||
"workspace.black.waitlist.leave": "Opuść listę oczekujących",
|
||||
"workspace.black.waitlist.leaving": "Odjazd...",
|
||||
"workspace.black.waitlist.left": "Lewy",
|
||||
"workspace.black.waitlist.enroll": "Zapisać",
|
||||
"workspace.black.waitlist.enrolling": "Rejestracja...",
|
||||
"workspace.black.waitlist.enrolled": "Przyjęty",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"Kiedy klikniesz Zarejestruj, Twoja subskrypcja rozpocznie się natychmiast, a Twoja karta zostanie obciążona.",
|
||||
} satisfies Dict
|
||||
|
||||
"bench.list.title": "Benchmark",
|
||||
"bench.list.heading": "Benchmarki",
|
||||
"bench.list.table.agent": "Agent",
|
||||
"bench.list.table.model": "Model",
|
||||
"bench.list.table.score": "Wynik",
|
||||
|
||||
"bench.detail.title": "Benchmark - {{task}}",
|
||||
"bench.detail.notFound": "Nie znaleziono zadania",
|
||||
"bench.detail.na": "Brak danych",
|
||||
"bench.detail.labels.agent": "Agent",
|
||||
"bench.detail.labels.model": "Model",
|
||||
"bench.detail.labels.task": "Zadanie",
|
||||
"bench.detail.labels.repo": "Repozytorium",
|
||||
"bench.detail.labels.from": "Z",
|
||||
"bench.detail.labels.to": "Do",
|
||||
"bench.detail.labels.prompt": "Prompt",
|
||||
"bench.detail.labels.commit": "Commit",
|
||||
"bench.detail.labels.averageDuration": "Średni czas trwania",
|
||||
"bench.detail.labels.averageScore": "Średni wynik",
|
||||
"bench.detail.labels.averageCost": "Średni koszt",
|
||||
"bench.detail.labels.summary": "Podsumowanie",
|
||||
"bench.detail.labels.runs": "Uruchomienia",
|
||||
"bench.detail.labels.score": "Wynik",
|
||||
"bench.detail.labels.base": "Baza",
|
||||
"bench.detail.labels.penalty": "Kara",
|
||||
"bench.detail.labels.weight": "waga",
|
||||
"bench.detail.table.run": "Uruchomienie",
|
||||
"bench.detail.table.score": "Wynik (Baza - Kara)",
|
||||
"bench.detail.table.cost": "Koszt",
|
||||
"bench.detail.table.duration": "Czas trwania",
|
||||
"bench.detail.run.title": "Uruchomienie {{n}}",
|
||||
"bench.detail.rawJson": "Surowy JSON",
|
||||
} as const
|
||||
|
||||
export type Key = keyof typeof dict
|
||||
export type Dict = Record<Key, string>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,466 +4,400 @@ import { dict as en } from "./en"
|
||||
export const dict = {
|
||||
...en,
|
||||
"nav.github": "GitHub",
|
||||
"nav.docs": "\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23",
|
||||
"nav.changelog":
|
||||
"\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07",
|
||||
"nav.docs": "เอกสาร",
|
||||
"nav.changelog": "บันทึกการเปลี่ยนแปลง",
|
||||
"nav.discord": "Discord",
|
||||
"nav.x": "X",
|
||||
"nav.enterprise": "\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23",
|
||||
"nav.enterprise": "องค์กร",
|
||||
"nav.zen": "Zen",
|
||||
"nav.login": "\u0e40\u0e02\u0e49\u0e32\u0e2a\u0e39\u0e48\u0e23\u0e30\u0e1a\u0e1a",
|
||||
"nav.free": "\u0e1f\u0e23\u0e35",
|
||||
"nav.home": "\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e25\u0e31\u0e01",
|
||||
"nav.openMenu": "\u0e40\u0e1b\u0e34\u0e14\u0e40\u0e21\u0e19\u0e39",
|
||||
"nav.getStartedFree": "\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19\u0e1f\u0e23\u0e35",
|
||||
"nav.login": "เข้าสู่ระบบ",
|
||||
"nav.free": "ฟรี",
|
||||
"nav.home": "หน้าหลัก",
|
||||
"nav.openMenu": "เปิดเมนู",
|
||||
"nav.getStartedFree": "เริ่มต้นฟรี",
|
||||
|
||||
"nav.context.copyLogo":
|
||||
"\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01\u0e42\u0e25\u0e42\u0e01\u0e49\u0e40\u0e1b\u0e47\u0e19 SVG",
|
||||
"nav.context.copyWordmark":
|
||||
"\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e41\u0e1a\u0e23\u0e19\u0e14\u0e4c\u0e40\u0e1b\u0e47\u0e19 SVG",
|
||||
"nav.context.brandAssets": "\u0e41\u0e2d\u0e2a\u0e40\u0e0b\u0e17\u0e41\u0e1a\u0e23\u0e19\u0e14\u0e4c",
|
||||
"nav.context.copyLogo": "คัดลอกโลโก้เป็น SVG",
|
||||
"nav.context.copyWordmark": "คัดลอกตัวอักษรแบรนด์เป็น SVG",
|
||||
"nav.context.brandAssets": "แอสเซทแบรนด์",
|
||||
|
||||
"footer.github": "GitHub",
|
||||
"footer.docs": "\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23",
|
||||
"footer.changelog":
|
||||
"\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07",
|
||||
"footer.docs": "เอกสาร",
|
||||
"footer.changelog": "บันทึกการเปลี่ยนแปลง",
|
||||
"footer.discord": "Discord",
|
||||
"footer.x": "X",
|
||||
|
||||
"legal.brand": "\u0e41\u0e1a\u0e23\u0e19\u0e14\u0e4c",
|
||||
"legal.privacy": "\u0e04\u0e27\u0e32\u0e21\u0e40\u0e1b\u0e47\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e15\u0e31\u0e27",
|
||||
"legal.terms": "\u0e02\u0e49\u0e2d\u0e01\u0e33\u0e2b\u0e19\u0e14",
|
||||
"legal.brand": "แบรนด์",
|
||||
"legal.privacy": "ความเป็นส่วนตัว",
|
||||
"legal.terms": "ข้อกำหนด",
|
||||
|
||||
"email.title":
|
||||
"\u0e23\u0e39\u0e49\u0e01\u0e48\u0e2d\u0e19\u0e43\u0e04\u0e23\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e23\u0e32\u0e1b\u0e25\u0e48\u0e2d\u0e22\u0e1c\u0e25\u0e34\u0e15\u0e20\u0e31\u0e13\u0e11\u0e4c\u0e43\u0e2b\u0e21\u0e48",
|
||||
"email.subtitle":
|
||||
"\u0e40\u0e02\u0e49\u0e32\u0e23\u0e48\u0e27\u0e21\u0e23\u0e32\u0e22\u0e0a\u0e37\u0e48\u0e2d\u0e23\u0e2d\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e23\u0e31\u0e1a\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e4c\u0e40\u0e02\u0e49\u0e32\u0e16\u0e36\u0e07\u0e01\u0e48\u0e2d\u0e19\u0e43\u0e04\u0e23.",
|
||||
"email.placeholder": "\u0e2d\u0e35\u0e40\u0e21\u0e25\u0e4c",
|
||||
"email.subscribe": "\u0e2a\u0e21\u0e31\u0e04\u0e23\u0e23\u0e31\u0e1a\u0e02\u0e48\u0e32\u0e27\u0e2a\u0e32\u0e23",
|
||||
"email.success":
|
||||
"\u0e40\u0e01\u0e37\u0e2d\u0e1a\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27 \u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e01\u0e25\u0e48\u0e2d\u0e07\u0e02\u0e32\u0e40\u0e02\u0e49\u0e32\u0e41\u0e25\u0e30\u0e22\u0e37\u0e19\u0e22\u0e31\u0e19\u0e2d\u0e35\u0e40\u0e21\u0e25\u0e4c\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13",
|
||||
"email.title": "รู้ก่อนใครเมื่อเราปล่อยผลิตภัณฑ์ใหม่",
|
||||
"email.subtitle": "เข้าร่วมรายชื่อรอเพื่อรับสิทธิ์เข้าถึงก่อนใคร",
|
||||
"email.placeholder": "ที่อยู่อีเมล",
|
||||
"email.subscribe": "สมัครรับข่าวสาร",
|
||||
"email.success": "เกือบเสร็จแล้ว ตรวจสอบกล่องจดหมายและยืนยันที่อยู่อีเมลของคุณ",
|
||||
|
||||
"notFound.title": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e2b\u0e19\u0e49\u0e32 | opencode",
|
||||
"notFound.heading":
|
||||
"404 - \u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e2b\u0e19\u0e49\u0e32\u0e17\u0e35\u0e48\u0e04\u0e49\u0e19\u0e2b\u0e32",
|
||||
"notFound.home": "\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e25\u0e31\u0e01",
|
||||
"notFound.docs": "\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23",
|
||||
"notFound.title": "ไม่พบหน้า | OpenCode",
|
||||
"notFound.heading": "404 - ไม่พบหน้าที่ค้นหา",
|
||||
"notFound.home": "หน้าหลัก",
|
||||
"notFound.docs": "เอกสาร",
|
||||
"notFound.github": "GitHub",
|
||||
"notFound.discord": "Discord",
|
||||
|
||||
"user.logout": "\u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01\u0e23\u0e30\u0e1a\u0e1a",
|
||||
"user.logout": "ออกจากระบบ",
|
||||
|
||||
"workspace.select": "\u0e40\u0e25\u0e37\u0e2d\u0e01 workspace",
|
||||
"workspace.createNew": "+ \u0e2a\u0e23\u0e49\u0e32\u0e07 workspace \u0e43\u0e2b\u0e21\u0e48",
|
||||
"workspace.modal.title": "\u0e2a\u0e23\u0e49\u0e32\u0e07 workspace \u0e43\u0e2b\u0e21\u0e48",
|
||||
"workspace.modal.placeholder": "\u0e01\u0e23\u0e2d\u0e01\u0e0a\u0e37\u0e48\u0e2d workspace",
|
||||
"workspace.select": "เลือก Workspace",
|
||||
"workspace.createNew": "+ สร้าง Workspace ใหม่",
|
||||
"workspace.modal.title": "สร้าง Workspace ใหม่",
|
||||
"workspace.modal.placeholder": "กรอกชื่อ Workspace",
|
||||
|
||||
"common.cancel": "\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01",
|
||||
"common.creating": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e2a\u0e23\u0e49\u0e32\u0e07...",
|
||||
"common.create": "\u0e2a\u0e23\u0e49\u0e32\u0e07",
|
||||
"common.cancel": "ยกเลิก",
|
||||
"common.creating": "กำลังสร้าง...",
|
||||
"common.create": "สร้าง",
|
||||
|
||||
"common.videoUnsupported":
|
||||
"\u0e40\u0e1a\u0e23\u0e32\u0e27\u0e4c\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e23\u0e2d\u0e07\u0e23\u0e31\u0e1a\u0e41\u0e17\u0e47\u0e01 video",
|
||||
"common.figure": "\u0e23\u0e39\u0e1b {{n}}",
|
||||
"common.faq": "\u0e04\u0e33\u0e16\u0e32\u0e21\u0e17\u0e35\u0e48\u0e1e\u0e1a\u0e1a\u0e48\u0e2d\u0e22",
|
||||
"common.learnMore": "\u0e14\u0e39\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21",
|
||||
"common.videoUnsupported": "เบราว์เซอร์ของคุณไม่รองรับแท็ก video",
|
||||
"common.figure": "รูปที่ {{n}}",
|
||||
"common.faq": "คำถามที่พบบ่อย",
|
||||
"common.learnMore": "ดูเพิ่มเติม",
|
||||
|
||||
"home.title":
|
||||
"OpenCode | \u0e40\u0e2d\u0e40\u0e08\u0e19\u0e15\u0e4c\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e04\u0e49\u0e14\u0e14\u0e49\u0e27\u0e22 AI \u0e41\u0e1a\u0e1a\u0e42\u0e2d\u0e40\u0e1e\u0e19\u0e0b\u0e2d\u0e23\u0e4c\u0e2a",
|
||||
"error.invalidPlan": "แผนไม่ถูกต้อง",
|
||||
"error.workspaceRequired": "จำเป็นต้องมี Workspace ID",
|
||||
"error.alreadySubscribed": "Workspace นี้มีการสมัครสมาชิกอยู่แล้ว",
|
||||
"error.limitRequired": "จำเป็นต้องระบุขีดจำกัด",
|
||||
"error.monthlyLimitInvalid": "โปรดระบุขีดจำกัดรายเดือนที่ถูกต้อง",
|
||||
"error.workspaceNameRequired": "จำเป็นต้องระบุชื่อ Workspace",
|
||||
"error.nameTooLong": "ชื่อต้องมีความยาวไม่เกิน 255 ตัวอักษร",
|
||||
"error.emailRequired": "จำเป็นต้องระบุอีเมล",
|
||||
"error.roleRequired": "จำเป็นต้องระบุบทบาท",
|
||||
"error.idRequired": "จำเป็นต้องระบุ ID",
|
||||
"error.nameRequired": "จำเป็นต้องระบุชื่อ",
|
||||
"error.providerRequired": "จำเป็นต้องระบุผู้ให้บริการ",
|
||||
"error.apiKeyRequired": "จำเป็นต้องระบุ API key",
|
||||
"error.modelRequired": "จำเป็นต้องระบุโมเดล",
|
||||
"error.reloadAmountMin": "จำนวนเงินที่โหลดซ้ำต้องมีอย่างน้อย ${{amount}}",
|
||||
"error.reloadTriggerMin": "ยอดคงเหลือที่กระตุ้นต้องมีอย่างน้อย ${{amount}}",
|
||||
|
||||
"home.banner.badge": "\u0e43\u0e2b\u0e21\u0e48",
|
||||
"home.banner.text":
|
||||
"\u0e41\u0e2d\u0e1b\u0e40\u0e14\u0e2a\u0e01\u0e4c\u0e17\u0e47\u0e2d\u0e1b\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e43\u0e19\u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e0a\u0e31\u0e19\u0e40\u0e1a\u0e15\u0e49\u0e32",
|
||||
"home.banner.platforms": "\u0e1a\u0e19 macOS, Windows \u0e41\u0e25\u0e30 Linux",
|
||||
"home.banner.downloadNow":
|
||||
"\u0e14\u0e32\u0e27\u0e19\u0e4c\u0e42\u0e2b\u0e25\u0e14\u0e15\u0e2d\u0e19\u0e19\u0e35\u0e49",
|
||||
"home.banner.downloadBetaNow":
|
||||
"\u0e14\u0e32\u0e27\u0e19\u0e4c\u0e42\u0e2b\u0e25\u0e14\u0e40\u0e1a\u0e15\u0e49\u0e32\u0e40\u0e14\u0e2a\u0e01\u0e4c\u0e17\u0e47\u0e2d\u0e1b\u0e15\u0e2d\u0e19\u0e19\u0e35\u0e49",
|
||||
"home.title": "OpenCode | เอเจนต์เขียนโค้ดด้วย AI แบบโอเพนซอร์ส",
|
||||
|
||||
"home.hero.title":
|
||||
"\u0e40\u0e2d\u0e40\u0e08\u0e19\u0e15\u0e4c\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e04\u0e49\u0e14\u0e14\u0e49\u0e27\u0e22 AI \u0e41\u0e1a\u0e1a\u0e42\u0e2d\u0e40\u0e1e\u0e19\u0e0b\u0e2d\u0e23\u0e4c\u0e2a",
|
||||
"home.hero.subtitle.a":
|
||||
"\u0e21\u0e35\u0e23\u0e27\u0e21\u0e42\u0e21\u0e40\u0e14\u0e25\u0e1f\u0e23\u0e35 \u0e2b\u0e23\u0e37\u0e2d\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d\u0e42\u0e21\u0e40\u0e14\u0e25\u0e43\u0e14\u0e46\u0e08\u0e32\u0e01\u0e1c\u0e39\u0e49\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e43\u0e14\u0e46,",
|
||||
"home.hero.subtitle.b":
|
||||
"\u0e23\u0e27\u0e21\u0e16\u0e36\u0e07 Claude, GPT, Gemini \u0e41\u0e25\u0e30\u0e2d\u0e35\u0e01\u0e21\u0e32\u0e01\u0e21\u0e32\u0e22.",
|
||||
"temp.title": "OpenCode | เอเจนต์เขียนโค้ด AI ที่สร้างมาเพื่อเทอร์มินัล",
|
||||
"temp.hero.title": "เอเจนต์เขียนโค้ด AI ที่สร้างมาเพื่อเทอร์มินัล",
|
||||
"temp.zen": "OpenCode Zen",
|
||||
"temp.getStarted": "เริ่มต้นใช้งาน",
|
||||
"temp.feature.native.title": "Native TUI",
|
||||
"temp.feature.native.body": "UI เทอร์มินัลแบบเนทีฟที่ตอบสนองไวและปรับแต่งธีมได้",
|
||||
"temp.feature.zen.beforeLink": "",
|
||||
"temp.feature.zen.link": "รายการโมเดลที่คัดสรรแล้ว",
|
||||
"temp.feature.zen.afterLink": "โดย OpenCode",
|
||||
"temp.feature.models.beforeLink": "รองรับผู้ให้บริการ LLM กว่า 75 รายผ่าน",
|
||||
"temp.feature.models.afterLink": "รวมถึงโมเดล Local",
|
||||
"temp.screenshot.caption": "OpenCode TUI พร้อมธีม tokyonight",
|
||||
"temp.screenshot.alt": "OpenCode TUI พร้อมธีม tokyonight",
|
||||
|
||||
"home.install.ariaLabel":
|
||||
"\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e01\u0e32\u0e23\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07",
|
||||
"home.banner.badge": "ใหม่",
|
||||
"home.banner.text": "แอปเดสก์ท็อปพร้อมใช้งานในเวอร์ชันเบต้า",
|
||||
"home.banner.platforms": "บน macOS, Windows และ Linux",
|
||||
"home.banner.downloadNow": "ดาวน์โหลดตอนนี้",
|
||||
"home.banner.downloadBetaNow": "ดาวน์โหลดเบต้าเดสก์ท็อปตอนนี้",
|
||||
|
||||
"home.what.title": "OpenCode \u0e04\u0e37\u0e2d\u0e2d\u0e30\u0e44\u0e23?",
|
||||
"home.what.body":
|
||||
"OpenCode \u0e40\u0e1b\u0e47\u0e19\u0e40\u0e2d\u0e40\u0e08\u0e19\u0e15\u0e4c\u0e42\u0e2d\u0e40\u0e1e\u0e19\u0e0b\u0e2d\u0e23\u0e4c\u0e2a \u0e17\u0e35\u0e48\u0e0a\u0e48\u0e27\u0e22\u0e43\u0e2b\u0e49\u0e04\u0e38\u0e13\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e04\u0e49\u0e14\u0e43\u0e19\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e21\u0e34\u0e19\u0e31\u0e25, IDE \u0e2b\u0e23\u0e37\u0e2d\u0e40\u0e14\u0e2a\u0e01\u0e4c\u0e17\u0e47\u0e2d\u0e1b.",
|
||||
"home.what.lsp.title": "\u0e23\u0e2d\u0e07\u0e23\u0e31\u0e1a LSP",
|
||||
"home.what.lsp.body":
|
||||
"\u0e42\u0e2b\u0e25\u0e14 LSP \u0e17\u0e35\u0e48\u0e40\u0e2b\u0e21\u0e32\u0e30\u0e2a\u0e21\u0e43\u0e2b\u0e49\u0e01\u0e31\u0e1a LLM \u0e41\u0e1a\u0e1a\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34",
|
||||
"home.what.multiSession.title": "\u0e2b\u0e25\u0e32\u0e22\u0e40\u0e0b\u0e2a\u0e0a\u0e31\u0e19",
|
||||
"home.what.multiSession.body":
|
||||
"\u0e40\u0e23\u0e34\u0e48\u0e21\u0e43\u0e0a\u0e49\u0e40\u0e2d\u0e40\u0e08\u0e19\u0e15\u0e4c\u0e2b\u0e25\u0e32\u0e22\u0e15\u0e31\u0e27\u0e04\u0e39\u0e48\u0e02\u0e19\u0e32\u0e19\u0e43\u0e19\u0e42\u0e1b\u0e23\u0e40\u0e08\u0e01\u0e15\u0e4c\u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e19",
|
||||
"home.what.shareLinks.title": "\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e41\u0e1a\u0e48\u0e07\u0e1b\u0e31\u0e19",
|
||||
"home.what.shareLinks.body":
|
||||
"\u0e41\u0e1a\u0e48\u0e07\u0e1b\u0e31\u0e19\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e44\u0e1b\u0e22\u0e31\u0e07\u0e40\u0e0b\u0e2a\u0e0a\u0e31\u0e19\u0e43\u0e14\u0e46 \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e2d\u0e49\u0e32\u0e07\u0e2d\u0e34\u0e07\u0e2b\u0e23\u0e37\u0e2d\u0e14\u0e35\u0e1a\u0e31\u0e01",
|
||||
"home.hero.title": "เอเจนต์เขียนโค้ดด้วย AI แบบโอเพนซอร์ส",
|
||||
"home.hero.subtitle.a": "มีโมเดลฟรีรวมอยู่ หรือเชื่อมต่อโมเดลใดก็ได้จากผู้ให้บริการรายใดก็ได้,",
|
||||
"home.hero.subtitle.b": "รวมถึง Claude, GPT, Gemini และอีกมากมาย",
|
||||
|
||||
"home.install.ariaLabel": "ตัวเลือกการติดตั้ง",
|
||||
|
||||
"home.what.title": "OpenCode คืออะไร?",
|
||||
"home.what.body": "OpenCode คือเอเจนต์โอเพนซอร์สที่ช่วยคุณเขียนโค้ดในเทอร์มินัล, IDE หรือเดสก์ท็อป",
|
||||
"home.what.lsp.title": "รองรับ LSP",
|
||||
"home.what.lsp.body": "โหลด LSP ที่เหมาะสมสำหรับ LLM โดยอัตโนมัติ",
|
||||
"home.what.multiSession.title": "หลายเซสชัน",
|
||||
"home.what.multiSession.body": "เริ่มเอเจนต์หลายตัวทำงานคู่ขนานกันในโปรเจกต์เดียวกัน",
|
||||
"home.what.shareLinks.title": "แชร์ลิงก์",
|
||||
"home.what.shareLinks.body": "แชร์ลิงก์ไปยังเซสชันใดก็ได้เพื่อการอ้างอิงหรือ Debug",
|
||||
"home.what.copilot.title": "GitHub Copilot",
|
||||
"home.what.copilot.body":
|
||||
"\u0e25\u0e47\u0e2d\u0e01\u0e2d\u0e34\u0e19\u0e14\u0e49\u0e27\u0e22 GitHub \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e43\u0e0a\u0e49\u0e1a\u0e31\u0e0d\u0e0a\u0e35 Copilot \u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13",
|
||||
"home.what.copilot.body": "เข้าสู่ระบบด้วย GitHub เพื่อใช้บัญชี Copilot ของคุณ",
|
||||
"home.what.chatgptPlus.title": "ChatGPT Plus/Pro",
|
||||
"home.what.chatgptPlus.body":
|
||||
"\u0e25\u0e47\u0e2d\u0e01\u0e2d\u0e34\u0e19\u0e14\u0e49\u0e27\u0e22 OpenAI \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e43\u0e0a\u0e49 ChatGPT Plus \u0e2b\u0e23\u0e37\u0e2d Pro \u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13",
|
||||
"home.what.anyModel.title": "\u0e42\u0e21\u0e40\u0e14\u0e25\u0e43\u0e14\u0e46",
|
||||
"home.what.anyModel.body":
|
||||
"\u0e1c\u0e39\u0e49\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23 LLM 75+ \u0e23\u0e32\u0e22\u0e1c\u0e48\u0e32\u0e19 Models.dev \u0e23\u0e27\u0e21\u0e16\u0e36\u0e07\u0e42\u0e21\u0e40\u0e14\u0e25\u0e42\u0e25\u0e04\u0e2d\u0e25",
|
||||
"home.what.anyEditor.title": "\u0e40\u0e2d\u0e14\u0e34\u0e40\u0e15\u0e2d\u0e23\u0e4c\u0e43\u0e14\u0e46",
|
||||
"home.what.anyEditor.body":
|
||||
"\u0e43\u0e0a\u0e49\u0e44\u0e14\u0e49\u0e17\u0e31\u0e49\u0e07\u0e41\u0e1a\u0e1a\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e21\u0e34\u0e19\u0e31\u0e25, \u0e41\u0e2d\u0e1b\u0e40\u0e14\u0e2a\u0e01\u0e4c\u0e17\u0e47\u0e2d\u0e1b \u0e41\u0e25\u0e30\u0e2a\u0e48\u0e27\u0e19\u0e02\u0e22\u0e32\u0e22 IDE",
|
||||
"home.what.readDocs": "\u0e2d\u0e48\u0e32\u0e19\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23",
|
||||
"home.what.chatgptPlus.body": "เข้าสู่ระบบด้วย OpenAI เพื่อใช้บัญชี ChatGPT Plus หรือ Pro ของคุณ",
|
||||
"home.what.anyModel.title": "โมเดลใดก็ได้",
|
||||
"home.what.anyModel.body": "ผู้ให้บริการ LLM กว่า 75 รายผ่าน Models.dev รวมถึงโมเดล Local",
|
||||
"home.what.anyEditor.title": "อีดิเตอร์ใดก็ได้",
|
||||
"home.what.anyEditor.body": "ใช้งานได้ทั้งแบบเทอร์มินัล, แอปเดสก์ท็อป และส่วนขยาย IDE",
|
||||
"home.what.readDocs": "อ่านเอกสาร",
|
||||
|
||||
"home.growth.title":
|
||||
"\u0e40\u0e2d\u0e40\u0e08\u0e19\u0e15\u0e4c\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e04\u0e49\u0e14\u0e14\u0e49\u0e27\u0e22 AI \u0e41\u0e1a\u0e1a\u0e42\u0e2d\u0e40\u0e1e\u0e19\u0e0b\u0e2d\u0e23\u0e4c\u0e2a",
|
||||
"home.growth.title": "เอเจนต์เขียนโค้ดด้วย AI แบบโอเพนซอร์ส",
|
||||
"home.growth.body":
|
||||
"\u0e14\u0e49\u0e27\u0e22\u0e14\u0e32\u0e27 GitHub \u0e01\u0e27\u0e48\u0e32 <strong>{{stars}}</strong> \u0e14\u0e27\u0e07, \u0e1c\u0e39\u0e49\u0e23\u0e48\u0e27\u0e21\u0e2a\u0e19\u0e31\u0e1a\u0e2a\u0e19\u0e38\u0e19 <strong>{{contributors}}</strong> \u0e04\u0e19 \u0e41\u0e25\u0e30\u0e04\u0e2d\u0e21\u0e21\u0e34\u0e15\u0e01\u0e27\u0e48\u0e32 <strong>{{commits}}</strong> \u0e04\u0e23\u0e31\u0e49\u0e07, OpenCode \u0e16\u0e39\u0e01\u0e43\u0e0a\u0e49\u0e41\u0e25\u0e30\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e44\u0e27\u0e49\u0e27\u0e32\u0e07\u0e43\u0e08\u0e08\u0e32\u0e01\u0e19\u0e31\u0e01\u0e1e\u0e31\u0e12\u0e19\u0e32\u0e01\u0e27\u0e48\u0e32 <strong>{{monthlyUsers}}</strong> \u0e04\u0e19\u0e43\u0e19\u0e17\u0e38\u0e01\u0e40\u0e14\u0e37\u0e2d\u0e19.",
|
||||
"home.growth.githubStars": "\u0e14\u0e32\u0e27 GitHub",
|
||||
"home.growth.contributors":
|
||||
"\u0e1c\u0e39\u0e49\u0e23\u0e48\u0e27\u0e21\u0e2a\u0e19\u0e31\u0e1a\u0e2a\u0e19\u0e38\u0e19",
|
||||
"home.growth.monthlyDevs":
|
||||
"\u0e19\u0e31\u0e01\u0e1e\u0e31\u0e12\u0e19\u0e32\u0e23\u0e32\u0e22\u0e40\u0e14\u0e37\u0e2d\u0e19",
|
||||
"ด้วยยอดดาวบน GitHub กว่า <strong>{{stars}}</strong> ดวง, ผู้ร่วมพัฒนา <strong>{{contributors}}</strong> คน, และการคอมมิตกว่า <strong>{{commits}}</strong> ครั้ง, OpenCode ได้รับความไว้วางใจจากนักพัฒนากว่า <strong>{{monthlyUsers}}</strong> คนในทุกเดือน",
|
||||
"home.growth.githubStars": "GitHub Stars",
|
||||
"home.growth.contributors": "ผู้ร่วมพัฒนา",
|
||||
"home.growth.monthlyDevs": "นักพัฒนารายเดือน",
|
||||
|
||||
"home.privacy.title":
|
||||
"\u0e2d\u0e2d\u0e01\u0e41\u0e1a\u0e1a\u0e14\u0e49\u0e27\u0e22\u0e04\u0e27\u0e32\u0e21\u0e40\u0e1b\u0e47\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e15\u0e31\u0e27\u0e40\u0e1b\u0e47\u0e19\u0e2b\u0e25\u0e31\u0e01",
|
||||
"home.privacy.title": "สร้างโดยคำนึงถึงความเป็นส่วนตัวเป็นหลัก",
|
||||
"home.privacy.body":
|
||||
"OpenCode \u0e44\u0e21\u0e48\u0e08\u0e31\u0e14\u0e40\u0e01\u0e47\u0e1a\u0e42\u0e04\u0e49\u0e14\u0e2b\u0e23\u0e37\u0e2d\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e1a\u0e23\u0e34\u0e1a\u0e17\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e43\u0e2b\u0e49\u0e17\u0e33\u0e07\u0e32\u0e19\u0e44\u0e14\u0e49\u0e43\u0e19\u0e2a\u0e34\u0e48\u0e07\u0e41\u0e27\u0e14\u0e25\u0e49\u0e2d\u0e21\u0e17\u0e35\u0e48\u0e43\u0e2b\u0e49\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e33\u0e04\u0e31\u0e0d\u0e01\u0e31\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e40\u0e1b\u0e47\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e15\u0e31\u0e27.",
|
||||
"home.privacy.learnMore":
|
||||
"\u0e14\u0e39\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a",
|
||||
"home.privacy.link": "\u0e04\u0e27\u0e32\u0e21\u0e40\u0e1b\u0e47\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e15\u0e31\u0e27",
|
||||
"OpenCode ไม่จัดเก็บโค้ดหรือข้อมูลบริบทของคุณ เพื่อให้สามารถทำงานในสภาพแวดล้อมที่ให้ความสำคัญกับความเป็นส่วนตัวได้",
|
||||
"home.privacy.learnMore": "เรียนรู้เพิ่มเติมเกี่ยวกับ",
|
||||
"home.privacy.link": "ความเป็นส่วนตัว",
|
||||
|
||||
"home.faq.q1": "OpenCode \u0e04\u0e37\u0e2d\u0e2d\u0e30\u0e44\u0e23?",
|
||||
"home.faq.q1": "OpenCode คืออะไร?",
|
||||
"home.faq.a1":
|
||||
"OpenCode \u0e40\u0e1b\u0e47\u0e19\u0e40\u0e2d\u0e40\u0e08\u0e19\u0e15\u0e4c\u0e42\u0e2d\u0e40\u0e1e\u0e19\u0e0b\u0e2d\u0e23\u0e4c\u0e2a \u0e17\u0e35\u0e48\u0e0a\u0e48\u0e27\u0e22\u0e43\u0e2b\u0e49\u0e04\u0e38\u0e13\u0e40\u0e02\u0e35\u0e22\u0e19\u0e41\u0e25\u0e30\u0e23\u0e31\u0e19\u0e42\u0e04\u0e49\u0e14\u0e14\u0e49\u0e27\u0e22\u0e42\u0e21\u0e40\u0e14\u0e25 AI \u0e43\u0e14\u0e46 \u0e44\u0e14\u0e49 \u0e21\u0e35\u0e17\u0e31\u0e49\u0e07\u0e41\u0e1a\u0e1a\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e21\u0e34\u0e19\u0e31\u0e25, \u0e41\u0e2d\u0e1b\u0e40\u0e14\u0e2a\u0e01\u0e4c\u0e17\u0e47\u0e2d\u0e1b \u0e2b\u0e23\u0e37\u0e2d\u0e2a\u0e48\u0e27\u0e19\u0e02\u0e22\u0e32\u0e22 IDE.",
|
||||
"home.faq.q2": "\u0e40\u0e23\u0e34\u0e48\u0e21\u0e43\u0e0a\u0e49 OpenCode \u0e22\u0e31\u0e07\u0e44\u0e07?",
|
||||
"home.faq.a2.before":
|
||||
"\u0e27\u0e34\u0e18\u0e35\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19\u0e17\u0e35\u0e48\u0e07\u0e48\u0e32\u0e22\u0e17\u0e35\u0e48\u0e2a\u0e38\u0e14\u0e04\u0e37\u0e2d\u0e2d\u0e48\u0e32\u0e19",
|
||||
"home.faq.a2.link": "\u0e1a\u0e17\u0e19\u0e33",
|
||||
"home.faq.q3":
|
||||
"\u0e15\u0e49\u0e2d\u0e07\u0e21\u0e35\u0e2a\u0e21\u0e32\u0e0a\u0e34\u0e01 AI \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21\u0e16\u0e36\u0e07\u0e08\u0e30\u0e43\u0e0a\u0e49 OpenCode \u0e44\u0e14\u0e49\u0e44\u0e2b\u0e21?",
|
||||
"home.faq.a3.p1":
|
||||
"\u0e44\u0e21\u0e48\u0e08\u0e33\u0e40\u0e1b\u0e47\u0e19\u0e40\u0e2a\u0e21\u0e2d\u0e44\u0e1b OpenCode \u0e21\u0e35\u0e42\u0e21\u0e40\u0e14\u0e25\u0e1f\u0e23\u0e35\u0e43\u0e2b\u0e49\u0e43\u0e0a\u0e49\u0e42\u0e14\u0e22\u0e44\u0e21\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e1a\u0e31\u0e0d\u0e0a\u0e35.",
|
||||
"home.faq.a3.p2.beforeZen":
|
||||
"\u0e19\u0e2d\u0e01\u0e08\u0e32\u0e01\u0e19\u0e35\u0e49 \u0e04\u0e38\u0e13\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e0a\u0e49\u0e42\u0e21\u0e40\u0e14\u0e25\u0e22\u0e2d\u0e14\u0e19\u0e34\u0e22\u0e21\u0e44\u0e14\u0e49\u0e42\u0e14\u0e22\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e1a\u0e31\u0e0d\u0e0a\u0e35",
|
||||
"home.faq.a3.p2.afterZen": ".",
|
||||
"OpenCode เป็นเอเจนต์โอเพนซอร์สที่ช่วยให้คุณเขียนและรันโค้ดด้วยโมเดล AI ใดก็ได้ มีให้เลือกใช้ทั้งแบบอินเทอร์เฟซเทอร์มินัล, แอปเดสก์ท็อป หรือส่วนขยาย IDE",
|
||||
"home.faq.q2": "ฉันจะเริ่มใช้ OpenCode ได้อย่างไร?",
|
||||
"home.faq.a2.before": "วิธีเริ่มต้นที่ง่ายที่สุดคืออ่าน",
|
||||
"home.faq.a2.link": "บทนำ",
|
||||
"home.faq.q3": "ต้องสมัครสมาชิก AI เพิ่มเติมเพื่อใช้ OpenCode หรือไม่?",
|
||||
"home.faq.a3.p1": "ไม่จำเป็นเสมอไป OpenCode มาพร้อมกับชุดโมเดลฟรีที่คุณสามารถใช้ได้โดยไม่ต้องสร้างบัญชี",
|
||||
"home.faq.a3.p2.beforeZen": "นอกจากนี้ คุณสามารถใช้โมเดลยอดนิยมใดก็ได้โดยการสร้างบัญชี",
|
||||
"home.faq.a3.p2.afterZen": "",
|
||||
"home.faq.a3.p3":
|
||||
"\u0e41\u0e21\u0e49\u0e40\u0e23\u0e32\u0e08\u0e30\u0e41\u0e19\u0e30\u0e19\u0e33\u0e43\u0e2b\u0e49\u0e43\u0e0a\u0e49 Zen \u0e41\u0e15\u0e48 OpenCode \u0e01\u0e47\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e44\u0e14\u0e49\u0e01\u0e31\u0e1a\u0e1c\u0e39\u0e49\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e22\u0e2d\u0e14\u0e19\u0e34\u0e22\u0e21\u0e40\u0e0a\u0e48\u0e19 OpenAI, Anthropic, xAI \u0e44\u0e14\u0e49\u0e40\u0e0a\u0e48\u0e19\u0e01\u0e31\u0e19.",
|
||||
"home.faq.a3.p4.beforeLocal":
|
||||
"\u0e04\u0e38\u0e13\u0e22\u0e31\u0e07\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d",
|
||||
"home.faq.a3.p4.localLink": "\u0e42\u0e21\u0e40\u0e14\u0e25\u0e42\u0e25\u0e04\u0e2d\u0e25",
|
||||
"home.faq.q4":
|
||||
"\u0e43\u0e0a\u0e49\u0e2a\u0e21\u0e32\u0e0a\u0e34\u0e01 AI \u0e17\u0e35\u0e48\u0e21\u0e35\u0e2d\u0e22\u0e39\u0e48\u0e41\u0e25\u0e49\u0e27\u0e01\u0e31\u0e1a OpenCode \u0e44\u0e14\u0e49\u0e44\u0e2b\u0e21?",
|
||||
"แม้เราจะแนะนำให้ใช้ Zen แต่ OpenCode ก็ทำงานร่วมกับผู้ให้บริการยอดนิยมทั้งหมด เช่น OpenAI, Anthropic, xAI เป็นต้น",
|
||||
"home.faq.a3.p4.beforeLocal": "คุณยังสามารถเชื่อมต่อกับ",
|
||||
"home.faq.a3.p4.localLink": "โมเดล Local ของคุณ",
|
||||
"home.faq.q4": "ฉันสามารถใช้การสมัครสมาชิก AI ที่มีอยู่กับ OpenCode ได้หรือไม่?",
|
||||
"home.faq.a4.p1":
|
||||
"\u0e44\u0e14\u0e49 OpenCode \u0e23\u0e2d\u0e07\u0e23\u0e31\u0e1a\u0e41\u0e1c\u0e19\u0e2a\u0e21\u0e32\u0e0a\u0e34\u0e01\u0e08\u0e32\u0e01\u0e1c\u0e39\u0e49\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e23\u0e32\u0e22\u0e43\u0e2b\u0e0d\u0e48\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 \u0e04\u0e38\u0e13\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e0a\u0e49 Claude Pro/Max, ChatGPT Plus/Pro \u0e2b\u0e23\u0e37\u0e2d GitHub Copilot \u0e44\u0e14\u0e49.",
|
||||
"home.faq.q5":
|
||||
"\u0e43\u0e0a\u0e49 OpenCode \u0e44\u0e14\u0e49\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e43\u0e19\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e21\u0e34\u0e19\u0e31\u0e25\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19\u0e2b\u0e23\u0e37\u0e2d\u0e40\u0e1b\u0e25\u0e48\u0e32?",
|
||||
"home.faq.a5.beforeDesktop":
|
||||
"\u0e44\u0e21\u0e48\u0e41\u0e25\u0e49\u0e27! OpenCode \u0e21\u0e35\u0e41\u0e2d\u0e1b\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a",
|
||||
"home.faq.a5.desktop": "\u0e40\u0e14\u0e2a\u0e01\u0e4c\u0e17\u0e47\u0e2d\u0e1b",
|
||||
"home.faq.a5.and": "\u0e41\u0e25\u0e30",
|
||||
"home.faq.a5.web": "\u0e40\u0e27\u0e47\u0e1a",
|
||||
"home.faq.q6": "OpenCode \u0e23\u0e32\u0e04\u0e32\u0e40\u0e17\u0e48\u0e32\u0e44\u0e2b\u0e23\u0e48?",
|
||||
"ได้ OpenCode รองรับแผนการสมัครสมาชิกจากผู้ให้บริการหลักทั้งหมด คุณสามารถใช้การสมัครสมาชิก Claude Pro/Max, ChatGPT Plus/Pro หรือ GitHub Copilot ของคุณได้",
|
||||
"home.faq.q5": "ฉันใช้ OpenCode ได้เฉพาะในเทอร์มินัลใช่หรือไม่?",
|
||||
"home.faq.a5.beforeDesktop": "ไม่อีกต่อไป! OpenCode มีแอปสำหรับ",
|
||||
"home.faq.a5.desktop": "เดสก์ท็อป",
|
||||
"home.faq.a5.and": "และ",
|
||||
"home.faq.a5.web": "เว็บ",
|
||||
"home.faq.q6": "OpenCode ราคาเท่าไหร่?",
|
||||
"home.faq.a6":
|
||||
"OpenCode \u0e43\u0e0a\u0e49\u0e1f\u0e23\u0e35 100% \u0e41\u0e25\u0e30\u0e21\u0e35\u0e42\u0e21\u0e40\u0e14\u0e25\u0e1f\u0e23\u0e35\u0e43\u0e2b\u0e49\u0e43\u0e0a\u0e49 \u0e2d\u0e32\u0e08\u0e21\u0e35\u0e04\u0e48\u0e32\u0e43\u0e0a\u0e49\u0e08\u0e48\u0e32\u0e22\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21\u0e2b\u0e32\u0e01\u0e04\u0e38\u0e13\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d\u0e1c\u0e39\u0e49\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e2d\u0e37\u0e48\u0e19.",
|
||||
"home.faq.q7":
|
||||
"\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e41\u0e25\u0e30\u0e04\u0e27\u0e32\u0e21\u0e40\u0e1b\u0e47\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e15\u0e31\u0e27\u0e25\u0e48\u0e30?",
|
||||
"home.faq.a7.p1":
|
||||
"\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e08\u0e30\u0e16\u0e39\u0e01\u0e08\u0e31\u0e14\u0e40\u0e01\u0e47\u0e1a\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e04\u0e38\u0e13\u0e43\u0e0a\u0e49\u0e42\u0e21\u0e40\u0e14\u0e25\u0e1f\u0e23\u0e35\u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32 \u0e2b\u0e23\u0e37\u0e2d\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e17\u0e35\u0e48\u0e41\u0e1a\u0e48\u0e07\u0e1b\u0e31\u0e19\u0e44\u0e14\u0e49.",
|
||||
"home.faq.a7.p2.beforeModels":
|
||||
"\u0e14\u0e39\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a",
|
||||
"home.faq.a7.p2.modelsLink": "\u0e42\u0e21\u0e40\u0e14\u0e25\u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32",
|
||||
"home.faq.a7.p2.and": "\u0e41\u0e25\u0e30",
|
||||
"home.faq.a7.p2.shareLink": "\u0e2b\u0e19\u0e49\u0e32\u0e41\u0e0a\u0e23\u0e4c",
|
||||
"home.faq.q8":
|
||||
"OpenCode \u0e40\u0e1b\u0e47\u0e19\u0e42\u0e2d\u0e40\u0e1e\u0e19\u0e0b\u0e2d\u0e23\u0e4c\u0e2a\u0e44\u0e2b\u0e21?",
|
||||
"home.faq.a8.p1":
|
||||
"\u0e43\u0e0a\u0e48 OpenCode \u0e40\u0e1b\u0e47\u0e19\u0e42\u0e2d\u0e40\u0e1e\u0e19\u0e0b\u0e2d\u0e23\u0e4c\u0e2a\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e41\u0e17\u0e49\u0e08\u0e23\u0e34\u0e07 \u0e42\u0e04\u0e49\u0e14\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e19",
|
||||
"home.faq.a8.p2": "\u0e20\u0e32\u0e22\u0e43\u0e15\u0e49",
|
||||
"OpenCode ใช้งานได้ฟรี 100% และมาพร้อมกับชุดโมเดลฟรี อาจมีค่าใช้จ่ายเพิ่มเติมหากคุณเชื่อมต่อกับผู้ให้บริการรายอื่น",
|
||||
"home.faq.q7": "แล้วเรื่องข้อมูลและความเป็นส่วนตัวล่ะ?",
|
||||
"home.faq.a7.p1": "ข้อมูลของคุณจะถูกจัดเก็บเฉพาะเมื่อคุณใช้โมเดลฟรีของเราหรือสร้างลิงก์ที่แชร์ได้",
|
||||
"home.faq.a7.p2.beforeModels": "เรียนรู้เพิ่มเติมเกี่ยวกับ",
|
||||
"home.faq.a7.p2.modelsLink": "โมเดลของเรา",
|
||||
"home.faq.a7.p2.and": "และ",
|
||||
"home.faq.a7.p2.shareLink": "หน้าแชร์",
|
||||
"home.faq.q8": "OpenCode เป็นโอเพนซอร์สหรือไม่?",
|
||||
"home.faq.a8.p1": "ใช่ OpenCode เป็นโอเพนซอร์สเต็มรูปแบบ ซอร์สโค้ดเปิดเผยต่อสาธารณะบน",
|
||||
"home.faq.a8.p2": "ภายใต้",
|
||||
"home.faq.a8.mitLicense": "MIT License",
|
||||
"home.faq.a8.p3":
|
||||
", \u0e0b\u0e36\u0e48\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e04\u0e27\u0e32\u0e21\u0e27\u0e48\u0e32\u0e43\u0e04\u0e23\u0e46\u0e01\u0e47\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 \u0e41\u0e01\u0e49\u0e44\u0e02 \u0e2b\u0e23\u0e37\u0e2d\u0e23\u0e48\u0e27\u0e21\u0e1e\u0e31\u0e12\u0e19\u0e32\u0e44\u0e14\u0e49 \u0e41\u0e25\u0e30\u0e04\u0e19\u0e43\u0e19\u0e0a\u0e38\u0e21\u0e0a\u0e19\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e1b\u0e34\u0e14 issue, \u0e2a\u0e48\u0e07 pull request \u0e41\u0e25\u0e30\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e44\u0e14\u0e49.",
|
||||
" ซึ่งหมายความว่าใครๆ ก็สามารถใช้ แก้ไข หรือร่วมพัฒนาได้ ทุกคนในชุมชนสามารถเปิด issue, ส่ง pull request และขยายฟังก์ชันการทำงานได้",
|
||||
|
||||
"home.zenCta.title":
|
||||
"\u0e40\u0e02\u0e49\u0e32\u0e16\u0e36\u0e07\u0e42\u0e21\u0e40\u0e14\u0e25\u0e17\u0e35\u0e48\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e16\u0e37\u0e2d\u0e44\u0e14\u0e49\u0e41\u0e25\u0e30\u0e1b\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e48\u0e07\u0e21\u0e32\u0e14\u0e35\u0e41\u0e25\u0e49\u0e27\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e40\u0e2d\u0e40\u0e08\u0e19\u0e15\u0e4c\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e04\u0e49\u0e14",
|
||||
"home.zenCta.title": "เข้าถึงโมเดลที่เชื่อถือได้และปรับแต่งมาแล้วสำหรับเอเจนต์เขียนโค้ด",
|
||||
"home.zenCta.body":
|
||||
"Zen \u0e43\u0e2b\u0e49\u0e04\u0e38\u0e13\u0e40\u0e02\u0e49\u0e32\u0e16\u0e36\u0e07\u0e0a\u0e38\u0e14\u0e42\u0e21\u0e40\u0e14\u0e25 AI \u0e17\u0e35\u0e48 OpenCode \u0e17\u0e14\u0e2a\u0e2d\u0e1a\u0e41\u0e25\u0e30\u0e40\u0e1b\u0e23\u0e35\u0e22\u0e1a\u0e40\u0e17\u0e35\u0e22\u0e1a\u0e1b\u0e23\u0e30\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e20\u0e32\u0e1e\u0e21\u0e32\u0e41\u0e25\u0e49\u0e27 \u0e42\u0e14\u0e22\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e40\u0e2d\u0e40\u0e08\u0e19\u0e15\u0e4c\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e04\u0e49\u0e14 \u0e44\u0e21\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e07\u0e27\u0e25\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e1b\u0e23\u0e30\u0e2aa\u0e34\u0e17\u0e18\u0e34\u0e20\u0e32\u0e1e\u0e41\u0e25\u0e30\u0e04\u0e38\u0e13\u0e20\u0e32\u0e1e\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e2a\u0e21\u0e48\u0e33\u0e40\u0e2a\u0e21\u0e2d\u0e23\u0e30\u0e2b\u0e27\u0e48\u0e32\u0e07\u0e1c\u0e39\u0e49\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23 \u0e43\u0e0a\u0e49\u0e42\u0e21\u0e40\u0e14\u0e25\u0e17\u0e35\u0e48\u0e1c\u0e48\u0e32\u0e19\u0e01\u0e32\u0e23\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e41\u0e25\u0e49\u0e27\u0e27\u0e48\u0e32\u0e43\u0e0a\u0e49\u0e44\u0e14\u0e49\u0e08\u0e23\u0e34\u0e07.",
|
||||
"home.zenCta.link":
|
||||
"\u0e40\u0e23\u0e35\u0e22\u0e19\u0e23\u0e39\u0e49\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a Zen",
|
||||
"Zen ให้คุณเข้าถึงชุดโมเดล AI ที่คัดสรรมาแล้ว ซึ่ง OpenCode ได้ทดสอบและทำเบนช์มาร์กโดยเฉพาะสำหรับเอเจนต์เขียนโค้ด ไม่ต้องกังวลเรื่องประสิทธิภาพและคุณภาพที่ไม่สม่ำเสมอจากผู้ให้บริการ ใช้โมเดลที่ผ่านการตรวจสอบแล้วว่าใช้งานได้จริง",
|
||||
"home.zenCta.link": "เรียนรู้เกี่ยวกับ Zen",
|
||||
|
||||
"zen.title":
|
||||
"OpenCode Zen | \u0e0a\u0e38\u0e14\u0e42\u0e21\u0e40\u0e14\u0e25\u0e17\u0e35\u0e48\u0e04\u0e31\u0e14\u0e2a\u0e23\u0e23\u0e21\u0e32\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e14\u0e35\u0e41\u0e25\u0e30\u0e1b\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e48\u0e07\u0e41\u0e25\u0e49\u0e27\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e40\u0e2d\u0e40\u0e08\u0e19\u0e15\u0e4c\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e04\u0e49\u0e14",
|
||||
"zen.hero.title":
|
||||
"\u0e40\u0e02\u0e49\u0e32\u0e16\u0e36\u0e07\u0e42\u0e21\u0e40\u0e14\u0e25\u0e17\u0e35\u0e48\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e16\u0e37\u0e2d\u0e44\u0e14\u0e49\u0e41\u0e25\u0e30\u0e1b\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e48\u0e07\u0e21\u0e32\u0e14\u0e35\u0e41\u0e25\u0e49\u0e27\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e40\u0e2d\u0e40\u0e08\u0e19\u0e15\u0e4c\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e04\u0e49\u0e14",
|
||||
"zen.title": "OpenCode Zen | ชุดโมเดลที่คัดสรรมาอย่างดี เชื่อถือได้ และปรับแต่งแล้วสำหรับเอเจนต์เขียนโค้ด",
|
||||
"zen.hero.title": "โมเดลที่ปรับแต่งมาอย่างดีและเชื่อถือได้สำหรับเอเจนต์เขียนโค้ด",
|
||||
"zen.hero.body":
|
||||
"Zen \u0e43\u0e2b\u0e49\u0e04\u0e38\u0e13\u0e40\u0e02\u0e49\u0e32\u0e16\u0e36\u0e07\u0e0a\u0e38\u0e14\u0e42\u0e21\u0e40\u0e14\u0e25 AI \u0e17\u0e35\u0e48 OpenCode \u0e17\u0e14\u0e2a\u0e2d\u0e1a\u0e41\u0e25\u0e30\u0e40\u0e1b\u0e23\u0e35\u0e22\u0e1a\u0e40\u0e17\u0e35\u0e22\u0e1a\u0e1b\u0e23\u0e30\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e20\u0e32\u0e1e\u0e21\u0e32\u0e41\u0e25\u0e49\u0e27 \u0e42\u0e14\u0e22\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e40\u0e2d\u0e40\u0e08\u0e19\u0e15\u0e4c\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e04\u0e49\u0e14 \u0e44\u0e21\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e07\u0e27\u0e25\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e1b\u0e23\u0e30\u0e2aa\u0e34\u0e17\u0e18\u0e34\u0e20\u0e32\u0e1e\u0e41\u0e25\u0e30\u0e04\u0e38\u0e13\u0e20\u0e32\u0e1e\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e2a\u0e21\u0e48\u0e33\u0e40\u0e2a\u0e21\u0e2d\u0e23\u0e30\u0e2b\u0e27\u0e48\u0e32\u0e07\u0e1c\u0e39\u0e49\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23 \u0e43\u0e0a\u0e49\u0e42\u0e21\u0e40\u0e14\u0e25\u0e17\u0e35\u0e48\u0e1c\u0e48\u0e32\u0e19\u0e01\u0e32\u0e23\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e41\u0e25\u0e49\u0e27\u0e27\u0e48\u0e32\u0e43\u0e0a\u0e49\u0e44\u0e14\u0e49\u0e08\u0e23\u0e34\u0e07.",
|
||||
"Zen ให้คุณเข้าถึงชุดโมเดล AI ที่คัดสรรมาแล้ว ซึ่ง OpenCode ได้ทดสอบและทำเบนช์มาร์กโดยเฉพาะสำหรับเอเจนต์เขียนโค้ด ไม่ต้องกังวลเรื่องประสิทธิภาพและคุณภาพที่ไม่สม่ำเสมอ ใช้โมเดลที่ผ่านการตรวจสอบแล้วว่าใช้งานได้จริง",
|
||||
|
||||
"zen.faq.q1": "OpenCode Zen \u0e04\u0e37\u0e2d\u0e2d\u0e30\u0e44\u0e23?",
|
||||
"zen.faq.q1": "OpenCode Zen คืออะไร?",
|
||||
"zen.faq.a1":
|
||||
"Zen \u0e04\u0e37\u0e2d\u0e0a\u0e38\u0e14\u0e42\u0e21\u0e40\u0e14\u0e25 AI \u0e17\u0e35\u0e48\u0e04\u0e31\u0e14\u0e2a\u0e23\u0e23\u0e21\u0e32\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e14\u0e35 \u0e1c\u0e48\u0e32\u0e19\u0e01\u0e32\u0e23\u0e17\u0e14\u0e2a\u0e2d\u0e1a\u0e41\u0e25\u0e30\u0e17\u0e33\u0e40\u0e1a\u0e19\u0e0a\u0e4c\u0e21\u0e32\u0e23\u0e4c\u0e01\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e40\u0e2d\u0e40\u0e08\u0e19\u0e15\u0e4c\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e04\u0e49\u0e14 \u0e42\u0e14\u0e22\u0e17\u0e35\u0e21\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e40\u0e1a\u0e37\u0e49\u0e2d\u0e07\u0e2b\u0e25\u0e31\u0e07 OpenCode",
|
||||
"zen.faq.q2":
|
||||
"\u0e2d\u0e30\u0e44\u0e23\u0e17\u0e33\u0e43\u0e2b\u0e49 Zen \u0e41\u0e21\u0e48\u0e19\u0e22\u0e33\u0e01\u0e27\u0e48\u0e32?",
|
||||
"Zen คือชุดโมเดล AI ที่คัดสรรมาอย่างดี ผ่านการทดสอบและทำเบนช์มาร์กสำหรับเอเจนต์เขียนโค้ด สร้างโดยทีมงานผู้อยู่เบื้องหลัง OpenCode",
|
||||
"zen.faq.q2": "อะไรทำให้ Zen แม่นยำกว่า?",
|
||||
"zen.faq.a2":
|
||||
"Zen \u0e43\u0e2b\u0e49\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e42\u0e21\u0e40\u0e14\u0e25\u0e17\u0e35\u0e48\u0e17\u0e14\u0e2a\u0e2d\u0e1a\u0e41\u0e25\u0e30\u0e17\u0e33\u0e40\u0e1a\u0e19\u0e0a\u0e4c\u0e21\u0e32\u0e23\u0e4c\u0e01\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e40\u0e2d\u0e40\u0e08\u0e19\u0e15\u0e4c\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e04\u0e49\u0e14\u0e42\u0e14\u0e22\u0e40\u0e09\u0e1e\u0e32\u0e30 \u0e04\u0e38\u0e13\u0e04\u0e07\u0e44\u0e21\u0e48\u0e43\u0e0a\u0e49\u0e21\u0e35\u0e14\u0e17\u0e32\u0e40\u0e19\u0e22\u0e15\u0e31\u0e14\u0e2a\u0e40\u0e15\u0e4a\u0e01 \u0e2d\u0e22\u0e48\u0e32\u0e43\u0e0a\u0e49\u0e42\u0e21\u0e40\u0e14\u0e25\u0e41\u0e22\u0e48\u0e46 \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e04\u0e49\u0e14",
|
||||
"zen.faq.q3": "Zen \u0e16\u0e39\u0e01\u0e01\u0e27\u0e48\u0e32\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48?",
|
||||
"Zen ให้บริการเฉพาะโมเดลที่ได้รับการทดสอบและทำเบนช์มาร์กสำหรับเอเจนต์เขียนโค้ดโดยเฉพาะ คุณคงไม่ใช้มีดทาเนยมาหั่นสเต็ก ดังนั้นอย่าใช้โมเดลคุณภาพต่ำสำหรับการเขียนโค้ด",
|
||||
"zen.faq.q3": "Zen ราคาถูกกว่าหรือไม่?",
|
||||
"zen.faq.a3":
|
||||
"Zen \u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e17\u0e33\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e01\u0e33\u0e44\u0e23 Zen \u0e2a\u0e48\u0e07\u0e1c\u0e48\u0e32\u0e19\u0e15\u0e49\u0e19\u0e17\u0e38\u0e19\u0e08\u0e32\u0e01\u0e1c\u0e39\u0e49\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e42\u0e21\u0e40\u0e14\u0e25\u0e21\u0e32\u0e16\u0e36\u0e07\u0e04\u0e38\u0e13 \u0e22\u0e34\u0e48\u0e07 Zen \u0e16\u0e39\u0e01\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e21\u0e32\u0e01\u0e40\u0e17\u0e48\u0e32\u0e44\u0e23 OpenCode \u0e01\u0e47\u0e22\u0e34\u0e48\u0e07\u0e15\u0e48\u0e2d\u0e23\u0e2d\u0e07\u0e40\u0e23\u0e15\u0e23\u0e32\u0e04\u0e32\u0e17\u0e35\u0e48\u0e14\u0e35\u0e01\u0e27\u0e48\u0e32\u0e41\u0e25\u0e30\u0e2a\u0e48\u0e07\u0e15\u0e48\u0e2d\u0e43\u0e2b\u0e49\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e21\u0e32\u0e01\u0e02\u0e36\u0e49\u0e19",
|
||||
"zen.faq.q4": "Zen \u0e23\u0e32\u0e04\u0e32\u0e40\u0e17\u0e48\u0e32\u0e44\u0e23?",
|
||||
"Zen ไม่ได้แสวงหากำไร Zen ส่งผ่านต้นทุนจากผู้ให้บริการโมเดลมาถึงคุณ ยิ่งมีการใช้งาน Zen มากเท่าไหร่ OpenCode ก็ยิ่งสามารถต่อรองเรตราคาที่ดีกว่าและส่งต่อให้คุณได้มากขึ้นเท่านั้น",
|
||||
"zen.faq.q4": "Zen ราคาเท่าไหร่?",
|
||||
"zen.faq.a4.p1.beforePricing": "Zen",
|
||||
"zen.faq.a4.p1.pricingLink":
|
||||
"\u0e04\u0e34\u0e14\u0e04\u0e48\u0e32\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e15\u0e48\u0e2d\u0e04\u0e33\u0e02\u0e2d",
|
||||
"zen.faq.a4.p1.afterPricing":
|
||||
"\u0e42\u0e14\u0e22\u0e44\u0e21\u0e48\u0e21\u0e35\u0e21\u0e32\u0e23\u0e4c\u0e01\u0e2d\u0e31\u0e1b \u0e14\u0e31\u0e07\u0e19\u0e31\u0e49\u0e19\u0e04\u0e38\u0e13\u0e08\u0e48\u0e32\u0e22\u0e40\u0e17\u0e48\u0e32\u0e01\u0e31\u0e1a\u0e17\u0e35\u0e48\u0e1c\u0e39\u0e49\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e42\u0e21\u0e40\u0e14\u0e25\u0e40\u0e23\u0e35\u0e22\u0e01\u0e40\u0e01\u0e47\u0e1a",
|
||||
"zen.faq.a4.p1.pricingLink": "คิดค่าบริการต่อคำขอ",
|
||||
"zen.faq.a4.p1.afterPricing": "โดยไม่มีการบวกเพิ่ม ดังนั้นคุณจ่ายเท่ากับที่ผู้ให้บริการโมเดลเรียกเก็บ",
|
||||
"zen.faq.a4.p2.beforeAccount":
|
||||
"\u0e04\u0e48\u0e32\u0e43\u0e0a\u0e49\u0e08\u0e48\u0e32\u0e22\u0e23\u0e27\u0e21\u0e02\u0e36\u0e49\u0e19\u0e2d\u0e22\u0e39\u0e48\u0e01\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 \u0e41\u0e25\u0e30\u0e04\u0e38\u0e13\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e15\u0e31\u0e49\u0e07\u0e25\u0e34\u0e21\u0e34\u0e15\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e08\u0e48\u0e32\u0e22\u0e23\u0e32\u0e22\u0e40\u0e14\u0e37\u0e2d\u0e19\u0e44\u0e14\u0e49\u0e43\u0e19",
|
||||
"zen.faq.a4.p2.accountLink": "\u0e1a\u0e31\u0e0d\u0e0a\u0e35\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13",
|
||||
"ค่าใช้จ่ายรวมของคุณขึ้นอยู่กับการใช้งาน และคุณสามารถตั้งวงเงินการใช้จ่ายรายเดือนได้ใน",
|
||||
"zen.faq.a4.p2.accountLink": "บัญชีของคุณ",
|
||||
"zen.faq.a4.p3":
|
||||
"\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e04\u0e23\u0e2d\u0e1a\u0e04\u0e25\u0e38\u0e21\u0e15\u0e49\u0e19\u0e17\u0e38\u0e19 OpenCode \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e1e\u0e35\u0e22\u0e07\u0e04\u0e48\u0e32\u0e18\u0e23\u0e23\u0e21\u0e40\u0e19\u0e35\u0e22\u0e21\u0e01\u0e32\u0e23\u0e1b\u0e23\u0e30\u0e21\u0e27\u0e25\u0e1c\u0e25\u0e01\u0e32\u0e23\u0e0a\u0e33\u0e23\u0e30\u0e40\u0e07\u0e34\u0e19\u0e40\u0e25\u0e47\u0e01\u0e19\u0e49\u0e2d\u0e22 $1.23 \u0e15\u0e48\u0e2d\u0e01\u0e32\u0e23\u0e40\u0e15\u0e34\u0e21\u0e22\u0e2d\u0e14 $20",
|
||||
"zen.faq.q5":
|
||||
"\u0e41\u0e25\u0e49\u0e27\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e41\u0e25\u0e30\u0e04\u0e27\u0e32\u0e21\u0e40\u0e1b\u0e47\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e15\u0e31\u0e27\u0e25\u0e48\u0e30?",
|
||||
"เพื่อครอบคลุมต้นทุน OpenCode คิดค่าธรรมเนียมการประมวลผลการชำระเงินเพียงเล็กน้อย $1.23 ต่อการเติมเงิน $20",
|
||||
"zen.faq.q5": "แล้วเรื่องข้อมูลและความเป็นส่วนตัวล่ะ?",
|
||||
"zen.faq.a5.beforeExceptions":
|
||||
"\u0e42\u0e21\u0e40\u0e14\u0e25 Zen \u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14\u0e42\u0e2e\u0e2a\u0e15\u0e4c\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19\u0e2a\u0e2b\u0e23\u0e31\u0e10\u0e2f \u0e1c\u0e39\u0e49\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e21\u0e35\u0e19\u0e42\u0e22\u0e1a\u0e32\u0e22\u0e44\u0e21\u0e48\u0e40\u0e01\u0e47\u0e1a\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e41\u0e25\u0e30\u0e44\u0e21\u0e48\u0e43\u0e0a\u0e49\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e1d\u0e36\u0e01\u0e42\u0e21\u0e40\u0e14\u0e25 \u0e42\u0e14\u0e22\u0e21\u0e35",
|
||||
"zen.faq.a5.exceptionsLink":
|
||||
"\u0e02\u0e49\u0e2d\u0e22\u0e01\u0e40\u0e27\u0e49\u0e19\u0e14\u0e31\u0e07\u0e15\u0e48\u0e2d\u0e44\u0e1b\u0e19\u0e35\u0e49",
|
||||
"zen.faq.q6":
|
||||
"\u0e09\u0e31\u0e19\u0e15\u0e31\u0e49\u0e07\u0e25\u0e34\u0e21\u0e34\u0e15\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e08\u0e48\u0e32\u0e22\u0e44\u0e14\u0e49\u0e44\u0e2b\u0e21?",
|
||||
"zen.faq.a6":
|
||||
"\u0e44\u0e14\u0e49 \u0e04\u0e38\u0e13\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e15\u0e31\u0e49\u0e07\u0e25\u0e34\u0e21\u0e34\u0e15\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e08\u0e48\u0e32\u0e22\u0e23\u0e32\u0e22\u0e40\u0e14\u0e37\u0e2d\u0e19\u0e44\u0e14\u0e49\u0e43\u0e19\u0e1a\u0e31\u0e0d\u0e0a\u0e35\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13",
|
||||
"zen.faq.q7": "\u0e09\u0e31\u0e19\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01\u0e44\u0e14\u0e49\u0e44\u0e2b\u0e21?",
|
||||
"zen.faq.a7":
|
||||
"\u0e44\u0e14\u0e49 \u0e04\u0e38\u0e13\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e40\u0e23\u0e35\u0e22\u0e01\u0e40\u0e01\u0e47\u0e1a\u0e40\u0e07\u0e34\u0e19\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e44\u0e23\u0e01\u0e47\u0e44\u0e14\u0e49\u0e41\u0e25\u0e30\u0e43\u0e0a\u0e49\u0e22\u0e2d\u0e14\u0e04\u0e07\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e2d\u0e22\u0e39\u0e48",
|
||||
"zen.faq.q8":
|
||||
"\u0e09\u0e31\u0e19\u0e43\u0e0a\u0e49 Zen \u0e01\u0e31\u0e1a\u0e40\u0e2d\u0e40\u0e08\u0e19\u0e15\u0e4c\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e04\u0e49\u0e14\u0e2d\u0e37\u0e48\u0e19\u0e44\u0e14\u0e49\u0e44\u0e2b\u0e21?",
|
||||
"โมเดล Zen ทั้งหมดโฮสต์ในสหรัฐอเมริกา ผู้ให้บริการปฏิบัติตามนโยบายไม่เก็บรักษาข้อมูล (zero-retention policy) และไม่ใช้ข้อมูลของคุณสำหรับการฝึกโมเดล โดยมี",
|
||||
"zen.faq.a5.exceptionsLink": "ข้อยกเว้นดังนี้",
|
||||
"zen.faq.q6": "ฉันสามารถตั้งวงเงินการใช้จ่ายได้หรือไม่?",
|
||||
"zen.faq.a6": "ได้ คุณสามารถตั้งวงเงินการใช้จ่ายรายเดือนได้ในบัญชีของคุณ",
|
||||
"zen.faq.q7": "ฉันสามารถยกเลิกได้หรือไม่?",
|
||||
"zen.faq.a7": "ได้ คุณสามารถปิดการเรียกเก็บเงินได้ตลอดเวลาและใช้ยอดเงินคงเหลือของคุณจนหมด",
|
||||
"zen.faq.q8": "ฉันสามารถใช้ Zen กับเอเจนต์เขียนโค้ดอื่นได้หรือไม่?",
|
||||
"zen.faq.a8":
|
||||
"\u0e41\u0e21\u0e49 Zen \u0e08\u0e30\u0e17\u0e33\u0e07\u0e32\u0e19\u0e44\u0e14\u0e49\u0e14\u0e35\u0e01\u0e31\u0e1a OpenCode \u0e41\u0e15\u0e48\u0e04\u0e38\u0e13\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e0a\u0e49 Zen \u0e01\u0e31\u0e1a\u0e40\u0e2d\u0e40\u0e08\u0e19\u0e15\u0e4c\u0e43\u0e14\u0e01\u0e47\u0e44\u0e14\u0e49 \u0e17\u0e33\u0e15\u0e32\u0e21\u0e04\u0e33\u0e41\u0e19\u0e30\u0e19\u0e33\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e43\u0e19\u0e40\u0e2d\u0e40\u0e08\u0e19\u0e15\u0e4c\u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e43\u0e0a\u0e49\u0e2d\u0e22\u0e39\u0e48",
|
||||
"แม้ว่า Zen จะทำงานได้ดีเยี่ยมกับ OpenCode แต่คุณสามารถใช้ Zen กับเอเจนต์ใดก็ได้ เพียงทำตามคำแนะนำการตั้งค่าในเอเจนต์เขียนโค้ดที่คุณต้องการ",
|
||||
|
||||
"download.title": "OpenCode | \u0e14\u0e32\u0e27\u0e19\u0e4c\u0e42\u0e2b\u0e25\u0e14",
|
||||
"zen.cta.start": "เริ่มต้นกับ Zen",
|
||||
"zen.pricing.title": "เพิ่ม $20 จ่ายตามยอดคงเหลือ",
|
||||
"zen.pricing.fee": "(+ค่าธรรมเนียมการดำเนินการบัตร $1.23)",
|
||||
"zen.pricing.body": "ใช้ร่วมกับตัวแทนใดๆ กำหนดวงเงินการใช้จ่ายรายเดือน ยกเลิกได้ตลอดเวลา",
|
||||
"zen.problem.title": "Zen กำลังแก้ปัญหาอะไรอยู่?",
|
||||
"zen.cta.start": "เริ่มต้นใช้งาน Zen",
|
||||
"zen.pricing.title": "เติมเงิน $20 แบบ Pay as you go",
|
||||
"zen.pricing.fee": "(+ค่าธรรมเนียมประมวลผลบัตร $1.23)",
|
||||
"zen.pricing.body": "ใช้ได้กับทุกเอเจนต์ ตั้งวงเงินรายเดือนได้ ยกเลิกได้ตลอดเวลา",
|
||||
"zen.problem.title": "Zen กำลังแก้ปัญหาอะไร?",
|
||||
"zen.problem.body":
|
||||
"มีหลายรุ่นให้เลือก แต่มีเพียงไม่กี่รุ่นเท่านั้นที่ทำงานได้ดีกับเอเจนต์การเขียนโค้ด ผู้ให้บริการส่วนใหญ่กำหนดค่าให้แตกต่างออกไปด้วยผลลัพธ์ที่แตกต่างกัน",
|
||||
"มีโมเดลมากมายให้เลือก แต่มีเพียงไม่กี่ตัวที่ทำงานได้ดีกับเอเจนต์เขียนโค้ด ผู้ให้บริการส่วนใหญ่กำหนดค่าแตกต่างกันไปซึ่งให้ผลลัพธ์ที่หลากหลาย",
|
||||
"zen.problem.subtitle": "เรากำลังแก้ไขปัญหานี้สำหรับทุกคน ไม่ใช่แค่ผู้ใช้ OpenCode เท่านั้น",
|
||||
"zen.problem.item1": "ทดสอบโมเดลที่เลือกและปรึกษาทีมงาน",
|
||||
"zen.problem.item2": "ทำงานร่วมกับผู้ให้บริการเพื่อให้แน่ใจว่ามีการจัดส่งอย่างถูกต้อง",
|
||||
"zen.problem.item3": "การเปรียบเทียบชุดค่าผสมของผู้ให้บริการโมเดลทั้งหมดที่เราแนะนำ",
|
||||
"zen.problem.item1": "ทดสอบโมเดลที่คัดเลือกมาและปรึกษากับทีมของโมเดลนั้นๆ",
|
||||
"zen.problem.item2": "ทำงานร่วมกับผู้ให้บริการเพื่อให้มั่นใจว่าโมเดลถูกส่งมอบอย่างถูกต้อง",
|
||||
"zen.problem.item3": "ทำเบนช์มาร์กทุกการจับคู่ระหว่างโมเดลและผู้ให้บริการที่เราแนะนำ",
|
||||
"zen.how.title": "Zen ทำงานอย่างไร",
|
||||
"zen.how.body": "แม้ว่าเราจะแนะนำให้คุณใช้ Zen กับ OpenCode แต่คุณสามารถใช้ Zen กับตัวแทนใดก็ได้",
|
||||
"zen.how.step1.title": "ลงทะเบียนและเพิ่มยอดคงเหลือ $20",
|
||||
"zen.how.step1.beforeLink": "ปฏิบัติตาม",
|
||||
"zen.how.step1.link": "คำแนะนำในการตั้งค่า",
|
||||
"zen.how.step2.title": "ใช้ Zen ด้วยการกำหนดราคาที่โปร่งใส",
|
||||
"zen.how.step2.link": "จ่ายตามคำขอ",
|
||||
"zen.how.step2.afterLink": "โดยไม่มีมาร์กอัป",
|
||||
"zen.how.body": "แม้เราจะแนะนำให้คุณใช้ Zen กับ OpenCode แต่คุณสามารถใช้ Zen กับเอเจนต์ใดก็ได้",
|
||||
"zen.how.step1.title": "ลงทะเบียนและเติมเงิน $20",
|
||||
"zen.how.step1.beforeLink": "ทำตาม",
|
||||
"zen.how.step1.link": "คำแนะนำการตั้งค่า",
|
||||
"zen.how.step2.title": "ใช้ Zen ด้วยราคาที่โปร่งใส",
|
||||
"zen.how.step2.link": "จ่ายตามคำขอ (pay per request)",
|
||||
"zen.how.step2.afterLink": "โดยไม่มีการบวกเพิ่ม",
|
||||
"zen.how.step3.title": "เติมเงินอัตโนมัติ",
|
||||
"zen.how.step3.body": "เมื่อยอดเงินของคุณถึง $5 เราจะเพิ่ม $20 โดยอัตโนมัติ",
|
||||
"zen.privacy.title": "ความเป็นส่วนตัวของคุณเป็นสิ่งสำคัญสำหรับเรา",
|
||||
"zen.how.step3.body": "เมื่อยอดเงินของคุณเหลือ $5 เราจะเติมเงิน $20 ให้โดยอัตโนมัติ",
|
||||
"zen.privacy.title": "ความเป็นส่วนตัวของคุณสำคัญสำหรับเรา",
|
||||
"zen.privacy.beforeExceptions":
|
||||
"โมเดล Zen ทั้งหมดโฮสต์ในสหรัฐอเมริกา ผู้ให้บริการปฏิบัติตามนโยบายการเก็บรักษาเป็นศูนย์และไม่ใช้ข้อมูลของคุณสำหรับการฝึกโมเดลด้วย",
|
||||
"zen.privacy.exceptionsLink": "ข้อยกเว้นต่อไปนี้",
|
||||
"download.meta.description":
|
||||
"\u0e14\u0e32\u0e27\u0e19\u0e4c\u0e42\u0e2b\u0e25\u0e14 OpenCode \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a macOS, Windows \u0e41\u0e25\u0e30 Linux",
|
||||
"download.hero.title": "\u0e14\u0e32\u0e27\u0e19\u0e4c\u0e42\u0e2b\u0e25\u0e14 OpenCode",
|
||||
"download.hero.subtitle":
|
||||
"\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e43\u0e19\u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e0a\u0e31\u0e19 Beta \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a macOS, Windows \u0e41\u0e25\u0e30 Linux",
|
||||
"download.hero.button":
|
||||
"\u0e14\u0e32\u0e27\u0e19\u0e4c\u0e42\u0e2b\u0e25\u0e14\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a {{os}}",
|
||||
"download.section.terminal": "OpenCode Terminal",
|
||||
"download.section.desktop": "OpenCode Desktop (Beta)",
|
||||
"download.section.extensions": "\u0e2a\u0e48\u0e27\u0e19\u0e02\u0e22\u0e32\u0e22 OpenCode",
|
||||
"download.section.integrations": "\u0e01\u0e32\u0e23\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d OpenCode",
|
||||
"download.action.download": "\u0e14\u0e32\u0e27\u0e19\u0e4c\u0e42\u0e2b\u0e25\u0e14",
|
||||
"download.action.install": "\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07",
|
||||
"download.platform.macosAppleSilicon": "macOS (Apple Silicon)",
|
||||
"download.platform.macosIntel": "macOS (Intel)",
|
||||
"download.platform.windowsX64": "Windows (x64)",
|
||||
"download.platform.linuxDeb": "Linux (.deb)",
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
"download.faq.a3.beforeLocal":
|
||||
"\u0e44\u0e21\u0e48\u0e08\u0e33\u0e40\u0e1b\u0e47\u0e19\u0e40\u0e2a\u0e21\u0e2d\u0e44\u0e1b \u0e41\u0e15\u0e48\u0e01\u0e47\u0e19\u0e48\u0e32\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e21\u0e35 \u0e04\u0e38\u0e13\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e21\u0e35\u0e01\u0e32\u0e23\u0e2a\u0e21\u0e31\u0e04\u0e23\u0e2a\u0e21\u0e32\u0e0a\u0e34\u0e01 AI \u0e2b\u0e32\u0e01\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d OpenCode \u0e01\u0e31\u0e1a\u0e1c\u0e39\u0e49\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e41\u0e1a\u0e1a\u0e21\u0e35\u0e04\u0e48\u0e32\u0e43\u0e0a\u0e49\u0e08\u0e48\u0e32\u0e22 \u0e41\u0e15\u0e48\u0e04\u0e38\u0e13\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e0a\u0e49",
|
||||
"download.faq.a3.localLink": "\u0e42\u0e21\u0e40\u0e14\u0e25\u0e43\u0e19\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07",
|
||||
"download.faq.a3.afterLocal.beforeZen":
|
||||
"\u0e44\u0e14\u0e49\u0e1f\u0e23\u0e35 \u0e41\u0e21\u0e49\u0e27\u0e48\u0e32\u0e40\u0e23\u0e32\u0e08\u0e30\u0e41\u0e19\u0e30\u0e19\u0e33\u0e43\u0e2b\u0e49\u0e43\u0e0a\u0e49",
|
||||
"download.faq.a3.afterZen":
|
||||
" \u0e41\u0e15\u0e48 OpenCode \u0e01\u0e47\u0e17\u0e33\u0e07\u0e32\u0e19\u0e44\u0e14\u0e49\u0e01\u0e31\u0e1a\u0e1c\u0e39\u0e49\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e22\u0e2d\u0e14\u0e19\u0e34\u0e22\u0e21\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 \u0e40\u0e0a\u0e48\u0e19 OpenAI, Anthropic, xAI \u0e40\u0e1b\u0e47\u0e19\u0e15\u0e49\u0e19.",
|
||||
"download.faq.a5.p1": "OpenCode \u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e44\u0e14\u0e49\u0e1f\u0e23\u0e35 100%.",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"\u0e04\u0e48\u0e32\u0e43\u0e0a\u0e49\u0e08\u0e48\u0e32\u0e22\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21\u0e08\u0e30\u0e21\u0e32\u0e08\u0e32\u0e01\u0e01\u0e32\u0e23\u0e2a\u0e21\u0e31\u0e04\u0e23\u0e2a\u0e21\u0e32\u0e0a\u0e34\u0e01\u0e01\u0e31\u0e1a\u0e1c\u0e39\u0e49\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e42\u0e21\u0e40\u0e14\u0e25\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 \u0e41\u0e21\u0e49\u0e27\u0e48\u0e32 OpenCode \u0e08\u0e30\u0e17\u0e33\u0e07\u0e32\u0e19\u0e44\u0e14\u0e49\u0e01\u0e31\u0e1a\u0e1c\u0e39\u0e49\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e42\u0e21\u0e40\u0e14\u0e25\u0e43\u0e14\u0e46 \u0e41\u0e15\u0e48\u0e40\u0e23\u0e32\u0e41\u0e19\u0e30\u0e19\u0e33\u0e43\u0e2b\u0e49\u0e43\u0e0a\u0e49",
|
||||
"download.faq.a5.p2.afterZen": ".",
|
||||
"download.faq.a6.p1":
|
||||
"\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e41\u0e25\u0e30\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e2a\u0e48\u0e27\u0e19\u0e15\u0e31\u0e27\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e08\u0e30\u0e16\u0e39\u0e01\u0e08\u0e31\u0e14\u0e40\u0e01\u0e47\u0e1a\u0e01\u0e47\u0e15\u0e48\u0e2d\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e04\u0e38\u0e13\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e41\u0e0a\u0e23\u0e4c\u0e43\u0e19 OpenCode \u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19.",
|
||||
"download.faq.a6.p2.beforeShare":
|
||||
"\u0e40\u0e23\u0e35\u0e22\u0e19\u0e23\u0e39\u0e49\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a",
|
||||
"download.faq.a6.shareLink": "\u0e2b\u0e19\u0e49\u0e32\u0e41\u0e0a\u0e23\u0e4c",
|
||||
"โมเดล Zen ทั้งหมดโฮสต์ในสหรัฐอเมริกา ผู้ให้บริการปฏิบัติตามนโยบายไม่เก็บรักษาข้อมูล (zero-retention policy) และไม่ใช้ข้อมูลของคุณสำหรับการฝึกโมเดล โดยมี",
|
||||
"zen.privacy.exceptionsLink": "ข้อยกเว้นดังนี้",
|
||||
|
||||
"enterprise.title":
|
||||
"OpenCode | \u0e42\u0e0b\u0e25\u0e39\u0e0a\u0e31\u0e19\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13",
|
||||
"enterprise.meta.description":
|
||||
"\u0e15\u0e34\u0e14\u0e15\u0e48\u0e2d OpenCode \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e42\u0e0b\u0e25\u0e39\u0e0a\u0e31\u0e19\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23",
|
||||
"enterprise.hero.title":
|
||||
"\u0e42\u0e04\u0e49\u0e14\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e40\u0e1b\u0e47\u0e19\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13",
|
||||
"enterprise.hero.body1":
|
||||
"OpenCode \u0e17\u0e33\u0e07\u0e32\u0e19\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e1b\u0e25\u0e2d\u0e14\u0e20\u0e31\u0e22\u0e20\u0e32\u0e22\u0e43\u0e19\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 \u0e42\u0e14\u0e22\u0e44\u0e21\u0e48\u0e08\u0e31\u0e14\u0e40\u0e01\u0e47\u0e1a\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e2b\u0e23\u0e37\u0e2d\u0e1a\u0e23\u0e34\u0e1a\u0e17 \u0e41\u0e25\u0e30\u0e44\u0e21\u0e48\u0e21\u0e35\u0e02\u0e49\u0e2d\u0e08\u0e33\u0e01\u0e31\u0e14\u0e14\u0e49\u0e32\u0e19\u0e44\u0e25\u0e40\u0e0b\u0e19\u0e2a\u0e4c\u0e2b\u0e23\u0e37\u0e2d\u0e01\u0e32\u0e23\u0e2d\u0e49\u0e32\u0e07\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e4c\u0e04\u0e27\u0e32\u0e21\u0e40\u0e1b\u0e47\u0e19\u0e40\u0e08\u0e49\u0e32\u0e02\u0e2d\u0e07 \u0e40\u0e23\u0e34\u0e48\u0e21\u0e17\u0e14\u0e25\u0e2d\u0e07\u0e43\u0e0a\u0e49\u0e01\u0e31\u0e1a\u0e17\u0e35\u0e21\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 \u0e41\u0e25\u0e49\u0e27\u0e19\u0e33\u0e44\u0e1b\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e17\u0e31\u0e48\u0e27\u0e17\u0e31\u0e49\u0e07\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23\u0e42\u0e14\u0e22\u0e1c\u0e2a\u0e32\u0e19\u0e23\u0e27\u0e21\u0e01\u0e31\u0e1a SSO \u0e41\u0e25\u0e30\u0e40\u0e01\u0e15\u0e40\u0e27\u0e22\u0e4c AI \u0e20\u0e32\u0e22\u0e43\u0e19\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13",
|
||||
"enterprise.hero.body2":
|
||||
"\u0e1a\u0e2d\u0e01\u0e40\u0e23\u0e32\u0e27\u0e48\u0e32\u0e40\u0e23\u0e32\u0e0a\u0e48\u0e27\u0e22\u0e2d\u0e30\u0e44\u0e23\u0e44\u0e14\u0e49\u0e1a\u0e49\u0e32\u0e07",
|
||||
"enterprise.form.name.label": "\u0e0a\u0e37\u0e48\u0e2d-\u0e19\u0e32\u0e21\u0e2a\u0e01\u0e38\u0e25",
|
||||
"enterprise.form.name.placeholder": "\u0e40\u0e08\u0e1f\u0e1f\u0e4c \u0e40\u0e1a\u0e42\u0e0b\u0e2a",
|
||||
"enterprise.form.role.label": "\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07",
|
||||
"enterprise.form.role.placeholder":
|
||||
"\u0e1b\u0e23\u0e30\u0e18\u0e32\u0e19\u0e01\u0e23\u0e23\u0e21\u0e01\u0e32\u0e23\u0e1a\u0e23\u0e34\u0e2b\u0e32\u0e23",
|
||||
"enterprise.form.email.label": "\u0e2d\u0e35\u0e40\u0e21\u0e25\u0e1a\u0e23\u0e34\u0e29\u0e31\u0e17",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label":
|
||||
"\u0e04\u0e38\u0e13\u0e01\u0e33\u0e25\u0e31\u0e07\u0e1e\u0e22\u0e32\u0e22\u0e32\u0e21\u0e41\u0e01\u0e49\u0e1b\u0e31\u0e0d\u0e2b\u0e32\u0e2d\u0e30\u0e44\u0e23\u0e2d\u0e22\u0e39\u0e48?",
|
||||
"enterprise.form.message.placeholder":
|
||||
"\u0e40\u0e23\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07...",
|
||||
"enterprise.form.send": "\u0e2a\u0e48\u0e07",
|
||||
"enterprise.form.sending": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e2a\u0e48\u0e07...",
|
||||
"enterprise.form.success":
|
||||
"\u0e2a\u0e48\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e41\u0e25\u0e49\u0e27 \u0e40\u0e23\u0e32\u0e08\u0e30\u0e15\u0e34\u0e14\u0e15\u0e48\u0e2d\u0e01\u0e25\u0e31\u0e1a\u0e40\u0e23\u0e47\u0e27\u0e46 \u0e19\u0e35\u0e49",
|
||||
"enterprise.faq.title": "\u0e04\u0e33\u0e16\u0e32\u0e21\u0e17\u0e35\u0e48\u0e1e\u0e1a\u0e1a\u0e48\u0e2d\u0e22",
|
||||
"enterprise.faq.q1": "OpenCode Enterprise \u0e04\u0e37\u0e2d\u0e2d\u0e30\u0e44\u0e23?",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23\u0e17\u0e35\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e43\u0e2b\u0e49\u0e21\u0e31\u0e48\u0e19\u0e43\u0e08\u0e27\u0e48\u0e32\u0e42\u0e04\u0e49\u0e14\u0e41\u0e25\u0e30\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e08\u0e30\u0e44\u0e21\u0e48\u0e2d\u0e2d\u0e01\u0e19\u0e2d\u0e01\u0e42\u0e04\u0e23\u0e07\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e1e\u0e37\u0e49\u0e19\u0e10\u0e32\u0e19\u0e02\u0e2d\u0e07\u0e15\u0e19\u0e40\u0e2d\u0e07 \u0e17\u0e33\u0e44\u0e14\u0e49\u0e42\u0e14\u0e22\u0e43\u0e0a\u0e49\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e41\u0e1a\u0e1a\u0e28\u0e39\u0e19\u0e22\u0e4c\u0e01\u0e25\u0e32\u0e07\u0e17\u0e35\u0e48\u0e1c\u0e2a\u0e32\u0e19\u0e23\u0e27\u0e21\u0e01\u0e31\u0e1a SSO \u0e41\u0e25\u0e30\u0e40\u0e01\u0e15\u0e40\u0e27\u0e22\u0e4c AI \u0e20\u0e32\u0e22\u0e43\u0e19\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13",
|
||||
"enterprise.faq.q2":
|
||||
"\u0e08\u0e30\u0e40\u0e23\u0e34\u0e48\u0e21\u0e43\u0e0a\u0e49 OpenCode Enterprise \u0e2d\u0e22\u0e48\u0e32\u0e07\u0e44\u0e23?",
|
||||
"enterprise.faq.a2":
|
||||
"\u0e40\u0e23\u0e34\u0e48\u0e21\u0e08\u0e32\u0e01\u0e01\u0e32\u0e23\u0e17\u0e14\u0e25\u0e2d\u0e07\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e20\u0e32\u0e22\u0e43\u0e19\u0e01\u0e31\u0e1a\u0e17\u0e35\u0e21\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e40\u0e25\u0e22 \u0e42\u0e14\u0e22\u0e04\u0e48\u0e32\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19 OpenCode \u0e44\u0e21\u0e48\u0e08\u0e31\u0e14\u0e40\u0e01\u0e47\u0e1a\u0e42\u0e04\u0e49\u0e14\u0e2b\u0e23\u0e37\u0e2d\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e1a\u0e23\u0e34\u0e1a\u0e17\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 \u0e17\u0e33\u0e43\u0e2b\u0e49\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19\u0e44\u0e14\u0e49\u0e07\u0e48\u0e32\u0e22 \u0e08\u0e32\u0e01\u0e19\u0e31\u0e49\u0e19\u0e15\u0e34\u0e14\u0e15\u0e48\u0e2d\u0e40\u0e23\u0e32\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e1e\u0e39\u0e14\u0e04\u0e38\u0e22\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e23\u0e32\u0e04\u0e32\u0e41\u0e25\u0e30\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e01\u0e32\u0e23\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19",
|
||||
"enterprise.faq.q3":
|
||||
"\u0e01\u0e32\u0e23\u0e04\u0e34\u0e14\u0e23\u0e32\u0e04\u0e32\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e44\u0e23?",
|
||||
"enterprise.faq.a3":
|
||||
"\u0e40\u0e23\u0e32\u0e21\u0e35\u0e01\u0e32\u0e23\u0e04\u0e34\u0e14\u0e23\u0e32\u0e04\u0e32\u0e41\u0e1a\u0e1a\u0e15\u0e48\u0e2d\u0e17\u0e35\u0e48\u0e19\u0e31\u0e48\u0e07 (per-seat) \u0e2b\u0e32\u0e01\u0e04\u0e38\u0e13\u0e21\u0e35\u0e40\u0e01\u0e15\u0e40\u0e27\u0e22\u0e4c LLM \u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e40\u0e2d\u0e07 \u0e40\u0e23\u0e32\u0e08\u0e30\u0e44\u0e21\u0e48\u0e04\u0e34\u0e14\u0e04\u0e48\u0e32\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e15\u0e32\u0e21\u0e08\u0e33\u0e19\u0e27\u0e19\u0e42\u0e17\u0e40\u0e04\u0e19\u0e17\u0e35\u0e48\u0e43\u0e0a\u0e49 \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21 \u0e42\u0e1b\u0e23\u0e14\u0e15\u0e34\u0e14\u0e15\u0e48\u0e2d\u0e40\u0e23\u0e32\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e02\u0e2d\u0e43\u0e1a\u0e40\u0e2a\u0e19\u0e2d\u0e23\u0e32\u0e04\u0e32\u0e41\u0e1a\u0e1a\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e2d\u0e07\u0e15\u0e32\u0e21\u0e04\u0e27\u0e32\u0e21\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e02\u0e2d\u0e07\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13",
|
||||
"enterprise.faq.q4":
|
||||
"\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e02\u0e2d\u0e07\u0e09\u0e31\u0e19\u0e1b\u0e25\u0e2d\u0e14\u0e20\u0e31\u0e22\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e43\u0e0a\u0e49 OpenCode Enterprise \u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48?",
|
||||
"enterprise.faq.a4":
|
||||
"\u0e43\u0e0a\u0e48 OpenCode \u0e44\u0e21\u0e48\u0e08\u0e31\u0e14\u0e40\u0e01\u0e47\u0e1a\u0e42\u0e04\u0e49\u0e14\u0e2b\u0e23\u0e37\u0e2d\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e1a\u0e23\u0e34\u0e1a\u0e17\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 \u0e01\u0e32\u0e23\u0e1b\u0e23\u0e30\u0e21\u0e27\u0e25\u0e1c\u0e25\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14\u0e40\u0e01\u0e34\u0e14\u0e02\u0e36\u0e49\u0e19\u0e43\u0e19\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e23\u0e37\u0e2d\u0e1c\u0e48\u0e32\u0e19\u0e01\u0e32\u0e23\u0e40\u0e23\u0e35\u0e22\u0e01 API \u0e42\u0e14\u0e22\u0e15\u0e23\u0e07\u0e44\u0e1b\u0e22\u0e31\u0e07\u0e1c\u0e39\u0e49\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23 AI \u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 \u0e14\u0e49\u0e27\u0e22\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e41\u0e1a\u0e1a\u0e28\u0e39\u0e19\u0e22\u0e4c\u0e01\u0e25\u0e32\u0e07\u0e41\u0e25\u0e30\u0e01\u0e32\u0e23\u0e1c\u0e2a\u0e32\u0e19\u0e23\u0e27\u0e21 SSO \u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e08\u0e30\u0e22\u0e31\u0e07\u0e04\u0e07\u0e1b\u0e25\u0e2d\u0e14\u0e20\u0e31\u0e22\u0e2d\u0e22\u0e39\u0e48\u0e20\u0e32\u0e22\u0e43\u0e19\u0e42\u0e04\u0e23\u0e07\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e1e\u0e37\u0e49\u0e19\u0e10\u0e32\u0e19\u0e02\u0e2d\u0e07\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23",
|
||||
"black.meta.title": "OpenCode Black | เข้าถึงโมเดลเขียนโค้ดที่ดีที่สุดในโลก",
|
||||
"black.meta.description": "เข้าถึง Claude, GPT, Gemini และอื่นๆ ด้วยแผนสมาชิก OpenCode Black",
|
||||
"black.hero.title": "เข้าถึงโมเดลเขียนโค้ดที่ดีที่สุดในโลก",
|
||||
"black.hero.subtitle": "รวมถึง Claude, GPT, Gemini และอื่นๆ อีกมากมาย",
|
||||
"black.title": "OpenCode Black | ราคา",
|
||||
"black.plan.icon20": "แผน Black 20",
|
||||
"black.plan.icon100": "แผน Black 100",
|
||||
"black.plan.icon200": "แผน Black 200",
|
||||
"black.plan.multiplier100": "ใช้งานได้มากกว่า Black 20 ถึง 5 เท่า",
|
||||
"black.plan.multiplier200": "ใช้งานได้มากกว่า Black 20 ถึง 20 เท่า",
|
||||
"black.price.perMonth": "ต่อเดือน",
|
||||
"black.price.perPersonBilledMonthly": "ต่อคน เรียกเก็บรายเดือน",
|
||||
"black.terms.1": "การสมัครสมาชิกของคุณจะยังไม่เริ่มต้นทันที",
|
||||
"black.terms.2": "คุณจะถูกเพิ่มในรายชื่อรอและจะได้รับการเปิดใช้งานเร็วๆ นี้",
|
||||
"black.terms.3": "บัตรของคุณจะถูกตัดเงินเมื่อการสมัครสมาชิกของคุณถูกเปิดใช้งานเท่านั้น",
|
||||
"black.terms.4": "มีขีดจำกัดการใช้งาน การใช้ระบบอัตโนมัติอย่างหนักอาจทำให้ถึงขีดจำกัดเร็วขึ้น",
|
||||
"black.terms.5": "การสมัครสมาชิกสำหรับบุคคลธรรมดา ติดต่อฝ่ายองค์กรสำหรับทีม",
|
||||
"black.terms.6": "ขีดจำกัดอาจมีการปรับเปลี่ยนและแผนอาจถูกยกเลิกในอนาคต",
|
||||
"black.terms.7": "ยกเลิกการสมัครสมาชิกได้ตลอดเวลา",
|
||||
"black.action.continue": "ดำเนินการต่อ",
|
||||
"black.finePrint.beforeTerms": "ราคาที่แสดงยังไม่รวมภาษีที่เกี่ยวข้อง",
|
||||
"black.finePrint.terms": "ข้อกำหนดการให้บริการ",
|
||||
"black.workspace.title": "OpenCode Black | เลือก Workspace",
|
||||
"black.workspace.selectPlan": "เลือก Workspace สำหรับแผนนี้",
|
||||
"black.workspace.name": "Workspace {{n}}",
|
||||
"black.subscribe.title": "สมัครสมาชิก OpenCode Black",
|
||||
"black.subscribe.paymentMethod": "วิธีการชำระเงิน",
|
||||
"black.subscribe.loadingPaymentForm": "กำลังโหลดแบบฟอร์มการชำระเงิน...",
|
||||
"black.subscribe.selectWorkspaceToContinue": "เลือก Workspace เพื่อดำเนินการต่อ",
|
||||
"black.subscribe.failurePrefix": "โอ๊ะโอ!",
|
||||
"black.subscribe.error.generic": "เกิดข้อผิดพลาด",
|
||||
"black.subscribe.error.invalidPlan": "แผนไม่ถูกต้อง",
|
||||
"black.subscribe.error.workspaceRequired": "จำเป็นต้องมี Workspace ID",
|
||||
"black.subscribe.error.alreadySubscribed": "Workspace นี้มีการสมัครสมาชิกอยู่แล้ว",
|
||||
"black.subscribe.processing": "กำลังดำเนินการ...",
|
||||
"black.subscribe.submit": "สมัครสมาชิก ${{plan}}",
|
||||
"black.subscribe.form.chargeNotice": "คุณจะถูกเรียกเก็บเงินเมื่อการสมัครสมาชิกของคุณถูกเปิดใช้งานเท่านั้น",
|
||||
"black.subscribe.success.title": "คุณอยู่ในรายชื่อรอ OpenCode Black แล้ว",
|
||||
"black.subscribe.success.subscriptionPlan": "แผนการสมัครสมาชิก",
|
||||
"black.subscribe.success.planName": "OpenCode Black {{plan}}",
|
||||
"black.subscribe.success.amount": "จำนวนเงิน",
|
||||
"black.subscribe.success.amountValue": "${{plan}} ต่อเดือน",
|
||||
"black.subscribe.success.paymentMethod": "วิธีการชำระเงิน",
|
||||
"black.subscribe.success.dateJoined": "วันที่เข้าร่วม",
|
||||
"black.subscribe.success.chargeNotice": "บัตรของคุณจะถูกเรียกเก็บเงินเมื่อการสมัครสมาชิกของคุณถูกเปิดใช้งาน",
|
||||
|
||||
"brand.title": "OpenCode | \u0e41\u0e1a\u0e23\u0e19\u0e14\u0e4c",
|
||||
"brand.meta.description":
|
||||
"\u0e41\u0e19\u0e27\u0e17\u0e32\u0e07\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e41\u0e1a\u0e23\u0e19\u0e14\u0e4c OpenCode",
|
||||
"brand.heading":
|
||||
"\u0e41\u0e19\u0e27\u0e17\u0e32\u0e07\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e41\u0e1a\u0e23\u0e19\u0e14\u0e4c",
|
||||
"brand.subtitle":
|
||||
"\u0e17\u0e23\u0e31\u0e1e\u0e22\u0e32\u0e01\u0e23\u0e41\u0e25\u0e30\u0e41\u0e2d\u0e2a\u0e40\u0e0b\u0e17\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e0a\u0e48\u0e27\u0e22\u0e43\u0e2b\u0e49\u0e04\u0e38\u0e13\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e41\u0e1a\u0e23\u0e19\u0e14\u0e4c OpenCode \u0e44\u0e14\u0e49\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07",
|
||||
"brand.downloadAll":
|
||||
"\u0e14\u0e32\u0e27\u0e42\u0e2b\u0e25\u0e14\u0e41\u0e2d\u0e2a\u0e40\u0e0b\u0e17\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14",
|
||||
"changelog.title":
|
||||
"OpenCode | \u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07",
|
||||
"changelog.meta.description":
|
||||
"\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01\u0e01\u0e32\u0e23\u0e2d\u0e2d\u0e01\u0e23\u0e38\u0e48\u0e19\u0e41\u0e25\u0e30\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07\u0e02\u0e2d\u0e07 OpenCode",
|
||||
"changelog.hero.title":
|
||||
"\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07",
|
||||
"changelog.hero.subtitle":
|
||||
"\u0e2d\u0e31\u0e1b\u0e40\u0e14\u0e15\u0e41\u0e25\u0e30\u0e01\u0e32\u0e23\u0e1b\u0e23\u0e31\u0e1a\u0e1b\u0e23\u0e38\u0e07\u0e43\u0e2b\u0e21\u0e48\u0e02\u0e2d\u0e07 OpenCode",
|
||||
"changelog.empty":
|
||||
"\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07",
|
||||
"changelog.viewJson": "\u0e14\u0e39 JSON",
|
||||
"workspace.nav.zen": "เซน",
|
||||
"workspace.nav.apiKeys": "API คีย์",
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "API Keys",
|
||||
"workspace.nav.members": "สมาชิก",
|
||||
"workspace.nav.billing": "การเรียกเก็บเงิน",
|
||||
"workspace.nav.settings": "การตั้งค่า",
|
||||
"workspace.home.banner.beforeLink": "โมเดลที่ได้รับการปรับปรุงให้เชื่อถือได้สำหรับเอเจนต์การเขียนโค้ด",
|
||||
|
||||
"workspace.home.banner.beforeLink": "โมเดลที่เชื่อถือได้และปรับแต่งแล้วสำหรับเอเจนต์เขียนโค้ด",
|
||||
"workspace.home.billing.loading": "กำลังโหลด...",
|
||||
"workspace.home.billing.enable": "เปิดใช้งานการเรียกเก็บเงิน",
|
||||
"workspace.home.billing.currentBalance": "ยอดคงเหลือปัจจุบัน",
|
||||
"workspace.newUser.feature.tested.title": "รุ่นที่ผ่านการทดสอบและตรวจสอบแล้ว",
|
||||
|
||||
"workspace.newUser.feature.tested.title": "โมเดลที่ผ่านการทดสอบและตรวจสอบแล้ว",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"เราได้เปรียบเทียบและทดสอบโมเดลสำหรับเอเจนต์การเขียนโค้ดโดยเฉพาะเพื่อให้มั่นใจถึงประสิทธิภาพที่ดีที่สุด",
|
||||
"เราได้ทำเบนช์มาร์กและทดสอบโมเดลสำหรับเอเจนต์เขียนโค้ดโดยเฉพาะเพื่อให้มั่นใจถึงประสิทธิภาพที่ดีที่สุด",
|
||||
"workspace.newUser.feature.quality.title": "คุณภาพสูงสุด",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"โมเดลการเข้าถึงที่กำหนดค่าไว้เพื่อประสิทธิภาพสูงสุด - ไม่ต้องดาวน์เกรดหรือกำหนดเส้นทางไปยังผู้ให้บริการที่ถูกกว่า",
|
||||
"workspace.newUser.feature.lockin.title": "ไม่มีการล็อคอิน",
|
||||
"เข้าถึงโมเดลที่กำหนดค่าไว้เพื่อประสิทธิภาพสูงสุด - ไม่มีการลดเกรดหรือส่งงานไปยังผู้ให้บริการที่ราคาถูกกว่า",
|
||||
"workspace.newUser.feature.lockin.title": "ไม่มีการผูกมัด (Lock-in)",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"ใช้ Zen กับตัวแทนการเขียนโค้ด และใช้ผู้ให้บริการรายอื่นต่อไปด้วย opencode ทุกครั้งที่คุณต้องการ",
|
||||
"workspace.newUser.copyApiKey": "คัดลอกคีย์ API",
|
||||
"workspace.newUser.copyKey": "คัดลอกคีย์",
|
||||
"workspace.newUser.copied": "คัดลอก!",
|
||||
"ใช้ Zen กับเอเจนต์เขียนโค้ดใดก็ได้ และกลับมาใช้ผู้ให้บริการรายอื่นด้วย OpenCode ได้ทุกเมื่อที่คุณต้องการ",
|
||||
"workspace.newUser.copyApiKey": "คัดลอก API key",
|
||||
"workspace.newUser.copyKey": "คัดลอก Key",
|
||||
"workspace.newUser.copied": "คัดลอกแล้ว!",
|
||||
"workspace.newUser.step.enableBilling": "เปิดใช้งานการเรียกเก็บเงิน",
|
||||
"workspace.newUser.step.login.before": "วิ่ง",
|
||||
"workspace.newUser.step.login.after": "และเลือก opencode",
|
||||
"workspace.newUser.step.pasteKey": "วางคีย์ API ของคุณ",
|
||||
"workspace.newUser.step.models.before": "เริ่มต้น opencode และเรียกใช้",
|
||||
"workspace.newUser.step.models.after": "เพื่อเลือกรุ่น",
|
||||
"workspace.newUser.step.login.before": "รัน",
|
||||
"workspace.newUser.step.login.after": "และเลือก OpenCode",
|
||||
"workspace.newUser.step.pasteKey": "วาง API key ของคุณ",
|
||||
"workspace.newUser.step.models.before": "เริ่ม OpenCode และรัน",
|
||||
"workspace.newUser.step.models.after": "เพื่อเลือกโมเดล",
|
||||
|
||||
"workspace.models.title": "โมเดล",
|
||||
"workspace.models.subtitle.beforeLink": "จัดการโมเดลที่สมาชิกพื้นที่ทำงานสามารถเข้าถึงได้",
|
||||
"workspace.models.table.model": "แบบอย่าง",
|
||||
"workspace.models.table.enabled": "เปิดใช้งานแล้ว",
|
||||
"workspace.providers.title": "นำกุญแจมาเอง",
|
||||
"workspace.providers.subtitle": "กำหนดค่าคีย์ API ของคุณเองจากผู้ให้บริการ AI",
|
||||
"workspace.providers.placeholder": "ป้อนคีย์ {{provider}} API ({{prefix}}...)",
|
||||
"workspace.models.subtitle.beforeLink": "จัดการว่าโมเดลใดที่สมาชิกใน Workspace สามารถเข้าถึงได้",
|
||||
"workspace.models.table.model": "โมเดล",
|
||||
"workspace.models.table.enabled": "เปิดใช้งาน",
|
||||
|
||||
"workspace.providers.title": "Bring Your Own Key",
|
||||
"workspace.providers.subtitle": "กำหนดค่า API keys ของคุณเองจากผู้ให้บริการ AI",
|
||||
"workspace.providers.placeholder": "ป้อน {{provider}} API key ({{prefix}}...)",
|
||||
"workspace.providers.configure": "กำหนดค่า",
|
||||
"workspace.providers.edit": "แก้ไข",
|
||||
"workspace.providers.delete": "ลบ",
|
||||
"workspace.providers.saving": "ประหยัด...",
|
||||
"workspace.providers.saving": "กำลังบันทึก...",
|
||||
"workspace.providers.save": "บันทึก",
|
||||
"workspace.providers.table.provider": "ผู้ให้บริการ",
|
||||
"workspace.providers.table.apiKey": "API คีย์",
|
||||
"workspace.providers.table.apiKey": "API Key",
|
||||
|
||||
"workspace.usage.title": "ประวัติการใช้งาน",
|
||||
"workspace.usage.subtitle": "การใช้งานและต้นทุน API ล่าสุด",
|
||||
"workspace.usage.empty": "ทำการเรียก API ครั้งแรกเพื่อเริ่มต้น",
|
||||
"workspace.usage.table.date": "วันที่",
|
||||
"workspace.usage.table.model": "แบบอย่าง",
|
||||
"workspace.usage.table.input": "ป้อนข้อมูล",
|
||||
"workspace.usage.table.output": "เอาท์พุต",
|
||||
"workspace.usage.table.model": "โมเดล",
|
||||
"workspace.usage.table.input": "Input",
|
||||
"workspace.usage.table.output": "Output",
|
||||
"workspace.usage.table.cost": "ค่าใช้จ่าย",
|
||||
"workspace.usage.breakdown.input": "ป้อนข้อมูล",
|
||||
"workspace.usage.breakdown.cacheRead": "แคชอ่าน",
|
||||
"workspace.usage.breakdown.cacheWrite": "แคชเขียน",
|
||||
"workspace.usage.breakdown.output": "เอาท์พุต",
|
||||
"workspace.usage.breakdown.reasoning": "การใช้เหตุผล",
|
||||
"workspace.usage.breakdown.input": "Input",
|
||||
"workspace.usage.breakdown.cacheRead": "Cache Read",
|
||||
"workspace.usage.breakdown.cacheWrite": "Cache Write",
|
||||
"workspace.usage.breakdown.output": "Output",
|
||||
"workspace.usage.breakdown.reasoning": "Reasoning",
|
||||
"workspace.usage.subscription": "สมัครสมาชิก (${{amount}})",
|
||||
|
||||
"workspace.cost.title": "ค่าใช้จ่าย",
|
||||
"workspace.cost.subtitle": "ต้นทุนการใช้งานแยกตามรุ่น",
|
||||
"workspace.cost.allModels": "ทุกรุ่น",
|
||||
"workspace.cost.allKeys": "กุญแจทั้งหมด",
|
||||
"workspace.cost.subtitle": "ต้นทุนการใช้งานแยกตามโมเดล",
|
||||
"workspace.cost.allModels": "ทุกโมเดล",
|
||||
"workspace.cost.allKeys": "ทุก Key",
|
||||
"workspace.cost.deletedSuffix": "(ลบแล้ว)",
|
||||
"workspace.cost.empty": "ไม่มีข้อมูลการใช้งานในช่วงเวลาที่เลือก",
|
||||
"workspace.cost.subscriptionShort": "ย่อย",
|
||||
"workspace.keys.title": "API คีย์",
|
||||
"workspace.keys.subtitle": "จัดการคีย์ API ของคุณสำหรับการเข้าถึงบริการ opencode",
|
||||
"workspace.keys.create": "สร้างคีย์ API",
|
||||
"workspace.keys.placeholder": "ป้อนชื่อคีย์",
|
||||
"workspace.keys.empty": "สร้างคีย์ opencode เกตเวย์ API",
|
||||
"workspace.cost.subscriptionShort": "sub",
|
||||
|
||||
"workspace.keys.title": "API Keys",
|
||||
"workspace.keys.subtitle": "จัดการ API keys ของคุณสำหรับการเข้าถึงบริการ OpenCode",
|
||||
"workspace.keys.create": "สร้าง API Key",
|
||||
"workspace.keys.placeholder": "ป้อนชื่อ Key",
|
||||
"workspace.keys.empty": "สร้าง OpenCode Gateway API key",
|
||||
"workspace.keys.table.name": "ชื่อ",
|
||||
"workspace.keys.table.key": "สำคัญ",
|
||||
"workspace.keys.table.key": "Key",
|
||||
"workspace.keys.table.createdBy": "สร้างโดย",
|
||||
"workspace.keys.table.lastUsed": "ใช้ล่าสุด",
|
||||
"workspace.keys.copyApiKey": "คัดลอกคีย์ API",
|
||||
"workspace.keys.copyApiKey": "คัดลอก API key",
|
||||
"workspace.keys.delete": "ลบ",
|
||||
|
||||
"workspace.members.title": "สมาชิก",
|
||||
"workspace.members.subtitle": "จัดการสมาชิกพื้นที่ทำงานและสิทธิ์ของพวกเขา",
|
||||
"workspace.members.subtitle": "จัดการสมาชิก Workspace และสิทธิ์ของพวกเขา",
|
||||
"workspace.members.invite": "เชิญสมาชิก",
|
||||
"workspace.members.inviting": "กำลังเชิญ...",
|
||||
"workspace.members.beta.beforeLink": "พื้นที่ทำงานให้บริการฟรีสำหรับทีมในช่วงเบต้า",
|
||||
"workspace.members.beta.beforeLink": "Workspace ให้บริการฟรีสำหรับทีมในช่วงเบต้า",
|
||||
"workspace.members.form.invitee": "ผู้ได้รับเชิญ",
|
||||
"workspace.members.form.emailPlaceholder": "ใส่อีเมล์",
|
||||
"workspace.members.form.emailPlaceholder": "ใส่อีเมล",
|
||||
"workspace.members.form.role": "บทบาท",
|
||||
"workspace.members.form.monthlyLimit": "วงเงินการใช้จ่ายรายเดือน",
|
||||
"workspace.members.noLimit": "ไม่มีขีดจำกัด",
|
||||
"workspace.members.noLimitLowercase": "ไม่มีขีดจำกัด",
|
||||
"workspace.members.invited": "เชิญ",
|
||||
"workspace.members.invited": "เชิญแล้ว",
|
||||
"workspace.members.edit": "แก้ไข",
|
||||
"workspace.members.delete": "ลบ",
|
||||
"workspace.members.saving": "ประหยัด...",
|
||||
"workspace.members.saving": "กำลังบันทึก...",
|
||||
"workspace.members.save": "บันทึก",
|
||||
"workspace.members.table.email": "อีเมล",
|
||||
"workspace.members.table.role": "บทบาท",
|
||||
"workspace.members.table.monthLimit": "จำกัดเดือน",
|
||||
"workspace.members.role.admin": "ผู้ดูแลระบบ",
|
||||
"workspace.members.table.monthLimit": "วงเงินเดือน",
|
||||
"workspace.members.role.admin": "แอดมิน",
|
||||
"workspace.members.role.adminDescription": "สามารถจัดการโมเดล สมาชิก และการเรียกเก็บเงินได้",
|
||||
"workspace.members.role.member": "สมาชิก",
|
||||
"workspace.members.role.memberDescription": "สามารถสร้างคีย์ API สำหรับตัวเองได้เท่านั้น",
|
||||
"workspace.members.role.memberDescription": "สามารถสร้าง API keys สำหรับตัวเองได้เท่านั้น",
|
||||
|
||||
"workspace.settings.title": "การตั้งค่า",
|
||||
"workspace.settings.subtitle": "อัพเดตชื่อพื้นที่ทำงานและการกำหนดค่าตามความชอบของคุณ",
|
||||
"workspace.settings.workspaceName": "ชื่อพื้นที่ทำงาน",
|
||||
"workspace.settings.subtitle": "อัปเดตชื่อ Workspace และการตั้งค่าของคุณ",
|
||||
"workspace.settings.workspaceName": "ชื่อ Workspace",
|
||||
"workspace.settings.defaultName": "ค่าเริ่มต้น",
|
||||
"workspace.settings.updating": "กำลังอัปเดต...",
|
||||
"workspace.settings.save": "บันทึก",
|
||||
"workspace.settings.edit": "แก้ไข",
|
||||
|
||||
"workspace.billing.title": "การเรียกเก็บเงิน",
|
||||
"workspace.billing.subtitle.beforeLink": "จัดการวิธีการชำระเงิน",
|
||||
"workspace.billing.contactUs": "ติดต่อเรา",
|
||||
@@ -474,48 +408,52 @@ export const dict = {
|
||||
"workspace.billing.loading": "กำลังโหลด...",
|
||||
"workspace.billing.addAction": "เพิ่ม",
|
||||
"workspace.billing.addBalance": "เพิ่มยอดคงเหลือ",
|
||||
"workspace.billing.linkedToStripe": "เชื่อมโยงกับแถบ",
|
||||
"workspace.billing.linkedToStripe": "เชื่อมโยงกับ Stripe",
|
||||
"workspace.billing.manage": "จัดการ",
|
||||
"workspace.billing.enable": "เปิดใช้งานการเรียกเก็บเงิน",
|
||||
|
||||
"workspace.monthlyLimit.title": "วงเงินรายเดือน",
|
||||
"workspace.monthlyLimit.subtitle": "กำหนดขีดจำกัดการใช้งานรายเดือนสำหรับบัญชีของคุณ",
|
||||
"workspace.monthlyLimit.subtitle": "ตั้งขีดจำกัดการใช้งานรายเดือนสำหรับบัญชีของคุณ",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "กำลังตั้งค่า...",
|
||||
"workspace.monthlyLimit.set": "ชุด",
|
||||
"workspace.monthlyLimit.set": "ตั้งค่า",
|
||||
"workspace.monthlyLimit.edit": "แก้ไขขีดจำกัด",
|
||||
"workspace.monthlyLimit.noLimit": "ไม่มีการกำหนดขีดจำกัดการใช้งาน",
|
||||
"workspace.monthlyLimit.noLimit": "ไม่ได้ตั้งขีดจำกัดการใช้งาน",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "การใช้งานปัจจุบันสำหรับ",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "คือ $",
|
||||
|
||||
"workspace.reload.title": "โหลดซ้ำอัตโนมัติ",
|
||||
"workspace.reload.disabled.before": "รีโหลดอัตโนมัติคือ",
|
||||
"workspace.reload.disabled.state": "พิการ",
|
||||
"workspace.reload.disabled.after": "เปิดใช้งานเพื่อโหลดซ้ำอัตโนมัติเมื่อยอดเงินคงเหลือต่ำ",
|
||||
"workspace.reload.enabled.before": "รีโหลดอัตโนมัติคือ",
|
||||
"workspace.reload.enabled.state": "เปิดใช้งาน",
|
||||
"workspace.reload.enabled.middle": "เราจะโหลดซ้ำ",
|
||||
"workspace.reload.processingFee": "ค่าธรรมเนียมการดำเนินการ",
|
||||
"workspace.reload.enabled.after": "เมื่อถึงจุดสมดุล",
|
||||
"workspace.reload.disabled.before": "การโหลดซ้ำอัตโนมัติ",
|
||||
"workspace.reload.disabled.state": "ปิดใช้งานอยู่",
|
||||
"workspace.reload.disabled.after": "เปิดใช้งานเพื่อเติมเงินอัตโนมัติเมื่อยอดคงเหลือต่ำ",
|
||||
"workspace.reload.enabled.before": "การโหลดซ้ำอัตโนมัติ",
|
||||
"workspace.reload.enabled.state": "เปิดใช้งานอยู่",
|
||||
"workspace.reload.enabled.middle": "เราจะเติมเงิน",
|
||||
"workspace.reload.processingFee": "ค่าธรรมเนียมดำเนินการ",
|
||||
"workspace.reload.enabled.after": "เมื่อยอดคงเหลือถึง",
|
||||
"workspace.reload.edit": "แก้ไข",
|
||||
"workspace.reload.enable": "เปิดใช้งาน",
|
||||
"workspace.reload.enableAutoReload": "เปิดใช้งานการโหลดซ้ำอัตโนมัติ",
|
||||
"workspace.reload.reloadAmount": "โหลด $",
|
||||
"workspace.reload.reloadAmount": "เติมเงิน $",
|
||||
"workspace.reload.whenBalanceReaches": "เมื่อยอดถึง $",
|
||||
"workspace.reload.saving": "ประหยัด...",
|
||||
"workspace.reload.saving": "กำลังบันทึก...",
|
||||
"workspace.reload.save": "บันทึก",
|
||||
"workspace.reload.failedAt": "โหลดซ้ำไม่สำเร็จเมื่อ",
|
||||
"workspace.reload.failedAt": "เติมเงินล้มเหลวเมื่อ",
|
||||
"workspace.reload.reason": "เหตุผล:",
|
||||
"workspace.reload.updatePaymentMethod": "โปรดอัปเดตวิธีการชำระเงินของคุณแล้วลองอีกครั้ง",
|
||||
"workspace.reload.retrying": "กำลังลองอีกครั้ง...",
|
||||
"workspace.reload.retry": "ลองอีกครั้ง",
|
||||
|
||||
"workspace.payments.title": "ประวัติการชำระเงิน",
|
||||
"workspace.payments.subtitle": "ธุรกรรมการชำระเงินล่าสุด",
|
||||
"workspace.payments.subtitle": "รายการธุรกรรมการชำระเงินล่าสุด",
|
||||
"workspace.payments.table.date": "วันที่",
|
||||
"workspace.payments.table.paymentId": "รหัสการชำระเงิน",
|
||||
"workspace.payments.table.amount": "จำนวน",
|
||||
"workspace.payments.table.paymentId": "Payment ID",
|
||||
"workspace.payments.table.amount": "จำนวนเงิน",
|
||||
"workspace.payments.table.receipt": "ใบเสร็จ",
|
||||
"workspace.payments.type.credit": "เครดิต",
|
||||
"workspace.payments.type.subscription": "สมัครสมาชิก",
|
||||
"workspace.payments.type.credit": "credit",
|
||||
"workspace.payments.type.subscription": "subscription",
|
||||
"workspace.payments.view": "ดู",
|
||||
|
||||
"workspace.black.loading": "กำลังโหลด...",
|
||||
"workspace.black.time.day": "วัน",
|
||||
"workspace.black.time.days": "วัน",
|
||||
@@ -524,22 +462,132 @@ export const dict = {
|
||||
"workspace.black.time.minute": "นาที",
|
||||
"workspace.black.time.minutes": "นาที",
|
||||
"workspace.black.time.fewSeconds": "ไม่กี่วินาที",
|
||||
"workspace.black.subscription.title": "สมัครสมาชิก",
|
||||
"workspace.black.subscription.message": "คุณสมัครรับข้อมูล OpenCode Black ในราคา ${{plan}} ต่อเดือน",
|
||||
"workspace.black.subscription.title": "การสมัครสมาชิก",
|
||||
"workspace.black.subscription.message": "คุณสมัครสมาชิก OpenCode Black ในราคา ${{plan}} ต่อเดือน",
|
||||
"workspace.black.subscription.manage": "จัดการการสมัครสมาชิก",
|
||||
"workspace.black.subscription.rollingUsage": "การใช้งาน 5 ชั่วโมง",
|
||||
"workspace.black.subscription.weeklyUsage": "การใช้งานรายสัปดาห์",
|
||||
"workspace.black.subscription.resetsIn": "รีเซ็ตเข้า",
|
||||
"workspace.black.subscription.resetsIn": "รีเซ็ตใน",
|
||||
"workspace.black.subscription.useBalance": "ใช้ยอดเงินคงเหลือของคุณหลังจากถึงขีดจำกัดการใช้งานแล้ว",
|
||||
"workspace.black.waitlist.title": "รายชื่อผู้รอ",
|
||||
"workspace.black.waitlist.joined": "คุณอยู่ในรายชื่อรอสำหรับแผน ${{plan}} ต่อเดือน OpenCode Black",
|
||||
"workspace.black.waitlist.ready": "เราพร้อมที่จะลงทะเบียนให้คุณเข้าร่วมแผน ${{plan}} ต่อเดือน OpenCode Black แล้ว",
|
||||
"workspace.black.waitlist.leave": "ออกจากรายชื่อผู้รอ",
|
||||
"workspace.black.waitlist.leaving": "กำลังออก...",
|
||||
"workspace.black.waitlist.left": "ซ้าย",
|
||||
"workspace.black.waitlist.title": "รายชื่อรอ",
|
||||
"workspace.black.waitlist.joined": "คุณอยู่ในรายชื่อรอสำหรับแผน OpenCode Black ราคา ${{plan}} ต่อเดือน",
|
||||
"workspace.black.waitlist.ready": "เราพร้อมที่จะลงทะเบียนให้คุณเข้าสู่แผน OpenCode Black ราคา ${{plan}} ต่อเดือนแล้ว",
|
||||
"workspace.black.waitlist.leave": "ออกจากรายชื่อรอ",
|
||||
"workspace.black.waitlist.leaving": "กำลังออกจาก...",
|
||||
"workspace.black.waitlist.left": "ออกแล้ว",
|
||||
"workspace.black.waitlist.enroll": "ลงทะเบียน",
|
||||
"workspace.black.waitlist.enrolling": "กำลังลงทะเบียน...",
|
||||
"workspace.black.waitlist.enrolled": "ลงทะเบียนแล้ว",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"เมื่อคุณคลิกลงทะเบียน การสมัครของคุณจะเริ่มต้นทันทีและบัตรของคุณจะถูกเรียกเก็บเงิน",
|
||||
"เมื่อคุณคลิกลงทะเบียน การสมัครสมาชิกของคุณจะเริ่มต้นทันทีและบัตรของคุณจะถูกเรียกเก็บเงิน",
|
||||
|
||||
"download.title": "OpenCode | ดาวน์โหลด",
|
||||
"download.meta.description": "ดาวน์โหลด OpenCode สำหรับ macOS, Windows และ Linux",
|
||||
"download.hero.title": "ดาวน์โหลด OpenCode",
|
||||
"download.hero.subtitle": "พร้อมใช้งานในเวอร์ชันเบต้าสำหรับ macOS, Windows และ Linux",
|
||||
"download.hero.button": "ดาวน์โหลดสำหรับ {{os}}",
|
||||
"download.section.terminal": "OpenCode Terminal",
|
||||
"download.section.desktop": "OpenCode Desktop (Beta)",
|
||||
"download.section.extensions": "ส่วนขยาย OpenCode",
|
||||
"download.section.integrations": "การเชื่อมต่อ OpenCode",
|
||||
"download.action.download": "ดาวน์โหลด",
|
||||
"download.action.install": "ติดตั้ง",
|
||||
|
||||
"download.platform.macosAppleSilicon": "macOS (Apple Silicon)",
|
||||
"download.platform.macosIntel": "macOS (Intel)",
|
||||
"download.platform.windowsX64": "Windows (x64)",
|
||||
"download.platform.linuxDeb": "Linux (.deb)",
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
|
||||
"download.faq.a3.beforeLocal":
|
||||
"ไม่จำเป็นเสมอไป แต่อาจจะต้องมี คุณจะต้องมีการสมัครสมาชิก AI หากต้องการเชื่อมต่อ OpenCode กับผู้ให้บริการที่มีค่าใช้จ่าย แม้ว่าคุณจะสามารถทำงานกับ",
|
||||
"download.faq.a3.localLink": "โมเดล Local",
|
||||
"download.faq.a3.afterLocal.beforeZen": "ได้ฟรี แม้ว่าเราจะแนะนำให้ผู้ใช้ใช้งาน",
|
||||
"download.faq.a3.afterZen": ", OpenCode ก็ทำงานร่วมกับผู้ให้บริการยอดนิยมทั้งหมด เช่น OpenAI, Anthropic, xAI เป็นต้น",
|
||||
|
||||
"download.faq.a5.p1": "OpenCode ใช้งานได้ฟรี 100%",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"ค่าใช้จ่ายเพิ่มเติมใดๆ จะมาจากการสมัครสมาชิกของคุณกับผู้ให้บริการโมเดล แม้ว่า OpenCode จะทำงานร่วมกับผู้ให้บริการโมเดลใดก็ได้ แต่เราแนะนำให้ใช้",
|
||||
"download.faq.a5.p2.afterZen": "",
|
||||
|
||||
"download.faq.a6.p1": "ข้อมูลของคุณจะถูกจัดเก็บเฉพาะเมื่อคุณสร้างลิงก์ที่แชร์ได้ใน OpenCode เท่านั้น",
|
||||
"download.faq.a6.p2.beforeShare": "เรียนรู้เพิ่มเติมเกี่ยวกับ",
|
||||
"download.faq.a6.shareLink": "หน้าแชร์",
|
||||
|
||||
"enterprise.title": "OpenCode | โซลูชันระดับองค์กรสำหรับองค์กรของคุณ",
|
||||
"enterprise.meta.description": "ติดต่อ OpenCode สำหรับโซลูชันระดับองค์กร",
|
||||
"enterprise.hero.title": "โค้ดของคุณเป็นของคุณ",
|
||||
"enterprise.hero.body1":
|
||||
"OpenCode ทำงานอย่างปลอดภัยภายในองค์กรของคุณ โดยไม่มีการจัดเก็บข้อมูลหรือบริบท และไม่มีข้อจำกัดด้านไลเซนส์หรือการอ้างสิทธิ์ความเป็นเจ้าของ เริ่มทดลองใช้งานกับทีมของคุณ แล้วนำไปใช้งานทั่วทั้งองค์กรโดยการผสานรวมกับ SSO และ AI gateway ภายในของคุณ",
|
||||
"enterprise.hero.body2": "บอกเราว่าเราจะช่วยได้อย่างไร",
|
||||
"enterprise.form.name.label": "ชื่อ-นามสกุล",
|
||||
"enterprise.form.name.placeholder": "Jeff Bezos",
|
||||
"enterprise.form.role.label": "ตำแหน่ง",
|
||||
"enterprise.form.role.placeholder": "ประธานกรรมการบริหาร",
|
||||
"enterprise.form.email.label": "อีเมลบริษัท",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "คุณกำลังพยายามแก้ปัญหาอะไร?",
|
||||
"enterprise.form.message.placeholder": "เราต้องการความช่วยเหลือเรื่อง...",
|
||||
"enterprise.form.send": "ส่ง",
|
||||
"enterprise.form.sending": "กำลังส่ง...",
|
||||
"enterprise.form.success": "ส่งข้อความแล้ว เราจะติดต่อกลับเร็วๆ นี้",
|
||||
"enterprise.faq.title": "คำถามที่พบบ่อย",
|
||||
"enterprise.faq.q1": "OpenCode Enterprise คืออะไร?",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise สำหรับองค์กรที่ต้องการให้มั่นใจว่าโค้ดและข้อมูลจะไม่ออกนอกโครงสร้างพื้นฐานของตน ทำได้โดยใช้การตั้งค่าแบบศูนย์กลางที่ผสานรวมกับ SSO และ AI gateway ภายในของคุณ",
|
||||
"enterprise.faq.q2": "จะเริ่มต้นกับ OpenCode Enterprise ได้อย่างไร?",
|
||||
"enterprise.faq.a2":
|
||||
"เพียงเริ่มจากการทดลองใช้งานภายในกับทีมของคุณ โดยค่าเริ่มต้น OpenCode ไม่จัดเก็บโค้ดหรือข้อมูลบริบทของคุณ ทำให้เริ่มต้นได้ง่าย จากนั้นติดต่อเราเพื่อพูดคุยเรื่องราคาและตัวเลือกการติดตั้งใช้งาน",
|
||||
"enterprise.faq.q3": "ราคาสำหรับองค์กรคิดอย่างไร?",
|
||||
"enterprise.faq.a3":
|
||||
"เราเสนอราคาแบบต่อที่นั่ง (per-seat) หากคุณมี LLM gateway ของคุณเอง เราจะไม่คิดค่าบริการตามโทเค็นที่ใช้ สำหรับรายละเอียดเพิ่มเติม โปรดติดต่อเราเพื่อขอใบเสนอราคาตามความต้องการขององค์กรของคุณ",
|
||||
"enterprise.faq.q4": "ข้อมูลของฉันปลอดภัยกับ OpenCode Enterprise หรือไม่?",
|
||||
"enterprise.faq.a4":
|
||||
"ใช่ OpenCode ไม่จัดเก็บโค้ดหรือข้อมูลบริบทของคุณ การประมวลผลทั้งหมดเกิดขึ้นในเครื่องหรือผ่านการเรียก API โดยตรงไปยังผู้ให้บริการ AI ของคุณ ด้วยการตั้งค่าแบบศูนย์กลางและการผสานรวม SSO ข้อมูลของคุณจะยังคงปลอดภัยอยู่ภายในโครงสร้างพื้นฐานขององค์กร",
|
||||
|
||||
"brand.title": "OpenCode | แบรนด์",
|
||||
"brand.meta.description": "แนวทางการใช้แบรนด์ OpenCode",
|
||||
"brand.heading": "แนวทางการใช้แบรนด์",
|
||||
"brand.subtitle": "ทรัพยากรและแอสเซทเพื่อช่วยให้คุณใช้งานแบรนด์ OpenCode",
|
||||
"brand.downloadAll": "ดาวน์โหลดแอสเซททั้งหมด",
|
||||
|
||||
"changelog.title": "OpenCode | บันทึกการเปลี่ยนแปลง",
|
||||
"changelog.meta.description": "บันทึกการออกรุ่นและบันทึกการเปลี่ยนแปลง OpenCode",
|
||||
"changelog.hero.title": "บันทึกการเปลี่ยนแปลง",
|
||||
"changelog.hero.subtitle": "การอัปเดตและการปรับปรุงใหม่ใน OpenCode",
|
||||
"changelog.empty": "ไม่พบรายการบันทึกการเปลี่ยนแปลง",
|
||||
"changelog.viewJson": "ดู JSON",
|
||||
|
||||
"bench.list.title": "Benchmark",
|
||||
"bench.list.heading": "Benchmarks",
|
||||
"bench.list.table.agent": "เอเจนต์",
|
||||
"bench.list.table.model": "โมเดล",
|
||||
"bench.list.table.score": "คะแนน",
|
||||
|
||||
"bench.detail.title": "Benchmark - {{task}}",
|
||||
"bench.detail.notFound": "ไม่พบงาน",
|
||||
"bench.detail.na": "N/A",
|
||||
"bench.detail.labels.agent": "เอเจนต์",
|
||||
"bench.detail.labels.model": "โมเดล",
|
||||
"bench.detail.labels.task": "งาน",
|
||||
"bench.detail.labels.repo": "Repo",
|
||||
"bench.detail.labels.from": "จาก",
|
||||
"bench.detail.labels.to": "ถึง",
|
||||
"bench.detail.labels.prompt": "Prompt",
|
||||
"bench.detail.labels.commit": "Commit",
|
||||
"bench.detail.labels.averageDuration": "ระยะเวลาเฉลี่ย",
|
||||
"bench.detail.labels.averageScore": "คะแนนเฉลี่ย",
|
||||
"bench.detail.labels.averageCost": "ค่าใช้จ่ายเฉลี่ย",
|
||||
"bench.detail.labels.summary": "สรุป",
|
||||
"bench.detail.labels.runs": "Runs",
|
||||
"bench.detail.labels.score": "คะแนน",
|
||||
"bench.detail.labels.base": "ฐาน",
|
||||
"bench.detail.labels.penalty": "บทลงโทษ",
|
||||
"bench.detail.labels.weight": "น้ำหนัก",
|
||||
"bench.detail.table.run": "Run",
|
||||
"bench.detail.table.score": "คะแนน (ฐาน - บทลงโทษ)",
|
||||
"bench.detail.table.cost": "ค่าใช้จ่าย",
|
||||
"bench.detail.table.duration": "ระยะเวลา",
|
||||
"bench.detail.run.title": "Run {{n}}",
|
||||
"bench.detail.rawJson": "Raw JSON",
|
||||
} satisfies Dict
|
||||
|
||||
@@ -4,203 +4,233 @@ import { dict as en } from "./en"
|
||||
export const dict = {
|
||||
...en,
|
||||
"nav.github": "GitHub",
|
||||
"nav.docs": "Dokumantasyon",
|
||||
"nav.changelog": "Degisiklik gunlugu",
|
||||
"nav.docs": "Dokümantasyon",
|
||||
"nav.changelog": "Değişiklik günlüğü",
|
||||
"nav.discord": "Discord",
|
||||
"nav.x": "X",
|
||||
"nav.enterprise": "Kurumsal",
|
||||
"nav.zen": "Zen",
|
||||
"nav.login": "Giris",
|
||||
"nav.free": "\u00dccretsiz",
|
||||
"nav.login": "Giriş",
|
||||
"nav.free": "Ücretsiz",
|
||||
"nav.home": "Ana sayfa",
|
||||
"nav.openMenu": "Menüyü aç",
|
||||
"nav.getStartedFree": "\u00dccretsiz basla",
|
||||
"nav.getStartedFree": "Ücretsiz başla",
|
||||
|
||||
"nav.context.copyLogo": "Logoyu SVG olarak kopyala",
|
||||
"nav.context.copyWordmark": "Wordmark'i SVG olarak kopyala",
|
||||
"nav.context.brandAssets": "Marka varliklari",
|
||||
"nav.context.copyWordmark": "Wordmark'ı SVG olarak kopyala",
|
||||
"nav.context.brandAssets": "Marka varlıkları",
|
||||
|
||||
"footer.github": "GitHub",
|
||||
"footer.docs": "Dokumantasyon",
|
||||
"footer.changelog": "Degisiklik gunlugu",
|
||||
"footer.docs": "Dokümantasyon",
|
||||
"footer.changelog": "Değişiklik günlüğü",
|
||||
"footer.discord": "Discord",
|
||||
"footer.x": "X",
|
||||
|
||||
"legal.brand": "Marka",
|
||||
"legal.privacy": "Gizlilik",
|
||||
"legal.terms": "Kosullar",
|
||||
"legal.terms": "Koşullar",
|
||||
|
||||
"email.title": "Yeni urunler yayinladigimizda ilk siz haberdar olun",
|
||||
"email.subtitle": "Erken erisim icin bekleme listesine katilin.",
|
||||
"email.title": "Yeni ürünler yayınladığımızda ilk siz haberdar olun",
|
||||
"email.subtitle": "Erken erişim için bekleme listesine katılın.",
|
||||
"email.placeholder": "E-posta adresi",
|
||||
"email.subscribe": "Abone ol",
|
||||
"email.success": "Neredeyse bitti - gelen kutunuzu kontrol edin ve e-postanizi onaylayin",
|
||||
"email.success": "Neredeyse bitti, gelen kutunuzu kontrol edin ve e-postanızı onaylayın",
|
||||
|
||||
"notFound.title": "Bulunamadi | opencode",
|
||||
"notFound.heading": "404 - Sayfa bulunamadi",
|
||||
"notFound.title": "Bulunamadı | opencode",
|
||||
"notFound.heading": "404 - Sayfa bulunamadı",
|
||||
"notFound.home": "Ana sayfa",
|
||||
"notFound.docs": "Dokumantasyon",
|
||||
"notFound.docs": "Dokümantasyon",
|
||||
"notFound.github": "GitHub",
|
||||
"notFound.discord": "Discord",
|
||||
|
||||
"user.logout": "Cikis",
|
||||
"user.logout": "Çıkış",
|
||||
|
||||
"workspace.select": "Workspace sec",
|
||||
"workspace.createNew": "+ Yeni workspace olustur",
|
||||
"workspace.modal.title": "Yeni workspace olustur",
|
||||
"workspace.modal.placeholder": "Workspace adini girin",
|
||||
"workspace.select": "Çalışma alanı seç",
|
||||
"workspace.createNew": "+ Yeni çalışma alanı oluştur",
|
||||
"workspace.modal.title": "Yeni çalışma alanı oluştur",
|
||||
"workspace.modal.placeholder": "Çalışma alanı adını girin",
|
||||
|
||||
"common.cancel": "Iptal",
|
||||
"common.creating": "Olusturuluyor...",
|
||||
"common.create": "Olustur",
|
||||
"common.cancel": "İptal",
|
||||
"common.creating": "Oluşturuluyor...",
|
||||
"common.create": "Oluştur",
|
||||
|
||||
"common.videoUnsupported": "Tarayiciniz video etiketini desteklemiyor.",
|
||||
"common.figure": "Sekil {{n}}.",
|
||||
"common.videoUnsupported": "Tarayıcınız video etiketini desteklemiyor.",
|
||||
"common.figure": "Şekil {{n}}.",
|
||||
"common.faq": "SSS",
|
||||
"common.learnMore": "Daha fazla bilgi",
|
||||
|
||||
"home.title": "OpenCode | Acik kaynakli yapay zeka kodlama ajani",
|
||||
"error.invalidPlan": "Geçersiz plan",
|
||||
"error.workspaceRequired": "Çalışma alanı kimliği (ID) gerekli",
|
||||
"error.alreadySubscribed": "Bu çalışma alanının zaten bir aboneliği var",
|
||||
"error.limitRequired": "Limit gerekli.",
|
||||
"error.monthlyLimitInvalid": "Geçerli bir aylık limit belirleyin.",
|
||||
"error.workspaceNameRequired": "Çalışma alanı adı gerekli.",
|
||||
"error.nameTooLong": "İsim 255 karakter veya daha az olmalıdır.",
|
||||
"error.emailRequired": "E-posta gerekli",
|
||||
"error.roleRequired": "Rol gerekli",
|
||||
"error.idRequired": "Kimlik (ID) gerekli",
|
||||
"error.nameRequired": "İsim gerekli",
|
||||
"error.providerRequired": "Sağlayıcı gerekli",
|
||||
"error.apiKeyRequired": "API anahtarı gerekli",
|
||||
"error.modelRequired": "Model gerekli",
|
||||
"error.reloadAmountMin": "Yükleme tutarı en az ${{amount}} olmalıdır",
|
||||
"error.reloadTriggerMin": "Bakiye tetikleyicisi en az ${{amount}} olmalıdır",
|
||||
|
||||
"home.title": "OpenCode | Açık kaynaklı yapay zeka kodlama ajanı",
|
||||
|
||||
"temp.title": "opencode | Terminal için geliştirilmiş yapay zeka kodlama ajanı",
|
||||
"temp.hero.title": "Terminal için geliştirilmiş yapay zeka kodlama ajanı",
|
||||
"temp.zen": "opencode zen",
|
||||
"temp.getStarted": "Başlayın",
|
||||
"temp.feature.native.title": "Yerel (Native) TUI",
|
||||
"temp.feature.native.body": "Duyarlı, yerel, temalandırılabilir bir terminal arayüzü",
|
||||
"temp.feature.zen.beforeLink": "opencode tarafından sağlanan ",
|
||||
"temp.feature.zen.link": "seçkin modeller listesi",
|
||||
"temp.feature.zen.afterLink": "",
|
||||
"temp.feature.models.beforeLink": "Yerel modeller dahil 75+ LLM sağlayıcısını ",
|
||||
"temp.feature.models.afterLink": " üzerinden destekler",
|
||||
"temp.screenshot.caption": "opencode TUI ve tokyonight teması",
|
||||
"temp.screenshot.alt": "tokyonight temalı opencode TUI",
|
||||
|
||||
"home.banner.badge": "Yeni",
|
||||
"home.banner.text": "Masaustu uygulamasi beta olarak kullanilabilir",
|
||||
"home.banner.text": "Masaüstü uygulaması beta olarak kullanılabilir",
|
||||
"home.banner.platforms": "macOS, Windows ve Linux'ta",
|
||||
"home.banner.downloadNow": "Simdi indir",
|
||||
"home.banner.downloadBetaNow": "Masaustu betayi simdi indir",
|
||||
"home.banner.downloadNow": "Şimdi indir",
|
||||
"home.banner.downloadBetaNow": "Masaüstü betayı şimdi indir",
|
||||
|
||||
"home.hero.title": "Acik kaynakli yapay zeka kodlama ajani",
|
||||
"home.hero.subtitle.a": "Ucretsiz modeller dahil, ya da herhangi bir saglayicidan herhangi bir modeli baglayin,",
|
||||
"home.hero.subtitle.b": "Claude, GPT, Gemini ve daha fazlasi dahil.",
|
||||
"home.hero.title": "Açık kaynaklı yapay zeka kodlama ajanı",
|
||||
"home.hero.subtitle.a": "Ücretsiz modeller dahil veya herhangi bir sağlayıcıdan herhangi bir modeli bağlayın,",
|
||||
"home.hero.subtitle.b": "Claude, GPT, Gemini ve daha fazlası dahil.",
|
||||
|
||||
"home.install.ariaLabel": "Kurulum secenekleri",
|
||||
"home.install.ariaLabel": "Kurulum seçenekleri",
|
||||
|
||||
"home.what.title": "OpenCode nedir?",
|
||||
"home.what.body":
|
||||
"OpenCode, terminalinizde, IDE'nizde veya masaustunde kod yazmaniza yardim eden acik kaynakli bir ajandir.",
|
||||
"OpenCode, terminalinizde, IDE'nizde veya masaüstünde kod yazmanıza yardım eden açık kaynaklı bir ajandır.",
|
||||
"home.what.lsp.title": "LSP etkin",
|
||||
"home.what.lsp.body": "LLM icin dogru LSP'leri otomatik olarak yukler",
|
||||
"home.what.multiSession.title": "Coklu oturum",
|
||||
"home.what.multiSession.body": "Ayni projede birden fazla ajani paralel calistirin",
|
||||
"home.what.shareLinks.title": "Paylasim baglantilari",
|
||||
"home.what.shareLinks.body": "Referans veya hata ayiklama icin herhangi bir oturumu baglanti olarak paylasin",
|
||||
"home.what.lsp.body": "LLM için doğru LSP'leri otomatik olarak yükler",
|
||||
"home.what.multiSession.title": "Çoklu oturum",
|
||||
"home.what.multiSession.body": "Aynı projede birden fazla ajanı paralel çalıştırın",
|
||||
"home.what.shareLinks.title": "Paylaşım bağlantıları",
|
||||
"home.what.shareLinks.body": "Referans veya hata ayıklama için herhangi bir oturumu bağlantı olarak paylaşın",
|
||||
"home.what.copilot.title": "GitHub Copilot",
|
||||
"home.what.copilot.body": "Copilot hesabinizi kullanmak icin GitHub ile giris yapin",
|
||||
"home.what.copilot.body": "Copilot hesabınızı kullanmak için GitHub ile giriş yapın",
|
||||
"home.what.chatgptPlus.title": "ChatGPT Plus/Pro",
|
||||
"home.what.chatgptPlus.body": "ChatGPT Plus veya Pro hesabinizi kullanmak icin OpenAI ile giris yapin",
|
||||
"home.what.chatgptPlus.body": "ChatGPT Plus veya Pro hesabınızı kullanmak için OpenAI ile giriş yapın",
|
||||
"home.what.anyModel.title": "Herhangi bir model",
|
||||
"home.what.anyModel.body": "Models.dev uzerinden 75+ LLM saglayicisi, yerel modeller dahil",
|
||||
"home.what.anyEditor.title": "Herhangi bir editor",
|
||||
"home.what.anyEditor.body": "Terminal arayuzu, masaustu uygulamasi ve IDE uzantisi olarak kullanilabilir",
|
||||
"home.what.readDocs": "Dokumanlari oku",
|
||||
"home.what.anyModel.body": "Models.dev üzerinden 75+ LLM sağlayıcısı, yerel modeller dahil",
|
||||
"home.what.anyEditor.title": "Herhangi bir editör",
|
||||
"home.what.anyEditor.body": "Terminal arayüzü, masaüstü uygulaması ve IDE uzantısı olarak kullanılabilir",
|
||||
"home.what.readDocs": "Dokümanları oku",
|
||||
|
||||
"home.growth.title": "Acik kaynakli yapay zeka kodlama ajani",
|
||||
"home.growth.title": "Açık kaynaklı yapay zeka kodlama ajanı",
|
||||
"home.growth.body":
|
||||
"GitHub'da <strong>{{stars}}</strong>+ yildiz, <strong>{{contributors}}</strong> katilimci ve <strong>{{commits}}</strong>+ commit ile OpenCode, her ay <strong>{{monthlyUsers}}</strong>+ gelistirici tarafindan kullaniliyor ve guveniliyor.",
|
||||
"home.growth.githubStars": "GitHub yildizlari",
|
||||
"home.growth.contributors": "Katilimcilar",
|
||||
"home.growth.monthlyDevs": "Aylik gelistiriciler",
|
||||
"GitHub'da <strong>{{stars}}</strong>+ yıldız, <strong>{{contributors}}</strong> katılımcı ve <strong>{{commits}}</strong>+ commit ile OpenCode, her ay <strong>{{monthlyUsers}}</strong>+ geliştirici tarafından kullanılıyor ve güveniliyor.",
|
||||
"home.growth.githubStars": "GitHub Yıldızları",
|
||||
"home.growth.contributors": "Katılımcılar",
|
||||
"home.growth.monthlyDevs": "Aylık Geliştiriciler",
|
||||
|
||||
"home.privacy.title": "Once gizlilik icin tasarlandi",
|
||||
"home.privacy.title": "Önce gizlilik için tasarlandı",
|
||||
"home.privacy.body":
|
||||
"OpenCode kodunuzu veya baglam verilerinizi saklamaz; bu sayede gizlilige duyarli ortamlarda calisabilir.",
|
||||
"home.privacy.learnMore": "Hakkinda daha fazla bilgi:",
|
||||
"OpenCode kodunuzu veya bağlam verilerinizi saklamaz; bu sayede gizliliğe duyarlı ortamlarda çalışabilir.",
|
||||
"home.privacy.learnMore": "Hakkında daha fazla bilgi:",
|
||||
"home.privacy.link": "gizlilik",
|
||||
|
||||
"home.faq.q1": "OpenCode nedir?",
|
||||
"home.faq.a1":
|
||||
"OpenCode, herhangi bir AI modeliyle kod yazmaniza ve calistirmaniza yardim eden acik kaynakli bir ajandir. Terminal arayuzu, masaustu uygulamasi veya IDE uzantisi olarak kullanilabilir.",
|
||||
"home.faq.q2": "OpenCode'u nasil kullanirim?",
|
||||
"home.faq.a2.before": "Baslamanin en kolay yolu",
|
||||
"home.faq.a2.link": "girisi okumaktir",
|
||||
"home.faq.q3": "OpenCode icin ek AI aboneliklerine ihtiyacim var mi?",
|
||||
"home.faq.a3.p1": "Sart degil. OpenCode, hesap acmadan kullanabileceginiz ucretsiz modellerle gelir.",
|
||||
"home.faq.a3.p2.beforeZen": "Bunun disinda, populer kodlama modellerini kullanmak icin bir",
|
||||
"home.faq.a3.p2.afterZen": " hesabi olusturabilirsiniz.",
|
||||
"home.faq.a3.p3": "Zen'i oneriyoruz, ancak OpenCode OpenAI, Anthropic, xAI gibi populer saglayicilarla da calisir.",
|
||||
"OpenCode, herhangi bir AI modeliyle kod yazmanıza ve çalıştırmanıza yardım eden açık kaynaklı bir ajandır. Terminal arayüzü, masaüstü uygulaması veya IDE uzantısı olarak kullanılabilir.",
|
||||
"home.faq.q2": "OpenCode'u nasıl kullanırım?",
|
||||
"home.faq.a2.before": "Başlamanın en kolay yolu",
|
||||
"home.faq.a2.link": "girişi okumaktır",
|
||||
"home.faq.q3": "OpenCode için ek AI aboneliklerine ihtiyacım var mı?",
|
||||
"home.faq.a3.p1": "Şart değil. OpenCode, hesap açmadan kullanabileceğiniz ücretsiz modellerle gelir.",
|
||||
"home.faq.a3.p2.beforeZen": "Bunun dışında, popüler kodlama modellerini kullanmak için bir",
|
||||
"home.faq.a3.p2.afterZen": " hesabı oluşturabilirsiniz.",
|
||||
"home.faq.a3.p3": "Zen'i öneriyoruz, ancak OpenCode OpenAI, Anthropic, xAI gibi popüler sağlayıcılarla da çalışır.",
|
||||
"home.faq.a3.p4.beforeLocal": "Hatta",
|
||||
"home.faq.a3.p4.localLink": "yerel modellerinizi baglayabilirsiniz",
|
||||
"home.faq.a3.p4.localLink": "yerel modellerinizi",
|
||||
"home.faq.q4": "Mevcut AI aboneliklerimi OpenCode ile kullanabilir miyim?",
|
||||
"home.faq.a4.p1":
|
||||
"Evet. OpenCode tum buyuk saglayicilarin aboneliklerini destekler. Claude Pro/Max, ChatGPT Plus/Pro veya GitHub Copilot kullanabilirsiniz.",
|
||||
"Evet. OpenCode tüm büyük sağlayıcıların aboneliklerini destekler. Claude Pro/Max, ChatGPT Plus/Pro veya GitHub Copilot kullanabilirsiniz.",
|
||||
"home.faq.q5": "OpenCode'u sadece terminalde mi kullanabilirim?",
|
||||
"home.faq.a5.beforeDesktop": "Artik hayir! OpenCode simdi",
|
||||
"home.faq.a5.desktop": "masaustu",
|
||||
"home.faq.a5.beforeDesktop": "Artık hayır! OpenCode şimdi",
|
||||
"home.faq.a5.desktop": "masaüstü",
|
||||
"home.faq.a5.and": "ve",
|
||||
"home.faq.a5.web": "web",
|
||||
"home.faq.q6": "OpenCode ne kadar?",
|
||||
"home.faq.a6":
|
||||
"OpenCode %100 ucretsizdir. Ayrica ucretsiz model setiyle gelir. Baska bir saglayici baglarsaniz ek maliyetler olabilir.",
|
||||
"OpenCode %100 ücretsizdir. Ayrıca ücretsiz model setiyle gelir. Başka bir sağlayıcı bağlarsanız ek maliyetler olabilir.",
|
||||
"home.faq.q7": "Veri ve gizlilik ne olacak?",
|
||||
"home.faq.a7.p1":
|
||||
"Verileriniz yalnizca ucretsiz modellerimizi kullandiginizda veya paylasilabilir baglantilar olusturdugunuzda saklanir.",
|
||||
"Verileriniz yalnızca ücretsiz modellerimizi kullandığınızda veya paylaşılabilir bağlantılar oluşturduğunuzda saklanır.",
|
||||
"home.faq.a7.p2.beforeModels": "Daha fazla bilgi:",
|
||||
"home.faq.a7.p2.modelsLink": "modellerimiz",
|
||||
"home.faq.a7.p2.and": "ve",
|
||||
"home.faq.a7.p2.shareLink": "paylasim sayfalari",
|
||||
"home.faq.q8": "OpenCode acik kaynak mi?",
|
||||
"home.faq.a8.p1": "Evet, OpenCode tamamen acik kaynaktir. Kaynak kodu",
|
||||
"home.faq.a8.p2": "altinda",
|
||||
"home.faq.a8.mitLicense": "MIT Lisansi",
|
||||
"home.faq.a7.p2.shareLink": "paylaşım sayfaları",
|
||||
"home.faq.q8": "OpenCode açık kaynak mı?",
|
||||
"home.faq.a8.p1": "Evet, OpenCode tamamen açık kaynaktır. Kaynak kodu",
|
||||
"home.faq.a8.p2": "altında",
|
||||
"home.faq.a8.mitLicense": "MIT Lisansı",
|
||||
"home.faq.a8.p3":
|
||||
", yani herkes kullanabilir, degistirebilir veya gelistirmeye katkida bulunabilir. Topluluktan herkes issue acabilir, pull request gonderebilir ve islevselligi genisletebilir.",
|
||||
", yani herkes kullanabilir, değiştirebilir veya geliştirmeye katkıda bulunabilir. Topluluktan herkes issue açabilir, pull request gönderebilir ve işlevselliği genişletebilir.",
|
||||
|
||||
"home.zenCta.title": "Kodlama ajanlari icin guvenilir, optimize modeller",
|
||||
"home.zenCta.title": "Kodlama ajanları için güvenilir, optimize modeller",
|
||||
"home.zenCta.body":
|
||||
"Zen, OpenCode'un kodlama ajanlari icin ozel olarak test edip benchmark ettigi secilmis AI modellerine erisim saglar. Saglayicilar arasinda tutarsiz performans ve kalite konusunda endiselenmeyin; calisan, dogrulanmis modelleri kullanin.",
|
||||
"home.zenCta.link": "Zen hakkinda",
|
||||
"Zen, OpenCode'un kodlama ajanları için özel olarak test edip benchmark ettiği seçilmiş AI modellerine erişim sağlar. Sağlayıcılar arasında tutarsız performans ve kalite konusunda endişelenmeyin; çalışan, doğrulanmış modelleri kullanın.",
|
||||
"home.zenCta.link": "Zen hakkında",
|
||||
|
||||
"download.title": "OpenCode | Indir",
|
||||
|
||||
"zen.title": "OpenCode Zen | Kodlama ajanlari icin guvenilir, optimize edilmis modellerin secilmis seti",
|
||||
"zen.hero.title": "Kodlama ajanlari icin guvenilir, optimize modeller",
|
||||
"zen.title": "OpenCode Zen | Kodlama ajanları için güvenilir, optimize edilmiş modellerin seçilmiş seti",
|
||||
"zen.hero.title": "Kodlama ajanları için güvenilir, optimize modeller",
|
||||
"zen.hero.body":
|
||||
"Zen, OpenCode'un kodlama ajanlari icin ozel olarak test edip benchmark ettigi secilmis AI modellerine erisim saglar. Saglayicilar arasinda tutarsiz performans ve kalite konusunda endiselenmeyin; calisan, dogrulanmis modelleri kullanin.",
|
||||
"Zen, OpenCode'un kodlama ajanları için özel olarak test edip benchmark ettiği seçilmiş AI modellerine erişim sağlar. Sağlayıcılar arasında tutarsız performans ve kalite konusunda endişelenmeyin; çalışan, doğrulanmış modelleri kullanın.",
|
||||
|
||||
"zen.faq.q1": "OpenCode Zen nedir?",
|
||||
"zen.faq.a1":
|
||||
"Zen, OpenCode ekibi tarafindan olusturulan ve kodlama ajanlari icin test edilip benchmark edilen secilmis bir AI model setidir.",
|
||||
"zen.faq.q2": "Zen'i daha dogru yapan nedir?",
|
||||
"Zen, OpenCode ekibi tarafından oluşturulan ve kodlama ajanları için test edilip benchmark edilen seçilmiş bir AI model setidir.",
|
||||
"zen.faq.q2": "Zen'i daha doğru yapan nedir?",
|
||||
"zen.faq.a2":
|
||||
"Zen yalnizca kodlama ajanlari icin ozel olarak test edilip benchmark edilmis modelleri sunar. Biftek kesmek icin tereyag bicagi kullanmazsin; kodlama icin kotu modeller kullanma.",
|
||||
"Zen yalnızca kodlama ajanları için özel olarak test edilip benchmark edilmiş modelleri sunar. Biftek kesmek için tereyağı bıçağı kullanmazsın; kodlama için kötü modeller kullanma.",
|
||||
"zen.faq.q3": "Zen daha ucuz mu?",
|
||||
"zen.faq.a3":
|
||||
"Zen kar amacli degildir. Zen, model saglayicilarinin maliyetlerini size yansitir. Zen'in kullanimi arttikca OpenCode daha iyi fiyatlar pazarlayabilir ve bunlari size yansitabilir.",
|
||||
"Zen kâr amaçlı değildir. Zen, model sağlayıcılarının maliyetlerini size yansıtır. Zen'in kullanımı arttıkça OpenCode daha iyi fiyatlar pazarlayabilir ve bunları size yansıtabilir.",
|
||||
"zen.faq.q4": "Zen ne kadar?",
|
||||
"zen.faq.a4.p1.beforePricing": "Zen",
|
||||
"zen.faq.a4.p1.pricingLink": "istek basi ucret alir",
|
||||
"zen.faq.a4.p1.pricingLink": "istek başı ücret alır",
|
||||
"zen.faq.a4.p1.afterPricing":
|
||||
"ve hicbir markup eklemez, yani model saglayicinin ucretlendirdigi tutari aynen odersiniz.",
|
||||
"zen.faq.a4.p2.beforeAccount": "Toplam maliyetiniz kullanim miktarina baglidir ve aylik harcama limitlerini",
|
||||
"zen.faq.a4.p2.accountLink": "hesabinizda ayarlayabilirsiniz",
|
||||
"ve hiçbir markup eklemez, yani model sağlayıcının ücretlendirdiği tutarı aynen ödersiniz.",
|
||||
"zen.faq.a4.p2.beforeAccount": "Toplam maliyetiniz kullanım miktarına bağlıdır ve aylık harcama limitlerini",
|
||||
"zen.faq.a4.p2.accountLink": "hesabınızda ayarlayabilirsiniz",
|
||||
"zen.faq.a4.p3":
|
||||
"Maliyetleri karsilamak icin OpenCode, $20 bakiye yuklemesi basina yalnizca $1.23 tutarinda kucuk bir odeme isleme ucreti ekler.",
|
||||
"Maliyetleri karşılamak için OpenCode, $20 bakiye yüklemesi başına yalnızca $1.23 tutarında küçük bir ödeme işleme ücreti ekler.",
|
||||
"zen.faq.q5": "Veri ve gizlilik ne olacak?",
|
||||
"zen.faq.a5.beforeExceptions":
|
||||
"Tum Zen modelleri ABD'de barindirilir. Saglayicilar sifir-retention politikasini uygular ve verilerinizi model egitimi icin kullanmaz; su",
|
||||
"Tüm Zen modelleri ABD'de barındırılır. Sağlayıcılar sıfır-retention politikasını uygular ve verilerinizi model eğitimi için kullanmaz; şu",
|
||||
"zen.faq.a5.exceptionsLink": "istisnalarla",
|
||||
"zen.faq.q6": "Harcama limitleri ayarlayabilir miyim?",
|
||||
"zen.faq.a6": "Evet, hesabinizda aylik harcama limitleri ayarlayabilirsiniz.",
|
||||
"zen.faq.q7": "Iptal edebilir miyim?",
|
||||
"zen.faq.a6": "Evet, hesabınızda aylık harcama limitleri ayarlayabilirsiniz.",
|
||||
"zen.faq.q7": "İptal edebilir miyim?",
|
||||
"zen.faq.a7":
|
||||
"Evet, istediginiz zaman faturalandirmayi devre disi birakabilir ve kalan bakiyenizi kullanabilirsiniz.",
|
||||
"zen.faq.q8": "Zen'i diger kodlama ajanlariyla kullanabilir miyim?",
|
||||
"Evet, istediğiniz zaman faturalandırmayı devre dışı bırakabilir ve kalan bakiyenizi kullanabilirsiniz.",
|
||||
"zen.faq.q8": "Zen'i diğer kodlama ajanlarıyla kullanabilir miyim?",
|
||||
"zen.faq.a8":
|
||||
"Zen OpenCode ile harika calisir, ama Zen'i herhangi bir ajan ile kullanabilirsiniz. Tercih ettiginiz kodlama ajaninda kurulum talimatlarini izleyin.",
|
||||
"zen.cta.start": "Zen'yi kullanmaya başlayın",
|
||||
"zen.pricing.title": "20$ ekle Kullandıkça öde bakiyesi",
|
||||
"Zen OpenCode ile harika çalışır, ama Zen'i herhangi bir ajan ile kullanabilirsiniz. Tercih ettiğiniz kodlama ajanında kurulum talimatlarını izleyin.",
|
||||
|
||||
"zen.cta.start": "Zen'i kullanmaya başlayın",
|
||||
"zen.pricing.title": "20$ Kullandıkça öde bakiyesi ekle",
|
||||
"zen.pricing.fee": "(+1,23$ kart işlem ücreti)",
|
||||
"zen.pricing.body":
|
||||
"Herhangi bir aracıyla kullanın. Aylık harcama limitlerini belirleyin. İstediğiniz zaman iptal edin.",
|
||||
"Herhangi bir ajan ile kullanın. Aylık harcama limitlerini belirleyin. İstediğiniz zaman iptal edin.",
|
||||
"zen.problem.title": "Zen hangi sorunu çözüyor?",
|
||||
"zen.problem.body":
|
||||
"Pek çok model mevcut ancak yalnızca birkaçı kodlama aracılarıyla iyi çalışıyor. Çoğu sağlayıcı, bunları değişen sonuçlarla farklı şekilde yapılandırır.",
|
||||
"Pek çok model mevcut ancak yalnızca birkaçı kodlama ajanlarıyla iyi çalışıyor. Çoğu sağlayıcı, bunları değişen sonuçlarla farklı şekilde yapılandırır.",
|
||||
"zen.problem.subtitle": "Bu sorunu yalnızca OpenCode kullanıcıları için değil, herkes için düzeltiyoruz.",
|
||||
"zen.problem.item1": "Seçilen modelleri test etme ve ekiplerine danışmanlık yapma",
|
||||
"zen.problem.item2": "Düzgün bir şekilde teslim edildiklerinden emin olmak için sağlayıcılarla birlikte çalışmak",
|
||||
"zen.problem.item2": "Düzgün bir şekilde teslim edildiklerinden emin olmak için sağlayıcılarla çalışmak",
|
||||
"zen.problem.item3": "Önerdiğimiz tüm model-sağlayıcı kombinasyonlarının karşılaştırılması",
|
||||
"zen.how.title": "Zen nasıl çalışır?",
|
||||
"zen.how.body": "Zen'yi OpenCode ile kullanmanızı önersek de, Zen'yi herhangi bir aracıyla kullanabilirsiniz.",
|
||||
"zen.how.body": "Zen'i OpenCode ile kullanmanızı önersek de, Zen'i herhangi bir ajan ile kullanabilirsiniz.",
|
||||
"zen.how.step1.title": "Kaydolun ve 20$ bakiye ekleyin",
|
||||
"zen.how.step1.beforeLink": "takip et",
|
||||
"zen.how.step1.beforeLink": "takip edin",
|
||||
"zen.how.step1.link": "kurulum talimatları",
|
||||
"zen.how.step2.title": "Şeffaf fiyatlandırmayla Zen kullanın",
|
||||
"zen.how.step2.link": "istek başına ödeme",
|
||||
@@ -211,247 +241,232 @@ export const dict = {
|
||||
"zen.privacy.beforeExceptions":
|
||||
"Tüm Zen modelleri ABD'de barındırılmaktadır. Sağlayıcılar sıfır saklama politikası izler ve verilerinizi model eğitimi için kullanmaz; şu",
|
||||
"zen.privacy.exceptionsLink": "aşağıdaki istisnalar",
|
||||
"download.meta.description": "OpenCode'u macOS, Windows ve Linux icin indir",
|
||||
"download.hero.title": "OpenCode'u indir",
|
||||
"download.hero.subtitle": "macOS, Windows ve Linux icin Beta olarak sunuluyor",
|
||||
"download.hero.button": "{{os}} icin indir",
|
||||
"download.section.terminal": "OpenCode Terminal",
|
||||
"download.section.desktop": "OpenCode Desktop (Beta)",
|
||||
"download.section.extensions": "OpenCode Eklentileri",
|
||||
"download.section.integrations": "OpenCode Entegrasyonlari",
|
||||
"download.action.download": "Indir",
|
||||
"download.action.install": "Kur",
|
||||
|
||||
"download.platform.macosAppleSilicon": "macOS (Apple Silicon)",
|
||||
"download.platform.macosIntel": "macOS (Intel)",
|
||||
"download.platform.windowsX64": "Windows (x64)",
|
||||
"download.platform.linuxDeb": "Linux (.deb)",
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
"black.meta.title": "OpenCode Black | Dünyanın en iyi kodlama modellerine erişin",
|
||||
"black.meta.description": "OpenCode Black abonelik planlarıyla Claude, GPT, Gemini ve daha fazlasına erişin.",
|
||||
"black.hero.title": "Dünyanın en iyi kodlama modellerine erişin",
|
||||
"black.hero.subtitle": "Claude, GPT, Gemini ve daha fazlası dahil",
|
||||
"black.title": "OpenCode Black | Fiyatlandırma",
|
||||
"black.plan.icon20": "Black 20 planı",
|
||||
"black.plan.icon100": "Black 100 planı",
|
||||
"black.plan.icon200": "Black 200 planı",
|
||||
"black.plan.multiplier100": "Black 20'den 5 kat daha fazla kullanım",
|
||||
"black.plan.multiplier200": "Black 20'den 20 kat daha fazla kullanım",
|
||||
"black.price.perMonth": "aylık",
|
||||
"black.price.perPersonBilledMonthly": "kişi başı aylık faturalandırılır",
|
||||
"black.terms.1": "Aboneliğiniz hemen başlamayacak",
|
||||
"black.terms.2": "Bekleme listesine ekleneceksiniz ve yakında aktive edileceksiniz",
|
||||
"black.terms.3": "Kartınızdan sadece aboneliğiniz aktive edildiğinde ödeme alınacaktır",
|
||||
"black.terms.4": "Kullanım limitleri geçerlidir, yoğun otomatik kullanım limitlere daha erken ulaşabilir",
|
||||
"black.terms.5": "Abonelikler bireyler içindir, ekipler için Enterprise ile iletişime geçin",
|
||||
"black.terms.6": "Limitler ayarlanabilir ve planlar gelecekte sonlandırılabilir",
|
||||
"black.terms.7": "Aboneliğinizi istediğiniz zaman iptal edin",
|
||||
"black.action.continue": "Devam et",
|
||||
"black.finePrint.beforeTerms": "Gösterilen fiyatlara geçerli vergiler dahil değildir",
|
||||
"black.finePrint.terms": "Hizmet Şartları",
|
||||
"black.workspace.title": "OpenCode Black | Çalışma Alanı Seç",
|
||||
"black.workspace.selectPlan": "Bu plan için bir çalışma alanı seçin",
|
||||
"black.workspace.name": "Çalışma Alanı {{n}}",
|
||||
"black.subscribe.title": "OpenCode Black'e Abone Ol",
|
||||
"black.subscribe.paymentMethod": "Ödeme yöntemi",
|
||||
"black.subscribe.loadingPaymentForm": "Ödeme formu yükleniyor...",
|
||||
"black.subscribe.selectWorkspaceToContinue": "Devam etmek için bir çalışma alanı seçin",
|
||||
"black.subscribe.failurePrefix": "Olamaz!",
|
||||
"black.subscribe.error.generic": "Bir hata oluştu",
|
||||
"black.subscribe.error.invalidPlan": "Geçersiz plan",
|
||||
"black.subscribe.error.workspaceRequired": "Çalışma alanı ID'si gerekli",
|
||||
"black.subscribe.error.alreadySubscribed": "Bu çalışma alanının zaten bir aboneliği var",
|
||||
"black.subscribe.processing": "İşleniyor...",
|
||||
"black.subscribe.submit": "${{plan}} Abone Ol",
|
||||
"black.subscribe.form.chargeNotice": "Sadece aboneliğiniz aktive edildiğinde ücretlendirileceksiniz",
|
||||
"black.subscribe.success.title": "OpenCode Black bekleme listesindesiniz",
|
||||
"black.subscribe.success.subscriptionPlan": "Abonelik planı",
|
||||
"black.subscribe.success.planName": "OpenCode Black {{plan}}",
|
||||
"black.subscribe.success.amount": "Tutar",
|
||||
"black.subscribe.success.amountValue": "Aylık ${{plan}}",
|
||||
"black.subscribe.success.paymentMethod": "Ödeme yöntemi",
|
||||
"black.subscribe.success.dateJoined": "Katılma tarihi",
|
||||
"black.subscribe.success.chargeNotice": "Aboneliğiniz aktive edildiğinde kartınızdan ödeme alınacaktır",
|
||||
|
||||
"download.faq.a3.beforeLocal":
|
||||
"Tam olarak degil, ama muhtemelen. OpenCode'u ucretli bir saglayiciya baglamak istiyorsaniz bir AI aboneligi gerekir, ancak",
|
||||
"download.faq.a3.localLink": "yerel modeller",
|
||||
"download.faq.a3.afterLocal.beforeZen": "ile ucretsiz calisabilirsiniz. Kullanicilari",
|
||||
"download.faq.a3.afterZen":
|
||||
" kullanmaya tesvik ediyoruz, ancak OpenCode OpenAI, Anthropic, xAI vb. gibi tum populer saglayicilarla calisir.",
|
||||
|
||||
"download.faq.a5.p1": "OpenCode %100 ucretsizdir.",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"Ek maliyetler, bir model saglayicisina olan aboneliginizden gelir. OpenCode herhangi bir model saglayicisiyla calisir, ancak",
|
||||
"download.faq.a5.p2.afterZen": " kullanmanizi oneririz.",
|
||||
|
||||
"download.faq.a6.p1":
|
||||
"Verileriniz ve bilginiz yalnizca OpenCode'da paylasilabilir baglantilar olusturdugunuzda saklanir.",
|
||||
"download.faq.a6.p2.beforeShare": "Daha fazla bilgi:",
|
||||
"download.faq.a6.shareLink": "paylasim sayfalari",
|
||||
|
||||
"enterprise.title": "OpenCode | Kurumunuz icin kurumsal cozumler",
|
||||
"enterprise.meta.description": "Kurumsal cozumler icin OpenCode ile iletisime gecin",
|
||||
"enterprise.hero.title": "Kodunuz size aittir",
|
||||
"enterprise.hero.body1":
|
||||
"OpenCode, hicbir veri veya baglam saklamadan ve lisans kisitlamalari ya da sahiplik iddialari olmadan kurulusunuzun icinde guvenli sekilde calisir. Ekibinizle bir deneme baslatin, ardindan SSO'nuz ve dahili AI gecidiniz ile entegre ederek tum kurulusunuzda devreye alin.",
|
||||
"enterprise.hero.body2": "Nasil yardimci olabilecegimizi bize soyleyin.",
|
||||
"enterprise.form.name.label": "Ad soyad",
|
||||
"enterprise.form.name.placeholder": "Jeff Bezos",
|
||||
"enterprise.form.role.label": "Rol",
|
||||
"enterprise.form.role.placeholder": "Yonetim Kurulu Baskani",
|
||||
"enterprise.form.email.label": "Sirket e-postasi",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "Hangi problemi cozmeye calisiyorsunuz?",
|
||||
"enterprise.form.message.placeholder": "Su konuda yardima ihtiyacimiz var...",
|
||||
"enterprise.form.send": "Gonder",
|
||||
"enterprise.form.sending": "Gonderiliyor...",
|
||||
"enterprise.form.success": "Mesaj gonderildi, yakinda size donus yapacagiz.",
|
||||
"enterprise.faq.title": "SSS",
|
||||
"enterprise.faq.q1": "OpenCode Enterprise nedir?",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise, kodunuzun ve verilerinizin asla altyapinizi terk etmemesini saglamak isteyen kurumlar icindir. Bunu, SSO'nuz ve dahili AI gecidiniz ile entegre olan merkezilestirilmis bir konfigurasyonla saglar.",
|
||||
"enterprise.faq.q2": "OpenCode Enterprise'a nasil baslarim?",
|
||||
"enterprise.faq.a2":
|
||||
"Ekibinizle dahili bir deneme ile baslayin. OpenCode varsayilan olarak kodunuzu veya baglam verilerinizi saklamaz, bu da baslamayi kolaylastirir. Ardindan fiyatlandirma ve uygulama seceneklerini gorusmek icin bize ulasin.",
|
||||
"enterprise.faq.q3": "Kurumsal fiyatlandirma nasil calisir?",
|
||||
"enterprise.faq.a3":
|
||||
"Kullanici basi (per-seat) kurumsal fiyatlandirma sunuyoruz. Kendi LLM gecidiniz varsa, kullanilan tokenlar icin ucret almiyoruz. Daha fazla bilgi icin, kurumunuzun ihtiyaclarina gore ozel bir teklif icin bize ulasin.",
|
||||
"enterprise.faq.q4": "OpenCode Enterprise ile verilerim guvende mi?",
|
||||
"enterprise.faq.a4":
|
||||
"Evet. OpenCode kodunuzu veya baglam verilerinizi saklamaz. Tum isleme yerel olarak ya da AI saglayiciniza dogrudan API cagirilari ile gerceklestirilir. Merkezilestirilmis konfigurasyon ve SSO entegrasyonu ile verileriniz kurumunuzun altyapisi icinde guvende kalir.",
|
||||
|
||||
"brand.title": "OpenCode | Marka",
|
||||
"brand.meta.description": "OpenCode marka kilavuzu",
|
||||
"brand.heading": "Marka kilavuzu",
|
||||
"brand.subtitle": "OpenCode markasi ile calismaniza yardimci olacak kaynaklar ve varliklar.",
|
||||
"brand.downloadAll": "Tum varliklari indir",
|
||||
"changelog.title": "OpenCode | Degisiklik gunlugu",
|
||||
"changelog.meta.description": "OpenCode surum notlari ve degisiklik gunlugu",
|
||||
"changelog.hero.title": "Degisiklik gunlugu",
|
||||
"changelog.hero.subtitle": "OpenCode icin yeni guncellemeler ve iyilestirmeler",
|
||||
"changelog.empty": "Degisiklik gunlugu kaydi bulunamadi.",
|
||||
"changelog.viewJson": "JSON'u goruntule",
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "API Anahtarları",
|
||||
"workspace.nav.members": "Üyeler",
|
||||
"workspace.nav.billing": "Faturalandırma",
|
||||
"workspace.nav.settings": "Ayarlar",
|
||||
"workspace.home.banner.beforeLink": "Kodlama aracıları için güvenilir optimize edilmiş modeller.",
|
||||
|
||||
"workspace.home.banner.beforeLink": "Kodlama ajanları için güvenilir optimize edilmiş modeller.",
|
||||
"workspace.home.billing.loading": "Yükleniyor...",
|
||||
"workspace.home.billing.enable": "Faturalandırmayı etkinleştir",
|
||||
"workspace.home.billing.currentBalance": "Mevcut bakiye",
|
||||
|
||||
"workspace.newUser.feature.tested.title": "Test Edilmiş ve Doğrulanmış Modeller",
|
||||
"workspace.newUser.feature.tested.body":
|
||||
"En iyi performansı sağlamak için modelleri özellikle kodlama aracılarına yönelik olarak karşılaştırdık ve test ettik.",
|
||||
"En iyi performansı sağlamak için modelleri özellikle kodlama ajanlarına yönelik olarak karşılaştırdık ve test ettik.",
|
||||
"workspace.newUser.feature.quality.title": "En Yüksek Kalite",
|
||||
"workspace.newUser.feature.quality.body":
|
||||
"Optimum performans için yapılandırılmış modellere erişin; sürüm düşürme veya daha ucuz sağlayıcılara yönlendirme yok.",
|
||||
"workspace.newUser.feature.lockin.title": "Kilitlenme Yok",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"Zen'i herhangi bir kodlama aracısıyla kullanın ve istediğiniz zaman opencode ile diğer sağlayıcıları kullanmaya devam edin.",
|
||||
"Zen'i herhangi bir kodlama ajanıyla kullanın ve istediğiniz zaman opencode ile diğer sağlayıcıları kullanmaya devam edin.",
|
||||
"workspace.newUser.copyApiKey": "API anahtarını kopyala",
|
||||
"workspace.newUser.copyKey": "Anahtarı Kopyala",
|
||||
"workspace.newUser.copied": "Kopyalandı!",
|
||||
"workspace.newUser.step.enableBilling": "Faturalandırmayı etkinleştir",
|
||||
"workspace.newUser.step.login.before": "Koşmak",
|
||||
"workspace.newUser.step.login.before": "Çalıştır",
|
||||
"workspace.newUser.step.login.after": "ve opencode seçeneğini seçin",
|
||||
"workspace.newUser.step.pasteKey": "API anahtarınızı yapıştırın",
|
||||
"workspace.newUser.step.models.before": "opencode başlatın ve çalıştırın",
|
||||
"workspace.newUser.step.models.before": "opencode'u başlatın ve çalıştırın",
|
||||
"workspace.newUser.step.models.after": "bir model seçmek için",
|
||||
|
||||
"workspace.models.title": "Modeller",
|
||||
"workspace.models.subtitle.beforeLink": "Çalışma alanı üyelerinin hangi modellere erişebileceğini yönetin.",
|
||||
"workspace.models.table.model": "Modeli",
|
||||
"workspace.models.table.enabled": "Etkinleştirilmiş",
|
||||
"workspace.models.table.model": "Model",
|
||||
"workspace.models.table.enabled": "Etkin",
|
||||
|
||||
"workspace.providers.title": "Kendi Anahtarınızı Getirin",
|
||||
"workspace.providers.subtitle": "Yapay zeka sağlayıcılarından kendi API anahtarlarınızı yapılandırın.",
|
||||
"workspace.providers.placeholder": "{{provider}} API anahtarını girin ({{prefix}}...)",
|
||||
"workspace.providers.configure": "Yapılandır",
|
||||
"workspace.providers.edit": "Düzenlemek",
|
||||
"workspace.providers.delete": "Silmek",
|
||||
"workspace.providers.edit": "Düzenle",
|
||||
"workspace.providers.delete": "Sil",
|
||||
"workspace.providers.saving": "Kaydediliyor...",
|
||||
"workspace.providers.save": "Kaydetmek",
|
||||
"workspace.providers.table.provider": "sağlayıcı",
|
||||
"workspace.providers.save": "Kaydet",
|
||||
"workspace.providers.table.provider": "Sağlayıcı",
|
||||
"workspace.providers.table.apiKey": "API Anahtarı",
|
||||
|
||||
"workspace.usage.title": "Kullanım Geçmişi",
|
||||
"workspace.usage.subtitle": "Son API kullanımı ve maliyetleri.",
|
||||
"workspace.usage.empty": "Başlamak için ilk API çağrınızı yapın.",
|
||||
"workspace.usage.table.date": "Tarih",
|
||||
"workspace.usage.table.model": "Modeli",
|
||||
"workspace.usage.table.model": "Model",
|
||||
"workspace.usage.table.input": "Giriş",
|
||||
"workspace.usage.table.output": "Çıkış",
|
||||
"workspace.usage.table.cost": "Maliyet",
|
||||
"workspace.usage.breakdown.input": "Giriş",
|
||||
"workspace.usage.breakdown.cacheRead": "Önbellek Okuması",
|
||||
"workspace.usage.breakdown.cacheWrite": "Önbelleğe Yazma",
|
||||
"workspace.usage.breakdown.cacheWrite": "Önbellek Yazma",
|
||||
"workspace.usage.breakdown.output": "Çıkış",
|
||||
"workspace.usage.breakdown.reasoning": "muhakeme",
|
||||
"workspace.usage.breakdown.reasoning": "Muhakeme",
|
||||
"workspace.usage.subscription": "abonelik (${{amount}})",
|
||||
|
||||
"workspace.cost.title": "Maliyet",
|
||||
"workspace.cost.subtitle": "Modele göre ayrılmış kullanım maliyetleri.",
|
||||
"workspace.cost.allModels": "Tüm Modeller",
|
||||
"workspace.cost.allKeys": "Tüm Tuşlar",
|
||||
"workspace.cost.allKeys": "Tüm Anahtarlar",
|
||||
"workspace.cost.deletedSuffix": "(silindi)",
|
||||
"workspace.cost.empty": "Seçilen döneme ait kullanım verisi yok.",
|
||||
"workspace.cost.subscriptionShort": "alt",
|
||||
"workspace.cost.subscriptionShort": "abonelik",
|
||||
|
||||
"workspace.keys.title": "API Anahtarları",
|
||||
"workspace.keys.subtitle": "opencode hizmetlerine erişim için API anahtarlarınızı yönetin.",
|
||||
"workspace.keys.create": "API Anahtarı Oluşturun",
|
||||
"workspace.keys.create": "API Anahtarı Oluştur",
|
||||
"workspace.keys.placeholder": "Anahtar adını girin",
|
||||
"workspace.keys.empty": "Bir opencode Ağ Geçidi API anahtarı oluşturun",
|
||||
"workspace.keys.empty": "Bir opencode Gateway API anahtarı oluşturun",
|
||||
"workspace.keys.table.name": "İsim",
|
||||
"workspace.keys.table.key": "Anahtar",
|
||||
"workspace.keys.table.createdBy": "Oluşturan",
|
||||
"workspace.keys.table.lastUsed": "Son Kullanılan",
|
||||
"workspace.keys.copyApiKey": "API anahtarını kopyala",
|
||||
"workspace.keys.delete": "Silmek",
|
||||
"workspace.keys.delete": "Sil",
|
||||
|
||||
"workspace.members.title": "Üyeler",
|
||||
"workspace.members.subtitle": "Çalışma alanı üyelerini ve izinlerini yönetin.",
|
||||
"workspace.members.invite": "Üyeyi Davet Et",
|
||||
"workspace.members.inviting": "Davet ediliyor...",
|
||||
"workspace.members.beta.beforeLink": "Beta süresince çalışma alanları ekipler için ücretsizdir.",
|
||||
"workspace.members.form.invitee": "Davetli",
|
||||
"workspace.members.form.emailPlaceholder": "E-postayı girin",
|
||||
"workspace.members.form.emailPlaceholder": "E-posta girin",
|
||||
"workspace.members.form.role": "Rol",
|
||||
"workspace.members.form.monthlyLimit": "Aylık harcama limiti",
|
||||
"workspace.members.noLimit": "Sınır yok",
|
||||
"workspace.members.noLimitLowercase": "sınır yok",
|
||||
"workspace.members.noLimit": "Limit yok",
|
||||
"workspace.members.noLimitLowercase": "limit yok",
|
||||
"workspace.members.invited": "davet edildi",
|
||||
"workspace.members.edit": "Düzenlemek",
|
||||
"workspace.members.delete": "Silmek",
|
||||
"workspace.members.edit": "Düzenle",
|
||||
"workspace.members.delete": "Sil",
|
||||
"workspace.members.saving": "Kaydediliyor...",
|
||||
"workspace.members.save": "Kaydetmek",
|
||||
"workspace.members.save": "Kaydet",
|
||||
"workspace.members.table.email": "E-posta",
|
||||
"workspace.members.table.role": "Rol",
|
||||
"workspace.members.table.monthLimit": "Ay sınırı",
|
||||
"workspace.members.table.monthLimit": "Ay limiti",
|
||||
"workspace.members.role.admin": "Yönetici",
|
||||
"workspace.members.role.adminDescription": "Modelleri, üyeleri ve faturalamayı yönetebilir",
|
||||
"workspace.members.role.member": "Üye",
|
||||
"workspace.members.role.memberDescription": "Yalnızca kendileri için API anahtarları oluşturabilirler",
|
||||
|
||||
"workspace.settings.title": "Ayarlar",
|
||||
"workspace.settings.subtitle": "Çalışma alanı adınızı ve tercihlerinizi güncelleyin.",
|
||||
"workspace.settings.workspaceName": "Çalışma alanı adı",
|
||||
"workspace.settings.defaultName": "Varsayılan",
|
||||
"workspace.settings.updating": "Güncelleniyor...",
|
||||
"workspace.settings.save": "Kaydetmek",
|
||||
"workspace.settings.edit": "Düzenlemek",
|
||||
"workspace.settings.save": "Kaydet",
|
||||
"workspace.settings.edit": "Düzenle",
|
||||
|
||||
"workspace.billing.title": "Faturalandırma",
|
||||
"workspace.billing.subtitle.beforeLink": "Ödeme yöntemlerini yönetin.",
|
||||
"workspace.billing.contactUs": "Bize Ulaşın",
|
||||
"workspace.billing.subtitle.afterLink": "herhangi bir sorunuz varsa.",
|
||||
"workspace.billing.currentBalance": "Cari Bakiye",
|
||||
"workspace.billing.currentBalance": "Güncel Bakiye",
|
||||
"workspace.billing.add": "$ ekle",
|
||||
"workspace.billing.enterAmount": "Tutarı girin",
|
||||
"workspace.billing.loading": "Yükleniyor...",
|
||||
"workspace.billing.addAction": "Eklemek",
|
||||
"workspace.billing.addAction": "Ekle",
|
||||
"workspace.billing.addBalance": "Bakiye Ekle",
|
||||
"workspace.billing.linkedToStripe": "Stripe'a bağlı",
|
||||
"workspace.billing.manage": "Üstesinden gelmek",
|
||||
"workspace.billing.manage": "Yönet",
|
||||
"workspace.billing.enable": "Faturalandırmayı Etkinleştir",
|
||||
|
||||
"workspace.monthlyLimit.title": "Aylık Limit",
|
||||
"workspace.monthlyLimit.subtitle": "Hesabınız için aylık kullanım limiti belirleyin.",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "Ayar...",
|
||||
"workspace.monthlyLimit.set": "Ayarlamak",
|
||||
"workspace.monthlyLimit.edit": "Sınırı Düzenle",
|
||||
"workspace.monthlyLimit.noLimit": "Kullanım sınırı belirlenmedi.",
|
||||
"workspace.monthlyLimit.setting": "Ayarlanıyor...",
|
||||
"workspace.monthlyLimit.set": "Ayarla",
|
||||
"workspace.monthlyLimit.edit": "Limiti Düzenle",
|
||||
"workspace.monthlyLimit.noLimit": "Kullanım limiti belirlenmedi.",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "Şu anki kullanım",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "$",
|
||||
|
||||
"workspace.reload.title": "Otomatik Yeniden Yükleme",
|
||||
"workspace.reload.disabled.before": "Otomatik yeniden yükleme:",
|
||||
"workspace.reload.disabled.state": "engelli",
|
||||
"workspace.reload.disabled.state": "devre dışı",
|
||||
"workspace.reload.disabled.after": "Bakiye azaldığında otomatik olarak yeniden yüklemeyi etkinleştirin.",
|
||||
"workspace.reload.enabled.before": "Otomatik yeniden yükleme:",
|
||||
"workspace.reload.enabled.state": "etkinleştirilmiş",
|
||||
"workspace.reload.enabled.state": "etkin",
|
||||
"workspace.reload.enabled.middle": "Yeniden yükleyeceğiz",
|
||||
"workspace.reload.processingFee": "işlem ücreti",
|
||||
"workspace.reload.enabled.after": "dengeye ulaşıldığında",
|
||||
"workspace.reload.edit": "Düzenlemek",
|
||||
"workspace.reload.enable": "Olanak vermek",
|
||||
"workspace.reload.edit": "Düzenle",
|
||||
"workspace.reload.enable": "Etkinleştir",
|
||||
"workspace.reload.enableAutoReload": "Otomatik Yeniden Yüklemeyi Etkinleştir",
|
||||
"workspace.reload.reloadAmount": "ı yeniden yükle",
|
||||
"workspace.reload.whenBalanceReaches": "Bakiye a ulaştığında",
|
||||
"workspace.reload.reloadAmount": "Yükle $",
|
||||
"workspace.reload.whenBalanceReaches": "Bakiye $ seviyesine ulaştığında",
|
||||
"workspace.reload.saving": "Kaydediliyor...",
|
||||
"workspace.reload.save": "Kaydetmek",
|
||||
"workspace.reload.save": "Kaydet",
|
||||
"workspace.reload.failedAt": "Yeniden yükleme başarısız oldu:",
|
||||
"workspace.reload.reason": "Sebep:",
|
||||
"workspace.reload.updatePaymentMethod": "Lütfen ödeme yönteminizi güncelleyin ve tekrar deneyin.",
|
||||
"workspace.reload.retrying": "Yeniden deneniyor...",
|
||||
"workspace.reload.retry": "Yeniden dene",
|
||||
|
||||
"workspace.payments.title": "Ödeme Geçmişi",
|
||||
"workspace.payments.subtitle": "Son ödeme işlemleri.",
|
||||
"workspace.payments.table.date": "Tarih",
|
||||
"workspace.payments.table.paymentId": "Ödeme Kimliği",
|
||||
"workspace.payments.table.amount": "Miktar",
|
||||
"workspace.payments.table.receipt": "Fiş",
|
||||
"workspace.payments.table.amount": "Tutar",
|
||||
"workspace.payments.table.receipt": "Makbuz",
|
||||
"workspace.payments.type.credit": "kredi",
|
||||
"workspace.payments.type.subscription": "abonelik",
|
||||
"workspace.payments.view": "Görüş",
|
||||
"workspace.payments.view": "Görüntüle",
|
||||
|
||||
"workspace.black.loading": "Yükleniyor...",
|
||||
"workspace.black.time.day": "gün",
|
||||
"workspace.black.time.days": "günler",
|
||||
"workspace.black.time.days": "gün",
|
||||
"workspace.black.time.hour": "saat",
|
||||
"workspace.black.time.hours": "saat",
|
||||
"workspace.black.time.minute": "dakika",
|
||||
"workspace.black.time.minutes": "dakika",
|
||||
"workspace.black.time.fewSeconds": "birkaç saniye",
|
||||
"workspace.black.subscription.title": "Abonelik",
|
||||
"workspace.black.subscription.message": "Aylık {{plan}} karşılığında OpenCode Black'e abonesiniz.",
|
||||
"workspace.black.subscription.message": "Aylık ${{plan}} karşılığında OpenCode Black'e abonesiniz.",
|
||||
"workspace.black.subscription.manage": "Aboneliği Yönet",
|
||||
"workspace.black.subscription.rollingUsage": "5 Saatlik Kullanım",
|
||||
"workspace.black.subscription.weeklyUsage": "Haftalık Kullanım",
|
||||
@@ -461,11 +476,123 @@ export const dict = {
|
||||
"workspace.black.waitlist.joined": "Aylık ${{plan}} OpenCode Black planı için bekleme listesindesiniz.",
|
||||
"workspace.black.waitlist.ready": "Sizi ayda {{plan}} $ tutarındaki OpenCode Black planına kaydetmeye hazırız.",
|
||||
"workspace.black.waitlist.leave": "Bekleme Listesinden Ayrıl",
|
||||
"workspace.black.waitlist.leaving": "Ayrılıyorum...",
|
||||
"workspace.black.waitlist.left": "Sol",
|
||||
"workspace.black.waitlist.leaving": "Ayrılıyor...",
|
||||
"workspace.black.waitlist.left": "Ayrıldı",
|
||||
"workspace.black.waitlist.enroll": "Kayıt ol",
|
||||
"workspace.black.waitlist.enrolling": "Kaydediliyor...",
|
||||
"workspace.black.waitlist.enrolled": "Kayıtlı",
|
||||
"workspace.black.waitlist.enrollNote":
|
||||
"Kayıt Ol'a tıkladığınızda aboneliğiniz hemen başlar ve kartınızdan çekim yapılır.",
|
||||
|
||||
"download.title": "OpenCode | İndir",
|
||||
"download.meta.description": "OpenCode'u macOS, Windows ve Linux için indirin",
|
||||
"download.hero.title": "OpenCode'u İndir",
|
||||
"download.hero.subtitle": "macOS, Windows ve Linux için Beta olarak sunuluyor",
|
||||
"download.hero.button": "{{os}} için indir",
|
||||
"download.section.terminal": "OpenCode Terminal",
|
||||
"download.section.desktop": "OpenCode Desktop (Beta)",
|
||||
"download.section.extensions": "OpenCode Eklentileri",
|
||||
"download.section.integrations": "OpenCode Entegrasyonları",
|
||||
"download.action.download": "İndir",
|
||||
"download.action.install": "Kur",
|
||||
|
||||
"download.platform.macosAppleSilicon": "macOS (Apple Silicon)",
|
||||
"download.platform.macosIntel": "macOS (Intel)",
|
||||
"download.platform.windowsX64": "Windows (x64)",
|
||||
"download.platform.linuxDeb": "Linux (.deb)",
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
|
||||
"download.faq.a3.beforeLocal":
|
||||
"Tam olarak değil, ama muhtemelen. OpenCode'u ücretli bir sağlayıcıya bağlamak istiyorsanız bir AI aboneliği gerekir, ancak",
|
||||
"download.faq.a3.localLink": "yerel modeller",
|
||||
"download.faq.a3.afterLocal.beforeZen": "ile ücretsiz çalışabilirsiniz. Kullanıcıları",
|
||||
"download.faq.a3.afterZen":
|
||||
" kullanmaya teşvik ediyoruz, ancak OpenCode OpenAI, Anthropic, xAI vb. gibi tüm popüler sağlayıcılarla çalışır.",
|
||||
|
||||
"download.faq.a5.p1": "OpenCode %100 ücretsizdir.",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"Ek maliyetler, bir model sağlayıcısına olan aboneliğinizden gelir. OpenCode herhangi bir model sağlayıcısıyla çalışır, ancak",
|
||||
"download.faq.a5.p2.afterZen": " kullanmanızı öneririz.",
|
||||
|
||||
"download.faq.a6.p1":
|
||||
"Verileriniz ve bilginiz yalnızca OpenCode'da paylaşılabilir bağlantılar oluşturduğunuzda saklanır.",
|
||||
"download.faq.a6.p2.beforeShare": "Daha fazla bilgi:",
|
||||
"download.faq.a6.shareLink": "paylaşım sayfaları",
|
||||
|
||||
"enterprise.title": "OpenCode | Kurumunuz için kurumsal çözümler",
|
||||
"enterprise.meta.description": "Kurumsal çözümler için OpenCode ile iletişime geçin",
|
||||
"enterprise.hero.title": "Kodunuz size aittir",
|
||||
"enterprise.hero.body1":
|
||||
"OpenCode, hiçbir veri veya bağlam saklamadan ve lisans kısıtlamaları ya da sahiplik iddiaları olmadan kuruluşunuzun içinde güvenli şekilde çalışır. Ekibinizle bir deneme başlatın, ardından SSO'nuz ve dahili AI geçidiniz ile entegre ederek tüm kuruluşunuzda devreye alın.",
|
||||
"enterprise.hero.body2": "Nasıl yardımcı olabileceğimizi bize söyleyin.",
|
||||
"enterprise.form.name.label": "Ad soyad",
|
||||
"enterprise.form.name.placeholder": "Jeff Bezos",
|
||||
"enterprise.form.role.label": "Rol",
|
||||
"enterprise.form.role.placeholder": "Yönetim Kurulu Başkanı",
|
||||
"enterprise.form.email.label": "Şirket e-postası",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "Hangi problemi çözmeye çalışıyorsunuz?",
|
||||
"enterprise.form.message.placeholder": "Şu konuda yardıma ihtiyacımız var...",
|
||||
"enterprise.form.send": "Gönder",
|
||||
"enterprise.form.sending": "Gönderiliyor...",
|
||||
"enterprise.form.success": "Mesaj gönderildi, yakında size dönüş yapacağız.",
|
||||
"enterprise.faq.title": "SSS",
|
||||
"enterprise.faq.q1": "OpenCode Enterprise nedir?",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise, kodunuzun ve verilerinizin asla altyapınızı terk etmemesini sağlamak isteyen kurumlar içindir. Bunu, SSO'nuz ve dahili AI geçidiniz ile entegre olan merkezileştirilmiş bir konfigürasyonla sağlar.",
|
||||
"enterprise.faq.q2": "OpenCode Enterprise'a nasıl başlarım?",
|
||||
"enterprise.faq.a2":
|
||||
"Ekibinizle dahili bir deneme ile başlayın. OpenCode varsayılan olarak kodunuzu veya bağlam verilerinizi saklamaz, bu da başlamayı kolaylaştırır. Ardından fiyatlandırma ve uygulama seçeneklerini görüşmek için bize ulaşın.",
|
||||
"enterprise.faq.q3": "Kurumsal fiyatlandırma nasıl çalışır?",
|
||||
"enterprise.faq.a3":
|
||||
"Kullanıcı başı (per-seat) kurumsal fiyatlandırma sunuyoruz. Kendi LLM geçidiniz varsa, kullanılan tokenlar için ücret almıyoruz. Daha fazla bilgi için, kurumunuzun ihtiyaçlarına göre özel bir teklif için bize ulaşın.",
|
||||
"enterprise.faq.q4": "OpenCode Enterprise ile verilerim güvende mi?",
|
||||
"enterprise.faq.a4":
|
||||
"Evet. OpenCode kodunuzu veya bağlam verilerinizi saklamaz. Tüm işleme yerel olarak ya da AI sağlayıcınıza doğrudan API çağrıları ile gerçekleştirilir. Merkezileştirilmiş konfigürasyon ve SSO entegrasyonu ile verileriniz kurumunuzun altyapısı içinde güvende kalır.",
|
||||
|
||||
"brand.title": "OpenCode | Marka",
|
||||
"brand.meta.description": "OpenCode marka kılavuzu",
|
||||
"brand.heading": "Marka kılavuzu",
|
||||
"brand.subtitle": "OpenCode markası ile çalışmanıza yardımcı olacak kaynaklar ve varlıklar.",
|
||||
"brand.downloadAll": "Tüm varlıkları indir",
|
||||
|
||||
"changelog.title": "OpenCode | Değişiklik günlüğü",
|
||||
"changelog.meta.description": "OpenCode sürüm notları ve değişiklik günlüğü",
|
||||
"changelog.hero.title": "Değişiklik günlüğü",
|
||||
"changelog.hero.subtitle": "OpenCode için yeni güncellemeler ve iyileştirmeler",
|
||||
"changelog.empty": "Değişiklik günlüğü kaydı bulunamadı.",
|
||||
"changelog.viewJson": "JSON'u görüntüle",
|
||||
|
||||
"bench.list.title": "Benchmark",
|
||||
"bench.list.heading": "Benchmarklar",
|
||||
"bench.list.table.agent": "Ajan",
|
||||
"bench.list.table.model": "Model",
|
||||
"bench.list.table.score": "Puan",
|
||||
|
||||
"bench.detail.title": "Benchmark - {{task}}",
|
||||
"bench.detail.notFound": "Görev bulunamadı",
|
||||
"bench.detail.na": "N/A",
|
||||
"bench.detail.labels.agent": "Ajan",
|
||||
"bench.detail.labels.model": "Model",
|
||||
"bench.detail.labels.task": "Görev",
|
||||
"bench.detail.labels.repo": "Repo",
|
||||
"bench.detail.labels.from": "Başlangıç",
|
||||
"bench.detail.labels.to": "Bitiş",
|
||||
"bench.detail.labels.prompt": "İstem",
|
||||
"bench.detail.labels.commit": "Commit",
|
||||
"bench.detail.labels.averageDuration": "Ortalama Süre",
|
||||
"bench.detail.labels.averageScore": "Ortalama Puan",
|
||||
"bench.detail.labels.averageCost": "Ortalama Maliyet",
|
||||
"bench.detail.labels.summary": "Özet",
|
||||
"bench.detail.labels.runs": "Çalıştırmalar",
|
||||
"bench.detail.labels.score": "Puan",
|
||||
"bench.detail.labels.base": "Baz",
|
||||
"bench.detail.labels.penalty": "Ceza",
|
||||
"bench.detail.labels.weight": "ağırlık",
|
||||
"bench.detail.table.run": "Çalıştırma",
|
||||
"bench.detail.table.score": "Puan (Baz - Ceza)",
|
||||
"bench.detail.table.cost": "Maliyet",
|
||||
"bench.detail.table.duration": "Süre",
|
||||
"bench.detail.run.title": "Çalıştırma {{n}}",
|
||||
"bench.detail.rawJson": "Ham JSON",
|
||||
} satisfies Dict
|
||||
|
||||
@@ -4,337 +4,324 @@ import { dict as en } from "./en"
|
||||
export const dict = {
|
||||
...en,
|
||||
"nav.github": "GitHub",
|
||||
"nav.docs": "\u6587\u6863",
|
||||
"nav.changelog": "\u66f4\u65b0\u65e5\u5fd7",
|
||||
"nav.docs": "文档",
|
||||
"nav.changelog": "更新日志",
|
||||
"nav.discord": "Discord",
|
||||
"nav.x": "X",
|
||||
"nav.enterprise": "\u4f01\u4e1a",
|
||||
"nav.enterprise": "企业版",
|
||||
"nav.zen": "Zen",
|
||||
"nav.login": "\u767b\u5f55",
|
||||
"nav.free": "\u514d\u8d39",
|
||||
"nav.home": "\u9996\u9875",
|
||||
"nav.openMenu": "\u6253\u5f00\u83dc\u5355",
|
||||
"nav.getStartedFree": "\u514d\u8d39\u5f00\u59cb\u4f7f\u7528",
|
||||
"nav.login": "登录",
|
||||
"nav.free": "免费",
|
||||
"nav.home": "首页",
|
||||
"nav.openMenu": "打开菜单",
|
||||
"nav.getStartedFree": "免费开始",
|
||||
|
||||
"nav.context.copyLogo": "\u590d\u5236\u6807\u5fd7\uff08SVG\uff09",
|
||||
"nav.context.copyWordmark": "\u590d\u5236\u5b57\u6807\uff08SVG\uff09",
|
||||
"nav.context.brandAssets": "\u54c1\u724c\u8d44\u4ea7",
|
||||
"nav.context.copyLogo": "复制 Logo (SVG)",
|
||||
"nav.context.copyWordmark": "复制商标 (SVG)",
|
||||
"nav.context.brandAssets": "品牌资产",
|
||||
|
||||
"footer.github": "GitHub",
|
||||
"footer.docs": "\u6587\u6863",
|
||||
"footer.changelog": "\u66f4\u65b0\u65e5\u5fd7",
|
||||
"footer.docs": "文档",
|
||||
"footer.changelog": "更新日志",
|
||||
"footer.discord": "Discord",
|
||||
"footer.x": "X",
|
||||
|
||||
"legal.brand": "\u54c1\u724c",
|
||||
"legal.privacy": "\u9690\u79c1",
|
||||
"legal.terms": "\u6761\u6b3e",
|
||||
"legal.brand": "品牌",
|
||||
"legal.privacy": "隐私",
|
||||
"legal.terms": "条款",
|
||||
|
||||
"email.title": "\u7b2c\u4e00\u65f6\u95f4\u83b7\u77e5\u6211\u4eec\u7684\u65b0\u4ea7\u54c1\u53d1\u5e03",
|
||||
"email.subtitle": "\u52a0\u5165\u5019\u8865\u540d\u5355\uff0c\u83b7\u53d6\u63d0\u524d\u4f7f\u7528\u8d44\u683c\u3002",
|
||||
"email.placeholder": "\u7535\u5b50\u90ae\u7bb1\u5730\u5740",
|
||||
"email.subscribe": "\u8ba2\u9605",
|
||||
"email.success":
|
||||
"\u5c31\u5dee\u4e00\u6b65\uff0c\u8bf7\u67e5\u6536\u90ae\u4ef6\u5e76\u786e\u8ba4\u4f60\u7684\u90ae\u7bb1\u5730\u5740",
|
||||
"email.title": "第一时间获知我们的新产品发布",
|
||||
"email.subtitle": "加入候补名单,获取抢先体验资格。",
|
||||
"email.placeholder": "电子邮箱地址",
|
||||
"email.subscribe": "订阅",
|
||||
"email.success": "即将完成,请检查您的收件箱并确认您的邮箱地址",
|
||||
|
||||
"notFound.title": "\u672a\u627e\u5230\u9875\u9762 | opencode",
|
||||
"notFound.heading": "404 - \u9875\u9762\u672a\u627e\u5230",
|
||||
"notFound.home": "\u9996\u9875",
|
||||
"notFound.docs": "\u6587\u6863",
|
||||
"notFound.title": "未找到页面 | OpenCode",
|
||||
"notFound.heading": "404 - 页面未找到",
|
||||
"notFound.home": "首页",
|
||||
"notFound.docs": "文档",
|
||||
"notFound.github": "GitHub",
|
||||
"notFound.discord": "Discord",
|
||||
|
||||
"user.logout": "\u9000\u51fa\u767b\u5f55",
|
||||
"user.logout": "退出登录",
|
||||
|
||||
"workspace.select": "\u9009\u62e9\u5de5\u4f5c\u533a",
|
||||
"workspace.createNew": "+ \u521b\u5efa\u65b0\u5de5\u4f5c\u533a",
|
||||
"workspace.modal.title": "\u521b\u5efa\u65b0\u5de5\u4f5c\u533a",
|
||||
"workspace.modal.placeholder": "\u8bf7\u8f93\u5165\u5de5\u4f5c\u533a\u540d\u79f0",
|
||||
"workspace.select": "选择工作区",
|
||||
"workspace.createNew": "+ 新建工作区",
|
||||
"workspace.modal.title": "新建工作区",
|
||||
"workspace.modal.placeholder": "输入工作区名称",
|
||||
|
||||
"common.cancel": "\u53d6\u6d88",
|
||||
"common.creating": "\u6b63\u5728\u521b\u5efa...",
|
||||
"common.create": "\u521b\u5efa",
|
||||
"common.cancel": "取消",
|
||||
"common.creating": "正在创建...",
|
||||
"common.create": "创建",
|
||||
|
||||
"common.videoUnsupported": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301 video \u6807\u7b7e\u3002",
|
||||
"common.figure": "\u56fe{{n}}",
|
||||
"common.faq": "\u5e38\u89c1\u95ee\u9898",
|
||||
"common.learnMore": "\u4e86\u89e3\u66f4\u591a",
|
||||
"common.videoUnsupported": "您的浏览器不支持 video 标签。",
|
||||
"common.figure": "图 {{n}}.",
|
||||
"common.faq": "常见问题",
|
||||
"common.learnMore": "了解更多",
|
||||
|
||||
"home.title": "OpenCode | \u5f00\u6e90 AI \u7f16\u7801\u4ee3\u7406",
|
||||
"error.invalidPlan": "无效的计划",
|
||||
"error.workspaceRequired": "缺少工作区 ID",
|
||||
"error.alreadySubscribed": "此工作区已有订阅",
|
||||
"error.limitRequired": "缺少限制设置。",
|
||||
"error.monthlyLimitInvalid": "设置有效的每月限额。",
|
||||
"error.workspaceNameRequired": "缺少工作区名称。",
|
||||
"error.nameTooLong": "名称必须少于 255 个字符。",
|
||||
"error.emailRequired": "缺少电子邮箱",
|
||||
"error.roleRequired": "缺少角色",
|
||||
"error.idRequired": "缺少 ID",
|
||||
"error.nameRequired": "缺少名称",
|
||||
"error.providerRequired": "缺少提供商",
|
||||
"error.apiKeyRequired": "缺少 API 密钥",
|
||||
"error.modelRequired": "缺少模型",
|
||||
"error.reloadAmountMin": "充值金额必须至少为 ${{amount}}",
|
||||
"error.reloadTriggerMin": "余额触发阈值必须至少为 ${{amount}}",
|
||||
|
||||
"home.banner.badge": "\u65b0",
|
||||
"home.banner.text": "\u684c\u9762\u7aef\u5e94\u7528\u5df2\u63a8\u51fa Beta",
|
||||
"home.banner.platforms": "\u652f\u6301 macOS\u3001Windows \u548c Linux",
|
||||
"home.banner.downloadNow": "\u7acb\u5373\u4e0b\u8f7d",
|
||||
"home.banner.downloadBetaNow": "\u7acb\u5373\u4e0b\u8f7d\u684c\u9762 Beta \u7248",
|
||||
"home.title": "OpenCode | 开源 AI 编程代理",
|
||||
|
||||
"home.hero.title": "\u5f00\u6e90 AI \u7f16\u7801\u4ee3\u7406",
|
||||
"home.hero.subtitle.a":
|
||||
"\u5185\u7f6e\u514d\u8d39\u6a21\u578b\uff0c\u6216\u8fde\u63a5\u4efb\u610f\u63d0\u4f9b\u5546\u7684\u4efb\u610f\u6a21\u578b\uff0c",
|
||||
"home.hero.subtitle.b": "\u5305\u62ec Claude\u3001GPT\u3001Gemini \u7b49\u3002",
|
||||
"temp.title": "OpenCode | 专为终端打造的 AI 编程代理",
|
||||
"temp.hero.title": "专为终端打造的 AI 编程代理",
|
||||
"temp.zen": "OpenCode Zen",
|
||||
"temp.getStarted": "开始使用",
|
||||
"temp.feature.native.title": "原生 TUI",
|
||||
"temp.feature.native.body": "响应迅速、原生的、可定制主题的终端 UI",
|
||||
"temp.feature.zen.beforeLink": "由 OpenCode 提供的",
|
||||
"temp.feature.zen.link": "精选模型列表",
|
||||
"temp.feature.zen.afterLink": "",
|
||||
"temp.feature.models.beforeLink": "通过 Models.dev 支持 75+ LLM 提供商",
|
||||
"temp.feature.models.afterLink": ",包括本地模型",
|
||||
"temp.screenshot.caption": "使用 Tokyonight 主题的 OpenCode TUI",
|
||||
"temp.screenshot.alt": "使用 Tokyonight 主题的 OpenCode TUI",
|
||||
|
||||
"home.install.ariaLabel": "\u5b89\u88c5\u9009\u9879",
|
||||
"home.banner.badge": "新",
|
||||
"home.banner.text": "桌面应用 Beta 版现已推出",
|
||||
"home.banner.platforms": "支持 macOS, Windows, 和 Linux",
|
||||
"home.banner.downloadNow": "立即下载",
|
||||
"home.banner.downloadBetaNow": "立即下载桌面 Beta 版",
|
||||
|
||||
"home.what.title": "\u4ec0\u4e48\u662f OpenCode\uff1f",
|
||||
"home.what.body":
|
||||
"OpenCode \u662f\u4e00\u4e2a\u5f00\u6e90\u4ee3\u7406\uff0c\u5e2e\u52a9\u4f60\u5728\u7ec8\u7aef\u3001IDE \u6216\u684c\u9762\u7aef\u7f16\u5199\u4ee3\u7801\u3002",
|
||||
"home.what.lsp.title": "\u652f\u6301 LSP",
|
||||
"home.what.lsp.body": "\u4e3a LLM \u81ea\u52a8\u52a0\u8f7d\u5408\u9002\u7684 LSP",
|
||||
"home.what.multiSession.title": "\u591a\u4f1a\u8bdd",
|
||||
"home.what.multiSession.body": "\u540c\u4e00\u4e2a\u9879\u76ee\u4e2d\u5e76\u884c\u542f\u52a8\u591a\u4e2a\u4ee3\u7406",
|
||||
"home.what.shareLinks.title": "\u5171\u4eab\u94fe\u63a5",
|
||||
"home.what.shareLinks.body":
|
||||
"\u5c06\u4efb\u610f\u4f1a\u8bdd\u7684\u94fe\u63a5\u5171\u4eab\u7ed9\u4ed6\u4eba\u7528\u4e8e\u53c2\u8003\u6216\u8c03\u8bd5",
|
||||
"home.hero.title": "开源 AI 编程代理",
|
||||
"home.hero.subtitle.a": "内置免费模型,或连接任意提供商的任意模型,",
|
||||
"home.hero.subtitle.b": "包括 Claude, GPT, Gemini 等。",
|
||||
|
||||
"home.install.ariaLabel": "安装选项",
|
||||
|
||||
"home.what.title": "什么是 OpenCode?",
|
||||
"home.what.body": "OpenCode 是一个开源代理,帮助您在终端、IDE 或桌面端编写代码。",
|
||||
"home.what.lsp.title": "支持 LSP",
|
||||
"home.what.lsp.body": "为 LLM 自动加载合适的 LSP",
|
||||
"home.what.multiSession.title": "多会话",
|
||||
"home.what.multiSession.body": "在同一个项目中并行启动多个代理",
|
||||
"home.what.shareLinks.title": "分享链接",
|
||||
"home.what.shareLinks.body": "分享任意会话链接以供参考或调试",
|
||||
"home.what.copilot.title": "GitHub Copilot",
|
||||
"home.what.copilot.body": "\u4f7f\u7528 GitHub \u767b\u5f55\u4ee5\u4f7f\u7528\u4f60\u7684 Copilot \u8d26\u6237",
|
||||
"home.what.copilot.body": "使用 GitHub 登录以使用您的 Copilot 账户",
|
||||
"home.what.chatgptPlus.title": "ChatGPT Plus/Pro",
|
||||
"home.what.chatgptPlus.body":
|
||||
"\u4f7f\u7528 OpenAI \u767b\u5f55\u4ee5\u4f7f\u7528\u4f60\u7684 ChatGPT Plus/Pro \u8d26\u6237",
|
||||
"home.what.anyModel.title": "\u4efb\u610f\u6a21\u578b",
|
||||
"home.what.anyModel.body":
|
||||
"\u901a\u8fc7 Models.dev \u8fde\u63a5 75+ \u5bb6 LLM \u63d0\u4f9b\u5546\uff0c\u5305\u62ec\u672c\u5730\u6a21\u578b",
|
||||
"home.what.anyEditor.title": "\u4efb\u610f\u7f16\u8f91\u5668",
|
||||
"home.what.anyEditor.body":
|
||||
"\u53ef\u4f5c\u4e3a\u7ec8\u7aef\u754c\u9762\u3001\u684c\u9762\u5e94\u7528\u548c IDE \u6269\u5c55\u4f7f\u7528",
|
||||
"home.what.readDocs": "\u9605\u8bfb\u6587\u6863",
|
||||
"home.what.chatgptPlus.body": "使用 OpenAI 登录以使用您的 ChatGPT Plus 或 Pro 账户",
|
||||
"home.what.anyModel.title": "任意模型",
|
||||
"home.what.anyModel.body": "通过 Models.dev 支持 75+ LLM 提供商,包括本地模型",
|
||||
"home.what.anyEditor.title": "任意编辑器",
|
||||
"home.what.anyEditor.body": "提供终端界面、桌面应用及 IDE 扩展",
|
||||
"home.what.readDocs": "阅读文档",
|
||||
|
||||
"home.growth.title": "\u5f00\u6e90 AI \u7f16\u7801\u4ee3\u7406",
|
||||
"home.growth.title": "开源 AI 编程代理",
|
||||
"home.growth.body":
|
||||
"\u62e5\u6709\u8d85\u8fc7 <strong>{{stars}}</strong> \u4e2a GitHub Star\u3001<strong>{{contributors}}</strong> \u4f4d\u8d21\u732e\u8005\u4ee5\u53ca\u8d85\u8fc7 <strong>{{commits}}</strong> \u6b21\u63d0\u4ea4\uff0cOpenCode \u6bcf\u6708\u88ab\u8d85\u8fc7 <strong>{{monthlyUsers}}</strong> \u540d\u5f00\u53d1\u8005\u4f7f\u7528\u5e76\u4fe1\u8d56\u3002",
|
||||
"home.growth.githubStars": "GitHub Star",
|
||||
"home.growth.contributors": "\u8d21\u732e\u8005",
|
||||
"home.growth.monthlyDevs": "\u6708\u6d3b\u5f00\u53d1\u8005",
|
||||
"拥有超过 <strong>{{stars}}</strong> 颗 GitHub Star,<strong>{{contributors}}</strong> 位贡献者,以及超过 <strong>{{commits}}</strong> 次提交,OpenCode 每月被超过 <strong>{{monthlyUsers}}</strong> 名开发者使用并信赖。",
|
||||
"home.growth.githubStars": "GitHub Stars",
|
||||
"home.growth.contributors": "贡献者",
|
||||
"home.growth.monthlyDevs": "月活开发者",
|
||||
|
||||
"home.privacy.title": "\u9690\u79c1\u4f18\u5148",
|
||||
"home.privacy.body":
|
||||
"OpenCode \u4e0d\u5b58\u50a8\u4f60\u7684\u4ee3\u7801\u6216\u4e0a\u4e0b\u6587\u6570\u636e\uff0c\u56e0\u6b64\u53ef\u4ee5\u5728\u6ce8\u91cd\u9690\u79c1\u7684\u73af\u5883\u4e2d\u8fd0\u884c\u3002",
|
||||
"home.privacy.learnMore": "\u4e86\u89e3\u66f4\u591a\u5173\u4e8e",
|
||||
"home.privacy.link": "\u9690\u79c1",
|
||||
"home.privacy.title": "隐私优先的设计",
|
||||
"home.privacy.body": "OpenCode 不存储您的任何代码或上下文数据,确保可以在对隐私敏感的环境中运行。",
|
||||
"home.privacy.learnMore": "了解更多关于",
|
||||
"home.privacy.link": "隐私",
|
||||
|
||||
"home.faq.q1": "\u4ec0\u4e48\u662f OpenCode\uff1f",
|
||||
"home.faq.a1":
|
||||
"OpenCode \u662f\u4e00\u4e2a\u5f00\u6e90\u4ee3\u7406\uff0c\u5e2e\u52a9\u4f60\u4f7f\u7528\u4efb\u610f AI \u6a21\u578b\u7f16\u5199\u5e76\u8fd0\u884c\u4ee3\u7801\u3002\u5b83\u63d0\u4f9b\u7ec8\u7aef\u754c\u9762\u3001\u684c\u9762\u5e94\u7528\u6216 IDE \u6269\u5c55\u3002",
|
||||
"home.faq.q2": "\u5982\u4f55\u4f7f\u7528 OpenCode\uff1f",
|
||||
"home.faq.a2.before": "\u6700\u7b80\u5355\u7684\u65b9\u5f0f\u662f\u5148\u9605\u8bfb",
|
||||
"home.faq.a2.link": "\u5165\u95e8\u4ecb\u7ecd",
|
||||
"home.faq.q3": "\u4f7f\u7528 OpenCode \u9700\u8981\u989d\u5916\u7684 AI \u8ba2\u9605\u5417\uff1f",
|
||||
"home.faq.a3.p1":
|
||||
"\u4e0d\u4e00\u5b9a\u3002OpenCode \u81ea\u5e26\u4e00\u7ec4\u514d\u8d39\u6a21\u578b\uff0c\u65e0\u9700\u521b\u5efa\u8d26\u6237\u5373\u53ef\u4f7f\u7528\u3002",
|
||||
"home.faq.a3.p2.beforeZen": "\u6b64\u5916\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7\u521b\u5efa",
|
||||
"home.faq.a3.p2.afterZen": "\u8d26\u6237\u6765\u4f7f\u7528\u5e38\u89c1\u7684\u7f16\u7801\u6a21\u578b\u3002",
|
||||
"home.faq.a3.p3":
|
||||
"\u6211\u4eec\u9f13\u52b1\u4f7f\u7528 Zen\uff0c\u4f46 OpenCode \u4e5f\u652f\u6301 OpenAI\u3001Anthropic\u3001xAI \u7b49\u4e3b\u6d41\u63d0\u4f9b\u5546\u3002",
|
||||
"home.faq.a3.p4.beforeLocal": "\u4f60\u8fd8\u53ef\u4ee5\u8fde\u63a5",
|
||||
"home.faq.a3.p4.localLink": "\u672c\u5730\u6a21\u578b",
|
||||
"home.faq.q4": "\u53ef\u4ee5\u4f7f\u7528\u6211\u73b0\u6709\u7684 AI \u8ba2\u9605\u5417\uff1f",
|
||||
"home.faq.q1": "什么是 OpenCode?",
|
||||
"home.faq.a1": "OpenCode 是一个开源代理,帮助您使用任意 AI 模型编写和运行代码。它提供终端界面、桌面应用及 IDE 扩展。",
|
||||
"home.faq.q2": "如何使用 OpenCode?",
|
||||
"home.faq.a2.before": "最简单的入门方式是阅读",
|
||||
"home.faq.a2.link": "介绍",
|
||||
"home.faq.q3": "使用 OpenCode 需要额外的 AI 订阅吗?",
|
||||
"home.faq.a3.p1": "不一定。OpenCode 自带一组免费模型,无需创建账户即可使用。",
|
||||
"home.faq.a3.p2.beforeZen": "此外,您可以通过创建",
|
||||
"home.faq.a3.p2.afterZen": "账户来使用流行的编程模型。",
|
||||
"home.faq.a3.p3": "虽然我们鼓励使用 Zen,但 OpenCode 也支持所有主流提供商,如 OpenAI, Anthropic, xAI 等。",
|
||||
"home.faq.a3.p4.beforeLocal": "您甚至可以连接您的",
|
||||
"home.faq.a3.p4.localLink": "本地模型",
|
||||
"home.faq.q4": "我可以使用现有的 AI 订阅吗?",
|
||||
"home.faq.a4.p1":
|
||||
"\u53ef\u4ee5\u3002OpenCode \u652f\u6301\u4e3b\u6d41\u63d0\u4f9b\u5546\u7684\u8ba2\u9605\u65b9\u6848\uff0c\u5305\u62ec Claude Pro/Max\u3001ChatGPT Plus/Pro \u548c GitHub Copilot\u3002",
|
||||
"home.faq.q5": "OpenCode \u53ea\u80fd\u5728\u7ec8\u7aef\u4e2d\u7528\u5417\uff1f",
|
||||
"home.faq.a5.beforeDesktop": "\u4e0d\u518d\u662f\u4e86\uff01OpenCode \u73b0\u5728\u4e5f\u63d0\u4f9b",
|
||||
"home.faq.a5.desktop": "\u684c\u9762\u7aef",
|
||||
"home.faq.a5.and": "\u548c",
|
||||
"home.faq.a5.web": "\u7f51\u9875",
|
||||
"home.faq.q6": "OpenCode \u4ef7\u683c\u5982\u4f55\uff1f",
|
||||
"home.faq.a6":
|
||||
"OpenCode 100% \u514d\u8d39\u3002\u4e5f\u81ea\u5e26\u4e00\u7ec4\u514d\u8d39\u6a21\u578b\u3002\u5982\u679c\u4f60\u8fde\u63a5\u5176\u4ed6\u63d0\u4f9b\u5546\uff0c\u53ef\u80fd\u4f1a\u6709\u989d\u5916\u8d39\u7528\u3002",
|
||||
"home.faq.q7": "\u6570\u636e\u548c\u9690\u79c1\u600e\u4e48\u529e\uff1f",
|
||||
"home.faq.a7.p1":
|
||||
"\u4ec5\u5f53\u4f60\u4f7f\u7528\u6211\u4eec\u7684\u514d\u8d39\u6a21\u578b\u6216\u521b\u5efa\u53ef\u5171\u4eab\u94fe\u63a5\u65f6\uff0c\u624d\u4f1a\u5b58\u50a8\u4f60\u7684\u6570\u636e\u548c\u4fe1\u606f\u3002",
|
||||
"home.faq.a7.p2.beforeModels": "\u4e86\u89e3\u66f4\u591a\u5173\u4e8e",
|
||||
"home.faq.a7.p2.modelsLink": "\u6211\u4eec\u7684\u6a21\u578b",
|
||||
"home.faq.a7.p2.and": "\u548c",
|
||||
"home.faq.a7.p2.shareLink": "\u5171\u4eab\u9875\u9762",
|
||||
"home.faq.q8": "OpenCode \u662f\u5f00\u6e90\u7684\u5417\uff1f",
|
||||
"home.faq.a8.p1": "\u662f\u7684\uff0cOpenCode \u5b8c\u5168\u5f00\u6e90\u3002\u6e90\u7801\u516c\u5f00\u5728",
|
||||
"home.faq.a8.p2": "\u5e76\u4ee5",
|
||||
"home.faq.a8.mitLicense": "MIT \u8bb8\u53ef\u8bc1",
|
||||
"可以,OpenCode 支持所有主流提供商的订阅计划。您可以使用您的 Claude Pro/Max, ChatGPT Plus/Pro, 或 GitHub Copilot 订阅。",
|
||||
"home.faq.q5": "OpenCode 只能在终端使用吗?",
|
||||
"home.faq.a5.beforeDesktop": "不再是了!OpenCode 现在也提供",
|
||||
"home.faq.a5.desktop": "桌面端应用",
|
||||
"home.faq.a5.and": "和",
|
||||
"home.faq.a5.web": "网页端",
|
||||
"home.faq.q6": "OpenCode 多少钱?",
|
||||
"home.faq.a6": "OpenCode 是 100% 免费使用的。它还自带一组免费模型。如果您连接其他提供商,可能会产生额外费用。",
|
||||
"home.faq.q7": "数据和隐私如何?",
|
||||
"home.faq.a7.p1": "只有当您使用我们的免费模型或创建分享链接时,您的数据和信息才会被存储。",
|
||||
"home.faq.a7.p2.beforeModels": "了解更多关于",
|
||||
"home.faq.a7.p2.modelsLink": "我们的模型",
|
||||
"home.faq.a7.p2.and": "和",
|
||||
"home.faq.a7.p2.shareLink": "分享页面",
|
||||
"home.faq.q8": "OpenCode 是开源的吗?",
|
||||
"home.faq.a8.p1": "是的,OpenCode 是完全开源的。源代码公开在",
|
||||
"home.faq.a8.p2": "遵循",
|
||||
"home.faq.a8.mitLicense": "MIT 许可证",
|
||||
"home.faq.a8.p3":
|
||||
"\u53d1\u5e03\uff0c\u610f\u5473\u7740\u4efb\u4f55\u4eba\u90fd\u53ef\u4ee5\u4f7f\u7528\u3001\u4fee\u6539\u6216\u8d21\u732e\u3002\u793e\u533a\u7684\u4efb\u4f55\u4eba\u90fd\u53ef\u4ee5\u63d0\u4ea4 issues\u3001pull requests \u5e76\u6269\u5c55\u529f\u80fd\u3002",
|
||||
",这意味着任何人都可以使用、修改或为它的发展做贡献。社区中的任何人都可以提交 issue、提交 PR 并扩展功能。",
|
||||
|
||||
"home.zenCta.title": "\u4e3a\u7f16\u7801\u4ee3\u7406\u63d0\u4f9b\u53ef\u9760\u3001\u4f18\u5316\u7684\u6a21\u578b",
|
||||
"home.zenCta.title": "访问可靠、优化的编程代理模型",
|
||||
"home.zenCta.body":
|
||||
"Zen \u63d0\u4f9b\u4e00\u7ec4\u7cbe\u9009\u7684 AI \u6a21\u578b\uff0c\u8fd9\u4e9b\u6a21\u578b\u662f OpenCode \u4e3a\u4e86\u7f16\u7801\u4ee3\u7406\u4e13\u95e8\u6d4b\u8bd5\u548c\u8bc4\u6d4b\u8fc7\u7684\u3002\u65e0\u9700\u62c5\u5fc3\u4e0d\u540c\u63d0\u4f9b\u5546\u4e4b\u95f4\u6027\u80fd\u4e0e\u8d28\u91cf\u53c2\u5dee\uff0c\u4f7f\u7528\u7ecf\u8fc7\u9a8c\u8bc1\u7684\u6a21\u578b\u5373\u53ef\u3002",
|
||||
"home.zenCta.link": "\u4e86\u89e3 Zen",
|
||||
"Zen 为您提供一组精选的 AI 模型,这些模型经过 OpenCode 专门针对编程代理的测试和基准测试。无需担心不同提供商之间不稳定的性能和质量,直接使用行之有效的验证模型。",
|
||||
"home.zenCta.link": "了解 Zen",
|
||||
|
||||
"enterprise.title": "OpenCode | \u9762\u5411\u7ec4\u7ec7\u7684\u4f01\u4e1a\u89e3\u51b3\u65b9\u6848",
|
||||
|
||||
"zen.title":
|
||||
"OpenCode Zen | \u4e3a\u7f16\u7801\u4ee3\u7406\u7cbe\u9009\u7684\u53ef\u9760\u3001\u4f18\u5316\u6a21\u578b",
|
||||
"zen.hero.title": "\u4e3a\u7f16\u7801\u4ee3\u7406\u63d0\u4f9b\u53ef\u9760\u3001\u4f18\u5316\u7684\u6a21\u578b",
|
||||
"zen.title": "OpenCode Zen | 为编程代理精选的可靠、优化模型",
|
||||
"zen.hero.title": "为编程代理打造的可靠、优化模型",
|
||||
"zen.hero.body":
|
||||
"Zen \u63d0\u4f9b\u4e00\u7ec4\u7cbe\u9009\u7684 AI \u6a21\u578b\uff0c\u8fd9\u4e9b\u6a21\u578b\u662f OpenCode \u4e3a\u4e86\u7f16\u7801\u4ee3\u7406\u4e13\u95e8\u6d4b\u8bd5\u548c\u8bc4\u6d4b\u8fc7\u7684\u3002\u65e0\u9700\u62c5\u5fc3\u4e0d\u540c\u63d0\u4f9b\u5546\u4e4b\u95f4\u6027\u80fd\u4e0e\u8d28\u91cf\u53c2\u5dee\uff0c\u4f7f\u7528\u7ecf\u8fc7\u9a8c\u8bc1\u7684\u6a21\u578b\u5373\u53ef\u3002",
|
||||
"Zen 为您提供一组精选的 AI 模型,这些模型经过 OpenCode 专门针对编程代理的测试和基准测试。无需担心不稳定的性能和质量,直接使用行之有效的验证模型。",
|
||||
|
||||
"zen.faq.q1": "\u4ec0\u4e48\u662f OpenCode Zen\uff1f",
|
||||
"zen.faq.a1":
|
||||
"Zen \u662f\u7531 OpenCode \u56e2\u961f\u6253\u9020\u3001\u4e13\u4e3a\u7f16\u7801\u4ee3\u7406\u6d4b\u8bd5\u4e0e\u8bc4\u6d4b\u7684 AI \u6a21\u578b\u7cbe\u9009\u96c6\u5408\u3002",
|
||||
"zen.faq.q2": "\u662f\u4ec0\u4e48\u8ba9 Zen \u66f4\u51c6\u786e\uff1f",
|
||||
"zen.faq.q1": "什么是 OpenCode Zen?",
|
||||
"zen.faq.a1": "Zen 是一组由 OpenCode 团队创建的,专门针对编程代理进行测试和基准测试的 AI 模型精选集。",
|
||||
"zen.faq.q2": "为什么 Zen 更准确?",
|
||||
"zen.faq.a2":
|
||||
"Zen \u53ea\u63d0\u4f9b\u4e13\u4e3a\u7f16\u7801\u4ee3\u7406\u6d4b\u8bd5\u4e0e\u8bc4\u6d4b\u7684\u6a21\u578b\u3002\u4f60\u4e0d\u4f1a\u7528\u9ec4\u6cb9\u5200\u5207\u725b\u6392\uff0c\u4e5f\u522b\u7528\u7cdf\u7cd5\u7684\u6a21\u578b\u6765\u5199\u4ee3\u7801\u3002",
|
||||
"zen.faq.q3": "Zen \u66f4\u4fbf\u5b9c\u5417\uff1f",
|
||||
"Zen 仅提供经过专门针对编程代理测试和基准测试的模型。正如你不会用黄油刀切牛排一样,也不要用糟糕的模型来写代码。",
|
||||
"zen.faq.q3": "Zen 更便宜吗?",
|
||||
"zen.faq.a3":
|
||||
"Zen \u4e0d\u4ee5\u76c8\u5229\u4e3a\u76ee\u7684\u3002Zen \u4f1a\u628a\u6a21\u578b\u63d0\u4f9b\u5546\u7684\u6210\u672c\u539f\u6837\u8f6c\u7ed9\u4f60\u3002Zen \u4f7f\u7528\u8d8a\u591a\uff0cOpenCode \u5c31\u8d8a\u80fd\u8c08\u5230\u66f4\u597d\u7684\u4ef7\u683c\u5e76\u628a\u4f18\u60e0\u8ba9\u5229\u7ed9\u4f60\u3002",
|
||||
"zen.faq.q4": "Zen \u8d39\u7528\u662f\u591a\u5c11\uff1f",
|
||||
"Zen 不以盈利为目的。Zen 将模型提供商的成本直接传递给您。Zen 的使用量越高,OpenCode 就越能协商出更好的费率并回馈给您。",
|
||||
"zen.faq.q4": "Zen 多少钱?",
|
||||
"zen.faq.a4.p1.beforePricing": "Zen",
|
||||
"zen.faq.a4.p1.pricingLink": "\u6309\u8bf7\u6c42\u8ba1\u8d39",
|
||||
"zen.faq.a4.p1.afterPricing":
|
||||
"\u4e14\u96f6\u52a0\u4ef7\uff0c\u56e0\u6b64\u4f60\u652f\u4ed8\u7684\u5c31\u662f\u6a21\u578b\u63d0\u4f9b\u5546\u7684\u539f\u4ef7\u3002",
|
||||
"zen.faq.a4.p2.beforeAccount": "\u603b\u8d39\u7528\u53d6\u51b3\u4e8e\u4f7f\u7528\u91cf\uff0c\u4f60\u53ef\u4ee5\u5728",
|
||||
"zen.faq.a4.p2.accountLink": "\u8d26\u6237\u4e2d\u8bbe\u7f6e\u6bcf\u6708\u652f\u51fa\u4e0a\u9650",
|
||||
"zen.faq.a4.p3":
|
||||
"\u4e3a\u8986\u76d6\u6210\u672c\uff0cOpenCode \u4ec5\u4f1a\u6536\u53d6\u5f88\u5c0f\u7684\u652f\u4ed8\u5904\u7406\u8d39\u7528\uff1a\u6bcf\u6b21\u5145\u503c $20 \u4f1a\u989d\u5916\u6536\u53d6 $1.23\u3002",
|
||||
"zen.faq.q5": "\u6570\u636e\u4e0e\u9690\u79c1\u600e\u4e48\u6837\uff1f",
|
||||
"zen.faq.a5.beforeExceptions":
|
||||
"\u6240\u6709 Zen \u6a21\u578b\u90fd\u6258\u7ba1\u5728\u7f8e\u56fd\u3002\u63d0\u4f9b\u5546\u9075\u5faa\u96f6\u7559\u5b58\u653f\u7b56\uff0c\u4e0d\u4f1a\u5c06\u4f60\u7684\u6570\u636e\u7528\u4e8e\u6a21\u578b\u8bad\u7ec3\uff0c\u4f46\u6709",
|
||||
"zen.faq.a5.exceptionsLink": "\u4ee5\u4e0b\u4f8b\u5916",
|
||||
"zen.faq.q6": "\u6211\u53ef\u4ee5\u8bbe\u7f6e\u652f\u51fa\u4e0a\u9650\u5417\uff1f",
|
||||
"zen.faq.a6":
|
||||
"\u53ef\u4ee5\uff0c\u4f60\u53ef\u4ee5\u5728\u8d26\u6237\u4e2d\u8bbe\u7f6e\u6bcf\u6708\u652f\u51fa\u4e0a\u9650\u3002",
|
||||
"zen.faq.q7": "\u6211\u53ef\u4ee5\u53d6\u6d88\u5417\uff1f",
|
||||
"zen.faq.a7":
|
||||
"\u53ef\u4ee5\uff0c\u4f60\u53ef\u4ee5\u968f\u65f6\u505c\u7528\u8ba1\u8d39\u5e76\u4f7f\u7528\u5269\u4f59\u4f59\u989d\u3002",
|
||||
"zen.faq.q8": "\u6211\u53ef\u4ee5\u5728\u5176\u4ed6\u7f16\u7801\u4ee3\u7406\u4e2d\u4f7f\u7528 Zen \u5417\uff1f",
|
||||
"zen.faq.a4.p1.pricingLink": "按请求收费",
|
||||
"zen.faq.a4.p1.afterPricing": "零加价,所以您只需支付模型提供商收取的费用。",
|
||||
"zen.faq.a4.p2.beforeAccount": "您的总费用取决于使用量,且您可以在您的",
|
||||
"zen.faq.a4.p2.accountLink": "账户中设置每月支出限额",
|
||||
"zen.faq.a4.p3": "为覆盖成本,OpenCode 仅收取少量支付处理费,每充值 $20 收取 $1.23。",
|
||||
"zen.faq.q5": "数据和隐私如何?",
|
||||
"zen.faq.a5.beforeExceptions": "所有 Zen 模型均托管在美国。提供商遵循零留存政策,不使用您的数据进行模型训练,",
|
||||
"zen.faq.a5.exceptionsLink": "以下例外情况除外",
|
||||
"zen.faq.q6": "我可以设置支出限额吗?",
|
||||
"zen.faq.a6": "可以,您可以在账户中设置每月支出限额。",
|
||||
"zen.faq.q7": "我可以取消吗?",
|
||||
"zen.faq.a7": "可以,您可以随时禁用计费并使用剩余余额。",
|
||||
"zen.faq.q8": "我可以在其他编程代理中使用 Zen 吗?",
|
||||
"zen.faq.a8":
|
||||
"Zen \u4e0e OpenCode \u914d\u5408\u5f97\u5f88\u597d\uff0c\u4f46\u4f60\u4e5f\u53ef\u4ee5\u5728\u4efb\u4f55\u4ee3\u7406\u4e2d\u4f7f\u7528 Zen\u3002\u8bf7\u5728\u4f60\u504f\u597d\u7684\u7f16\u7801\u4ee3\u7406\u4e2d\u6309\u7167\u8bbe\u7f6e\u8bf4\u660e\u8fdb\u884c\u914d\u7f6e\u3002",
|
||||
"虽然 Zen 与 OpenCode 配合效果极佳,但您可以在任何代理中使用 Zen。请按照您首选编程代理中的设置说明进行操作。",
|
||||
|
||||
"download.title": "OpenCode | \u4e0b\u8f7d",
|
||||
"zen.cta.start": "开始使用 Zen",
|
||||
"zen.pricing.title": "添加 20 美元即用即付余额",
|
||||
"zen.pricing.fee": "(+ 1.23 美元卡处理费)",
|
||||
"zen.pricing.body": "与任何代理一起使用。设置每月支出限额。随时取消。",
|
||||
"zen.problem.title": "Zen 正在解决什么问题?",
|
||||
"zen.problem.body":
|
||||
"可用的模型有很多,但只有少数可以与编码代理配合良好。大多数提供商以不同的方式配置它们,并产生不同的结果。",
|
||||
"zen.problem.subtitle": "我们正在为所有人修复此问题,而不仅仅是 OpenCode 用户。",
|
||||
"zen.problem.item1": "测试选定的模型并咨询其团队",
|
||||
"zen.problem.item2": "与提供商合作以确保正确交付",
|
||||
"zen.problem.item3": "对我们推荐的所有模型-提供商组合进行基准测试",
|
||||
"zen.how.title": "Zen 如何运作",
|
||||
"zen.how.body": "虽然我们建议您将 Zen 与 OpenCode 一起使用,但您可以将 Zen 与任何代理一起使用。",
|
||||
"zen.how.step1.title": "注册并添加 20 美元余额",
|
||||
"zen.pricing.title": "充值 $20 (即用即付)",
|
||||
"zen.pricing.fee": "(+ $1.23 银行卡手续费)",
|
||||
"zen.pricing.body": "可配合任何代理使用。支持设置月度消费限额。随时取消。",
|
||||
"zen.problem.title": "Zen 解决了什么问题?",
|
||||
"zen.problem.body": "市面上有太多模型,但只有少数能与编程代理良好配合。大多数提供商配置不同,导致结果参差不齐。",
|
||||
"zen.problem.subtitle": "我们要为所有人解决这个问题,不仅仅是 OpenCode 用户。",
|
||||
"zen.problem.item1": "测试精选模型并咨询其团队",
|
||||
"zen.problem.item2": "与提供商合作确保正确交付",
|
||||
"zen.problem.item3": "对所有推荐的模型-提供商组合进行基准测试",
|
||||
"zen.how.title": "Zen 如何工作",
|
||||
"zen.how.body": "虽然我们建议您配合 OpenCode 使用 Zen,但您也可以将其用于任何代理。",
|
||||
"zen.how.step1.title": "注册并充值 $20",
|
||||
"zen.how.step1.beforeLink": "遵循",
|
||||
"zen.how.step1.link": "设置说明",
|
||||
"zen.how.step2.title": "使用 Zen 并提供透明的定价",
|
||||
"zen.how.step2.title": "使用 Zen,价格透明",
|
||||
"zen.how.step2.link": "按请求付费",
|
||||
"zen.how.step2.afterLink": "零加价",
|
||||
"zen.how.step3.title": "自动充值",
|
||||
"zen.how.step3.body": "当您的余额达到 5 美元时,我们会自动添加 20 美元",
|
||||
"zen.how.step3.body": "当您的余额低于 $5 时,我们将自动充值 $20",
|
||||
"zen.privacy.title": "您的隐私对我们很重要",
|
||||
"zen.privacy.beforeExceptions": "所有 Zen 模型均在美国托管。提供商遵循零保留政策,不会将您的数据用于模型训练,并且",
|
||||
"zen.privacy.exceptionsLink": "以下例外情况",
|
||||
"download.meta.description": "\u4e0b\u8f7d\u9002\u7528\u4e8e macOS\u3001Windows \u548c Linux \u7684 OpenCode",
|
||||
"download.hero.title": "\u4e0b\u8f7d OpenCode",
|
||||
"download.hero.subtitle":
|
||||
"\u9002\u7528\u4e8e macOS\u3001Windows \u548c Linux \u7684 Beta \u7248\u73b0\u5df2\u63d0\u4f9b",
|
||||
"download.hero.button": "\u4e0b\u8f7d {{os}} \u7248\u672c",
|
||||
"download.section.terminal": "OpenCode \u7ec8\u7aef",
|
||||
"download.section.desktop": "OpenCode \u684c\u9762\u7aef\uff08Beta\uff09",
|
||||
"download.section.extensions": "OpenCode \u6269\u5c55",
|
||||
"download.section.integrations": "OpenCode \u96c6\u6210",
|
||||
"download.action.download": "\u4e0b\u8f7d",
|
||||
"download.action.install": "\u5b89\u88c5",
|
||||
"download.platform.macosAppleSilicon": "macOS (Apple Silicon)",
|
||||
"download.platform.macosIntel": "macOS (Intel)",
|
||||
"download.platform.windowsX64": "Windows (x64)",
|
||||
"download.platform.linuxDeb": "Linux (.deb)",
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
"download.faq.a3.beforeLocal":
|
||||
"\u4e0d\u4e00\u5b9a\uff0c\u4f46\u5927\u6982\u7387\u9700\u8981\u3002\u5982\u679c\u4f60\u60f3\u5c06 OpenCode \u8fde\u63a5\u5230\u4ed8\u8d39\u63d0\u4f9b\u5546\uff0c\u4f60\u9700\u8981 AI \u8ba2\u9605\uff0c\u4e0d\u8fc7\u4f60\u4e5f\u53ef\u4ee5\u4f7f\u7528",
|
||||
"download.faq.a3.localLink": "\u672c\u5730\u6a21\u578b",
|
||||
"download.faq.a3.afterLocal.beforeZen": "\u514d\u8d39\u3002\u6211\u4eec\u4e5f\u63a8\u8350\u4f7f\u7528",
|
||||
"download.faq.a3.afterZen":
|
||||
"\uff0c\u4f46 OpenCode \u540c\u6837\u652f\u6301 OpenAI\u3001Anthropic\u3001xAI \u7b49\u6240\u6709\u4e3b\u6d41\u63d0\u4f9b\u5546\u3002",
|
||||
"download.faq.a5.p1": "OpenCode 100% \u514d\u8d39\u4f7f\u7528\u3002",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"\u989d\u5916\u8d39\u7528\u6765\u81ea\u4f60\u5bf9\u6a21\u578b\u63d0\u4f9b\u5546\u7684\u8ba2\u9605\u3002\u867d\u7136 OpenCode \u652f\u6301\u4efb\u4f55\u6a21\u578b\u63d0\u4f9b\u5546\uff0c\u4f46\u6211\u4eec\u5efa\u8bae\u4f7f\u7528",
|
||||
"download.faq.a5.p2.afterZen": "\u3002",
|
||||
"download.faq.a6.p1":
|
||||
"\u4f60\u7684\u6570\u636e\u548c\u4fe1\u606f\u53ea\u4f1a\u5728\u4f60\u5728 OpenCode \u4e2d\u521b\u5efa\u53ef\u5206\u4eab\u94fe\u63a5\u65f6\u88ab\u5b58\u50a8\u3002",
|
||||
"download.faq.a6.p2.beforeShare": "\u4e86\u89e3\u66f4\u591a\u5173\u4e8e",
|
||||
"download.faq.a6.shareLink": "\u5206\u4eab\u9875\u9762",
|
||||
"enterprise.meta.description": "\u8054\u7cfb OpenCode \u83b7\u53d6\u4f01\u4e1a\u89e3\u51b3\u65b9\u6848",
|
||||
"enterprise.hero.title": "\u4f60\u7684\u4ee3\u7801\u5f52\u4f60\u6240\u6709",
|
||||
"enterprise.hero.body1":
|
||||
"OpenCode \u5728\u4f60\u7684\u7ec4\u7ec7\u5185\u90e8\u5b89\u5168\u8fd0\u884c\uff0c\u4e0d\u4f1a\u5b58\u50a8\u4efb\u4f55\u6570\u636e\u6216\u4e0a\u4e0b\u6587\uff0c\u4e5f\u6ca1\u6709\u8bb8\u53ef\u9650\u5236\u6216\u6240\u6709\u6743\u58f0\u660e\u3002\u4f60\u53ef\u4ee5\u5148\u4e0e\u56e2\u961f\u8fdb\u884c\u8bd5\u7528\uff0c\u7136\u540e\u901a\u8fc7\u4e0e\u4f60\u7684 SSO \u548c\u5185\u90e8 AI \u7f51\u5173\u96c6\u6210\uff0c\u5c06\u5176\u90e8\u7f72\u5230\u6574\u4e2a\u7ec4\u7ec7\u3002",
|
||||
"enterprise.hero.body2": "\u544a\u8bc9\u6211\u4eec\u6211\u4eec\u80fd\u5982\u4f55\u5e2e\u52a9\u4f60\u3002",
|
||||
"enterprise.form.name.label": "\u59d3\u540d",
|
||||
"enterprise.form.name.placeholder": "\u6770\u592b\u00b7\u8d1d\u4f50\u65af",
|
||||
"enterprise.form.role.label": "\u804c\u4f4d",
|
||||
"enterprise.form.role.placeholder": "\u6267\u884c\u8463\u4e8b\u957f",
|
||||
"enterprise.form.email.label": "\u516c\u53f8\u90ae\u7bb1",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "\u4f60\u60f3\u89e3\u51b3\u4ec0\u4e48\u95ee\u9898\uff1f",
|
||||
"enterprise.form.message.placeholder": "\u6211\u4eec\u9700\u8981\u5e2e\u52a9\u6765...",
|
||||
"enterprise.form.send": "\u53d1\u9001",
|
||||
"enterprise.form.sending": "\u53d1\u9001\u4e2d...",
|
||||
"enterprise.form.success":
|
||||
"\u6d88\u606f\u5df2\u53d1\u9001\uff0c\u6211\u4eec\u4f1a\u5c3d\u5feb\u4e0e\u4f60\u8054\u7cfb\u3002",
|
||||
"enterprise.faq.title": "\u5e38\u89c1\u95ee\u9898",
|
||||
"enterprise.faq.q1": "\u4ec0\u4e48\u662f OpenCode Enterprise\uff1f",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise \u9762\u5411\u5e0c\u671b\u786e\u4fdd\u4ee3\u7801\u548c\u6570\u636e\u7edd\u4e0d\u79bb\u5f00\u81ea\u5df1\u57fa\u7840\u8bbe\u65bd\u7684\u7ec4\u7ec7\u3002\u901a\u8fc7\u4e2d\u5fc3\u5316\u914d\u7f6e\uff0c\u5b83\u53ef\u4e0e\u4f60\u7684 SSO \u548c\u5185\u90e8 LLM/AI \u7f51\u5173\u96c6\u6210\uff0c\u4ece\u800c\u5b9e\u73b0\u8fd9\u4e00\u76ee\u6807\u3002",
|
||||
"enterprise.faq.q2": "\u5982\u4f55\u5f00\u59cb\u4f7f\u7528 OpenCode Enterprise\uff1f",
|
||||
"enterprise.faq.a2":
|
||||
"\u53ea\u9700\u4ece\u56e2\u961f\u5185\u90e8\u8bd5\u7528\u5f00\u59cb\u3002OpenCode \u9ed8\u8ba4\u4e0d\u4f1a\u5b58\u50a8\u4f60\u7684\u4ee3\u7801\u6216\u4e0a\u4e0b\u6587\u6570\u636e\uff0c\u6240\u4ee5\u4e0a\u624b\u975e\u5e38\u7b80\u5355\u3002\u4e4b\u540e\u8054\u7cfb\u6211\u4eec\uff0c\u8ba8\u8bba\u5b9a\u4ef7\u548c\u5b9e\u65bd\u65b9\u6848\u3002",
|
||||
"enterprise.faq.q3": "\u4f01\u4e1a\u5b9a\u4ef7\u662f\u5982\u4f55\u8fd0\u4f5c\u7684\uff1f",
|
||||
"enterprise.faq.a3":
|
||||
"\u6211\u4eec\u63d0\u4f9b\u6309\u5e2d\u4f4d\u7684\u4f01\u4e1a\u5b9a\u4ef7\u3002\u5982\u679c\u4f60\u62e5\u6709\u81ea\u5df1\u7684 LLM \u7f51\u5173\uff0c\u6211\u4eec\u4e0d\u4f1a\u5bf9\u6d88\u8017\u7684 token \u53e6\u6536\u8d39\u3002\u5982\u9700\u8be6\u60c5\uff0c\u8bf7\u8054\u7cfb\u6211\u4eec\u83b7\u53d6\u57fa\u4e8e\u4f60\u7ec4\u7ec7\u9700\u6c42\u7684\u5b9a\u5236\u62a5\u4ef7\u3002",
|
||||
"enterprise.faq.q4": "OpenCode Enterprise \u4f1a\u4fdd\u969c\u6211\u7684\u6570\u636e\u5b89\u5168\u5417\uff1f",
|
||||
"enterprise.faq.a4":
|
||||
"\u4f1a\u3002OpenCode \u4e0d\u5b58\u50a8\u4f60\u7684\u4ee3\u7801\u6216\u4e0a\u4e0b\u6587\u6570\u636e\u3002\u6240\u6709\u5904\u7406\u90fd\u5728\u672c\u5730\u8fdb\u884c\uff0c\u6216\u901a\u8fc7\u76f4\u8fde\u4f60\u7684 AI \u63d0\u4f9b\u5546\u7684 API \u8bf7\u6c42\u5b8c\u6210\u3002\u901a\u8fc7\u4e2d\u5fc3\u5316\u914d\u7f6e\u548c SSO \u96c6\u6210\uff0c\u4f60\u7684\u6570\u636e\u4f1a\u4fdd\u6301\u5728\u7ec4\u7ec7\u7684\u57fa\u7840\u8bbe\u65bd\u5185\u90e8\u3002",
|
||||
"zen.privacy.beforeExceptions": "所有 Zen 模型均托管在美国。提供商遵循零留存政策,不使用您的数据进行模型训练,",
|
||||
"zen.privacy.exceptionsLink": "以下例外情况除外",
|
||||
|
||||
"black.meta.title": "OpenCode Black | 访问全球顶尖编程模型",
|
||||
"black.meta.description": "通过 OpenCode Black 订阅计划使用 Claude, GPT, Gemini 等模型。",
|
||||
"black.hero.title": "访问全球顶尖编程模型",
|
||||
"black.hero.subtitle": "包括 Claude, GPT, Gemini 等",
|
||||
"black.title": "OpenCode Black | 定价",
|
||||
"black.plan.icon20": "Black 20 计划",
|
||||
"black.plan.icon100": "Black 100 计划",
|
||||
"black.plan.icon200": "Black 200 计划",
|
||||
"black.plan.multiplier100": "用量是 Black 20 的 5 倍",
|
||||
"black.plan.multiplier200": "用量是 Black 20 的 20 倍",
|
||||
"black.price.perMonth": "/ 月",
|
||||
"black.price.perPersonBilledMonthly": "每人每月",
|
||||
"black.terms.1": "您的订阅不会立即开始",
|
||||
"black.terms.2": "您将被加入候补名单,并很快激活",
|
||||
"black.terms.3": "您的卡只会在订阅激活时扣费",
|
||||
"black.terms.4": "适用使用限制,高度自动化的使用可能会更快达到限制",
|
||||
"black.terms.5": "订阅仅限个人,团队请联系企业版",
|
||||
"black.terms.6": "未来可能会调整限制或停止计划",
|
||||
"black.terms.7": "随时取消订阅",
|
||||
"black.action.continue": "继续",
|
||||
"black.finePrint.beforeTerms": "显示价格不含税",
|
||||
"black.finePrint.terms": "服务条款",
|
||||
"black.workspace.title": "OpenCode Black | 选择工作区",
|
||||
"black.workspace.selectPlan": "为此计划选择一个工作区",
|
||||
"black.workspace.name": "工作区 {{n}}",
|
||||
"black.subscribe.title": "订阅 OpenCode Black",
|
||||
"black.subscribe.paymentMethod": "付款方式",
|
||||
"black.subscribe.loadingPaymentForm": "正在加载付款表单...",
|
||||
"black.subscribe.selectWorkspaceToContinue": "选择一个工作区以继续",
|
||||
"black.subscribe.failurePrefix": "哎呀!",
|
||||
"black.subscribe.error.generic": "发生错误",
|
||||
"black.subscribe.error.invalidPlan": "无效的计划",
|
||||
"black.subscribe.error.workspaceRequired": "缺少工作区 ID",
|
||||
"black.subscribe.error.alreadySubscribed": "此工作区已有订阅",
|
||||
"black.subscribe.processing": "处理中...",
|
||||
"black.subscribe.submit": "订阅 ${{plan}}",
|
||||
"black.subscribe.form.chargeNotice": "您的卡只会在订阅激活时扣费",
|
||||
"black.subscribe.success.title": "您已加入 OpenCode Black 候补名单",
|
||||
"black.subscribe.success.subscriptionPlan": "订阅计划",
|
||||
"black.subscribe.success.planName": "OpenCode Black {{plan}}",
|
||||
"black.subscribe.success.amount": "金额",
|
||||
"black.subscribe.success.amountValue": "${{plan}} / 月",
|
||||
"black.subscribe.success.paymentMethod": "付款方式",
|
||||
"black.subscribe.success.dateJoined": "加入日期",
|
||||
"black.subscribe.success.chargeNotice": "您的卡将在订阅激活时扣费",
|
||||
|
||||
"brand.title": "OpenCode | \u54c1\u724c",
|
||||
"brand.meta.description": "OpenCode \u54c1\u724c\u6307\u5357",
|
||||
"brand.heading": "\u54c1\u724c\u6307\u5357",
|
||||
"brand.subtitle": "\u5e2e\u52a9\u4f60\u4f7f\u7528 OpenCode \u54c1\u724c\u7684\u8d44\u6e90\u4e0e\u7d20\u6750\u3002",
|
||||
"brand.downloadAll": "\u4e0b\u8f7d\u5168\u90e8\u7d20\u6750",
|
||||
"changelog.title": "OpenCode | \u66f4\u65b0\u65e5\u5fd7",
|
||||
"changelog.meta.description": "OpenCode \u53d1\u5e03\u8bf4\u660e\u4e0e\u66f4\u65b0\u65e5\u5fd7",
|
||||
"changelog.hero.title": "\u66f4\u65b0\u65e5\u5fd7",
|
||||
"changelog.hero.subtitle": "OpenCode \u7684\u65b0\u66f4\u65b0\u4e0e\u6539\u8fdb",
|
||||
"changelog.empty": "\u672a\u627e\u5230\u66f4\u65b0\u65e5\u5fd7\u6761\u76ee\u3002",
|
||||
"changelog.viewJson": "\u67e5\u770b JSON",
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "API 键",
|
||||
"workspace.nav.apiKeys": "API 密钥",
|
||||
"workspace.nav.members": "成员",
|
||||
"workspace.nav.billing": "计费",
|
||||
"workspace.nav.settings": "设置",
|
||||
"workspace.home.banner.beforeLink": "编码代理的可靠优化模型。",
|
||||
|
||||
"workspace.home.banner.beforeLink": "可靠、优化的编程代理模型。",
|
||||
"workspace.home.billing.loading": "加载中...",
|
||||
"workspace.home.billing.enable": "启用计费",
|
||||
"workspace.home.billing.currentBalance": "当前余额",
|
||||
"workspace.newUser.feature.tested.title": "经过测试和验证的模型",
|
||||
"workspace.newUser.feature.tested.body": "我们专门针对编码代理对模型进行了基准测试和测试,以确保最佳性能。",
|
||||
"workspace.newUser.feature.quality.title": "最高品质",
|
||||
"workspace.newUser.feature.quality.body": "访问模型配置为最佳性能 - 无需降级或路由到更便宜的提供商。",
|
||||
|
||||
"workspace.newUser.feature.tested.title": "经过测试与验证的模型",
|
||||
"workspace.newUser.feature.tested.body": "我们专门针对编程代理对模型进行了基准测试和测试,以确保最佳性能。",
|
||||
"workspace.newUser.feature.quality.title": "最高质量",
|
||||
"workspace.newUser.feature.quality.body": "访问配置为最佳性能的模型 - 无需降级或路由到更便宜的提供商。",
|
||||
"workspace.newUser.feature.lockin.title": "无锁定",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"将 Zen 与任何编码代理结合使用,并在需要时继续将其他提供程序与 opencode 结合使用。",
|
||||
"将 Zen 与任何编程代理结合使用,并在需要时继续在 OpenCode 中使用其他提供商。",
|
||||
"workspace.newUser.copyApiKey": "复制 API 密钥",
|
||||
"workspace.newUser.copyKey": "复制密钥",
|
||||
"workspace.newUser.copied": "已复制!",
|
||||
"workspace.newUser.step.enableBilling": "启用计费",
|
||||
"workspace.newUser.step.login.before": "运行",
|
||||
"workspace.newUser.step.login.after": "并选择 opencode",
|
||||
"workspace.newUser.step.login.after": "并选择 OpenCode",
|
||||
"workspace.newUser.step.pasteKey": "粘贴您的 API 密钥",
|
||||
"workspace.newUser.step.models.before": "启动 opencode 并运行",
|
||||
"workspace.newUser.step.models.after": "选择模型",
|
||||
"workspace.newUser.step.models.before": "启动 OpenCode 并运行",
|
||||
"workspace.newUser.step.models.after": "以选择模型",
|
||||
|
||||
"workspace.models.title": "模型",
|
||||
"workspace.models.subtitle.beforeLink": "管理工作区成员可以访问哪些模型。",
|
||||
"workspace.models.table.model": "模型",
|
||||
"workspace.models.table.enabled": "启用",
|
||||
"workspace.providers.title": "自带密钥",
|
||||
"workspace.providers.subtitle": "从 AI 提供商处配置您自己的 API 密钥。",
|
||||
"workspace.providers.placeholder": "输入 {{provider}} API 密钥({{prefix}}...)",
|
||||
"workspace.models.table.enabled": "已启用",
|
||||
|
||||
"workspace.providers.title": "自带密钥 (BYOK)",
|
||||
"workspace.providers.subtitle": "配置您自己的 AI 提供商 API 密钥。",
|
||||
"workspace.providers.placeholder": "输入 {{provider}} API 密钥 ({{prefix}}...)",
|
||||
"workspace.providers.configure": "配置",
|
||||
"workspace.providers.edit": "编辑",
|
||||
"workspace.providers.delete": "删除",
|
||||
"workspace.providers.saving": "保存...",
|
||||
"workspace.providers.saving": "正在保存...",
|
||||
"workspace.providers.save": "保存",
|
||||
"workspace.providers.table.provider": "提供者",
|
||||
"workspace.providers.table.provider": "提供商",
|
||||
"workspace.providers.table.apiKey": "API 密钥",
|
||||
|
||||
"workspace.usage.title": "使用历史",
|
||||
"workspace.usage.subtitle": "最近的 API 使用情况和成本。",
|
||||
"workspace.usage.empty": "进行第一个 API 调用即可开始。",
|
||||
"workspace.usage.subtitle": "近期 API 使用情况和成本。",
|
||||
"workspace.usage.empty": "发起第一个 API 调用以开始。",
|
||||
"workspace.usage.table.date": "日期",
|
||||
"workspace.usage.table.model": "模型",
|
||||
"workspace.usage.table.input": "输入",
|
||||
@@ -346,82 +333,89 @@ export const dict = {
|
||||
"workspace.usage.breakdown.output": "输出",
|
||||
"workspace.usage.breakdown.reasoning": "推理",
|
||||
"workspace.usage.subscription": "订阅 (${{amount}})",
|
||||
|
||||
"workspace.cost.title": "成本",
|
||||
"workspace.cost.subtitle": "按型号细分的使用成本。",
|
||||
"workspace.cost.subtitle": "按模型细分的使用成本。",
|
||||
"workspace.cost.allModels": "所有模型",
|
||||
"workspace.cost.allKeys": "所有密钥",
|
||||
"workspace.cost.deletedSuffix": "(已删除)",
|
||||
"workspace.cost.empty": "所选期间没有可用的使用数据。",
|
||||
"workspace.cost.subscriptionShort": "订",
|
||||
"workspace.keys.title": "API 键",
|
||||
"workspace.keys.subtitle": "管理您的 API 密钥以访问 opencode 服务。",
|
||||
"workspace.cost.deletedSuffix": "(已删除)",
|
||||
"workspace.cost.empty": "所选期间无可用使用数据。",
|
||||
"workspace.cost.subscriptionShort": "订阅",
|
||||
|
||||
"workspace.keys.title": "API 密钥",
|
||||
"workspace.keys.subtitle": "管理访问 OpenCode 服务的 API 密钥。",
|
||||
"workspace.keys.create": "创建 API 密钥",
|
||||
"workspace.keys.placeholder": "输入密钥名称",
|
||||
"workspace.keys.empty": "创建 opencode 网关 API 密钥",
|
||||
"workspace.keys.empty": "创建 OpenCode 网关 API 密钥",
|
||||
"workspace.keys.table.name": "名称",
|
||||
"workspace.keys.table.key": "密钥",
|
||||
"workspace.keys.table.createdBy": "创建者",
|
||||
"workspace.keys.table.lastUsed": "最后使用",
|
||||
"workspace.keys.copyApiKey": "复制 API 密钥",
|
||||
"workspace.keys.delete": "删除",
|
||||
|
||||
"workspace.members.title": "成员",
|
||||
"workspace.members.subtitle": "管理工作区成员及其权限。",
|
||||
"workspace.members.invite": "邀请成员",
|
||||
"workspace.members.inviting": "邀请...",
|
||||
"workspace.members.beta.beforeLink": "测试期间,工作空间对团队免费。",
|
||||
"workspace.members.inviting": "正在邀请...",
|
||||
"workspace.members.beta.beforeLink": "Beta 期间工作区对团队免费。",
|
||||
"workspace.members.form.invitee": "受邀者",
|
||||
"workspace.members.form.emailPlaceholder": "输入电子邮件",
|
||||
"workspace.members.form.emailPlaceholder": "输入电子邮箱",
|
||||
"workspace.members.form.role": "角色",
|
||||
"workspace.members.form.monthlyLimit": "每月消费限额",
|
||||
"workspace.members.noLimit": "无限制",
|
||||
"workspace.members.noLimitLowercase": "没有限制",
|
||||
"workspace.members.invited": "邀请",
|
||||
"workspace.members.noLimitLowercase": "无限制",
|
||||
"workspace.members.invited": "已邀请",
|
||||
"workspace.members.edit": "编辑",
|
||||
"workspace.members.delete": "删除",
|
||||
"workspace.members.saving": "保存...",
|
||||
"workspace.members.saving": "正在保存...",
|
||||
"workspace.members.save": "保存",
|
||||
"workspace.members.table.email": "电子邮件",
|
||||
"workspace.members.table.email": "邮箱",
|
||||
"workspace.members.table.role": "角色",
|
||||
"workspace.members.table.monthLimit": "月限额",
|
||||
"workspace.members.role.admin": "管理员",
|
||||
"workspace.members.role.adminDescription": "可以管理模型、成员和计费",
|
||||
"workspace.members.role.member": "成员",
|
||||
"workspace.members.role.memberDescription": "只能为自己生成 API 密钥",
|
||||
|
||||
"workspace.settings.title": "设置",
|
||||
"workspace.settings.subtitle": "更新您的工作区名称和首选项。",
|
||||
"workspace.settings.subtitle": "更新您的工作区名称和偏好。",
|
||||
"workspace.settings.workspaceName": "工作区名称",
|
||||
"workspace.settings.defaultName": "默认",
|
||||
"workspace.settings.updating": "更新中...",
|
||||
"workspace.settings.updating": "正在更新...",
|
||||
"workspace.settings.save": "保存",
|
||||
"workspace.settings.edit": "编辑",
|
||||
|
||||
"workspace.billing.title": "计费",
|
||||
"workspace.billing.subtitle.beforeLink": "管理付款方式。",
|
||||
"workspace.billing.contactUs": "联系我们",
|
||||
"workspace.billing.subtitle.afterLink": "如有任何问题。",
|
||||
"workspace.billing.subtitle.afterLink": "如果您有任何问题。",
|
||||
"workspace.billing.currentBalance": "当前余额",
|
||||
"workspace.billing.add": "添加$",
|
||||
"workspace.billing.add": "充值 $",
|
||||
"workspace.billing.enterAmount": "输入金额",
|
||||
"workspace.billing.loading": "加载中...",
|
||||
"workspace.billing.addAction": "添加",
|
||||
"workspace.billing.addBalance": "添加余额",
|
||||
"workspace.billing.linkedToStripe": "已绑定 Stripe",
|
||||
"workspace.billing.addAction": "充值",
|
||||
"workspace.billing.addBalance": "充值余额",
|
||||
"workspace.billing.linkedToStripe": "已关联 Stripe",
|
||||
"workspace.billing.manage": "管理",
|
||||
"workspace.billing.enable": "启用计费",
|
||||
|
||||
"workspace.monthlyLimit.title": "每月限额",
|
||||
"workspace.monthlyLimit.subtitle": "为您的帐户设置每月使用限额。",
|
||||
"workspace.monthlyLimit.subtitle": "为您的账户设置每月使用限额。",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "设置中...",
|
||||
"workspace.monthlyLimit.setting": "正在设置...",
|
||||
"workspace.monthlyLimit.set": "设置",
|
||||
"workspace.monthlyLimit.edit": "编辑限制",
|
||||
"workspace.monthlyLimit.noLimit": "没有设置使用限制。",
|
||||
"workspace.monthlyLimit.edit": "编辑限额",
|
||||
"workspace.monthlyLimit.noLimit": "未设置使用限额。",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "当前",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "的使用量为 $",
|
||||
|
||||
"workspace.reload.title": "自动充值",
|
||||
"workspace.reload.disabled.before": "自动充值已",
|
||||
"workspace.reload.disabled.state": "停用",
|
||||
"workspace.reload.disabled.after": "启用后将在余额较低时自动充值。",
|
||||
"workspace.reload.disabled.state": "禁用",
|
||||
"workspace.reload.disabled.after": "启用后将在余额不足时自动充值。",
|
||||
"workspace.reload.enabled.before": "自动充值已",
|
||||
"workspace.reload.enabled.state": "已启用",
|
||||
"workspace.reload.enabled.state": "启用",
|
||||
"workspace.reload.enabled.middle": "我们将自动充值",
|
||||
"workspace.reload.processingFee": "手续费",
|
||||
"workspace.reload.enabled.after": "当余额达到",
|
||||
@@ -430,22 +424,24 @@ export const dict = {
|
||||
"workspace.reload.enableAutoReload": "启用自动充值",
|
||||
"workspace.reload.reloadAmount": "充值 $",
|
||||
"workspace.reload.whenBalanceReaches": "当余额达到 $",
|
||||
"workspace.reload.saving": "保存...",
|
||||
"workspace.reload.saving": "正在保存...",
|
||||
"workspace.reload.save": "保存",
|
||||
"workspace.reload.failedAt": "充值失败于",
|
||||
"workspace.reload.reason": "原因:",
|
||||
"workspace.reload.updatePaymentMethod": "请更新您的付款方式并重试。",
|
||||
"workspace.reload.retrying": "正在重试...",
|
||||
"workspace.reload.retry": "重试",
|
||||
"workspace.payments.title": "付款记录",
|
||||
"workspace.payments.subtitle": "最近的付款交易。",
|
||||
|
||||
"workspace.payments.title": "支付历史",
|
||||
"workspace.payments.subtitle": "近期支付交易。",
|
||||
"workspace.payments.table.date": "日期",
|
||||
"workspace.payments.table.paymentId": "付款ID",
|
||||
"workspace.payments.table.paymentId": "支付 ID",
|
||||
"workspace.payments.table.amount": "金额",
|
||||
"workspace.payments.table.receipt": "收据",
|
||||
"workspace.payments.type.credit": "信用",
|
||||
"workspace.payments.type.credit": "充值",
|
||||
"workspace.payments.type.subscription": "订阅",
|
||||
"workspace.payments.view": "查看",
|
||||
|
||||
"workspace.black.loading": "加载中...",
|
||||
"workspace.black.time.day": "天",
|
||||
"workspace.black.time.days": "天",
|
||||
@@ -455,20 +451,130 @@ export const dict = {
|
||||
"workspace.black.time.minutes": "分钟",
|
||||
"workspace.black.time.fewSeconds": "几秒钟",
|
||||
"workspace.black.subscription.title": "订阅",
|
||||
"workspace.black.subscription.message": "您已订阅 OpenCode Black,费用为每月 ${{plan}}。",
|
||||
"workspace.black.subscription.message": "您已订阅 OpenCode Black,价格为每月 ${{plan}}。",
|
||||
"workspace.black.subscription.manage": "管理订阅",
|
||||
"workspace.black.subscription.rollingUsage": "5小时使用",
|
||||
"workspace.black.subscription.weeklyUsage": "每周使用量",
|
||||
"workspace.black.subscription.rollingUsage": "5 小时用量",
|
||||
"workspace.black.subscription.weeklyUsage": "每周用量",
|
||||
"workspace.black.subscription.resetsIn": "重置于",
|
||||
"workspace.black.subscription.useBalance": "达到使用限额后使用您的可用余额",
|
||||
"workspace.black.waitlist.title": "候补名单",
|
||||
"workspace.black.waitlist.joined": "您已加入每月 ${{plan}} 的 OpenCode Black 方案候补名单。",
|
||||
"workspace.black.waitlist.ready": "我们已准备好将您加入每月 ${{plan}} 的 OpenCode Black 方案。",
|
||||
"workspace.black.waitlist.leave": "离开候补名单",
|
||||
"workspace.black.waitlist.leaving": "离开...",
|
||||
"workspace.black.waitlist.joined": "您已加入每月 ${{plan}} 的 OpenCode Black 计划候补名单。",
|
||||
"workspace.black.waitlist.ready": "我们已准备好将您加入每月 ${{plan}} 的 OpenCode Black 计划。",
|
||||
"workspace.black.waitlist.leave": "退出候补名单",
|
||||
"workspace.black.waitlist.leaving": "正在退出...",
|
||||
"workspace.black.waitlist.left": "已退出",
|
||||
"workspace.black.waitlist.enroll": "加入",
|
||||
"workspace.black.waitlist.enrolling": "加入中...",
|
||||
"workspace.black.waitlist.enrolling": "正在加入...",
|
||||
"workspace.black.waitlist.enrolled": "已加入",
|
||||
"workspace.black.waitlist.enrollNote": "单击“注册”后,您的订阅将立即开始,并且将从您的卡中扣费。",
|
||||
"workspace.black.waitlist.enrollNote": "点击加入后,您的订阅将立即开始,并将从您的卡中扣费。",
|
||||
|
||||
"download.title": "OpenCode | 下载",
|
||||
"download.meta.description": "下载适用于 macOS, Windows, 和 Linux 的 OpenCode",
|
||||
"download.hero.title": "下载 OpenCode",
|
||||
"download.hero.subtitle": "适用于 macOS, Windows, 和 Linux 的 Beta 版",
|
||||
"download.hero.button": "下载 {{os}} 版",
|
||||
"download.section.terminal": "OpenCode 终端",
|
||||
"download.section.desktop": "OpenCode 桌面版 (Beta)",
|
||||
"download.section.extensions": "OpenCode 扩展",
|
||||
"download.section.integrations": "OpenCode 集成",
|
||||
"download.action.download": "下载",
|
||||
"download.action.install": "安装",
|
||||
|
||||
"download.platform.macosAppleSilicon": "macOS (Apple Silicon)",
|
||||
"download.platform.macosIntel": "macOS (Intel)",
|
||||
"download.platform.windowsX64": "Windows (x64)",
|
||||
"download.platform.linuxDeb": "Linux (.deb)",
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
|
||||
"download.faq.a3.beforeLocal":
|
||||
"不一定,但可能需要。如果您想将 OpenCode 连接到付费提供商,您需要 AI 订阅,尽管您可以配合",
|
||||
"download.faq.a3.localLink": "本地模型",
|
||||
"download.faq.a3.afterLocal.beforeZen": "免费使用。虽然我们鼓励用户使用",
|
||||
"download.faq.a3.afterZen": ",但 OpenCode 支持所有主流提供商,如 OpenAI, Anthropic, xAI 等。",
|
||||
|
||||
"download.faq.a5.p1": "OpenCode 是 100% 免费使用的。",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"任何额外费用都来自您对模型提供商的订阅。虽然 OpenCode 支持任何模型提供商,但我们建议使用",
|
||||
"download.faq.a5.p2.afterZen": "。",
|
||||
|
||||
"download.faq.a6.p1": "只有当您在 OpenCode 中创建分享链接时,您的数据和信息才会被存储。",
|
||||
"download.faq.a6.p2.beforeShare": "了解更多关于",
|
||||
"download.faq.a6.shareLink": "分享页面",
|
||||
|
||||
"enterprise.title": "OpenCode | 面向组织的 OpenCode 企业版解决方案",
|
||||
"enterprise.meta.description": "联系 OpenCode 获取企业版解决方案",
|
||||
"enterprise.hero.title": "您的代码属于您",
|
||||
"enterprise.hero.body1":
|
||||
"OpenCode 在您的组织内部安全运行,不存储任何数据或上下文,也没有许可限制或所有权主张。您可以先与团队开始试用,然后通过集成 SSO 和内部 AI 网关将其部署到整个组织。",
|
||||
"enterprise.hero.body2": "告诉我们如何为您提供帮助。",
|
||||
"enterprise.form.name.label": "全名",
|
||||
"enterprise.form.name.placeholder": "Jeff Bezos",
|
||||
"enterprise.form.role.label": "角色",
|
||||
"enterprise.form.role.placeholder": "执行主席",
|
||||
"enterprise.form.email.label": "公司邮箱",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "您想解决什么问题?",
|
||||
"enterprise.form.message.placeholder": "我们需要帮助...",
|
||||
"enterprise.form.send": "发送",
|
||||
"enterprise.form.sending": "正在发送...",
|
||||
"enterprise.form.success": "消息已发送,我们会尽快与您联系。",
|
||||
"enterprise.faq.title": "常见问题",
|
||||
"enterprise.faq.q1": "什么是 OpenCode 企业版?",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode 企业版专为那些希望确保代码和数据永远不离开其基础设施的组织而设计。它通过使用集中式配置,与您的 SSO 和内部 AI 网关集成来实现这一点。",
|
||||
"enterprise.faq.q2": "如何开始使用 OpenCode 企业版?",
|
||||
"enterprise.faq.a2":
|
||||
"只需从您的团队内部试用开始即可。OpenCode 默认不存储您的代码或上下文数据,使得入门非常容易。然后联系我们讨论定价和实施选项。",
|
||||
"enterprise.faq.q3": "企业版定价如何运作?",
|
||||
"enterprise.faq.a3":
|
||||
"我们提供按席位计费的企业定价。如果您拥有自己的 LLM 网关,我们不收取 token 使用费。如需了解更多详情,请联系我们获取基于您组织需求的定制报价。",
|
||||
"enterprise.faq.q4": "OpenCode 企业版安全吗?",
|
||||
"enterprise.faq.a4":
|
||||
"是的。OpenCode 不存储您的代码或上下文数据。所有处理均在本地进行,或通过直接 API 调用您的 AI 提供商。通过集中配置和 SSO 集成,您的数据始终保留在您组织的基础设施内。",
|
||||
|
||||
"brand.title": "OpenCode | 品牌",
|
||||
"brand.meta.description": "OpenCode 品牌指南",
|
||||
"brand.heading": "品牌指南",
|
||||
"brand.subtitle": "帮助您使用 OpenCode 品牌的资源和资产。",
|
||||
"brand.downloadAll": "下载所有资产",
|
||||
|
||||
"changelog.title": "OpenCode | 更新日志",
|
||||
"changelog.meta.description": "OpenCode 发布说明和更新日志",
|
||||
"changelog.hero.title": "更新日志",
|
||||
"changelog.hero.subtitle": "OpenCode 的新更新和改进",
|
||||
"changelog.empty": "未找到更新日志条目。",
|
||||
"changelog.viewJson": "查看 JSON",
|
||||
|
||||
"bench.list.title": "基准测试",
|
||||
"bench.list.heading": "基准测试",
|
||||
"bench.list.table.agent": "代理",
|
||||
"bench.list.table.model": "模型",
|
||||
"bench.list.table.score": "分数",
|
||||
|
||||
"bench.detail.title": "基准测试 - {{task}}",
|
||||
"bench.detail.notFound": "未找到任务",
|
||||
"bench.detail.na": "N/A",
|
||||
"bench.detail.labels.agent": "代理",
|
||||
"bench.detail.labels.model": "模型",
|
||||
"bench.detail.labels.task": "任务",
|
||||
"bench.detail.labels.repo": "仓库",
|
||||
"bench.detail.labels.from": "来源",
|
||||
"bench.detail.labels.to": "目标",
|
||||
"bench.detail.labels.prompt": "提示词",
|
||||
"bench.detail.labels.commit": "Commit",
|
||||
"bench.detail.labels.averageDuration": "平均耗时",
|
||||
"bench.detail.labels.averageScore": "平均分数",
|
||||
"bench.detail.labels.averageCost": "平均成本",
|
||||
"bench.detail.labels.summary": "摘要",
|
||||
"bench.detail.labels.runs": "运行次数",
|
||||
"bench.detail.labels.score": "分数",
|
||||
"bench.detail.labels.base": "基础",
|
||||
"bench.detail.labels.penalty": "惩罚",
|
||||
"bench.detail.labels.weight": "权重",
|
||||
"bench.detail.table.run": "运行",
|
||||
"bench.detail.table.score": "分数 (基础 - 惩罚)",
|
||||
"bench.detail.table.cost": "成本",
|
||||
"bench.detail.table.duration": "耗时",
|
||||
"bench.detail.run.title": "运行 {{n}}",
|
||||
"bench.detail.rawJson": "原始 JSON",
|
||||
} satisfies Dict
|
||||
|
||||
@@ -4,424 +4,418 @@ import { dict as en } from "./en"
|
||||
export const dict = {
|
||||
...en,
|
||||
"nav.github": "GitHub",
|
||||
"nav.docs": "\u6587\u4ef6",
|
||||
"nav.changelog": "\u66f4\u65b0\u65e5\u8a8c",
|
||||
"nav.docs": "文件",
|
||||
"nav.changelog": "更新日誌",
|
||||
"nav.discord": "Discord",
|
||||
"nav.x": "X",
|
||||
"nav.enterprise": "\u4f01\u696d",
|
||||
"nav.enterprise": "企業",
|
||||
"nav.zen": "Zen",
|
||||
"nav.login": "\u767b\u5165",
|
||||
"nav.free": "\u514d\u8cbb",
|
||||
"nav.home": "\u9996\u9801",
|
||||
"nav.openMenu": "\u958b\u555f\u9078\u55ae",
|
||||
"nav.getStartedFree": "\u514d\u8cbb\u958b\u59cb\u4f7f\u7528",
|
||||
"nav.login": "登入",
|
||||
"nav.free": "免費",
|
||||
"nav.home": "首頁",
|
||||
"nav.openMenu": "開啟選單",
|
||||
"nav.getStartedFree": "免費開始使用",
|
||||
|
||||
"nav.context.copyLogo": "\u8907\u88fd\u6a19\u8a8c\uff08SVG\uff09",
|
||||
"nav.context.copyWordmark": "\u8907\u88fd\u5b57\u6a19\uff08SVG\uff09",
|
||||
"nav.context.brandAssets": "\u54c1\u724c\u8cc7\u7522",
|
||||
"nav.context.copyLogo": "複製標誌(SVG)",
|
||||
"nav.context.copyWordmark": "複製字標(SVG)",
|
||||
"nav.context.brandAssets": "品牌資產",
|
||||
|
||||
"footer.github": "GitHub",
|
||||
"footer.docs": "\u6587\u4ef6",
|
||||
"footer.changelog": "\u66f4\u65b0\u65e5\u8a8c",
|
||||
"footer.docs": "文件",
|
||||
"footer.changelog": "更新日誌",
|
||||
"footer.discord": "Discord",
|
||||
"footer.x": "X",
|
||||
|
||||
"legal.brand": "\u54c1\u724c",
|
||||
"legal.privacy": "\u96b1\u79c1",
|
||||
"legal.terms": "\u689d\u6b3e",
|
||||
"legal.brand": "品牌",
|
||||
"legal.privacy": "隱私",
|
||||
"legal.terms": "條款",
|
||||
|
||||
"email.title": "\u7b2c\u4e00\u6642\u9593\u77e5\u9053\u6211\u5011\u767c\u4f48\u65b0\u7522\u54c1",
|
||||
"email.subtitle": "\u52a0\u5165\u7b49\u5019\u540d\u55ae\uff0c\u7372\u53d6\u63d0\u65e9\u4f7f\u7528\u6b0a\u3002",
|
||||
"email.placeholder": "\u96fb\u5b50\u90f5\u4ef6\u5730\u5740",
|
||||
"email.subscribe": "\u8a02\u95b1",
|
||||
"email.success":
|
||||
"\u5c31\u5dee\u4e00\u6b65\uff0c\u8acb\u67e5\u6536\u4f60\u7684\u4fe1\u7bb1\u4e26\u78ba\u8a8d\u96fb\u5b50\u90f5\u4ef6\u5730\u5740",
|
||||
"email.title": "第一時間獲取我們發布新產品的消息",
|
||||
"email.subtitle": "加入候補名單,搶先體驗。",
|
||||
"email.placeholder": "電子郵件地址",
|
||||
"email.subscribe": "訂閱",
|
||||
"email.success": "就差一步,請查收你的信箱並確認電子郵件地址",
|
||||
|
||||
"notFound.title": "\u627e\u4e0d\u5230\u9801\u9762 | opencode",
|
||||
"notFound.heading": "404 - \u627e\u4e0d\u5230\u9801\u9762",
|
||||
"notFound.home": "\u9996\u9801",
|
||||
"notFound.docs": "\u6587\u4ef6",
|
||||
"notFound.title": "找不到頁面 | OpenCode",
|
||||
"notFound.heading": "404 - 找不到頁面",
|
||||
"notFound.home": "首頁",
|
||||
"notFound.docs": "文件",
|
||||
"notFound.github": "GitHub",
|
||||
"notFound.discord": "Discord",
|
||||
|
||||
"user.logout": "\u767b\u51fa",
|
||||
"user.logout": "登出",
|
||||
|
||||
"workspace.select": "\u9078\u53d6\u5de5\u4f5c\u5340",
|
||||
"workspace.createNew": "+ \u5efa\u7acb\u65b0\u5de5\u4f5c\u5340",
|
||||
"workspace.modal.title": "\u5efa\u7acb\u65b0\u5de5\u4f5c\u5340",
|
||||
"workspace.modal.placeholder": "\u8f38\u5165\u5de5\u4f5c\u5340\u540d\u7a31",
|
||||
"workspace.select": "選取工作區",
|
||||
"workspace.createNew": "+ 建立新工作區",
|
||||
"workspace.modal.title": "建立新工作區",
|
||||
"workspace.modal.placeholder": "輸入工作區名稱",
|
||||
|
||||
"common.cancel": "\u53d6\u6d88",
|
||||
"common.creating": "\u6b63\u5728\u5efa\u7acb...",
|
||||
"common.create": "\u5efa\u7acb",
|
||||
"common.cancel": "取消",
|
||||
"common.creating": "正在建立...",
|
||||
"common.create": "建立",
|
||||
|
||||
"common.videoUnsupported": "\u4f60\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4 video \u6a19\u7c64\u3002",
|
||||
"common.figure": "\u5716{{n}}",
|
||||
"common.faq": "\u5e38\u898b\u554f\u984c",
|
||||
"common.learnMore": "\u4e86\u89e3\u66f4\u591a",
|
||||
"common.videoUnsupported": "你的瀏覽器不支援 video 標籤。",
|
||||
"common.figure": "圖 {{n}}.",
|
||||
"common.faq": "常見問題",
|
||||
"common.learnMore": "了解更多",
|
||||
|
||||
"home.title": "OpenCode | \u958b\u6e90 AI \u7de8\u78bc\u4ee3\u7406",
|
||||
"error.invalidPlan": "無效的方案",
|
||||
"error.workspaceRequired": "需要工作區 ID",
|
||||
"error.alreadySubscribed": "此工作區已有訂閱",
|
||||
"error.limitRequired": "需要設定限額。",
|
||||
"error.monthlyLimitInvalid": "請設定有效的每月限額。",
|
||||
"error.workspaceNameRequired": "需要工作區名稱。",
|
||||
"error.nameTooLong": "名稱長度不能超過 255 個字元。",
|
||||
"error.emailRequired": "需要電子郵件",
|
||||
"error.roleRequired": "需要角色",
|
||||
"error.idRequired": "需要 ID",
|
||||
"error.nameRequired": "需要名稱",
|
||||
"error.providerRequired": "需要供應商",
|
||||
"error.apiKeyRequired": "需要 API 金鑰",
|
||||
"error.modelRequired": "需要模型",
|
||||
"error.reloadAmountMin": "儲值金額必須至少為 ${{amount}}",
|
||||
"error.reloadTriggerMin": "餘額觸發門檻必須至少為 ${{amount}}",
|
||||
|
||||
"home.banner.badge": "\u65b0",
|
||||
"home.banner.text": "\u684c\u9762\u61c9\u7528\u5df2\u63a8\u51fa Beta",
|
||||
"home.banner.platforms": "\u652f\u63f4 macOS\u3001Windows \u8207 Linux",
|
||||
"home.banner.downloadNow": "\u7acb\u5373\u4e0b\u8f09",
|
||||
"home.banner.downloadBetaNow": "\u7acb\u5373\u4e0b\u8f09\u684c\u9762 Beta \u7248",
|
||||
"home.title": "OpenCode | 開源 AI 編碼代理",
|
||||
|
||||
"home.hero.title": "\u958b\u6e90 AI \u7de8\u78bc\u4ee3\u7406",
|
||||
"home.hero.subtitle.a":
|
||||
"\u5167\u5efa\u514d\u8cbb\u6a21\u578b\uff0c\u6216\u9023\u63a5\u4efb\u610f\u63d0\u4f9b\u5546\u7684\u4efb\u610f\u6a21\u578b\uff0c",
|
||||
"home.hero.subtitle.b": "\u5305\u62ec Claude\u3001GPT\u3001Gemini \u7b49\u3002",
|
||||
"temp.title": "OpenCode | 專為終端打造的 AI 編碼代理",
|
||||
"temp.hero.title": "專為終端打造的 AI 編碼代理",
|
||||
"temp.zen": "OpenCode Zen",
|
||||
"temp.getStarted": "開始使用",
|
||||
"temp.feature.native.title": "原生 TUI",
|
||||
"temp.feature.native.body": "響應式、原生、可自訂主題的終端介面",
|
||||
"temp.feature.zen.beforeLink": "",
|
||||
"temp.feature.zen.link": "精選模型列表",
|
||||
"temp.feature.zen.afterLink": "由 OpenCode 提供",
|
||||
"temp.feature.models.beforeLink": "透過",
|
||||
"temp.feature.models.afterLink": "支援 75+ 家 LLM 供應商,包括本地模型",
|
||||
"temp.screenshot.caption": "使用 tokyonight 主題的 OpenCode TUI",
|
||||
"temp.screenshot.alt": "使用 tokyonight 主題的 OpenCode TUI",
|
||||
|
||||
"home.install.ariaLabel": "\u5b89\u88dd\u9078\u9805",
|
||||
"home.banner.badge": "新",
|
||||
"home.banner.text": "桌面應用已推出 Beta",
|
||||
"home.banner.platforms": "支援 macOS、Windows 與 Linux",
|
||||
"home.banner.downloadNow": "立即下載",
|
||||
"home.banner.downloadBetaNow": "立即下載桌面 Beta 版",
|
||||
|
||||
"home.what.title": "\u4ec0\u9ebc\u662f OpenCode\uff1f",
|
||||
"home.what.body":
|
||||
"OpenCode \u662f\u4e00\u500b\u958b\u6e90\u4ee3\u7406\uff0c\u5e6b\u52a9\u4f60\u5728\u7d42\u7aef\u3001IDE \u6216\u684c\u9762\u7aef\u7de8\u5beb\u7a0b\u5f0f\u78bc\u3002",
|
||||
"home.what.lsp.title": "\u652f\u63f4 LSP",
|
||||
"home.what.lsp.body": "\u70ba LLM \u81ea\u52d5\u8f09\u5165\u5408\u9069\u7684 LSP",
|
||||
"home.what.multiSession.title": "\u591a\u5de5\u4f5c\u968e\u6bb5",
|
||||
"home.what.multiSession.body": "\u540c\u4e00\u500b\u5c08\u6848\u4e2d\u5e36\u884c\u555f\u52d5\u591a\u500b\u4ee3\u7406",
|
||||
"home.what.shareLinks.title": "\u5206\u4eab\u9023\u7d50",
|
||||
"home.what.shareLinks.body":
|
||||
"\u5c07\u4efb\u610f\u968e\u6bb5\u7684\u9023\u7d50\u5206\u4eab\u7d66\u4ed6\u4eba\u4f9b\u53c3\u8003\u6216\u9664\u932f",
|
||||
"home.hero.title": "開源 AI 編碼代理",
|
||||
"home.hero.subtitle.a": "內建免費模型,或連接任意供應商的任意模型,",
|
||||
"home.hero.subtitle.b": "包括 Claude、GPT、Gemini 等。",
|
||||
|
||||
"home.install.ariaLabel": "安裝選項",
|
||||
|
||||
"home.what.title": "什麼是 OpenCode?",
|
||||
"home.what.body": "OpenCode 是一個開源代理,幫助你在終端、IDE 或桌面端編寫程式碼。",
|
||||
"home.what.lsp.title": "支援 LSP",
|
||||
"home.what.lsp.body": "為 LLM 自動載入合適的 LSP",
|
||||
"home.what.multiSession.title": "多工作階段",
|
||||
"home.what.multiSession.body": "在同一專案中平行啟動多個代理",
|
||||
"home.what.shareLinks.title": "分享連結",
|
||||
"home.what.shareLinks.body": "將任意階段的連結分享給他人供參考或除錯",
|
||||
"home.what.copilot.title": "GitHub Copilot",
|
||||
"home.what.copilot.body": "\u4f7f\u7528 GitHub \u767b\u5165\u4ee5\u4f7f\u7528\u4f60\u7684 Copilot \u5e33\u865f",
|
||||
"home.what.copilot.body": "使用 GitHub 登入以使用你的 Copilot 帳號",
|
||||
"home.what.chatgptPlus.title": "ChatGPT Plus/Pro",
|
||||
"home.what.chatgptPlus.body":
|
||||
"\u4f7f\u7528 OpenAI \u767b\u5165\u4ee5\u4f7f\u7528\u4f60\u7684 ChatGPT Plus/Pro \u5e33\u865f",
|
||||
"home.what.anyModel.title": "\u4efb\u610f\u6a21\u578b",
|
||||
"home.what.anyModel.body":
|
||||
"\u900f\u904e Models.dev \u9023\u63a5 75+ \u5bb6 LLM \u63d0\u4f9b\u5546\uff0c\u5305\u62ec\u672c\u5730\u6a21\u578b",
|
||||
"home.what.anyEditor.title": "\u4efb\u610f\u7de8\u8f2f\u5668",
|
||||
"home.what.anyEditor.body":
|
||||
"\u53ef\u4f5c\u70ba\u7d42\u7aef\u4ecb\u9762\u3001\u684c\u9762\u61c9\u7528\u8207 IDE \u64f4\u5145\u4f7f\u7528",
|
||||
"home.what.readDocs": "\u95b1\u8b80\u6587\u4ef6",
|
||||
"home.what.chatgptPlus.body": "使用 OpenAI 登入以使用你的 ChatGPT Plus 或 Pro 帳號",
|
||||
"home.what.anyModel.title": "任意模型",
|
||||
"home.what.anyModel.body": "透過 Models.dev 連接 75+ 家 LLM 供應商,包括本地模型",
|
||||
"home.what.anyEditor.title": "任意編輯器",
|
||||
"home.what.anyEditor.body": "可作為終端介面、桌面應用程式與 IDE 擴充功能使用",
|
||||
"home.what.readDocs": "閱讀文件",
|
||||
|
||||
"home.growth.title": "\u958b\u6e90 AI \u7de8\u78bc\u4ee3\u7406",
|
||||
"home.growth.title": "開源 AI 編碼代理",
|
||||
"home.growth.body":
|
||||
"\u64c1\u6709\u8d85\u904e <strong>{{stars}}</strong> \u500b GitHub Star\u3001<strong>{{contributors}}</strong> \u4f4d\u8ca2\u737b\u8005\u4ee5\u53ca\u8d85\u904e <strong>{{commits}}</strong> \u6b21\u63d0\u4ea4\uff0cOpenCode \u6bcf\u6708\u88ab\u8d85\u904e <strong>{{monthlyUsers}}</strong> \u540d\u958b\u767c\u8005\u4f7f\u7528\u4e26\u4fe1\u8cf4\u3002",
|
||||
"擁有超過 <strong>{{stars}}</strong> 個 GitHub Star、<strong>{{contributors}}</strong> 位貢獻者以及超過 <strong>{{commits}}</strong> 次提交,OpenCode 每月被超過 <strong>{{monthlyUsers}}</strong> 名開發者使用並信賴。",
|
||||
"home.growth.githubStars": "GitHub Star",
|
||||
"home.growth.contributors": "\u8ca2\u737b\u8005",
|
||||
"home.growth.monthlyDevs": "\u6708\u6d3b\u958b\u767c\u8005",
|
||||
"home.growth.contributors": "貢獻者",
|
||||
"home.growth.monthlyDevs": "每月活躍開發者",
|
||||
|
||||
"home.privacy.title": "\u96b1\u79c1\u512a\u5148",
|
||||
"home.privacy.body":
|
||||
"OpenCode \u4e0d\u5132\u5b58\u4f60\u7684\u7a0b\u5f0f\u78bc\u6216\u4e0a\u4e0b\u6587\u8cc7\u6599\uff0c\u56e0\u6b64\u53ef\u4ee5\u5728\u6ce8\u91cd\u96b1\u79c1\u7684\u74b0\u5883\u4e2d\u904b\u4f5c\u3002",
|
||||
"home.privacy.learnMore": "\u4e86\u89e3\u66f4\u591a\u95dc\u65bc",
|
||||
"home.privacy.link": "\u96b1\u79c1",
|
||||
"home.privacy.title": "隱私優先",
|
||||
"home.privacy.body": "OpenCode 不儲存你的程式碼或上下文資料,因此可以在注重隱私的環境中運作。",
|
||||
"home.privacy.learnMore": "了解更多關於",
|
||||
"home.privacy.link": "隱私",
|
||||
|
||||
"home.faq.q1": "\u4ec0\u9ebc\u662f OpenCode\uff1f",
|
||||
"home.faq.q1": "什麼是 OpenCode?",
|
||||
"home.faq.a1":
|
||||
"OpenCode \u662f\u4e00\u500b\u958b\u6e90\u4ee3\u7406\uff0c\u5e6b\u52a9\u4f60\u4f7f\u7528\u4efb\u610f AI \u6a21\u578b\u7de8\u5beb\u4e26\u57f7\u884c\u7a0b\u5f0f\u78bc\u3002\u5b83\u63d0\u4f9b\u7d42\u7aef\u4ecb\u9762\u3001\u684c\u9762\u61c9\u7528\u6216 IDE \u64f4\u5145\u3002",
|
||||
"home.faq.q2": "\u5982\u4f55\u4f7f\u7528 OpenCode\uff1f",
|
||||
"home.faq.a2.before": "\u6700\u7c21\u55ae\u7684\u65b9\u5f0f\u662f\u5148\u95b1\u8b80",
|
||||
"home.faq.a2.link": "\u5165\u9580\u4ecb\u7d39",
|
||||
"home.faq.q3": "\u4f7f\u7528 OpenCode \u9700\u8981\u984d\u5916\u7684 AI \u8a02\u95b1\u55ce\uff1f",
|
||||
"home.faq.a3.p1":
|
||||
"\u4e0d\u4e00\u5b9a\u3002OpenCode \u81ea\u5e36\u4e00\u7d44\u514d\u8cbb\u6a21\u578b\uff0c\u7121\u9700\u5efa\u7acb\u5e33\u865f\u5373\u53ef\u4f7f\u7528\u3002",
|
||||
"home.faq.a3.p2.beforeZen": "\u6b64\u5916\uff0c\u4f60\u53ef\u4ee5\u900f\u904e\u5efa\u7acb",
|
||||
"home.faq.a3.p2.afterZen": "\u5e33\u865f\u4f7f\u7528\u5e38\u898b\u7684\u7de8\u78bc\u6a21\u578b\u3002",
|
||||
"home.faq.a3.p3":
|
||||
"\u6211\u5011\u9f13\u52f5\u4f7f\u7528 Zen\uff0c\u4f46 OpenCode \u4e5f\u652f\u63f4 OpenAI\u3001Anthropic\u3001xAI \u7b49\u4e3b\u6d41\u63d0\u4f9b\u5546\u3002",
|
||||
"home.faq.a3.p4.beforeLocal": "\u4f60\u9084\u53ef\u4ee5\u9023\u63a5",
|
||||
"home.faq.a3.p4.localLink": "\u672c\u5730\u6a21\u578b",
|
||||
"home.faq.q4": "\u53ef\u4ee5\u4f7f\u7528\u6211\u73fe\u6709\u7684 AI \u8a02\u95b1\u55ce\uff1f",
|
||||
"OpenCode 是一個開源代理,幫助你使用任意 AI 模型編寫並執行程式碼。它提供終端介面、桌面應用程式或 IDE 擴充功能。",
|
||||
"home.faq.q2": "如何使用 OpenCode?",
|
||||
"home.faq.a2.before": "最簡單的方式是先閱讀",
|
||||
"home.faq.a2.link": "入門介紹",
|
||||
"home.faq.q3": "使用 OpenCode 需要額外的 AI 訂閱嗎?",
|
||||
"home.faq.a3.p1": "不一定。OpenCode 自帶一組免費模型,無需建立帳號即可使用。",
|
||||
"home.faq.a3.p2.beforeZen": "此外,你可以透過建立",
|
||||
"home.faq.a3.p2.afterZen": "帳號使用常見的編碼模型。",
|
||||
"home.faq.a3.p3": "我們鼓勵使用 Zen,但 OpenCode 也支援 OpenAI、Anthropic、xAI 等主流供應商。",
|
||||
"home.faq.a3.p4.beforeLocal": "你還可以連接你的",
|
||||
"home.faq.a3.p4.localLink": "本地模型",
|
||||
"home.faq.q4": "可以使用我現有的 AI 訂閱嗎?",
|
||||
"home.faq.a4.p1":
|
||||
"\u53ef\u4ee5\u3002OpenCode \u652f\u63f4\u4e3b\u6d41\u63d0\u4f9b\u5546\u7684\u8a02\u95b1\u65b9\u6848\uff0c\u5305\u62ec Claude Pro/Max\u3001ChatGPT Plus/Pro \u8207 GitHub Copilot\u3002",
|
||||
"home.faq.q5": "OpenCode \u53ea\u80fd\u5728\u7d42\u7aef\u4e2d\u7528\u55ce\uff1f",
|
||||
"home.faq.a5.beforeDesktop": "\u4e0d\u518d\u662f\u4e86\uff01OpenCode \u73fe\u5728\u4e5f\u63d0\u4f9b",
|
||||
"home.faq.a5.desktop": "\u684c\u9762\u7aef",
|
||||
"home.faq.a5.and": "\u8207",
|
||||
"home.faq.a5.web": "\u7db2\u9801",
|
||||
"home.faq.q6": "OpenCode \u50f9\u683c\u5982\u4f55\uff1f",
|
||||
"home.faq.a6":
|
||||
"OpenCode 100% \u514d\u8cbb\u3002\u4e5f\u81ea\u5e36\u4e00\u7d44\u514d\u8cbb\u6a21\u578b\u3002\u5982\u679c\u4f60\u9023\u63a5\u5176\u4ed6\u63d0\u4f9b\u5546\uff0c\u53ef\u80fd\u6703\u6709\u984d\u5916\u8cbb\u7528\u3002",
|
||||
"home.faq.q7": "\u8cc7\u6599\u8207\u96b1\u79c1\u600e\u9ebc\u8fa6\uff1f",
|
||||
"home.faq.a7.p1":
|
||||
"\u50c5\u7576\u4f60\u4f7f\u7528\u6211\u5011\u7684\u514d\u8cbb\u6a21\u578b\u6216\u5efa\u7acb\u53ef\u5206\u4eab\u9023\u7d50\u6642\uff0c\u624d\u6703\u5132\u5b58\u4f60\u7684\u8cc7\u6599\u8207\u8cc7\u8a0a\u3002",
|
||||
"home.faq.a7.p2.beforeModels": "\u4e86\u89e3\u66f4\u591a\u95dc\u65bc",
|
||||
"home.faq.a7.p2.modelsLink": "\u6211\u5011\u7684\u6a21\u578b",
|
||||
"home.faq.a7.p2.and": "\u8207",
|
||||
"home.faq.a7.p2.shareLink": "\u5206\u4eab\u9801\u9762",
|
||||
"home.faq.q8": "OpenCode \u662f\u958b\u6e90\u7684\u55ce\uff1f",
|
||||
"home.faq.a8.p1": "\u662f\u7684\uff0cOpenCode \u5b8c\u5168\u958b\u6e90\u3002\u539f\u59cb\u78bc\u516c\u958b\u5728",
|
||||
"home.faq.a8.p2": "\u4e26\u4ee5",
|
||||
"home.faq.a8.mitLicense": "MIT \u6388\u6b0a\u689d\u6b3e",
|
||||
"home.faq.a8.p3":
|
||||
"\u767c\u5e03\uff0c\u610f\u5473\u8457\u4efb\u4f55\u4eba\u90fd\u53ef\u4ee5\u4f7f\u7528\u3001\u4fee\u6539\u6216\u8ca2\u737b\u3002\u793e\u7fa4\u7684\u4efb\u4f55\u4eba\u90fd\u53ef\u4ee5\u63d0\u4ea4 issues\u3001pull requests \u4e26\u64f4\u5c55\u529f\u80fd\u3002",
|
||||
"可以。OpenCode 支援主流供應商的訂閱方案,包括 Claude Pro/Max、ChatGPT Plus/Pro 與 GitHub Copilot。",
|
||||
"home.faq.q5": "OpenCode 只能在終端中使用嗎?",
|
||||
"home.faq.a5.beforeDesktop": "不再是了!OpenCode 現在也提供",
|
||||
"home.faq.a5.desktop": "桌面端",
|
||||
"home.faq.a5.and": "與",
|
||||
"home.faq.a5.web": "網頁端",
|
||||
"home.faq.q6": "OpenCode 價格如何?",
|
||||
"home.faq.a6": "OpenCode 100% 免費使用。它也自帶一組免費模型。如果你連接其他供應商,可能會產生額外費用。",
|
||||
"home.faq.q7": "資料與隱私怎麼辦?",
|
||||
"home.faq.a7.p1": "僅當你使用我們的免費模型或建立可分享連結時,才會儲存你的資料與資訊。",
|
||||
"home.faq.a7.p2.beforeModels": "了解更多關於",
|
||||
"home.faq.a7.p2.modelsLink": "我們的模型",
|
||||
"home.faq.a7.p2.and": "與",
|
||||
"home.faq.a7.p2.shareLink": "分享頁面",
|
||||
"home.faq.q8": "OpenCode 是開源的嗎?",
|
||||
"home.faq.a8.p1": "是的,OpenCode 完全開源。原始碼公開在",
|
||||
"home.faq.a8.p2": "並採用",
|
||||
"home.faq.a8.mitLicense": "MIT 授權條款",
|
||||
"home.faq.a8.p3": ",意味著任何人都可以使用、修改或貢獻。社群中的任何人都可以提交 issue、pull requests 並擴充功能。",
|
||||
|
||||
"home.zenCta.title": "\u70ba\u7de8\u78bc\u4ee3\u7406\u63d0\u4f9b\u53ef\u9760\u3001\u512a\u5316\u7684\u6a21\u578b",
|
||||
"home.zenCta.title": "存取可靠且最佳化的編碼代理模型",
|
||||
"home.zenCta.body":
|
||||
"Zen \u63d0\u4f9b\u4e00\u7d44\u7cbe\u9078\u7684 AI \u6a21\u578b\uff0c\u9019\u4e9b\u6a21\u578b\u662f OpenCode \u70ba\u4e86\u7de8\u78bc\u4ee3\u7406\u5c08\u9580\u6e2c\u8a66\u8207\u8a55\u6e2c\u904e\u7684\u3002\u7121\u9700\u64d4\u5fc3\u4e0d\u540c\u63d0\u4f9b\u5546\u4e4b\u9593\u6027\u80fd\u8207\u54c1\u8cea\u53c3\u5dee\uff0c\u4f7f\u7528\u7d93\u904e\u9a57\u8b49\u7684\u6a21\u578b\u5373\u53ef\u3002",
|
||||
"home.zenCta.link": "\u4e86\u89e3 Zen",
|
||||
"Zen 提供一組精選的 AI 模型,這些模型是 OpenCode 為了編碼代理專門測試與評測過的。無需擔心不同供應商之間效能與品質參差不齊,使用經過驗證的模型即可。",
|
||||
"home.zenCta.link": "了解 Zen",
|
||||
|
||||
"enterprise.title": "OpenCode | \u9762\u5411\u7d44\u7e54\u7684\u4f01\u696d\u89e3\u6c7a\u65b9\u6848",
|
||||
|
||||
"zen.title":
|
||||
"OpenCode Zen | \u70ba\u7de8\u78bc\u4ee3\u7406\u7cbe\u9078\u7684\u53ef\u9760\u3001\u512a\u5316\u6a21\u578b",
|
||||
"zen.hero.title": "\u70ba\u7de8\u78bc\u4ee3\u7406\u63d0\u4f9b\u53ef\u9760\u3001\u512a\u5316\u7684\u6a21\u578b",
|
||||
"zen.title": "OpenCode Zen | 專為編碼代理精選的可靠最佳化模型",
|
||||
"zen.hero.title": "專為編碼代理提供的可靠最佳化模型",
|
||||
"zen.hero.body":
|
||||
"Zen \u63d0\u4f9b\u4e00\u7d44\u7cbe\u9078\u7684 AI \u6a21\u578b\uff0c\u9019\u4e9b\u6a21\u578b\u662f OpenCode \u70ba\u4e86\u7de8\u78bc\u4ee3\u7406\u5c08\u9580\u6e2c\u8a66\u8207\u8a55\u6e2c\u904e\u7684\u3002\u7121\u9700\u64d4\u5fc3\u4e0d\u540c\u63d0\u4f9b\u5546\u4e4b\u9593\u6027\u80fd\u8207\u54c1\u8cea\u53c3\u5dee\uff0c\u4f7f\u7528\u7d93\u904e\u9a57\u8b49\u7684\u6a21\u578b\u5373\u53ef\u3002",
|
||||
"Zen 提供一組精選的 AI 模型,這些模型是 OpenCode 為了編碼代理專門測試與評測過的。無需擔心效能與品質參差不齊,使用經過驗證的模型即可。",
|
||||
|
||||
"zen.faq.q1": "\u4ec0\u9ebc\u662f OpenCode Zen\uff1f",
|
||||
"zen.faq.a1":
|
||||
"Zen \u662f\u7531 OpenCode \u5718\u968a\u6253\u9020\u3001\u5c08\u70ba\u7de8\u78bc\u4ee3\u7406\u6e2c\u8a66\u8207\u8a55\u6e2c\u7684 AI \u6a21\u578b\u7cbe\u9078\u96c6\u5408\u3002",
|
||||
"zen.faq.q2": "\u662f\u4ec0\u9ebc\u8b93 Zen \u66f4\u6e96\u78ba\uff1f",
|
||||
"zen.faq.a2":
|
||||
"Zen \u53ea\u63d0\u4f9b\u5c08\u70ba\u7de8\u78bc\u4ee3\u7406\u6e2c\u8a66\u8207\u8a55\u6e2c\u7684\u6a21\u578b\u3002\u4f60\u4e0d\u6703\u7528\u5976\u6cb9\u5200\u5207\u725b\u6392\uff0c\u4e5f\u5225\u7528\u7cdf\u7cd5\u7684\u6a21\u578b\u4f86\u5beb\u7a0b\u5f0f\u3002",
|
||||
"zen.faq.q3": "Zen \u66f4\u4fbf\u5b9c\u55ce\uff1f",
|
||||
"zen.faq.q1": "什麼是 OpenCode Zen?",
|
||||
"zen.faq.a1": "Zen 是由 OpenCode 團隊打造、專為編碼代理測試與評測的 AI 模型精選集合。",
|
||||
"zen.faq.q2": "是什麼讓 Zen 更準確?",
|
||||
"zen.faq.a2": "Zen 只提供專為編碼代理測試與評測的模型。你不會用奶油刀切牛排,也別用糟糕的模型來寫程式。",
|
||||
"zen.faq.q3": "Zen 更便宜嗎?",
|
||||
"zen.faq.a3":
|
||||
"Zen \u4e0d\u4ee5\u71df\u5229\u70ba\u76ee\u7684\u3002Zen \u6703\u628a\u6a21\u578b\u4f9b\u61c9\u5546\u7684\u6210\u672c\u539f\u6a23\u8f49\u7d66\u4f60\u3002Zen \u4f7f\u7528\u8d8a\u591a\uff0cOpenCode \u5c31\u8d8a\u80fd\u8ac7\u5230\u66f4\u597d\u7684\u50f9\u683c\u4e26\u628a\u512a\u60e0\u8b93\u5229\u7d66\u4f60\u3002",
|
||||
"zen.faq.q4": "Zen \u8cbb\u7528\u662f\u591a\u5c11\uff1f",
|
||||
"Zen 不以營利為目的。Zen 會把模型供應商的成本原樣轉給你。Zen 的使用量越高,OpenCode 就越能談到更好的價格並把優惠讓利給你。",
|
||||
"zen.faq.q4": "Zen 費用是多少?",
|
||||
"zen.faq.a4.p1.beforePricing": "Zen",
|
||||
"zen.faq.a4.p1.pricingLink": "\u6309\u8acb\u6c42\u8a08\u8cbb",
|
||||
"zen.faq.a4.p1.afterPricing":
|
||||
"\u4e14\u96f6\u52a0\u50f9\uff0c\u56e0\u6b64\u4f60\u652f\u4ed8\u7684\u5c31\u662f\u6a21\u578b\u4f9b\u61c9\u5546\u7684\u539f\u50f9\u3002",
|
||||
"zen.faq.a4.p2.beforeAccount": "\u7e3d\u8cbb\u7528\u53d6\u6c7a\u65bc\u4f7f\u7528\u91cf\uff0c\u4f60\u53ef\u4ee5\u5728",
|
||||
"zen.faq.a4.p2.accountLink": "\u5e33\u6236\u4e2d\u8a2d\u5b9a\u6bcf\u6708\u652f\u51fa\u4e0a\u9650",
|
||||
"zen.faq.a4.p3":
|
||||
"\u70ba\u4e86\u8986\u84cb\u6210\u672c\uff0cOpenCode \u53ea\u6703\u6536\u53d6\u5f88\u5c0f\u7684\u652f\u4ed8\u8655\u7406\u8cbb\uff1a\u6bcf\u6b21\u5145\u503c $20 \u6703\u984d\u5916\u6536\u53d6 $1.23\u3002",
|
||||
"zen.faq.q5": "\u8cc7\u6599\u8207\u96b1\u79c1\u5982\u4f55\uff1f",
|
||||
"zen.faq.a5.beforeExceptions":
|
||||
"\u6240\u6709 Zen \u6a21\u578b\u90fd\u8a17\u7ba1\u5728\u7f8e\u570b\u3002\u4f9b\u61c9\u5546\u9075\u5faa\u96f6\u7559\u5b58\u653f\u7b56\uff0c\u4e0d\u6703\u5c07\u4f60\u7684\u8cc7\u6599\u7528\u65bc\u6a21\u578b\u8a13\u7df4\uff0c\u4f46\u6709",
|
||||
"zen.faq.a5.exceptionsLink": "\u4ee5\u4e0b\u4f8b\u5916",
|
||||
"zen.faq.q6": "\u6211\u53ef\u4ee5\u8a2d\u5b9a\u652f\u51fa\u4e0a\u9650\u55ce\uff1f",
|
||||
"zen.faq.a6":
|
||||
"\u53ef\u4ee5\uff0c\u4f60\u53ef\u4ee5\u5728\u5e33\u6236\u4e2d\u8a2d\u5b9a\u6bcf\u6708\u652f\u51fa\u4e0a\u9650\u3002",
|
||||
"zen.faq.q7": "\u6211\u53ef\u4ee5\u53d6\u6d88\u55ce\uff1f",
|
||||
"zen.faq.a7":
|
||||
"\u53ef\u4ee5\uff0c\u4f60\u53ef\u4ee5\u96a8\u6642\u505c\u7528\u8a08\u8cbb\u4e26\u4f7f\u7528\u5269\u9918\u9918\u984d\u3002",
|
||||
"zen.faq.q8": "\u6211\u53ef\u4ee5\u5728\u5176\u4ed6\u7de8\u78bc\u4ee3\u7406\u4e2d\u4f7f\u7528 Zen \u55ce\uff1f",
|
||||
"zen.faq.a4.p1.pricingLink": "按請求付費",
|
||||
"zen.faq.a4.p1.afterPricing": "且零加價,因此你支付的就是模型供應商的原價。",
|
||||
"zen.faq.a4.p2.beforeAccount": "總費用取決於使用量,你可以在",
|
||||
"zen.faq.a4.p2.accountLink": "帳戶中設定每月支出上限",
|
||||
"zen.faq.a4.p3": "為了覆蓋成本,OpenCode 只會收取很小的支付處理費:每次儲值 $20 會額外收取 $1.23。",
|
||||
"zen.faq.q5": "資料與隱私如何?",
|
||||
"zen.faq.a5.beforeExceptions": "所有 Zen 模型都託管在美國。供應商遵循零留存政策,不會將你的資料用於模型訓練,但有",
|
||||
"zen.faq.a5.exceptionsLink": "以下例外",
|
||||
"zen.faq.q6": "我可以設定支出上限嗎?",
|
||||
"zen.faq.a6": "可以,你可以在帳戶中設定每月支出上限。",
|
||||
"zen.faq.q7": "我可以取消嗎?",
|
||||
"zen.faq.a7": "可以,你可以隨時停用計費並使用剩餘餘額。",
|
||||
"zen.faq.q8": "我可以在其他編碼代理中使用 Zen 嗎?",
|
||||
"zen.faq.a8":
|
||||
"Zen \u8207 OpenCode \u642d\u914d\u5f97\u5f88\u597d\uff0c\u4f46\u4f60\u4e5f\u53ef\u4ee5\u5728\u4efb\u4f55\u4ee3\u7406\u4e2d\u4f7f\u7528 Zen\u3002\u8acb\u5728\u4f60\u504f\u597d\u7684\u7de8\u78bc\u4ee3\u7406\u4e2d\u6309\u7167\u8a2d\u5b9a\u8aaa\u660e\u9032\u884c\u914d\u7f6e\u3002",
|
||||
"Zen 與 OpenCode 搭配得很好,但你也可以在任何代理中使用 Zen。請在你偏好的編碼代理中按照設定說明進行配置。",
|
||||
|
||||
"download.title": "OpenCode | \u4e0b\u8f09",
|
||||
"zen.cta.start": "開始使用 Zen",
|
||||
"zen.pricing.title": "添加 20 美元即用即付餘額",
|
||||
"zen.pricing.fee": "(+ 1.23 美元卡處理費)",
|
||||
"zen.pricing.body": "與任何代理一起使用。設置每月支出限額。隨時取消。",
|
||||
"zen.pricing.title": "儲值 $20 即用即付餘額",
|
||||
"zen.pricing.fee": "(+$1.23 刷卡手續費)",
|
||||
"zen.pricing.body": "可與任何代理一起使用。設定每月支出限額。隨時取消。",
|
||||
"zen.problem.title": "Zen 正在解決什麼問題?",
|
||||
"zen.problem.body":
|
||||
"可用的模型有很多,但只有少數可以與編碼代理配合良好。大多數提供商以不同的方式配置它們,並產生不同的結果。",
|
||||
"zen.problem.subtitle": "我們正在為所有人修復此問題,而不僅僅是 OpenCode 用戶。",
|
||||
"可用的模型有很多,但只有少數可以與編碼代理配合良好。大多數供應商以不同的方式配置它們,導致結果參差不齊。",
|
||||
"zen.problem.subtitle": "我們正在為所有人解決此問題,而不僅僅是 OpenCode 使用者。",
|
||||
"zen.problem.item1": "測試選定的模型並諮詢其團隊",
|
||||
"zen.problem.item2": "與提供商合作以確保正確交付",
|
||||
"zen.problem.item3": "對我們推薦的所有模型-提供商組合進行基準測試",
|
||||
"zen.problem.item2": "與供應商合作以確保正確交付",
|
||||
"zen.problem.item3": "對我們推薦的所有模型-供應商組合進行基準測試",
|
||||
"zen.how.title": "Zen 如何運作",
|
||||
"zen.how.body": "雖然我們建議您將 Zen 與 OpenCode 一起使用,但您可以將 Zen 與任何代理一起使用。",
|
||||
"zen.how.step1.title": "註冊並添加 20 美元餘額",
|
||||
"zen.how.body": "雖然我們建議你將 Zen 與 OpenCode 一起使用,但你可以將 Zen 與任何代理一起使用。",
|
||||
"zen.how.step1.title": "註冊並儲值 $20 餘額",
|
||||
"zen.how.step1.beforeLink": "遵循",
|
||||
"zen.how.step1.link": "設置說明",
|
||||
"zen.how.step2.title": "使用 Zen 並提供透明的定價",
|
||||
"zen.how.step1.link": "設定說明",
|
||||
"zen.how.step2.title": "使用 Zen 並享有透明定價",
|
||||
"zen.how.step2.link": "按請求付費",
|
||||
"zen.how.step2.afterLink": "零加價",
|
||||
"zen.how.step3.title": "自動充值",
|
||||
"zen.how.step3.body": "當您的餘額達到 5 美元時,我們會自動添加 20 美元",
|
||||
"zen.privacy.title": "您的隱私對我們很重要",
|
||||
"zen.privacy.beforeExceptions": "所有 Zen 模型均在美國託管。提供商遵循零保留政策,不會將您的數據用於模型訓練,並且",
|
||||
"zen.how.step3.title": "自動儲值",
|
||||
"zen.how.step3.body": "當你的餘額達到 $5 時,我們會自動儲值 $20",
|
||||
"zen.privacy.title": "你的隱私對我們很重要",
|
||||
"zen.privacy.beforeExceptions": "所有 Zen 模型均在美國託管。供應商遵循零留存政策,不會將你的資料用於模型訓練,並且有",
|
||||
"zen.privacy.exceptionsLink": "以下例外情況",
|
||||
"download.meta.description": "\u4e0b\u8f09\u9069\u7528\u65bc macOS\u3001Windows \u8207 Linux \u7684 OpenCode",
|
||||
"download.hero.title": "\u4e0b\u8f09 OpenCode",
|
||||
"download.hero.subtitle":
|
||||
"\u9069\u7528\u65bc macOS\u3001Windows \u8207 Linux \u7684 Beta \u7248\u73fe\u5df2\u63d0\u4f9b",
|
||||
"download.hero.button": "\u4e0b\u8f09 {{os}} \u7248\u672c",
|
||||
"download.section.terminal": "OpenCode \u7d42\u7aef",
|
||||
"download.section.desktop": "OpenCode \u684c\u9762\u7248\uff08Beta\uff09",
|
||||
"download.section.extensions": "OpenCode \u64f4\u5145\u529f\u80fd",
|
||||
"download.section.integrations": "OpenCode \u6574\u5408",
|
||||
"download.action.download": "\u4e0b\u8f09",
|
||||
"download.action.install": "\u5b89\u88dd",
|
||||
"download.platform.macosAppleSilicon": "macOS (Apple Silicon)",
|
||||
"download.platform.macosIntel": "macOS (Intel)",
|
||||
"download.platform.windowsX64": "Windows (x64)",
|
||||
"download.platform.linuxDeb": "Linux (.deb)",
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
"download.faq.a3.beforeLocal":
|
||||
"\u4e0d\u4e00\u5b9a\uff0c\u4f46\u5927\u6a5f\u7387\u9700\u8981\u3002\u5982\u679c\u4f60\u60f3\u5c07 OpenCode \u9023\u63a5\u5230\u4ed8\u8cbb\u4f9b\u61c9\u5546\uff0c\u4f60\u9700\u8981 AI \u8a02\u95b1\uff0c\u4e0d\u904e\u4f60\u4e5f\u53ef\u4ee5\u4f7f\u7528",
|
||||
"download.faq.a3.localLink": "\u672c\u5730\u6a21\u578b",
|
||||
"download.faq.a3.afterLocal.beforeZen": "\u514d\u8cbb\u3002\u6211\u5011\u4e5f\u63a8\u85a6\u4f7f\u7528",
|
||||
"download.faq.a3.afterZen":
|
||||
"\uff0c\u4f46 OpenCode \u540c\u6a23\u652f\u63f4 OpenAI\u3001Anthropic\u3001xAI \u7b49\u6240\u6709\u4e3b\u6d41\u4f9b\u61c9\u5546\u3002",
|
||||
"download.faq.a5.p1": "OpenCode 100% \u514d\u8cbb\u4f7f\u7528\u3002",
|
||||
"download.faq.a5.p2.beforeZen":
|
||||
"\u984d\u5916\u8cbb\u7528\u4f86\u81ea\u4f60\u5c0d\u6a21\u578b\u4f9b\u61c9\u5546\u7684\u8a02\u95b1\u3002\u96d6\u7136 OpenCode \u652f\u63f4\u4efb\u4f55\u6a21\u578b\u4f9b\u61c9\u5546\uff0c\u4f46\u6211\u5011\u5efa\u8b70\u4f7f\u7528",
|
||||
"download.faq.a5.p2.afterZen": "\u3002",
|
||||
"download.faq.a6.p1":
|
||||
"\u4f60\u7684\u8cc7\u6599\u8207\u8cc7\u8a0a\u53ea\u6703\u5728\u4f60\u5728 OpenCode \u4e2d\u5efa\u7acb\u53ef\u5206\u4eab\u9023\u7d50\u6642\u88ab\u5132\u5b58\u3002",
|
||||
"download.faq.a6.p2.beforeShare": "\u4e86\u89e3\u66f4\u591a\u95dc\u65bc",
|
||||
"download.faq.a6.shareLink": "\u5206\u4eab\u9801\u9762",
|
||||
"enterprise.meta.description": "\u806f\u7d61 OpenCode \u53d6\u5f97\u4f01\u696d\u89e3\u6c7a\u65b9\u6848",
|
||||
"enterprise.hero.title": "\u4f60\u7684\u7a0b\u5f0f\u78bc\u5c6c\u65bc\u4f60",
|
||||
"enterprise.hero.body1":
|
||||
"OpenCode \u5728\u4f60\u7684\u7d44\u7e54\u5167\u90e8\u5b89\u5168\u904b\u4f5c\uff0c\u4e0d\u6703\u5132\u5b58\u4efb\u4f55\u8cc7\u6599\u6216\u4e0a\u4e0b\u6587\uff0c\u4e5f\u6c92\u6709\u6388\u6b0a\u9650\u5236\u6216\u6240\u6709\u6b0a\u4e3b\u5f35\u3002\u4f60\u53ef\u4ee5\u5148\u8207\u5718\u968a\u9032\u884c\u8a66\u7528\uff0c\u7136\u5f8c\u900f\u904e\u8207\u4f60\u7684 SSO \u8207\u5167\u90e8 AI \u7db2\u95dc\u6574\u5408\uff0c\u5c07\u5176\u90e8\u7f72\u5230\u6574\u500b\u7d44\u7e54\u3002",
|
||||
"enterprise.hero.body2": "\u544a\u8a34\u6211\u5011\u6211\u5011\u80fd\u5982\u4f55\u5e6b\u52a9\u4f60\u3002",
|
||||
"enterprise.form.name.label": "\u5168\u540d",
|
||||
"enterprise.form.name.placeholder": "\u5091\u592b\u00b7\u8c9d\u4f50\u65af",
|
||||
"enterprise.form.role.label": "\u8077\u7a31",
|
||||
"enterprise.form.role.placeholder": "\u57f7\u884c\u8463\u4e8b\u9577",
|
||||
"enterprise.form.email.label": "\u516c\u53f8\u96fb\u5b50\u90f5\u4ef6",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "\u4f60\u60f3\u89e3\u6c7a\u4ec0\u9ebc\u554f\u984c\uff1f",
|
||||
"enterprise.form.message.placeholder": "\u6211\u5011\u9700\u8981\u5e6b\u52a9\u4f86...",
|
||||
"enterprise.form.send": "\u50b3\u9001",
|
||||
"enterprise.form.sending": "\u50b3\u9001\u4e2d...",
|
||||
"enterprise.form.success":
|
||||
"\u8a0a\u606f\u5df2\u50b3\u9001\uff0c\u6211\u5011\u6703\u76e1\u5feb\u8207\u4f60\u806f\u7d61\u3002",
|
||||
"enterprise.faq.title": "\u5e38\u898b\u554f\u7b54",
|
||||
"enterprise.faq.q1": "\u4ec0\u9ebc\u662f OpenCode Enterprise\uff1f",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise \u9069\u7528\u65bc\u5e0c\u671b\u78ba\u4fdd\u7a0b\u5f0f\u78bc\u8207\u8cc7\u6599\u7d55\u4e0d\u96e2\u958b\u81ea\u5df1\u57fa\u790e\u8a2d\u65bd\u7684\u7d44\u7e54\u3002\u900f\u904e\u4e2d\u592e\u5316\u8a2d\u5b9a\uff0c\u5b83\u53ef\u8207\u4f60\u7684 SSO \u8207\u5167\u90e8 LLM/AI \u7db2\u95dc\u6574\u5408\uff0c\u4ee5\u9054\u6210\u6b64\u76ee\u6a19\u3002",
|
||||
"enterprise.faq.q2": "\u5982\u4f55\u958b\u59cb\u4f7f\u7528 OpenCode Enterprise\uff1f",
|
||||
"enterprise.faq.a2":
|
||||
"\u53ea\u8981\u5148\u4ee5\u5718\u968a\u7684\u5167\u90e8\u8a66\u7528\u958b\u59cb\u3002OpenCode \u9810\u8a2d\u4e0d\u6703\u5132\u5b58\u4f60\u7684\u7a0b\u5f0f\u78bc\u6216\u4e0a\u4e0b\u6587\u8cc7\u6599\uff0c\u6240\u4ee5\u4e0a\u624b\u975e\u5e38\u5bb9\u6613\u3002\u4e4b\u5f8c\u806f\u7d61\u6211\u5011\uff0c\u8a0e\u8ad6\u5b9a\u50f9\u8207\u5b8c\u6574\u5be6\u4f5c\u65b9\u6848\u3002",
|
||||
"enterprise.faq.q3": "\u4f01\u696d\u5b9a\u50f9\u662f\u5982\u4f55\u9032\u884c\u7684\uff1f",
|
||||
"enterprise.faq.a3":
|
||||
"\u6211\u5011\u63d0\u4f9b\u6309\u5e2d\u4f4d\u7684\u4f01\u696d\u5b9a\u50f9\u3002\u5982\u679c\u4f60\u6709\u81ea\u5df1\u7684 LLM \u7db2\u95dc\uff0c\u6211\u5011\u4e0d\u6703\u5c0d\u4f7f\u7528\u7684 token \u53e6\u5916\u6536\u8cbb\u3002\u66f4\u591a\u8a73\u60c5\uff0c\u8acb\u806f\u7d61\u6211\u5011\u4ee5\u7372\u5f97\u4f9d\u64da\u7d44\u7e54\u9700\u6c42\u7684\u5ba2\u88fd\u5831\u50f9\u3002",
|
||||
"enterprise.faq.q4": "\u6211\u7684\u8cc7\u6599\u5728 OpenCode Enterprise \u4e2d\u662f\u5b89\u5168\u7684\u55ce\uff1f",
|
||||
"enterprise.faq.a4":
|
||||
"\u662f\u7684\u3002OpenCode \u4e0d\u6703\u5132\u5b58\u4f60\u7684\u7a0b\u5f0f\u78bc\u6216\u4e0a\u4e0b\u6587\u8cc7\u6599\u3002\u6240\u6709\u8655\u7406\u90fd\u6703\u5728\u672c\u5730\u6216\u900f\u904e\u76f4\u63a5\u547c\u53eb\u4f60\u7684 AI \u4f9b\u61c9\u5546 API \u5b8c\u6210\u3002\u900f\u904e\u4e2d\u592e\u5316\u8a2d\u5b9a\u8207 SSO \u6574\u5408\uff0c\u4f60\u7684\u8cc7\u6599\u6703\u5b89\u5168\u4fdd\u7559\u5728\u7d44\u7e54\u7684\u57fa\u790e\u8a2d\u65bd\u5167\u90e8\u3002",
|
||||
|
||||
"brand.title": "OpenCode | \u54c1\u724c",
|
||||
"brand.meta.description": "OpenCode \u54c1\u724c\u6307\u5357",
|
||||
"brand.heading": "\u54c1\u724c\u6307\u5357",
|
||||
"brand.subtitle": "\u5354\u52a9\u4f60\u4f7f\u7528 OpenCode \u54c1\u724c\u7684\u8cc7\u6e90\u8207\u7d20\u6750\u3002",
|
||||
"brand.downloadAll": "\u4e0b\u8f09\u6240\u6709\u7d20\u6750",
|
||||
"changelog.title": "OpenCode | \u66f4\u65b0\u65e5\u8a8c",
|
||||
"changelog.meta.description": "OpenCode \u767c\u4f48\u8aaa\u660e\u8207\u66f4\u65b0\u65e5\u8a8c",
|
||||
"changelog.hero.title": "\u66f4\u65b0\u65e5\u8a8c",
|
||||
"changelog.hero.subtitle": "OpenCode \u7684\u65b0\u66f4\u65b0\u8207\u6539\u5584",
|
||||
"changelog.empty": "\u627e\u4e0d\u5230\u66f4\u65b0\u65e5\u8a8c\u9805\u76ee\u3002",
|
||||
"changelog.viewJson": "\u6aa2\u8996 JSON",
|
||||
"black.meta.title": "OpenCode Black | 存取全球最佳編碼模型",
|
||||
"black.meta.description": "透過 OpenCode Black 訂閱方案存取 Claude、GPT、Gemini 等模型。",
|
||||
"black.hero.title": "存取全球最佳編碼模型",
|
||||
"black.hero.subtitle": "包括 Claude、GPT、Gemini 等",
|
||||
"black.title": "OpenCode Black | 定價",
|
||||
"black.plan.icon20": "Black 20 方案",
|
||||
"black.plan.icon100": "Black 100 方案",
|
||||
"black.plan.icon200": "Black 200 方案",
|
||||
"black.plan.multiplier100": "比 Black 20 多 5 倍使用量",
|
||||
"black.plan.multiplier200": "比 Black 20 多 20 倍使用量",
|
||||
"black.price.perMonth": "每月",
|
||||
"black.price.perPersonBilledMonthly": "每人每月計費",
|
||||
"black.terms.1": "你的訂閱不會立即開始",
|
||||
"black.terms.2": "你將被加入候補名單並在不久後啟用",
|
||||
"black.terms.3": "你的卡片僅在訂閱啟用時才會扣款",
|
||||
"black.terms.4": "適用使用限制,高度自動化的使用可能會更快達到限制",
|
||||
"black.terms.5": "訂閱僅限個人使用,團隊請聯繫企業版",
|
||||
"black.terms.6": "未來可能會調整限制或終止方案",
|
||||
"black.terms.7": "隨時取消你的訂閱",
|
||||
"black.action.continue": "繼續",
|
||||
"black.finePrint.beforeTerms": "顯示價格未包含適用稅項",
|
||||
"black.finePrint.terms": "服務條款",
|
||||
"black.workspace.title": "OpenCode Black | 選擇工作區",
|
||||
"black.workspace.selectPlan": "為此方案選擇一個工作區",
|
||||
"black.workspace.name": "工作區 {{n}}",
|
||||
"black.subscribe.title": "訂閱 OpenCode Black",
|
||||
"black.subscribe.paymentMethod": "付款方式",
|
||||
"black.subscribe.loadingPaymentForm": "正在載入付款表單...",
|
||||
"black.subscribe.selectWorkspaceToContinue": "選擇一個工作區以繼續",
|
||||
"black.subscribe.failurePrefix": "噢不!",
|
||||
"black.subscribe.error.generic": "發生錯誤",
|
||||
"black.subscribe.error.invalidPlan": "無效的方案",
|
||||
"black.subscribe.error.workspaceRequired": "需要工作區 ID",
|
||||
"black.subscribe.error.alreadySubscribed": "此工作區已有訂閱",
|
||||
"black.subscribe.processing": "處理中...",
|
||||
"black.subscribe.submit": "訂閱 ${{plan}}",
|
||||
"black.subscribe.form.chargeNotice": "你僅在訂閱啟用時才會被扣款",
|
||||
"black.subscribe.success.title": "你已在 OpenCode Black 候補名單上",
|
||||
"black.subscribe.success.subscriptionPlan": "訂閱方案",
|
||||
"black.subscribe.success.planName": "OpenCode Black {{plan}}",
|
||||
"black.subscribe.success.amount": "金額",
|
||||
"black.subscribe.success.amountValue": "${{plan}} 每月",
|
||||
"black.subscribe.success.paymentMethod": "付款方式",
|
||||
"black.subscribe.success.dateJoined": "加入日期",
|
||||
"black.subscribe.success.chargeNotice": "你的卡片將在訂閱啟用時扣款",
|
||||
|
||||
"workspace.nav.zen": "Zen",
|
||||
"workspace.nav.apiKeys": "API 鍵",
|
||||
"workspace.nav.apiKeys": "API 金鑰",
|
||||
"workspace.nav.members": "成員",
|
||||
"workspace.nav.billing": "計費",
|
||||
"workspace.nav.billing": "帳務",
|
||||
"workspace.nav.settings": "設定",
|
||||
"workspace.home.banner.beforeLink": "編碼代理的可靠優化模型。",
|
||||
|
||||
"workspace.home.banner.beforeLink": "編碼代理的可靠最佳化模型。",
|
||||
"workspace.home.billing.loading": "載入中...",
|
||||
"workspace.home.billing.enable": "啟用計費",
|
||||
"workspace.home.billing.currentBalance": "當前餘額",
|
||||
"workspace.newUser.feature.tested.title": "經過測試和驗證的模型",
|
||||
"workspace.newUser.feature.tested.body": "我們專門針對編碼代理對模型進行了基準測試和測試,以確保最佳性能。",
|
||||
"workspace.home.billing.enable": "啟用帳務",
|
||||
"workspace.home.billing.currentBalance": "目前餘額",
|
||||
|
||||
"workspace.newUser.feature.tested.title": "經過測試與驗證的模型",
|
||||
"workspace.newUser.feature.tested.body": "我們專門針對編碼代理對模型進行了基準測試和測試,以確保最佳效能。",
|
||||
"workspace.newUser.feature.quality.title": "最高品質",
|
||||
"workspace.newUser.feature.quality.body": "訪問模型配置為最佳性能 - 無需降級或路由到更便宜的提供商。",
|
||||
"workspace.newUser.feature.lockin.title": "無鎖定",
|
||||
"workspace.newUser.feature.quality.body": "存取配置為最佳效能的模型 - 無需降級或路由到更便宜的供應商。",
|
||||
"workspace.newUser.feature.lockin.title": "無綁定",
|
||||
"workspace.newUser.feature.lockin.body":
|
||||
"將 Zen 與任何編碼代理結合使用,並在需要時繼續將其他提供程序與 opencode 結合使用。",
|
||||
"workspace.newUser.copyApiKey": "複製 API 密鑰",
|
||||
"workspace.newUser.copyKey": "複製密鑰",
|
||||
"將 Zen 與任何編碼代理結合使用,並在需要時隨時使用 OpenCode 連接其他供應商。",
|
||||
"workspace.newUser.copyApiKey": "複製 API 金鑰",
|
||||
"workspace.newUser.copyKey": "複製金鑰",
|
||||
"workspace.newUser.copied": "已複製!",
|
||||
"workspace.newUser.step.enableBilling": "啟用計費",
|
||||
"workspace.newUser.step.enableBilling": "啟用帳務",
|
||||
"workspace.newUser.step.login.before": "執行",
|
||||
"workspace.newUser.step.login.after": "並選擇 opencode",
|
||||
"workspace.newUser.step.pasteKey": "粘貼您的 API 密鑰",
|
||||
"workspace.newUser.step.models.before": "啟動 opencode 並運行",
|
||||
"workspace.newUser.step.models.after": "選擇模型",
|
||||
"workspace.newUser.step.login.after": "並選擇 OpenCode",
|
||||
"workspace.newUser.step.pasteKey": "貼上你的 API 金鑰",
|
||||
"workspace.newUser.step.models.before": "啟動 OpenCode 並執行",
|
||||
"workspace.newUser.step.models.after": "以選擇模型",
|
||||
|
||||
"workspace.models.title": "模型",
|
||||
"workspace.models.subtitle.beforeLink": "管理工作區成員可以訪問哪些模型。",
|
||||
"workspace.models.subtitle.beforeLink": "管理工作區成員可以存取哪些模型。",
|
||||
"workspace.models.table.model": "模型",
|
||||
"workspace.models.table.enabled": "啟用",
|
||||
"workspace.providers.title": "自帶密鑰",
|
||||
"workspace.providers.subtitle": "從 AI 提供商處配置您自己的 API 密鑰。",
|
||||
"workspace.providers.placeholder": "輸入 {{provider}} API 密鑰({{prefix}}...)",
|
||||
"workspace.providers.configure": "配置",
|
||||
|
||||
"workspace.providers.title": "自帶金鑰",
|
||||
"workspace.providers.subtitle": "設定你自己的 AI 供應商 API 金鑰。",
|
||||
"workspace.providers.placeholder": "輸入 {{provider}} API 金鑰({{prefix}}...)",
|
||||
"workspace.providers.configure": "設定",
|
||||
"workspace.providers.edit": "編輯",
|
||||
"workspace.providers.delete": "刪除",
|
||||
"workspace.providers.saving": "保存...",
|
||||
"workspace.providers.saving": "儲存中...",
|
||||
"workspace.providers.save": "儲存",
|
||||
"workspace.providers.table.provider": "提供者",
|
||||
"workspace.providers.table.apiKey": "API 密鑰",
|
||||
"workspace.usage.title": "使用歷史",
|
||||
"workspace.usage.subtitle": "最近的 API 使用情況和成本。",
|
||||
"workspace.usage.empty": "進行第一個 API 調用即可開始。",
|
||||
"workspace.providers.table.provider": "供應商",
|
||||
"workspace.providers.table.apiKey": "API 金鑰",
|
||||
|
||||
"workspace.usage.title": "使用紀錄",
|
||||
"workspace.usage.subtitle": "最近的 API 使用情況與成本。",
|
||||
"workspace.usage.empty": "進行第一次 API 呼叫即可開始。",
|
||||
"workspace.usage.table.date": "日期",
|
||||
"workspace.usage.table.model": "模型",
|
||||
"workspace.usage.table.input": "輸入",
|
||||
"workspace.usage.table.output": "輸出",
|
||||
"workspace.usage.table.cost": "成本",
|
||||
"workspace.usage.breakdown.input": "輸入",
|
||||
"workspace.usage.breakdown.cacheRead": "緩存讀取",
|
||||
"workspace.usage.breakdown.cacheWrite": "緩存寫入",
|
||||
"workspace.usage.breakdown.cacheRead": "快取讀取",
|
||||
"workspace.usage.breakdown.cacheWrite": "快取寫入",
|
||||
"workspace.usage.breakdown.output": "輸出",
|
||||
"workspace.usage.breakdown.reasoning": "推理",
|
||||
"workspace.usage.subscription": "訂閱 (${{amount}})",
|
||||
|
||||
"workspace.cost.title": "成本",
|
||||
"workspace.cost.subtitle": "按型號細分的使用成本。",
|
||||
"workspace.cost.subtitle": "按模型細分的使用成本。",
|
||||
"workspace.cost.allModels": "所有模型",
|
||||
"workspace.cost.allKeys": "所有密鑰",
|
||||
"workspace.cost.allKeys": "所有金鑰",
|
||||
"workspace.cost.deletedSuffix": "(已刪除)",
|
||||
"workspace.cost.empty": "所選期間沒有可用的使用數據。",
|
||||
"workspace.cost.empty": "所選期間沒有可用的使用資料。",
|
||||
"workspace.cost.subscriptionShort": "訂",
|
||||
"workspace.keys.title": "API 鍵",
|
||||
"workspace.keys.subtitle": "管理您的 API 密鑰以訪問 opencode 服務。",
|
||||
"workspace.keys.create": "創建 API 密鑰",
|
||||
"workspace.keys.placeholder": "輸入密鑰名稱",
|
||||
"workspace.keys.empty": "創建 opencode 網關 API 密鑰",
|
||||
|
||||
"workspace.keys.title": "API 金鑰",
|
||||
"workspace.keys.subtitle": "管理你的 API 金鑰以存取 OpenCode 服務。",
|
||||
"workspace.keys.create": "建立 API 金鑰",
|
||||
"workspace.keys.placeholder": "輸入金鑰名稱",
|
||||
"workspace.keys.empty": "建立 OpenCode 閘道器 API 金鑰",
|
||||
"workspace.keys.table.name": "名稱",
|
||||
"workspace.keys.table.key": "密鑰",
|
||||
"workspace.keys.table.createdBy": "創建者",
|
||||
"workspace.keys.table.key": "金鑰",
|
||||
"workspace.keys.table.createdBy": "建立者",
|
||||
"workspace.keys.table.lastUsed": "最後使用",
|
||||
"workspace.keys.copyApiKey": "複製 API 密鑰",
|
||||
"workspace.keys.copyApiKey": "複製 API 金鑰",
|
||||
"workspace.keys.delete": "刪除",
|
||||
|
||||
"workspace.members.title": "成員",
|
||||
"workspace.members.subtitle": "管理工作區成員及其權限。",
|
||||
"workspace.members.invite": "邀請成員",
|
||||
"workspace.members.inviting": "邀請...",
|
||||
"workspace.members.beta.beforeLink": "測試期間,工作空間對團隊免費。",
|
||||
"workspace.members.inviting": "邀請中...",
|
||||
"workspace.members.beta.beforeLink": "Beta 測試期間,工作區對團隊免費。",
|
||||
"workspace.members.form.invitee": "受邀者",
|
||||
"workspace.members.form.emailPlaceholder": "輸入電子郵件",
|
||||
"workspace.members.form.role": "角色",
|
||||
"workspace.members.form.monthlyLimit": "每月消費限額",
|
||||
"workspace.members.form.monthlyLimit": "每月支出限額",
|
||||
"workspace.members.noLimit": "無限制",
|
||||
"workspace.members.noLimitLowercase": "沒有限制",
|
||||
"workspace.members.invited": "邀請",
|
||||
"workspace.members.noLimitLowercase": "無限制",
|
||||
"workspace.members.invited": "已邀請",
|
||||
"workspace.members.edit": "編輯",
|
||||
"workspace.members.delete": "刪除",
|
||||
"workspace.members.saving": "保存...",
|
||||
"workspace.members.saving": "儲存中...",
|
||||
"workspace.members.save": "儲存",
|
||||
"workspace.members.table.email": "電子郵件",
|
||||
"workspace.members.table.role": "角色",
|
||||
"workspace.members.table.monthLimit": "月限額",
|
||||
"workspace.members.role.admin": "管理員",
|
||||
"workspace.members.role.adminDescription": "可以管理模型、成員和計費",
|
||||
"workspace.members.role.adminDescription": "可以管理模型、成員和帳務",
|
||||
"workspace.members.role.member": "成員",
|
||||
"workspace.members.role.memberDescription": "只能為自己生成 API 密鑰",
|
||||
"workspace.members.role.memberDescription": "只能為自己生成 API 金鑰",
|
||||
|
||||
"workspace.settings.title": "設定",
|
||||
"workspace.settings.subtitle": "更新您的工作區名稱和首選項。",
|
||||
"workspace.settings.subtitle": "更新你的工作區名稱與偏好設定。",
|
||||
"workspace.settings.workspaceName": "工作區名稱",
|
||||
"workspace.settings.defaultName": "預設",
|
||||
"workspace.settings.updating": "更新中...",
|
||||
"workspace.settings.save": "儲存",
|
||||
"workspace.settings.edit": "編輯",
|
||||
"workspace.billing.title": "計費",
|
||||
|
||||
"workspace.billing.title": "帳務",
|
||||
"workspace.billing.subtitle.beforeLink": "管理付款方式。",
|
||||
"workspace.billing.contactUs": "聯繫我們",
|
||||
"workspace.billing.subtitle.afterLink": "如有任何問題。",
|
||||
"workspace.billing.currentBalance": "當前餘額",
|
||||
"workspace.billing.add": "添加$",
|
||||
"workspace.billing.contactUs": "聯絡我們",
|
||||
"workspace.billing.subtitle.afterLink": "如果你有任何問題。",
|
||||
"workspace.billing.currentBalance": "目前餘額",
|
||||
"workspace.billing.add": "儲值 $",
|
||||
"workspace.billing.enterAmount": "輸入金額",
|
||||
"workspace.billing.loading": "載入中...",
|
||||
"workspace.billing.addAction": "添加",
|
||||
"workspace.billing.addBalance": "添加餘額",
|
||||
"workspace.billing.addAction": "儲值",
|
||||
"workspace.billing.addBalance": "儲值餘額",
|
||||
"workspace.billing.linkedToStripe": "已連結 Stripe",
|
||||
"workspace.billing.manage": "管理",
|
||||
"workspace.billing.enable": "啟用計費",
|
||||
"workspace.billing.enable": "啟用帳務",
|
||||
|
||||
"workspace.monthlyLimit.title": "每月限額",
|
||||
"workspace.monthlyLimit.subtitle": "為您的帳戶設置每月使用限額。",
|
||||
"workspace.monthlyLimit.subtitle": "為你的帳戶設定每月使用限額。",
|
||||
"workspace.monthlyLimit.placeholder": "50",
|
||||
"workspace.monthlyLimit.setting": "設定中...",
|
||||
"workspace.monthlyLimit.set": "設定",
|
||||
"workspace.monthlyLimit.edit": "編輯限制",
|
||||
"workspace.monthlyLimit.noLimit": "沒有設置使用限制。",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "當前",
|
||||
"workspace.monthlyLimit.edit": "編輯限額",
|
||||
"workspace.monthlyLimit.noLimit": "未設定使用限額。",
|
||||
"workspace.monthlyLimit.currentUsage.beforeMonth": "目前",
|
||||
"workspace.monthlyLimit.currentUsage.beforeAmount": "的使用量為 $",
|
||||
|
||||
"workspace.reload.title": "自動儲值",
|
||||
"workspace.reload.disabled.before": "自動儲值已",
|
||||
"workspace.reload.disabled.state": "停用",
|
||||
"workspace.reload.disabled.after": "啟用後會在餘額偏低時自動儲值。",
|
||||
"workspace.reload.enabled.before": "自動儲值已",
|
||||
"workspace.reload.enabled.state": "已啟用",
|
||||
"workspace.reload.enabled.state": "啟用",
|
||||
"workspace.reload.enabled.middle": "我們將自動儲值",
|
||||
"workspace.reload.processingFee": "手續費",
|
||||
"workspace.reload.enabled.after": "當餘額達到",
|
||||
@@ -430,22 +424,24 @@ export const dict = {
|
||||
"workspace.reload.enableAutoReload": "啟用自動儲值",
|
||||
"workspace.reload.reloadAmount": "儲值 $",
|
||||
"workspace.reload.whenBalanceReaches": "當餘額達到 $",
|
||||
"workspace.reload.saving": "保存...",
|
||||
"workspace.reload.saving": "儲存中...",
|
||||
"workspace.reload.save": "儲存",
|
||||
"workspace.reload.failedAt": "儲值失敗於",
|
||||
"workspace.reload.reason": "原因:",
|
||||
"workspace.reload.updatePaymentMethod": "請更新您的付款方式並重試。",
|
||||
"workspace.reload.retrying": "正在重試...",
|
||||
"workspace.reload.updatePaymentMethod": "請更新你的付款方式並重試。",
|
||||
"workspace.reload.retrying": "重試中...",
|
||||
"workspace.reload.retry": "重試",
|
||||
"workspace.payments.title": "付款記錄",
|
||||
|
||||
"workspace.payments.title": "付款紀錄",
|
||||
"workspace.payments.subtitle": "最近的付款交易。",
|
||||
"workspace.payments.table.date": "日期",
|
||||
"workspace.payments.table.paymentId": "付款ID",
|
||||
"workspace.payments.table.paymentId": "付款 ID",
|
||||
"workspace.payments.table.amount": "金額",
|
||||
"workspace.payments.table.receipt": "收據",
|
||||
"workspace.payments.type.credit": "信用",
|
||||
"workspace.payments.type.credit": "信用額度",
|
||||
"workspace.payments.type.subscription": "訂閱",
|
||||
"workspace.payments.view": "查看",
|
||||
"workspace.payments.view": "檢視",
|
||||
|
||||
"workspace.black.loading": "載入中...",
|
||||
"workspace.black.time.day": "天",
|
||||
"workspace.black.time.days": "天",
|
||||
@@ -455,20 +451,129 @@ export const dict = {
|
||||
"workspace.black.time.minutes": "分鐘",
|
||||
"workspace.black.time.fewSeconds": "幾秒鐘",
|
||||
"workspace.black.subscription.title": "訂閱",
|
||||
"workspace.black.subscription.message": "您已訂閱 OpenCode Black,費用為每月 ${{plan}}。",
|
||||
"workspace.black.subscription.message": "你已訂閱 OpenCode Black,費用為每月 ${{plan}}。",
|
||||
"workspace.black.subscription.manage": "管理訂閱",
|
||||
"workspace.black.subscription.rollingUsage": "5小時使用",
|
||||
"workspace.black.subscription.rollingUsage": "5 小時使用量",
|
||||
"workspace.black.subscription.weeklyUsage": "每週使用量",
|
||||
"workspace.black.subscription.resetsIn": "重置於",
|
||||
"workspace.black.subscription.useBalance": "達到使用限額後使用您的可用餘額",
|
||||
"workspace.black.subscription.useBalance": "達到使用限額後使用你的可用餘額",
|
||||
"workspace.black.waitlist.title": "候補名單",
|
||||
"workspace.black.waitlist.joined": "您已加入每月 ${{plan}} 的 OpenCode Black 方案候補名單。",
|
||||
"workspace.black.waitlist.ready": "我們已準備好將您加入每月 ${{plan}} 的 OpenCode Black 方案。",
|
||||
"workspace.black.waitlist.joined": "你已加入每月 ${{plan}} 的 OpenCode Black 方案候補名單。",
|
||||
"workspace.black.waitlist.ready": "我們已準備好將你加入每月 ${{plan}} 的 OpenCode Black 方案。",
|
||||
"workspace.black.waitlist.leave": "離開候補名單",
|
||||
"workspace.black.waitlist.leaving": "離開...",
|
||||
"workspace.black.waitlist.left": "已退出",
|
||||
"workspace.black.waitlist.leaving": "離開中...",
|
||||
"workspace.black.waitlist.left": "已離開",
|
||||
"workspace.black.waitlist.enroll": "加入",
|
||||
"workspace.black.waitlist.enrolling": "加入中...",
|
||||
"workspace.black.waitlist.enrolled": "已加入",
|
||||
"workspace.black.waitlist.enrollNote": "單擊“註冊”後,您的訂閱將立即開始,並且將從您的卡中扣費。",
|
||||
"workspace.black.waitlist.enrollNote": "當你點選「加入」後,你的訂閱將立即開始,並且將從你的卡片中扣款。",
|
||||
|
||||
"download.title": "OpenCode | 下載",
|
||||
"download.meta.description": "下載適用於 macOS、Windows 與 Linux 的 OpenCode",
|
||||
"download.hero.title": "下載 OpenCode",
|
||||
"download.hero.subtitle": "適用於 macOS、Windows 與 Linux 的 Beta 版現已提供",
|
||||
"download.hero.button": "下載 {{os}} 版",
|
||||
"download.section.terminal": "OpenCode 終端",
|
||||
"download.section.desktop": "OpenCode 桌面版(Beta)",
|
||||
"download.section.extensions": "OpenCode 擴充功能",
|
||||
"download.section.integrations": "OpenCode 整合",
|
||||
"download.action.download": "下載",
|
||||
"download.action.install": "安裝",
|
||||
|
||||
"download.platform.macosAppleSilicon": "macOS (Apple Silicon)",
|
||||
"download.platform.macosIntel": "macOS (Intel)",
|
||||
"download.platform.windowsX64": "Windows (x64)",
|
||||
"download.platform.linuxDeb": "Linux (.deb)",
|
||||
"download.platform.linuxRpm": "Linux (.rpm)",
|
||||
|
||||
"download.faq.a3.beforeLocal":
|
||||
"不一定,但很可能需要。如果你想將 OpenCode 連接到付費供應商,你需要 AI 訂閱,不過你也可以使用",
|
||||
"download.faq.a3.localLink": "本地模型",
|
||||
"download.faq.a3.afterLocal.beforeZen": "免費。我們也推薦使用",
|
||||
"download.faq.a3.afterZen": ",但 OpenCode 同樣支援 OpenAI、Anthropic、xAI 等所有主流供應商。",
|
||||
|
||||
"download.faq.a5.p1": "OpenCode 100% 免費使用。",
|
||||
"download.faq.a5.p2.beforeZen": "額外費用來自你對模型供應商的訂閱。雖然 OpenCode 支援任何模型供應商,但我們建議使用",
|
||||
"download.faq.a5.p2.afterZen": "。",
|
||||
|
||||
"download.faq.a6.p1": "你的資料與資訊只會在你於 OpenCode 中建立可分享連結時被儲存。",
|
||||
"download.faq.a6.p2.beforeShare": "了解更多關於",
|
||||
"download.faq.a6.shareLink": "分享頁面",
|
||||
|
||||
"enterprise.title": "OpenCode | 面向組織的企業解決方案",
|
||||
"enterprise.meta.description": "聯絡 OpenCode 取得企業解決方案",
|
||||
"enterprise.hero.title": "你的程式碼屬於你",
|
||||
"enterprise.hero.body1":
|
||||
"OpenCode 在你的組織內部安全運作,不會儲存任何資料或上下文,也沒有授權限制或所有權主張。你可以先與團隊進行試用,然後透過與你的 SSO 與內部 AI 閘道器整合,將其部署到整個組織。",
|
||||
"enterprise.hero.body2": "告訴我們能如何幫助你。",
|
||||
"enterprise.form.name.label": "全名",
|
||||
"enterprise.form.name.placeholder": "傑夫·貝佐斯",
|
||||
"enterprise.form.role.label": "職稱",
|
||||
"enterprise.form.role.placeholder": "執行董事長",
|
||||
"enterprise.form.email.label": "公司 Email",
|
||||
"enterprise.form.email.placeholder": "jeff@amazon.com",
|
||||
"enterprise.form.message.label": "你想解決什麼問題?",
|
||||
"enterprise.form.message.placeholder": "我們需要幫助來...",
|
||||
"enterprise.form.send": "傳送",
|
||||
"enterprise.form.sending": "傳送中...",
|
||||
"enterprise.form.success": "訊息已傳送,我們會盡快與你聯絡。",
|
||||
"enterprise.faq.title": "常見問題",
|
||||
"enterprise.faq.q1": "什麼是 OpenCode Enterprise?",
|
||||
"enterprise.faq.a1":
|
||||
"OpenCode Enterprise 適用於希望確保程式碼與資料絕不離開自己基礎設施的組織。透過中央化設定,它可與你的 SSO 與內部 AI 閘道器整合,以達成此目標。",
|
||||
"enterprise.faq.q2": "如何開始使用 OpenCode Enterprise?",
|
||||
"enterprise.faq.a2":
|
||||
"只要先以團隊的內部試用開始。OpenCode 預設不會儲存你的程式碼或上下文資料,所以上手非常容易。之後聯絡我們,討論定價與完整實作方案。",
|
||||
"enterprise.faq.q3": "企業定價是如何進行的?",
|
||||
"enterprise.faq.a3":
|
||||
"我們提供按席位的企業定價。如果你有自己的 LLM 閘道器,我們不會對使用的 token 另外收費。更多詳情,請聯絡我們以獲得依據組織需求的客製報價。",
|
||||
"enterprise.faq.q4": "我的資料在 OpenCode Enterprise 中是安全的嗎?",
|
||||
"enterprise.faq.a4":
|
||||
"是的。OpenCode 不會儲存你的程式碼或上下文資料。所有處理都會在本地或透過直接呼叫你的 AI 供應商 API 完成。透過中央化設定與 SSO 整合,你的資料會安全保留在組織的基礎設施內部。",
|
||||
|
||||
"brand.title": "OpenCode | 品牌",
|
||||
"brand.meta.description": "OpenCode 品牌指南",
|
||||
"brand.heading": "品牌指南",
|
||||
"brand.subtitle": "協助你使用 OpenCode 品牌的資源與素材。",
|
||||
"brand.downloadAll": "下載所有素材",
|
||||
|
||||
"changelog.title": "OpenCode | 更新日誌",
|
||||
"changelog.meta.description": "OpenCode 發布說明與更新日誌",
|
||||
"changelog.hero.title": "更新日誌",
|
||||
"changelog.hero.subtitle": "OpenCode 的新更新與改善",
|
||||
"changelog.empty": "找不到更新日誌項目。",
|
||||
"changelog.viewJson": "檢視 JSON",
|
||||
|
||||
"bench.list.title": "評測",
|
||||
"bench.list.heading": "評測",
|
||||
"bench.list.table.agent": "代理",
|
||||
"bench.list.table.model": "模型",
|
||||
"bench.list.table.score": "分數",
|
||||
|
||||
"bench.detail.title": "評測 - {{task}}",
|
||||
"bench.detail.notFound": "找不到任務",
|
||||
"bench.detail.na": "N/A",
|
||||
"bench.detail.labels.agent": "代理",
|
||||
"bench.detail.labels.model": "模型",
|
||||
"bench.detail.labels.task": "任務",
|
||||
"bench.detail.labels.repo": "儲存庫",
|
||||
"bench.detail.labels.from": "起點",
|
||||
"bench.detail.labels.to": "終點",
|
||||
"bench.detail.labels.prompt": "提示詞",
|
||||
"bench.detail.labels.commit": "提交",
|
||||
"bench.detail.labels.averageDuration": "平均耗時",
|
||||
"bench.detail.labels.averageScore": "平均分數",
|
||||
"bench.detail.labels.averageCost": "平均成本",
|
||||
"bench.detail.labels.summary": "摘要",
|
||||
"bench.detail.labels.runs": "執行次數",
|
||||
"bench.detail.labels.score": "分數",
|
||||
"bench.detail.labels.base": "基準",
|
||||
"bench.detail.labels.penalty": "扣分",
|
||||
"bench.detail.labels.weight": "權重",
|
||||
"bench.detail.table.run": "執行",
|
||||
"bench.detail.table.score": "分數(基準 - 扣分)",
|
||||
"bench.detail.table.cost": "成本",
|
||||
"bench.detail.table.duration": "耗時",
|
||||
"bench.detail.run.title": "執行 {{n}}",
|
||||
"bench.detail.rawJson": "原始 JSON",
|
||||
} satisfies Dict
|
||||
|
||||
@@ -7,18 +7,24 @@ import { useI18n } from "~/context/i18n"
|
||||
import { LocaleLinks } from "~/component/locale-links"
|
||||
import previewLogoLight from "../../asset/brand/preview-opencode-logo-light.png"
|
||||
import previewLogoDark from "../../asset/brand/preview-opencode-logo-dark.png"
|
||||
import previewLogoLightSquare from "../../asset/brand/preview-opencode-logo-light-square.png"
|
||||
import previewLogoDarkSquare from "../../asset/brand/preview-opencode-logo-dark-square.png"
|
||||
import previewWordmarkLight from "../../asset/brand/preview-opencode-wordmark-light.png"
|
||||
import previewWordmarkDark from "../../asset/brand/preview-opencode-wordmark-dark.png"
|
||||
import previewWordmarkSimpleLight from "../../asset/brand/preview-opencode-wordmark-simple-light.png"
|
||||
import previewWordmarkSimpleDark from "../../asset/brand/preview-opencode-wordmark-simple-dark.png"
|
||||
import logoLightPng from "../../asset/brand/opencode-logo-light.png"
|
||||
import logoDarkPng from "../../asset/brand/opencode-logo-dark.png"
|
||||
import logoLightSquarePng from "../../asset/brand/opencode-logo-light-square.png"
|
||||
import logoDarkSquarePng from "../../asset/brand/opencode-logo-dark-square.png"
|
||||
import wordmarkLightPng from "../../asset/brand/opencode-wordmark-light.png"
|
||||
import wordmarkDarkPng from "../../asset/brand/opencode-wordmark-dark.png"
|
||||
import wordmarkSimpleLightPng from "../../asset/brand/opencode-wordmark-simple-light.png"
|
||||
import wordmarkSimpleDarkPng from "../../asset/brand/opencode-wordmark-simple-dark.png"
|
||||
import logoLightSvg from "../../asset/brand/opencode-logo-light.svg"
|
||||
import logoDarkSvg from "../../asset/brand/opencode-logo-dark.svg"
|
||||
import logoLightSquareSvg from "../../asset/brand/opencode-logo-light-square.svg"
|
||||
import logoDarkSquareSvg from "../../asset/brand/opencode-logo-dark-square.svg"
|
||||
import wordmarkLightSvg from "../../asset/brand/opencode-wordmark-light.svg"
|
||||
import wordmarkDarkSvg from "../../asset/brand/opencode-wordmark-dark.svg"
|
||||
import wordmarkSimpleLightSvg from "../../asset/brand/opencode-wordmark-simple-light.svg"
|
||||
@@ -135,6 +141,60 @@ export default function Brand() {
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<img src={previewLogoLightSquare} alt="OpenCode brand guidelines" />
|
||||
<div data-component="actions">
|
||||
<button onClick={() => downloadFile(logoLightSquarePng, "opencode-logo-light-square.png")}>
|
||||
PNG
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M13.9583 10.6247L10 14.583L6.04167 10.6247M10 2.08301V13.958M16.25 17.9163H3.75"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.5"
|
||||
stroke-linecap="square"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
<button onClick={() => downloadFile(logoLightSquareSvg, "opencode-logo-light-square.svg")}>
|
||||
SVG
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M13.9583 10.6247L10 14.583L6.04167 10.6247M10 2.08301V13.958M16.25 17.9163H3.75"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.5"
|
||||
stroke-linecap="square"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<img src={previewLogoDarkSquare} alt="OpenCode brand guidelines" />
|
||||
<div data-component="actions">
|
||||
<button onClick={() => downloadFile(logoDarkSquarePng, "opencode-logo-dark-square.png")}>
|
||||
PNG
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M13.9583 10.6247L10 14.583L6.04167 10.6247M10 2.08301V13.958M16.25 17.9163H3.75"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.5"
|
||||
stroke-linecap="square"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
<button onClick={() => downloadFile(logoDarkSquareSvg, "opencode-logo-dark-square.svg")}>
|
||||
SVG
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M13.9583 10.6247L10 14.583L6.04167 10.6247M10 2.08301V13.958M16.25 17.9163H3.75"
|
||||
stroke="currentColor"
|
||||
stroke-width="1.5"
|
||||
stroke-linecap="square"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<img src={previewWordmarkLight} alt="OpenCode brand guidelines" />
|
||||
<div data-component="actions">
|
||||
|
||||
@@ -3,11 +3,13 @@ export class CreditsError extends Error {}
|
||||
export class MonthlyLimitError extends Error {}
|
||||
export class UserLimitError extends Error {}
|
||||
export class ModelError extends Error {}
|
||||
export class FreeUsageLimitError extends Error {}
|
||||
export class SubscriptionUsageLimitError extends Error {
|
||||
|
||||
class LimitError extends Error {
|
||||
retryAfter?: number
|
||||
constructor(message: string, retryAfter?: number) {
|
||||
super(message)
|
||||
this.retryAfter = retryAfter
|
||||
}
|
||||
}
|
||||
export class FreeUsageLimitError extends LimitError {}
|
||||
export class SubscriptionUsageLimitError extends LimitError {}
|
||||
|
||||
@@ -134,20 +134,26 @@ export async function handler(
|
||||
body: reqBody,
|
||||
})
|
||||
|
||||
// Try another provider => stop retrying if using fallback provider
|
||||
if (
|
||||
res.status !== 200 &&
|
||||
// ie. openai 404 error: Item with id 'msg_0ead8b004a3b165d0069436a6b6834819896da85b63b196a3f' not found.
|
||||
res.status !== 404 &&
|
||||
// ie. cannot change codex model providers mid-session
|
||||
modelInfo.stickyProvider !== "strict" &&
|
||||
modelInfo.fallbackProvider &&
|
||||
providerInfo.id !== modelInfo.fallbackProvider
|
||||
) {
|
||||
return retriableRequest({
|
||||
excludeProviders: [...retry.excludeProviders, providerInfo.id],
|
||||
retryCount: retry.retryCount + 1,
|
||||
if (res.status !== 200) {
|
||||
logger.metric({
|
||||
"llm.error.code": res.status,
|
||||
"llm.error.message": res.statusText,
|
||||
})
|
||||
|
||||
// Try another provider => stop retrying if using fallback provider
|
||||
if (
|
||||
// ie. openai 404 error: Item with id 'msg_0ead8b004a3b165d0069436a6b6834819896da85b63b196a3f' not found.
|
||||
res.status !== 404 &&
|
||||
// ie. cannot change codex model providers mid-session
|
||||
modelInfo.stickyProvider !== "strict" &&
|
||||
modelInfo.fallbackProvider &&
|
||||
providerInfo.id !== modelInfo.fallbackProvider
|
||||
) {
|
||||
return retriableRequest({
|
||||
excludeProviders: [...retry.excludeProviders, providerInfo.id],
|
||||
retryCount: retry.retryCount + 1,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return { providerInfo, reqBody, res, startTimestamp }
|
||||
@@ -307,7 +313,7 @@ export async function handler(
|
||||
|
||||
if (error instanceof FreeUsageLimitError || error instanceof SubscriptionUsageLimitError) {
|
||||
const headers = new Headers()
|
||||
if (error instanceof SubscriptionUsageLimitError && error.retryAfter) {
|
||||
if (error.retryAfter) {
|
||||
headers.set("retry-after", String(error.retryAfter))
|
||||
}
|
||||
return new Response(
|
||||
|
||||
@@ -28,17 +28,46 @@ export function createRateLimiter(limit: ZenData.RateLimit | undefined, rawIp: s
|
||||
check: async () => {
|
||||
const rows = await Database.use((tx) =>
|
||||
tx
|
||||
.select({ count: IpRateLimitTable.count })
|
||||
.select({ interval: IpRateLimitTable.interval, count: IpRateLimitTable.count })
|
||||
.from(IpRateLimitTable)
|
||||
.where(and(eq(IpRateLimitTable.ip, ip), inArray(IpRateLimitTable.interval, intervals))),
|
||||
)
|
||||
const total = rows.reduce((sum, r) => sum + r.count, 0)
|
||||
logger.debug(`rate limit total: ${total}`)
|
||||
if (total >= limitValue) throw new FreeUsageLimitError(`Rate limit exceeded. Please try again later.`)
|
||||
if (total >= limitValue)
|
||||
throw new FreeUsageLimitError(
|
||||
`Rate limit exceeded. Please try again later.`,
|
||||
limit.period === "day" ? getRetryAfterDay(now) : getRetryAfterHour(rows, intervals, limitValue, now),
|
||||
)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
export function getRetryAfterDay(now: number) {
|
||||
return Math.ceil((86_400_000 - (now % 86_400_000)) / 1000)
|
||||
}
|
||||
|
||||
export function getRetryAfterHour(
|
||||
rows: { interval: string; count: number }[],
|
||||
intervals: string[],
|
||||
limit: number,
|
||||
now: number,
|
||||
) {
|
||||
const counts = new Map(rows.map((r) => [r.interval, r.count]))
|
||||
// intervals are ordered newest to oldest: [current, -1h, -2h]
|
||||
// simulate dropping oldest intervals one at a time
|
||||
let running = intervals.reduce((sum, i) => sum + (counts.get(i) ?? 0), 0)
|
||||
for (let i = intervals.length - 1; i >= 0; i--) {
|
||||
running -= counts.get(intervals[i]) ?? 0
|
||||
if (running < limit) {
|
||||
// interval at index i rolls out of the window (intervals.length - i) hours from the current hour start
|
||||
const hours = intervals.length - i
|
||||
return Math.ceil((hours * 3_600_000 - (now % 3_600_000)) / 1000)
|
||||
}
|
||||
}
|
||||
return Math.ceil((3_600_000 - (now % 3_600_000)) / 1000)
|
||||
}
|
||||
|
||||
function buildYYYYMMDD(timestamp: number) {
|
||||
return new Date(timestamp)
|
||||
.toISOString()
|
||||
|
||||
92
packages/console/app/test/rateLimiter.test.ts
Normal file
92
packages/console/app/test/rateLimiter.test.ts
Normal file
@@ -0,0 +1,92 @@
|
||||
import { describe, expect, test } from "bun:test"
|
||||
import { getRetryAfterDay, getRetryAfterHour } from "../src/routes/zen/util/rateLimiter"
|
||||
|
||||
describe("getRetryAfterDay", () => {
|
||||
test("returns full day at midnight UTC", () => {
|
||||
const midnight = Date.UTC(2026, 0, 15, 0, 0, 0, 0)
|
||||
expect(getRetryAfterDay(midnight)).toBe(86_400)
|
||||
})
|
||||
|
||||
test("returns remaining seconds until next UTC day", () => {
|
||||
const noon = Date.UTC(2026, 0, 15, 12, 0, 0, 0)
|
||||
expect(getRetryAfterDay(noon)).toBe(43_200)
|
||||
})
|
||||
|
||||
test("rounds up to nearest second", () => {
|
||||
const almost = Date.UTC(2026, 0, 15, 23, 59, 59, 500)
|
||||
expect(getRetryAfterDay(almost)).toBe(1)
|
||||
})
|
||||
})
|
||||
|
||||
describe("getRetryAfterHour", () => {
|
||||
// 14:30:00 UTC — 30 minutes into the current hour
|
||||
const now = Date.UTC(2026, 0, 15, 14, 30, 0, 0)
|
||||
const intervals = ["2026011514", "2026011513", "2026011512"]
|
||||
|
||||
test("waits 3 hours when all usage is in current hour", () => {
|
||||
const rows = [{ interval: "2026011514", count: 10 }]
|
||||
// only current hour has usage — it won't leave the window for 3 hours from hour start
|
||||
// 3 * 3600 - 1800 = 9000s
|
||||
expect(getRetryAfterHour(rows, intervals, 10, now)).toBe(9000)
|
||||
})
|
||||
|
||||
test("waits 1 hour when dropping oldest interval is sufficient", () => {
|
||||
const rows = [
|
||||
{ interval: "2026011514", count: 2 },
|
||||
{ interval: "2026011512", count: 10 },
|
||||
]
|
||||
// total=12, drop oldest (-2h, count=10) -> 2 < 10
|
||||
// hours = 3 - 2 = 1 -> 1 * 3600 - 1800 = 1800s
|
||||
expect(getRetryAfterHour(rows, intervals, 10, now)).toBe(1800)
|
||||
})
|
||||
|
||||
test("waits 2 hours when usage spans oldest two intervals", () => {
|
||||
const rows = [
|
||||
{ interval: "2026011513", count: 8 },
|
||||
{ interval: "2026011512", count: 5 },
|
||||
]
|
||||
// total=13, drop -2h (5) -> 8, 8 >= 8, drop -1h (8) -> 0 < 8
|
||||
// hours = 3 - 1 = 2 -> 2 * 3600 - 1800 = 5400s
|
||||
expect(getRetryAfterHour(rows, intervals, 8, now)).toBe(5400)
|
||||
})
|
||||
|
||||
test("waits 1 hour when oldest interval alone pushes over limit", () => {
|
||||
const rows = [
|
||||
{ interval: "2026011514", count: 1 },
|
||||
{ interval: "2026011513", count: 1 },
|
||||
{ interval: "2026011512", count: 10 },
|
||||
]
|
||||
// total=12, drop -2h (10) -> 2 < 10
|
||||
// hours = 3 - 2 = 1 -> 1800s
|
||||
expect(getRetryAfterHour(rows, intervals, 10, now)).toBe(1800)
|
||||
})
|
||||
|
||||
test("waits 2 hours when middle interval keeps total over limit", () => {
|
||||
const rows = [
|
||||
{ interval: "2026011514", count: 4 },
|
||||
{ interval: "2026011513", count: 4 },
|
||||
{ interval: "2026011512", count: 4 },
|
||||
]
|
||||
// total=12, drop -2h (4) -> 8, 8 >= 5, drop -1h (4) -> 4 < 5
|
||||
// hours = 3 - 1 = 2 -> 5400s
|
||||
expect(getRetryAfterHour(rows, intervals, 5, now)).toBe(5400)
|
||||
})
|
||||
|
||||
test("rounds up to nearest second", () => {
|
||||
const offset = Date.UTC(2026, 0, 15, 14, 30, 0, 500)
|
||||
const rows = [
|
||||
{ interval: "2026011514", count: 2 },
|
||||
{ interval: "2026011512", count: 10 },
|
||||
]
|
||||
// hours=1 -> 3_600_000 - 1_800_500 = 1_799_500ms -> ceil(1799.5) = 1800
|
||||
expect(getRetryAfterHour(rows, intervals, 10, offset)).toBe(1800)
|
||||
})
|
||||
|
||||
test("fallback returns time until next hour when rows are empty", () => {
|
||||
// edge case: rows empty but function called (shouldn't happen in practice)
|
||||
// loop drops all zeros, running stays 0 which is < any positive limit on first iteration
|
||||
const rows: { interval: string; count: number }[] = []
|
||||
// drop -2h (0) -> 0 < 1 -> hours = 3 - 2 = 1 -> 1800s
|
||||
expect(getRetryAfterHour(rows, intervals, 1, now)).toBe(1800)
|
||||
})
|
||||
})
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/package.json",
|
||||
"name": "@opencode-ai/console-core",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
@@ -19,6 +19,7 @@
|
||||
"zod": "catalog:"
|
||||
},
|
||||
"exports": {
|
||||
"./*.js": "./src/*.ts",
|
||||
"./*": "./src/*"
|
||||
},
|
||||
"scripts": {
|
||||
|
||||
@@ -53,8 +53,6 @@ export namespace ZenData {
|
||||
weight: z.number().optional(),
|
||||
disabled: z.boolean().optional(),
|
||||
storeModel: z.string().optional(),
|
||||
headers: z.record(z.string(), z.string()).optional(),
|
||||
bodyModifier: z.record(z.string(), z.string()).optional(),
|
||||
}),
|
||||
),
|
||||
})
|
||||
@@ -62,13 +60,20 @@ export namespace ZenData {
|
||||
const ProviderSchema = z.object({
|
||||
api: z.string(),
|
||||
apiKey: z.string(),
|
||||
format: FormatSchema,
|
||||
format: FormatSchema.optional(),
|
||||
headerMappings: z.record(z.string(), z.string()).optional(),
|
||||
family: z.string().optional(),
|
||||
})
|
||||
|
||||
const ProviderFamilySchema = z.object({
|
||||
headers: z.record(z.string(), z.string()).optional(),
|
||||
bodyModifier: z.record(z.string(), z.string()).optional(),
|
||||
})
|
||||
|
||||
const ModelsSchema = z.object({
|
||||
models: z.record(z.string(), z.union([ModelSchema, z.array(ModelSchema.extend({ formatFilter: FormatSchema }))])),
|
||||
providers: z.record(z.string(), ProviderSchema),
|
||||
providerFamilies: z.record(z.string(), ProviderFamilySchema),
|
||||
})
|
||||
|
||||
export const validate = fn(ModelsSchema, (input) => {
|
||||
@@ -98,7 +103,16 @@ export namespace ZenData {
|
||||
Resource.ZEN_MODELS19.value +
|
||||
Resource.ZEN_MODELS20.value,
|
||||
)
|
||||
return ModelsSchema.parse(json)
|
||||
const { models, providers, providerFamilies } = ModelsSchema.parse(json)
|
||||
return {
|
||||
models,
|
||||
providers: Object.fromEntries(
|
||||
Object.entries(providers).map(([id, provider]) => [
|
||||
id,
|
||||
{ ...provider, ...(provider.family ? providerFamilies[provider.family] : {}) },
|
||||
]),
|
||||
),
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@opencode-ai/console-function",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"$schema": "https://json.schemastore.org/package.json",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
|
||||
@@ -17,8 +17,7 @@ export default {
|
||||
)
|
||||
return
|
||||
|
||||
let metrics = {
|
||||
event_type: "completions",
|
||||
let data = {
|
||||
"cf.continent": event.event.request.cf?.continent,
|
||||
"cf.country": event.event.request.cf?.country,
|
||||
"cf.city": event.event.request.cf?.city,
|
||||
@@ -31,22 +30,28 @@ export default {
|
||||
status: event.event.response?.status ?? 0,
|
||||
ip: event.event.request.headers["x-real-ip"],
|
||||
}
|
||||
const time = new Date(event.eventTimestamp ?? Date.now()).toISOString()
|
||||
const events = []
|
||||
for (const log of event.logs) {
|
||||
for (const message of log.message) {
|
||||
if (!message.startsWith("_metric:")) continue
|
||||
metrics = { ...metrics, ...JSON.parse(message.slice(8)) }
|
||||
const json = JSON.parse(message.slice(8))
|
||||
data = { ...data, ...json }
|
||||
if ("llm.error.code" in json) {
|
||||
events.push({ time, data: { ...data, event_type: "llm.error" } })
|
||||
}
|
||||
}
|
||||
}
|
||||
console.log(JSON.stringify(metrics, null, 2))
|
||||
events.push({ time, data: { ...data, event_type: "completions" } })
|
||||
console.log(JSON.stringify(data, null, 2))
|
||||
|
||||
const ret = await fetch("https://api.honeycomb.io/1/events/zen", {
|
||||
const ret = await fetch("https://api.honeycomb.io/1/batch/zen", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
"X-Honeycomb-Event-Time": (event.eventTimestamp ?? Date.now()).toString(),
|
||||
"X-Honeycomb-Team": Resource.HONEYCOMB_API_KEY.value,
|
||||
},
|
||||
body: JSON.stringify(metrics),
|
||||
body: JSON.stringify(events),
|
||||
})
|
||||
console.log(ret.status)
|
||||
console.log(await ret.text())
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@opencode-ai/console-mail",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"dependencies": {
|
||||
"@jsx-email/all": "2.2.3",
|
||||
"@jsx-email/cli": "1.4.3",
|
||||
|
||||
4
packages/desktop/AGENTS.md
Normal file
4
packages/desktop/AGENTS.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# Desktop package notes
|
||||
|
||||
- Never call `invoke` manually in this package.
|
||||
- Use the generated bindings in `packages/desktop/src/bindings.ts` for core commands/events.
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@opencode-ai/desktop",
|
||||
"private": true,
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
|
||||
104
packages/desktop/src-tauri/Cargo.lock
generated
104
packages/desktop/src-tauri/Cargo.lock
generated
@@ -535,8 +535,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
|
||||
dependencies = [
|
||||
"iana-time-zone",
|
||||
"js-sys",
|
||||
"num-traits",
|
||||
"serde",
|
||||
"wasm-bindgen",
|
||||
"windows-link 0.2.1",
|
||||
]
|
||||
|
||||
@@ -2491,6 +2493,15 @@ dependencies = [
|
||||
"syn 2.0.110",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "matchers"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9"
|
||||
dependencies = [
|
||||
"regex-automata",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "matches"
|
||||
version = "0.1.10"
|
||||
@@ -2691,6 +2702,15 @@ dependencies = [
|
||||
"zbus",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nu-ansi-term"
|
||||
version = "0.50.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
|
||||
dependencies = [
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-conv"
|
||||
version = "0.1.0"
|
||||
@@ -3065,6 +3085,7 @@ dependencies = [
|
||||
name = "opencode-desktop"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"comrak",
|
||||
"dirs",
|
||||
"futures",
|
||||
@@ -3096,6 +3117,9 @@ dependencies = [
|
||||
"tauri-plugin-window-state",
|
||||
"tauri-specta",
|
||||
"tokio",
|
||||
"tracing",
|
||||
"tracing-appender",
|
||||
"tracing-subscriber",
|
||||
"uuid",
|
||||
"webkit2gtk",
|
||||
"windows 0.61.3",
|
||||
@@ -4412,6 +4436,15 @@ dependencies = [
|
||||
"digest",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sharded-slab"
|
||||
version = "0.1.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
|
||||
dependencies = [
|
||||
"lazy_static",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shared_child"
|
||||
version = "1.1.1"
|
||||
@@ -5472,6 +5505,15 @@ dependencies = [
|
||||
"syn 2.0.110",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thread_local"
|
||||
version = "1.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tiff"
|
||||
version = "0.10.3"
|
||||
@@ -5745,9 +5787,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
|
||||
|
||||
[[package]]
|
||||
name = "tracing"
|
||||
version = "0.1.41"
|
||||
version = "0.1.44"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
|
||||
checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
|
||||
dependencies = [
|
||||
"pin-project-lite",
|
||||
"tracing-attributes",
|
||||
@@ -5755,10 +5797,22 @@ dependencies = [
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-attributes"
|
||||
version = "0.1.30"
|
||||
name = "tracing-appender"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903"
|
||||
checksum = "786d480bce6247ab75f005b14ae1624ad978d3029d9113f0a22fa1ac773faeaf"
|
||||
dependencies = [
|
||||
"crossbeam-channel",
|
||||
"thiserror 2.0.17",
|
||||
"time",
|
||||
"tracing-subscriber",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-attributes"
|
||||
version = "0.1.31"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@@ -5767,11 +5821,41 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "tracing-core"
|
||||
version = "0.1.34"
|
||||
version = "0.1.36"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678"
|
||||
checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
|
||||
dependencies = [
|
||||
"once_cell",
|
||||
"valuable",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-log"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
|
||||
dependencies = [
|
||||
"log",
|
||||
"once_cell",
|
||||
"tracing-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-subscriber"
|
||||
version = "0.3.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e"
|
||||
dependencies = [
|
||||
"matchers",
|
||||
"nu-ansi-term",
|
||||
"once_cell",
|
||||
"regex-automata",
|
||||
"sharded-slab",
|
||||
"smallvec",
|
||||
"thread_local",
|
||||
"tracing",
|
||||
"tracing-core",
|
||||
"tracing-log",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -5964,6 +6048,12 @@ dependencies = [
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "valuable"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
|
||||
|
||||
[[package]]
|
||||
name = "version-compare"
|
||||
version = "0.2.1"
|
||||
|
||||
@@ -47,6 +47,10 @@ specta = "=2.0.0-rc.22"
|
||||
specta-typescript = "0.0.9"
|
||||
tauri-specta = { version = "=2.0.0-rc.21", features = ["derive", "typescript"] }
|
||||
dirs = "6.0.0"
|
||||
tracing = "0.1"
|
||||
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
||||
tracing-appender = "0.2"
|
||||
chrono = "0.4"
|
||||
|
||||
[target.'cfg(target_os = "linux")'.dependencies]
|
||||
gtk = "0.18.2"
|
||||
|
||||
@@ -3,9 +3,10 @@ use tauri_plugin_shell::{
|
||||
ShellExt,
|
||||
process::{Command, CommandChild, CommandEvent, TerminatedPayload},
|
||||
};
|
||||
use tauri_plugin_store::StoreExt;
|
||||
use tokio::sync::oneshot;
|
||||
|
||||
use crate::{LogState, constants::MAX_LOG_ENTRIES};
|
||||
use crate::constants::{SETTINGS_STORE, WSL_ENABLED_KEY};
|
||||
|
||||
const CLI_INSTALL_DIR: &str = ".opencode/bin";
|
||||
const CLI_BINARY_NAME: &str = "opencode";
|
||||
@@ -22,10 +23,10 @@ pub struct Config {
|
||||
}
|
||||
|
||||
pub async fn get_config(app: &AppHandle) -> Option<Config> {
|
||||
create_command(app, "debug config")
|
||||
create_command(app, "debug config", &[])
|
||||
.output()
|
||||
.await
|
||||
.inspect_err(|e| eprintln!("Failed to read OC config: {e}"))
|
||||
.inspect_err(|e| tracing::warn!("Failed to read OC config: {e}"))
|
||||
.ok()
|
||||
.and_then(|out| String::from_utf8(out.stdout.to_vec()).ok())
|
||||
.and_then(|s| serde_json::from_str::<Config>(&s).ok())
|
||||
@@ -100,12 +101,12 @@ pub fn install_cli(app: tauri::AppHandle) -> Result<String, String> {
|
||||
|
||||
pub fn sync_cli(app: tauri::AppHandle) -> Result<(), String> {
|
||||
if cfg!(debug_assertions) {
|
||||
println!("Skipping CLI sync for debug build");
|
||||
tracing::debug!("Skipping CLI sync for debug build");
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
if !is_cli_installed() {
|
||||
println!("No CLI installation found, skipping sync");
|
||||
tracing::info!("No CLI installation found, skipping sync");
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
@@ -128,21 +129,21 @@ pub fn sync_cli(app: tauri::AppHandle) -> Result<(), String> {
|
||||
let app_version = app.package_info().version.clone();
|
||||
|
||||
if cli_version >= app_version {
|
||||
println!(
|
||||
"CLI version {} is up to date (app version: {}), skipping sync",
|
||||
cli_version, app_version
|
||||
tracing::info!(
|
||||
%cli_version, %app_version,
|
||||
"CLI is up to date, skipping sync"
|
||||
);
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
println!(
|
||||
"CLI version {} is older than app version {}, syncing",
|
||||
cli_version, app_version
|
||||
tracing::info!(
|
||||
%cli_version, %app_version,
|
||||
"CLI is older than app version, syncing"
|
||||
);
|
||||
|
||||
install_cli(app)?;
|
||||
|
||||
println!("Synced installed CLI");
|
||||
tracing::info!("Synced installed CLI");
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -151,25 +152,106 @@ fn get_user_shell() -> String {
|
||||
std::env::var("SHELL").unwrap_or_else(|_| "/bin/sh".to_string())
|
||||
}
|
||||
|
||||
pub fn create_command(app: &tauri::AppHandle, args: &str) -> Command {
|
||||
fn is_wsl_enabled(app: &tauri::AppHandle) -> bool {
|
||||
let Ok(store) = app.store(SETTINGS_STORE) else {
|
||||
return false;
|
||||
};
|
||||
|
||||
store
|
||||
.get(WSL_ENABLED_KEY)
|
||||
.as_ref()
|
||||
.and_then(|value| value.as_bool())
|
||||
.unwrap_or(false)
|
||||
}
|
||||
|
||||
fn shell_escape(input: &str) -> String {
|
||||
if input.is_empty() {
|
||||
return "''".to_string();
|
||||
}
|
||||
|
||||
let mut escaped = String::from("'");
|
||||
escaped.push_str(&input.replace("'", "'\"'\"'"));
|
||||
escaped.push('\'');
|
||||
escaped
|
||||
}
|
||||
|
||||
pub fn create_command(app: &tauri::AppHandle, args: &str, extra_env: &[(&str, String)]) -> Command {
|
||||
let state_dir = app
|
||||
.path()
|
||||
.resolve("", BaseDirectory::AppLocalData)
|
||||
.expect("Failed to resolve app local data dir");
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
return app
|
||||
.shell()
|
||||
.sidecar("opencode-cli")
|
||||
.unwrap()
|
||||
.args(args.split_whitespace())
|
||||
.env("OPENCODE_EXPERIMENTAL_ICON_DISCOVERY", "true")
|
||||
.env("OPENCODE_EXPERIMENTAL_FILEWATCHER", "true")
|
||||
.env("OPENCODE_CLIENT", "desktop")
|
||||
.env("XDG_STATE_HOME", &state_dir);
|
||||
let mut envs = vec![
|
||||
(
|
||||
"OPENCODE_EXPERIMENTAL_ICON_DISCOVERY".to_string(),
|
||||
"true".to_string(),
|
||||
),
|
||||
(
|
||||
"OPENCODE_EXPERIMENTAL_FILEWATCHER".to_string(),
|
||||
"true".to_string(),
|
||||
),
|
||||
("OPENCODE_CLIENT".to_string(), "desktop".to_string()),
|
||||
(
|
||||
"XDG_STATE_HOME".to_string(),
|
||||
state_dir.to_string_lossy().to_string(),
|
||||
),
|
||||
];
|
||||
envs.extend(
|
||||
extra_env
|
||||
.iter()
|
||||
.map(|(key, value)| (key.to_string(), value.clone())),
|
||||
);
|
||||
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
return {
|
||||
if cfg!(windows) {
|
||||
if is_wsl_enabled(app) {
|
||||
tracing::info!("WSL is enabled, spawning CLI server in WSL");
|
||||
let version = app.package_info().version.to_string();
|
||||
let mut script = vec![
|
||||
"set -e".to_string(),
|
||||
"BIN=\"$HOME/.opencode/bin/opencode\"".to_string(),
|
||||
"if [ ! -x \"$BIN\" ]; then".to_string(),
|
||||
format!(
|
||||
" curl -fsSL https://opencode.ai/install | bash -s -- --version {} --no-modify-path",
|
||||
shell_escape(&version)
|
||||
),
|
||||
"fi".to_string(),
|
||||
];
|
||||
|
||||
let mut env_prefix = vec![
|
||||
"OPENCODE_EXPERIMENTAL_ICON_DISCOVERY=true".to_string(),
|
||||
"OPENCODE_EXPERIMENTAL_FILEWATCHER=true".to_string(),
|
||||
"OPENCODE_CLIENT=desktop".to_string(),
|
||||
"XDG_STATE_HOME=\"$HOME/.local/state\"".to_string(),
|
||||
];
|
||||
env_prefix.extend(
|
||||
envs.iter()
|
||||
.filter(|(key, _)| key != "OPENCODE_EXPERIMENTAL_ICON_DISCOVERY")
|
||||
.filter(|(key, _)| key != "OPENCODE_EXPERIMENTAL_FILEWATCHER")
|
||||
.filter(|(key, _)| key != "OPENCODE_CLIENT")
|
||||
.filter(|(key, _)| key != "XDG_STATE_HOME")
|
||||
.map(|(key, value)| format!("{}={}", key, shell_escape(value))),
|
||||
);
|
||||
|
||||
script.push(format!("{} exec \"$BIN\" {}", env_prefix.join(" "), args));
|
||||
|
||||
return app
|
||||
.shell()
|
||||
.command("wsl")
|
||||
.args(["-e", "bash", "-lc", &script.join("\n")]);
|
||||
} else {
|
||||
let mut cmd = app
|
||||
.shell()
|
||||
.sidecar("opencode-cli")
|
||||
.unwrap()
|
||||
.args(args.split_whitespace());
|
||||
|
||||
for (key, value) in envs {
|
||||
cmd = cmd.env(key, value);
|
||||
}
|
||||
|
||||
return cmd;
|
||||
}
|
||||
} else {
|
||||
let sidecar = get_sidecar_path(app);
|
||||
let shell = get_user_shell();
|
||||
|
||||
@@ -179,14 +261,14 @@ pub fn create_command(app: &tauri::AppHandle, args: &str) -> Command {
|
||||
format!("\"{}\" {}", sidecar.display(), args)
|
||||
};
|
||||
|
||||
app.shell()
|
||||
.command(&shell)
|
||||
.env("OPENCODE_EXPERIMENTAL_ICON_DISCOVERY", "true")
|
||||
.env("OPENCODE_EXPERIMENTAL_FILEWATCHER", "true")
|
||||
.env("OPENCODE_CLIENT", "desktop")
|
||||
.env("XDG_STATE_HOME", &state_dir)
|
||||
.args(["-il", "-c", &cmd])
|
||||
};
|
||||
let mut cmd = app.shell().command(&shell).args(["-il", "-c", &cmd]);
|
||||
|
||||
for (key, value) in envs {
|
||||
cmd = cmd.env(key, value);
|
||||
}
|
||||
|
||||
cmd
|
||||
}
|
||||
}
|
||||
|
||||
pub fn serve(
|
||||
@@ -195,47 +277,20 @@ pub fn serve(
|
||||
port: u32,
|
||||
password: &str,
|
||||
) -> (CommandChild, oneshot::Receiver<TerminatedPayload>) {
|
||||
let log_state = app.state::<LogState>();
|
||||
let log_state_clone = log_state.inner().clone();
|
||||
|
||||
let (exit_tx, exit_rx) = oneshot::channel::<TerminatedPayload>();
|
||||
|
||||
println!("spawning sidecar on port {port}");
|
||||
tracing::info!(port, "Spawning sidecar");
|
||||
|
||||
if let Ok(mut logs) = log_state_clone.0.lock() {
|
||||
let args = format!(
|
||||
"--print-logs --log-level WARN serve --hostname {hostname} --port {port}"
|
||||
);
|
||||
let envs = [
|
||||
("OPENCODE_SERVER_USERNAME", "opencode".to_string()),
|
||||
("OPENCODE_SERVER_PASSWORD", password.to_string()),
|
||||
];
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
{
|
||||
logs.push_back(format!("[SPAWN] sidecar=opencode-cli args=\"{args}\"\n"));
|
||||
}
|
||||
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
{
|
||||
let sidecar = get_sidecar_path(app);
|
||||
let shell = get_user_shell();
|
||||
let cmd = if shell.ends_with("/nu") {
|
||||
format!("^\"{}\" {}", sidecar.display(), args)
|
||||
} else {
|
||||
format!("\"{}\" {}", sidecar.display(), args)
|
||||
};
|
||||
logs.push_back(format!(
|
||||
"[SPAWN] shell=\"{shell}\" argv=\"-il -c {cmd}\"\n"
|
||||
));
|
||||
}
|
||||
|
||||
while logs.len() > MAX_LOG_ENTRIES {
|
||||
logs.pop_front();
|
||||
}
|
||||
}
|
||||
|
||||
let args = format!("--print-logs --log-level WARN serve --hostname {hostname} --port {port}");
|
||||
|
||||
let (mut rx, child) = create_command(app, &args)
|
||||
.env("OPENCODE_SERVER_USERNAME", "opencode")
|
||||
.env("OPENCODE_SERVER_PASSWORD", password)
|
||||
let (mut rx, child) = create_command(
|
||||
app,
|
||||
format!("--print-logs --log-level WARN serve --hostname {hostname} --port {port}").as_str(),
|
||||
&envs,
|
||||
)
|
||||
.spawn()
|
||||
.expect("Failed to spawn opencode");
|
||||
|
||||
@@ -245,50 +300,22 @@ pub fn serve(
|
||||
match event {
|
||||
CommandEvent::Stdout(line_bytes) => {
|
||||
let line = String::from_utf8_lossy(&line_bytes);
|
||||
print!("{line}");
|
||||
|
||||
// Store log in shared state
|
||||
if let Ok(mut logs) = log_state_clone.0.lock() {
|
||||
logs.push_back(format!("[STDOUT] {}", line));
|
||||
// Keep only the last MAX_LOG_ENTRIES
|
||||
while logs.len() > MAX_LOG_ENTRIES {
|
||||
logs.pop_front();
|
||||
}
|
||||
}
|
||||
tracing::info!(target: "sidecar", "{line}");
|
||||
}
|
||||
CommandEvent::Stderr(line_bytes) => {
|
||||
let line = String::from_utf8_lossy(&line_bytes);
|
||||
eprint!("{line}");
|
||||
|
||||
// Store log in shared state
|
||||
if let Ok(mut logs) = log_state_clone.0.lock() {
|
||||
logs.push_back(format!("[STDERR] {}", line));
|
||||
// Keep only the last MAX_LOG_ENTRIES
|
||||
while logs.len() > MAX_LOG_ENTRIES {
|
||||
logs.pop_front();
|
||||
}
|
||||
}
|
||||
tracing::info!(target: "sidecar", "{line}");
|
||||
}
|
||||
CommandEvent::Error(err) => {
|
||||
eprintln!("{err}");
|
||||
|
||||
if let Ok(mut logs) = log_state_clone.0.lock() {
|
||||
logs.push_back(format!("[ERROR] {err}\n"));
|
||||
while logs.len() > MAX_LOG_ENTRIES {
|
||||
logs.pop_front();
|
||||
}
|
||||
}
|
||||
tracing::error!(target: "sidecar", "{err}");
|
||||
}
|
||||
CommandEvent::Terminated(payload) => {
|
||||
if let Ok(mut logs) = log_state_clone.0.lock() {
|
||||
logs.push_back(format!(
|
||||
"[EXIT] code={:?} signal={:?}\n",
|
||||
payload.code, payload.signal
|
||||
));
|
||||
while logs.len() > MAX_LOG_ENTRIES {
|
||||
logs.pop_front();
|
||||
}
|
||||
}
|
||||
tracing::info!(
|
||||
target: "sidecar",
|
||||
code = ?payload.code,
|
||||
signal = ?payload.signal,
|
||||
"Sidecar terminated"
|
||||
);
|
||||
|
||||
if let Some(tx) = exit_tx.take() {
|
||||
let _ = tx.send(payload);
|
||||
|
||||
@@ -2,8 +2,8 @@ use tauri_plugin_window_state::StateFlags;
|
||||
|
||||
pub const SETTINGS_STORE: &str = "opencode.settings.dat";
|
||||
pub const DEFAULT_SERVER_URL_KEY: &str = "defaultServerUrl";
|
||||
pub const WSL_ENABLED_KEY: &str = "wslEnabled";
|
||||
pub const UPDATER_ENABLED: bool = option_env!("TAURI_SIGNING_PRIVATE_KEY").is_some();
|
||||
pub const MAX_LOG_ENTRIES: usize = 200;
|
||||
|
||||
pub fn window_state_flags() -> StateFlags {
|
||||
StateFlags::all() - StateFlags::DECORATIONS - StateFlags::VISIBLE
|
||||
|
||||
@@ -15,9 +15,9 @@ use std::io::{Error, Result};
|
||||
use std::sync::Mutex;
|
||||
use windows::Win32::Foundation::{CloseHandle, HANDLE};
|
||||
use windows::Win32::System::JobObjects::{
|
||||
AssignProcessToJobObject, CreateJobObjectW, JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE,
|
||||
JOBOBJECT_EXTENDED_LIMIT_INFORMATION, JobObjectExtendedLimitInformation,
|
||||
SetInformationJobObject,
|
||||
AssignProcessToJobObject, CreateJobObjectW, JobObjectExtendedLimitInformation,
|
||||
SetInformationJobObject, JOBOBJECT_EXTENDED_LIMIT_INFORMATION,
|
||||
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE,
|
||||
};
|
||||
use windows::Win32::System::Threading::{OpenProcess, PROCESS_SET_QUOTA, PROCESS_TERMINATE};
|
||||
|
||||
@@ -111,7 +111,7 @@ impl JobObjectState {
|
||||
error: Mutex::new(None),
|
||||
},
|
||||
Err(e) => {
|
||||
eprintln!("Failed to create job object: {e}");
|
||||
tracing::error!("Failed to create job object: {e}");
|
||||
Self {
|
||||
job: Mutex::new(None),
|
||||
error: Mutex::new(Some(format!("Failed to create job object: {e}"))),
|
||||
@@ -123,11 +123,11 @@ impl JobObjectState {
|
||||
pub fn assign_pid(&self, pid: u32) {
|
||||
if let Some(job) = self.job.lock().unwrap().as_ref() {
|
||||
if let Err(e) = job.assign_pid(pid) {
|
||||
eprintln!("Failed to assign process {pid} to job object: {e}");
|
||||
tracing::error!(pid, "Failed to assign process to job object: {e}");
|
||||
*self.error.lock().unwrap() =
|
||||
Some(format!("Failed to assign process to job object: {e}"));
|
||||
} else {
|
||||
println!("Assigned process {pid} to job object for automatic cleanup");
|
||||
tracing::info!(pid, "Assigned process to job object for automatic cleanup");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ mod constants;
|
||||
mod job_object;
|
||||
#[cfg(target_os = "linux")]
|
||||
pub mod linux_display;
|
||||
mod logging;
|
||||
mod markdown;
|
||||
mod server;
|
||||
mod window_customizer;
|
||||
@@ -16,13 +17,12 @@ use futures::{
|
||||
#[cfg(windows)]
|
||||
use job_object::*;
|
||||
use std::{
|
||||
collections::VecDeque,
|
||||
env,
|
||||
net::TcpListener,
|
||||
path::PathBuf,
|
||||
process::Command,
|
||||
sync::{Arc, Mutex},
|
||||
time::Duration,
|
||||
process::Command,
|
||||
};
|
||||
use tauri::{AppHandle, Manager, RunEvent, State, ipc::Channel};
|
||||
#[cfg(any(target_os = "linux", all(debug_assertions, windows)))]
|
||||
@@ -52,6 +52,13 @@ enum InitStep {
|
||||
Done,
|
||||
}
|
||||
|
||||
#[derive(serde::Deserialize, specta::Type)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
enum WslPathMode {
|
||||
Windows,
|
||||
Linux,
|
||||
}
|
||||
|
||||
struct InitState {
|
||||
current: watch::Receiver<InitStep>,
|
||||
}
|
||||
@@ -78,14 +85,11 @@ impl ServerState {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
struct LogState(Arc<Mutex<VecDeque<String>>>);
|
||||
|
||||
#[tauri::command]
|
||||
#[specta::specta]
|
||||
fn kill_sidecar(app: AppHandle) {
|
||||
let Some(server_state) = app.try_state::<ServerState>() else {
|
||||
println!("Server not running");
|
||||
tracing::info!("Server not running");
|
||||
return;
|
||||
};
|
||||
|
||||
@@ -95,24 +99,17 @@ fn kill_sidecar(app: AppHandle) {
|
||||
.expect("Failed to acquire mutex lock")
|
||||
.take()
|
||||
else {
|
||||
println!("Server state missing");
|
||||
tracing::info!("Server state missing");
|
||||
return;
|
||||
};
|
||||
|
||||
let _ = server_state.kill();
|
||||
|
||||
println!("Killed server");
|
||||
tracing::info!("Killed server");
|
||||
}
|
||||
|
||||
async fn get_logs(app: AppHandle) -> Result<String, String> {
|
||||
let log_state = app.try_state::<LogState>().ok_or("Log state not found")?;
|
||||
|
||||
let logs = log_state
|
||||
.0
|
||||
.lock()
|
||||
.map_err(|_| "Failed to acquire log lock")?;
|
||||
|
||||
Ok(logs.iter().cloned().collect::<Vec<_>>().join(""))
|
||||
fn get_logs() -> String {
|
||||
logging::tail()
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
@@ -152,12 +149,12 @@ fn check_app_exists(app_name: &str) -> bool {
|
||||
{
|
||||
check_windows_app(app_name)
|
||||
}
|
||||
|
||||
|
||||
#[cfg(target_os = "macos")]
|
||||
{
|
||||
check_macos_app(app_name)
|
||||
}
|
||||
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
{
|
||||
check_linux_app(app_name)
|
||||
@@ -165,11 +162,165 @@ fn check_app_exists(app_name: &str) -> bool {
|
||||
}
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
fn check_windows_app(app_name: &str) -> bool {
|
||||
fn check_windows_app(_app_name: &str) -> bool {
|
||||
// Check if command exists in PATH, including .exe
|
||||
return true;
|
||||
}
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
fn resolve_windows_app_path(app_name: &str) -> Option<String> {
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
// Try to find the command using 'where'
|
||||
let output = Command::new("where").arg(app_name).output().ok()?;
|
||||
|
||||
if !output.status.success() {
|
||||
return None;
|
||||
}
|
||||
|
||||
let paths = String::from_utf8_lossy(&output.stdout)
|
||||
.lines()
|
||||
.map(str::trim)
|
||||
.filter(|line| !line.is_empty())
|
||||
.map(PathBuf::from)
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
let has_ext = |path: &Path, ext: &str| {
|
||||
path.extension()
|
||||
.and_then(|v| v.to_str())
|
||||
.map(|v| v.eq_ignore_ascii_case(ext))
|
||||
.unwrap_or(false)
|
||||
};
|
||||
|
||||
if let Some(path) = paths.iter().find(|path| has_ext(path, "exe")) {
|
||||
return Some(path.to_string_lossy().to_string());
|
||||
}
|
||||
|
||||
let resolve_cmd = |path: &Path| -> Option<String> {
|
||||
let content = std::fs::read_to_string(path).ok()?;
|
||||
|
||||
for token in content.split('"') {
|
||||
let lower = token.to_ascii_lowercase();
|
||||
if !lower.contains(".exe") {
|
||||
continue;
|
||||
}
|
||||
|
||||
if let Some(index) = lower.find("%~dp0") {
|
||||
let base = path.parent()?;
|
||||
let suffix = &token[index + 5..];
|
||||
let mut resolved = PathBuf::from(base);
|
||||
|
||||
for part in suffix.replace('/', "\\").split('\\') {
|
||||
if part.is_empty() || part == "." {
|
||||
continue;
|
||||
}
|
||||
if part == ".." {
|
||||
let _ = resolved.pop();
|
||||
continue;
|
||||
}
|
||||
resolved.push(part);
|
||||
}
|
||||
|
||||
if resolved.exists() {
|
||||
return Some(resolved.to_string_lossy().to_string());
|
||||
}
|
||||
}
|
||||
|
||||
let resolved = PathBuf::from(token);
|
||||
if resolved.exists() {
|
||||
return Some(resolved.to_string_lossy().to_string());
|
||||
}
|
||||
}
|
||||
|
||||
None
|
||||
};
|
||||
|
||||
for path in &paths {
|
||||
if has_ext(path, "cmd") || has_ext(path, "bat") {
|
||||
if let Some(resolved) = resolve_cmd(path) {
|
||||
return Some(resolved);
|
||||
}
|
||||
}
|
||||
|
||||
if path.extension().is_none() {
|
||||
let cmd = path.with_extension("cmd");
|
||||
if cmd.exists() {
|
||||
if let Some(resolved) = resolve_cmd(&cmd) {
|
||||
return Some(resolved);
|
||||
}
|
||||
}
|
||||
|
||||
let bat = path.with_extension("bat");
|
||||
if bat.exists() {
|
||||
if let Some(resolved) = resolve_cmd(&bat) {
|
||||
return Some(resolved);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let key = app_name
|
||||
.chars()
|
||||
.filter(|v| v.is_ascii_alphanumeric())
|
||||
.flat_map(|v| v.to_lowercase())
|
||||
.collect::<String>();
|
||||
|
||||
if !key.is_empty() {
|
||||
for path in &paths {
|
||||
let dirs = [
|
||||
path.parent(),
|
||||
path.parent().and_then(|dir| dir.parent()),
|
||||
path.parent()
|
||||
.and_then(|dir| dir.parent())
|
||||
.and_then(|dir| dir.parent()),
|
||||
];
|
||||
|
||||
for dir in dirs.into_iter().flatten() {
|
||||
if let Ok(entries) = std::fs::read_dir(dir) {
|
||||
for entry in entries.flatten() {
|
||||
let candidate = entry.path();
|
||||
if !has_ext(&candidate, "exe") {
|
||||
continue;
|
||||
}
|
||||
|
||||
let Some(stem) = candidate.file_stem().and_then(|v| v.to_str()) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
let name = stem
|
||||
.chars()
|
||||
.filter(|v| v.is_ascii_alphanumeric())
|
||||
.flat_map(|v| v.to_lowercase())
|
||||
.collect::<String>();
|
||||
|
||||
if name.contains(&key) || key.contains(&name) {
|
||||
return Some(candidate.to_string_lossy().to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
paths.first().map(|path| path.to_string_lossy().to_string())
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
#[specta::specta]
|
||||
fn resolve_app_path(app_name: &str) -> Option<String> {
|
||||
#[cfg(target_os = "windows")]
|
||||
{
|
||||
resolve_windows_app_path(app_name)
|
||||
}
|
||||
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
{
|
||||
// On macOS/Linux, just return the app_name as-is since
|
||||
// the opener plugin handles them correctly
|
||||
Some(app_name.to_string())
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(target_os = "macos")]
|
||||
fn check_macos_app(app_name: &str) -> bool {
|
||||
// Check common installation locations
|
||||
@@ -181,13 +332,13 @@ fn check_macos_app(app_name: &str) -> bool {
|
||||
if let Ok(home) = std::env::var("HOME") {
|
||||
app_locations.push(format!("{}/Applications/{}.app", home, app_name));
|
||||
}
|
||||
|
||||
|
||||
for location in app_locations {
|
||||
if std::path::Path::new(&location).exists() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Also check if command exists in PATH
|
||||
Command::new("which")
|
||||
.arg(app_name)
|
||||
@@ -238,31 +389,50 @@ fn check_linux_app(app_name: &str) -> bool {
|
||||
return true;
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
#[specta::specta]
|
||||
fn wsl_path(path: String, mode: Option<WslPathMode>) -> Result<String, String> {
|
||||
if !cfg!(windows) {
|
||||
return Ok(path);
|
||||
}
|
||||
|
||||
let flag = match mode.unwrap_or(WslPathMode::Linux) {
|
||||
WslPathMode::Windows => "-w",
|
||||
WslPathMode::Linux => "-u",
|
||||
};
|
||||
|
||||
let output = if path.starts_with('~') {
|
||||
let suffix = path.strip_prefix('~').unwrap_or("");
|
||||
let escaped = suffix.replace('"', "\\\"");
|
||||
let cmd = format!("wslpath {flag} \"$HOME{escaped}\"");
|
||||
Command::new("wsl")
|
||||
.args(["-e", "sh", "-lc", &cmd])
|
||||
.output()
|
||||
.map_err(|e| format!("Failed to run wslpath: {e}"))?
|
||||
} else {
|
||||
Command::new("wsl")
|
||||
.args(["-e", "wslpath", flag, &path])
|
||||
.output()
|
||||
.map_err(|e| format!("Failed to run wslpath: {e}"))?
|
||||
};
|
||||
|
||||
if !output.status.success() {
|
||||
let stderr = String::from_utf8_lossy(&output.stderr).trim().to_string();
|
||||
if stderr.is_empty() {
|
||||
return Err("wslpath failed".to_string());
|
||||
}
|
||||
return Err(stderr);
|
||||
}
|
||||
|
||||
Ok(String::from_utf8_lossy(&output.stdout).trim().to_string())
|
||||
}
|
||||
|
||||
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
||||
pub fn run() {
|
||||
let builder = tauri_specta::Builder::<tauri::Wry>::new()
|
||||
// Then register them (separated by a comma)
|
||||
.commands(tauri_specta::collect_commands![
|
||||
kill_sidecar,
|
||||
cli::install_cli,
|
||||
await_initialization,
|
||||
server::get_default_server_url,
|
||||
server::set_default_server_url,
|
||||
get_display_backend,
|
||||
set_display_backend,
|
||||
markdown::parse_markdown_command,
|
||||
check_app_exists
|
||||
])
|
||||
.events(tauri_specta::collect_events![LoadingWindowComplete])
|
||||
.error_handling(tauri_specta::ErrorHandlingMode::Throw);
|
||||
let builder = make_specta_builder();
|
||||
|
||||
#[cfg(debug_assertions)] // <- Only export on non-release builds
|
||||
builder
|
||||
.export(
|
||||
specta_typescript::Typescript::default(),
|
||||
"../src/bindings.ts",
|
||||
)
|
||||
.expect("Failed to export typescript bindings");
|
||||
export_types(&builder);
|
||||
|
||||
#[cfg(all(target_os = "macos", not(debug_assertions)))]
|
||||
let _ = std::process::Command::new("killall")
|
||||
@@ -297,10 +467,18 @@ pub fn run() {
|
||||
.plugin(tauri_plugin_decorum::init())
|
||||
.invoke_handler(builder.invoke_handler())
|
||||
.setup(move |app| {
|
||||
let app = app.handle().clone();
|
||||
let handle = app.handle().clone();
|
||||
|
||||
builder.mount_events(&app);
|
||||
tauri::async_runtime::spawn(initialize(app));
|
||||
let log_dir = app
|
||||
.path()
|
||||
.app_log_dir()
|
||||
.expect("failed to resolve app log dir");
|
||||
// Hold the guard in managed state so it lives for the app's lifetime,
|
||||
// ensuring all buffered logs are flushed on shutdown.
|
||||
handle.manage(logging::init(&log_dir));
|
||||
|
||||
builder.mount_events(&handle);
|
||||
tauri::async_runtime::spawn(initialize(handle));
|
||||
|
||||
Ok(())
|
||||
});
|
||||
@@ -314,19 +492,56 @@ pub fn run() {
|
||||
.expect("error while running tauri application")
|
||||
.run(|app, event| {
|
||||
if let RunEvent::Exit = event {
|
||||
println!("Received Exit");
|
||||
tracing::info!("Received Exit");
|
||||
|
||||
kill_sidecar(app.clone());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
fn make_specta_builder() -> tauri_specta::Builder<tauri::Wry> {
|
||||
tauri_specta::Builder::<tauri::Wry>::new()
|
||||
// Then register them (separated by a comma)
|
||||
.commands(tauri_specta::collect_commands![
|
||||
kill_sidecar,
|
||||
cli::install_cli,
|
||||
await_initialization,
|
||||
server::get_default_server_url,
|
||||
server::set_default_server_url,
|
||||
server::get_wsl_config,
|
||||
server::set_wsl_config,
|
||||
get_display_backend,
|
||||
set_display_backend,
|
||||
markdown::parse_markdown_command,
|
||||
check_app_exists,
|
||||
wsl_path,
|
||||
resolve_app_path
|
||||
])
|
||||
.events(tauri_specta::collect_events![LoadingWindowComplete])
|
||||
.error_handling(tauri_specta::ErrorHandlingMode::Throw)
|
||||
}
|
||||
|
||||
fn export_types(builder: &tauri_specta::Builder<tauri::Wry>) {
|
||||
builder
|
||||
.export(
|
||||
specta_typescript::Typescript::default(),
|
||||
"../src/bindings.ts",
|
||||
)
|
||||
.expect("Failed to export typescript bindings");
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
#[test]
|
||||
fn test_export_types() {
|
||||
let builder = make_specta_builder();
|
||||
export_types(&builder);
|
||||
}
|
||||
|
||||
#[derive(tauri_specta::Event, serde::Deserialize, specta::Type)]
|
||||
struct LoadingWindowComplete;
|
||||
|
||||
// #[tracing::instrument(skip_all)]
|
||||
async fn initialize(app: AppHandle) {
|
||||
println!("Initializing app");
|
||||
tracing::info!("Initializing app");
|
||||
|
||||
let (init_tx, init_rx) = watch::channel(InitStep::ServerWaiting);
|
||||
|
||||
@@ -339,7 +554,7 @@ async fn initialize(app: AppHandle) {
|
||||
|
||||
let loading_window_complete = event_once_fut::<LoadingWindowComplete>(&app);
|
||||
|
||||
println!("Main and loading windows created");
|
||||
tracing::info!("Main and loading windows created");
|
||||
|
||||
let sqlite_enabled = option_env!("OPENCODE_SQLITE").is_some();
|
||||
|
||||
@@ -350,7 +565,7 @@ async fn initialize(app: AppHandle) {
|
||||
async move {
|
||||
let mut sqlite_exists = sqlite_file_exists();
|
||||
|
||||
println!("Setting up server connection");
|
||||
tracing::info!("Setting up server connection");
|
||||
let server_connection = setup_server_connection(app.clone()).await;
|
||||
|
||||
// we delay spawning this future so that the timeout is created lazily
|
||||
@@ -375,16 +590,13 @@ async fn initialize(app: AppHandle) {
|
||||
if let Some(err) = err {
|
||||
let _ = child.kill();
|
||||
|
||||
let logs = get_logs(app.clone())
|
||||
.await
|
||||
.unwrap_or_else(|e| format!("[DESKTOP] Failed to read sidecar logs: {e}\n"));
|
||||
|
||||
return Err(format!(
|
||||
"Failed to spawn OpenCode Server ({err}). Logs:\n{logs}"
|
||||
"Failed to spawn OpenCode Server ({err}). Logs:\n{}",
|
||||
get_logs()
|
||||
));
|
||||
}
|
||||
|
||||
println!("CLI health check OK");
|
||||
tracing::info!("CLI health check OK");
|
||||
|
||||
#[cfg(windows)]
|
||||
{
|
||||
@@ -412,11 +624,11 @@ async fn initialize(app: AppHandle) {
|
||||
|
||||
if let Some(cli_health_check) = cli_health_check {
|
||||
if sqlite_enabled {
|
||||
println!("Does sqlite file exist: {sqlite_exists}");
|
||||
tracing::debug!(sqlite_exists, "Checking sqlite file existence");
|
||||
if !sqlite_exists {
|
||||
println!(
|
||||
"Sqlite file not found at {}, waiting for it to be generated",
|
||||
opencode_db_path().expect("failed to get db path").display()
|
||||
tracing::info!(
|
||||
path = %opencode_db_path().expect("failed to get db path").display(),
|
||||
"Sqlite file not found, waiting for it to be generated"
|
||||
);
|
||||
let _ = init_tx.send(InitStep::SqliteWaiting);
|
||||
|
||||
@@ -441,7 +653,7 @@ async fn initialize(app: AppHandle) {
|
||||
.await
|
||||
.is_err()
|
||||
{
|
||||
println!("Loading task timed out, showing loading window");
|
||||
tracing::debug!("Loading task timed out, showing loading window");
|
||||
let app = app.clone();
|
||||
let loading_window = LoadingWindow::create(&app).expect("Failed to create loading window");
|
||||
sleep(Duration::from_secs(1)).await;
|
||||
@@ -454,14 +666,14 @@ async fn initialize(app: AppHandle) {
|
||||
|
||||
let _ = loading_task.await;
|
||||
|
||||
println!("Loading done, completing initialisation");
|
||||
tracing::info!("Loading done, completing initialisation");
|
||||
|
||||
let _ = init_tx.send(InitStep::Done);
|
||||
|
||||
if loading_window.is_some() {
|
||||
loading_window_complete.await;
|
||||
|
||||
println!("Loading window completed");
|
||||
tracing::info!("Loading window completed");
|
||||
}
|
||||
|
||||
MainWindow::create(&app).expect("Failed to create main window");
|
||||
@@ -475,9 +687,6 @@ fn setup_app(app: &tauri::AppHandle, init_rx: watch::Receiver<InitStep>) {
|
||||
#[cfg(any(target_os = "linux", all(debug_assertions, windows)))]
|
||||
app.deep_link().register_all().ok();
|
||||
|
||||
// Initialize log state
|
||||
app.manage(LogState(Arc::new(Mutex::new(VecDeque::new()))));
|
||||
|
||||
#[cfg(windows)]
|
||||
app.manage(JobObjectState::new());
|
||||
|
||||
@@ -487,7 +696,7 @@ fn setup_app(app: &tauri::AppHandle, init_rx: watch::Receiver<InitStep>) {
|
||||
fn spawn_cli_sync_task(app: AppHandle) {
|
||||
tokio::spawn(async move {
|
||||
if let Err(e) = sync_cli(app) {
|
||||
eprintln!("Failed to sync CLI: {e}");
|
||||
tracing::error!("Failed to sync CLI: {e}");
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -507,12 +716,12 @@ enum ServerConnection {
|
||||
async fn setup_server_connection(app: AppHandle) -> ServerConnection {
|
||||
let custom_url = get_saved_server_url(&app).await;
|
||||
|
||||
println!("Attempting server connection to custom url: {custom_url:?}");
|
||||
tracing::info!(?custom_url, "Attempting server connection");
|
||||
|
||||
if let Some(url) = custom_url
|
||||
&& server::check_health_or_ask_retry(&app, &url).await
|
||||
{
|
||||
println!("Connected to custom server: {}", url);
|
||||
tracing::info!(%url, "Connected to custom server");
|
||||
return ServerConnection::Existing { url: url.clone() };
|
||||
}
|
||||
|
||||
@@ -520,15 +729,15 @@ async fn setup_server_connection(app: AppHandle) -> ServerConnection {
|
||||
let hostname = "127.0.0.1";
|
||||
let local_url = format!("http://{hostname}:{local_port}");
|
||||
|
||||
println!("Checking health of server '{}'", local_url);
|
||||
tracing::debug!(url = %local_url, "Checking health of local server");
|
||||
if server::check_health(&local_url, None).await {
|
||||
println!("Health check OK, using existing server");
|
||||
tracing::info!(url = %local_url, "Health check OK, using existing server");
|
||||
return ServerConnection::Existing { url: local_url };
|
||||
}
|
||||
|
||||
let password = uuid::Uuid::new_v4().to_string();
|
||||
|
||||
println!("Spawning new local server");
|
||||
tracing::info!("Spawning new local server");
|
||||
let (child, health_check) =
|
||||
server::spawn_local_server(app, hostname.to_string(), local_port, password.clone());
|
||||
|
||||
|
||||
@@ -14,7 +14,11 @@ struct DisplayConfig {
|
||||
}
|
||||
|
||||
fn dir() -> Option<PathBuf> {
|
||||
Some(dirs::data_dir()?.join("ai.opencode.desktop"))
|
||||
Some(dirs::data_dir()?.join(if cfg!(debug_assertions) {
|
||||
"ai.opencode.desktop.dev"
|
||||
} else {
|
||||
"ai.opencode.desktop"
|
||||
}))
|
||||
}
|
||||
|
||||
fn path() -> Option<PathBuf> {
|
||||
@@ -22,10 +26,12 @@ fn path() -> Option<PathBuf> {
|
||||
}
|
||||
|
||||
pub fn read_wayland() -> Option<bool> {
|
||||
let path = path()?;
|
||||
let raw = std::fs::read_to_string(path).ok()?;
|
||||
let config = serde_json::from_str::<DisplayConfig>(&raw).ok()?;
|
||||
config.wayland
|
||||
let raw = std::fs::read_to_string(path()?).ok()?;
|
||||
let root = serde_json::from_str::<serde_json::Value>(&raw)
|
||||
.ok()?
|
||||
.get(LINUX_DISPLAY_CONFIG_KEY)
|
||||
.cloned()?;
|
||||
serde_json::from_value::<DisplayConfig>(root).ok()?.wayland
|
||||
}
|
||||
|
||||
pub fn write_wayland(app: &AppHandle, value: bool) -> Result<(), String> {
|
||||
|
||||
83
packages/desktop/src-tauri/src/logging.rs
Normal file
83
packages/desktop/src-tauri/src/logging.rs
Normal file
@@ -0,0 +1,83 @@
|
||||
use std::fs::File;
|
||||
use std::io::{BufRead, BufReader};
|
||||
use std::path::{Path, PathBuf};
|
||||
use tracing_appender::non_blocking::WorkerGuard;
|
||||
use tracing_subscriber::{EnvFilter, fmt, layer::SubscriberExt, util::SubscriberInitExt};
|
||||
|
||||
const MAX_LOG_AGE_DAYS: u64 = 7;
|
||||
const TAIL_LINES: usize = 1000;
|
||||
|
||||
static LOG_PATH: std::sync::OnceLock<PathBuf> = std::sync::OnceLock::new();
|
||||
|
||||
pub fn init(log_dir: &Path) -> WorkerGuard {
|
||||
std::fs::create_dir_all(log_dir).expect("failed to create log directory");
|
||||
|
||||
cleanup(log_dir);
|
||||
|
||||
let timestamp = chrono::Local::now().format("%Y-%m-%d_%H-%M-%S");
|
||||
let filename = format!("opencode-desktop_{timestamp}.log");
|
||||
let log_path = log_dir.join(&filename);
|
||||
|
||||
LOG_PATH
|
||||
.set(log_path.clone())
|
||||
.expect("logging already initialized");
|
||||
|
||||
let file = File::create(&log_path).expect("failed to create log file");
|
||||
let (non_blocking, guard) = tracing_appender::non_blocking(file);
|
||||
|
||||
let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| {
|
||||
if cfg!(debug_assertions) {
|
||||
EnvFilter::new("opencode_lib=debug,opencode_desktop=debug,sidecar=debug")
|
||||
} else {
|
||||
EnvFilter::new("opencode_lib=info,opencode_desktop=info,sidecar=info")
|
||||
}
|
||||
});
|
||||
|
||||
tracing_subscriber::registry()
|
||||
.with(filter)
|
||||
.with(fmt::layer().with_writer(std::io::stderr))
|
||||
.with(
|
||||
fmt::layer()
|
||||
.with_writer(non_blocking)
|
||||
.with_ansi(false),
|
||||
)
|
||||
.init();
|
||||
|
||||
guard
|
||||
}
|
||||
|
||||
pub fn tail() -> String {
|
||||
let Some(path) = LOG_PATH.get() else {
|
||||
return String::new();
|
||||
};
|
||||
|
||||
let Ok(file) = File::open(path) else {
|
||||
return String::new();
|
||||
};
|
||||
|
||||
let lines: Vec<String> = BufReader::new(file)
|
||||
.lines()
|
||||
.map_while(Result::ok)
|
||||
.collect();
|
||||
|
||||
let start = lines.len().saturating_sub(TAIL_LINES);
|
||||
lines[start..].join("\n")
|
||||
}
|
||||
|
||||
fn cleanup(log_dir: &Path) {
|
||||
let cutoff = std::time::SystemTime::now()
|
||||
- std::time::Duration::from_secs(MAX_LOG_AGE_DAYS * 24 * 60 * 60);
|
||||
|
||||
let Ok(entries) = std::fs::read_dir(log_dir) else {
|
||||
return;
|
||||
};
|
||||
|
||||
for entry in entries.flatten() {
|
||||
if let Ok(meta) = entry.metadata()
|
||||
&& let Ok(modified) = meta.modified()
|
||||
&& modified < cutoff
|
||||
{
|
||||
let _ = std::fs::remove_file(entry.path());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -43,7 +43,7 @@ fn configure_display_backend() -> Option<String> {
|
||||
set_env_if_absent("WEBKIT_DISABLE_DMABUF_RENDERER", "1");
|
||||
return Some(
|
||||
"Wayland session detected; forcing X11 backend to avoid compositor protocol errors. \
|
||||
Set OC_ALLOW_WAYLAND=1 to keep native Wayland."
|
||||
Set OC_ALLOW_WAYLAND=1 to keep native Wayland."
|
||||
.into(),
|
||||
);
|
||||
}
|
||||
@@ -86,7 +86,7 @@ fn main() {
|
||||
#[cfg(target_os = "linux")]
|
||||
{
|
||||
if let Some(backend_note) = configure_display_backend() {
|
||||
eprintln!("{backend_note:?}");
|
||||
eprintln!("{backend_note}");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,9 +8,20 @@ use tokio::task::JoinHandle;
|
||||
|
||||
use crate::{
|
||||
cli,
|
||||
constants::{DEFAULT_SERVER_URL_KEY, SETTINGS_STORE},
|
||||
constants::{DEFAULT_SERVER_URL_KEY, SETTINGS_STORE, WSL_ENABLED_KEY},
|
||||
};
|
||||
|
||||
#[derive(Clone, serde::Serialize, serde::Deserialize, specta::Type, Debug)]
|
||||
pub struct WslConfig {
|
||||
pub enabled: bool,
|
||||
}
|
||||
|
||||
impl Default for WslConfig {
|
||||
fn default() -> Self {
|
||||
Self { enabled: false }
|
||||
}
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
#[specta::specta]
|
||||
pub fn get_default_server_url(app: AppHandle) -> Result<Option<String>, String> {
|
||||
@@ -48,16 +59,48 @@ pub async fn set_default_server_url(app: AppHandle, url: Option<String>) -> Resu
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
#[specta::specta]
|
||||
pub fn get_wsl_config(app: AppHandle) -> Result<WslConfig, String> {
|
||||
let store = app
|
||||
.store(SETTINGS_STORE)
|
||||
.map_err(|e| format!("Failed to open settings store: {}", e))?;
|
||||
|
||||
let enabled = store
|
||||
.get(WSL_ENABLED_KEY)
|
||||
.as_ref()
|
||||
.and_then(|v| v.as_bool())
|
||||
.unwrap_or(false);
|
||||
|
||||
Ok(WslConfig { enabled })
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
#[specta::specta]
|
||||
pub fn set_wsl_config(app: AppHandle, config: WslConfig) -> Result<(), String> {
|
||||
let store = app
|
||||
.store(SETTINGS_STORE)
|
||||
.map_err(|e| format!("Failed to open settings store: {}", e))?;
|
||||
|
||||
store.set(WSL_ENABLED_KEY, serde_json::Value::Bool(config.enabled));
|
||||
|
||||
store
|
||||
.save()
|
||||
.map_err(|e| format!("Failed to save settings: {}", e))?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn get_saved_server_url(app: &tauri::AppHandle) -> Option<String> {
|
||||
if let Some(url) = get_default_server_url(app.clone()).ok().flatten() {
|
||||
println!("Using desktop-specific custom URL: {url}");
|
||||
tracing::info!(%url, "Using desktop-specific custom URL");
|
||||
return Some(url);
|
||||
}
|
||||
|
||||
if let Some(cli_config) = cli::get_config(app).await
|
||||
&& let Some(url) = get_server_url_from_config(&cli_config)
|
||||
{
|
||||
println!("Using custom server URL from config: {url}");
|
||||
tracing::info!(%url, "Using custom server URL from config");
|
||||
return Some(url);
|
||||
}
|
||||
|
||||
@@ -81,7 +124,7 @@ pub fn spawn_local_server(
|
||||
tokio::time::sleep(Duration::from_millis(100)).await;
|
||||
|
||||
if check_health(&url, Some(&password)).await {
|
||||
println!("Server ready after {:?}", timestamp.elapsed());
|
||||
tracing::info!(elapsed = ?timestamp.elapsed(), "Server ready");
|
||||
return Ok(());
|
||||
}
|
||||
}
|
||||
@@ -173,7 +216,7 @@ fn normalize_hostname_for_url(hostname: &str) -> String {
|
||||
fn get_server_url_from_config(config: &cli::Config) -> Option<String> {
|
||||
let server = config.server.as_ref()?;
|
||||
let port = server.port?;
|
||||
println!("server.port found in OC config: {port}");
|
||||
tracing::debug!(port, "server.port found in OC config");
|
||||
let hostname = server
|
||||
.hostname
|
||||
.as_ref()
|
||||
@@ -184,7 +227,7 @@ fn get_server_url_from_config(config: &cli::Config) -> Option<String> {
|
||||
}
|
||||
|
||||
pub async fn check_health_or_ask_retry(app: &AppHandle, url: &str) -> bool {
|
||||
println!("Checking health for {url}");
|
||||
tracing::debug!(%url, "Checking health");
|
||||
loop {
|
||||
if check_health(url, None).await {
|
||||
return true;
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
use crate::constants::{UPDATER_ENABLED, window_state_flags};
|
||||
use crate::{
|
||||
constants::{UPDATER_ENABLED, window_state_flags},
|
||||
server::get_wsl_config,
|
||||
};
|
||||
use std::{ops::Deref, time::Duration};
|
||||
use tauri::{AppHandle, Manager, Runtime, WebviewUrl, WebviewWindow, WebviewWindowBuilder};
|
||||
use tauri_plugin_window_state::AppHandleExt;
|
||||
@@ -22,6 +25,11 @@ impl MainWindow {
|
||||
return Ok(Self(window));
|
||||
}
|
||||
|
||||
let wsl_enabled = get_wsl_config(app.clone())
|
||||
.ok()
|
||||
.map(|v| v.enabled)
|
||||
.unwrap_or(false);
|
||||
|
||||
let window_builder = base_window_config(
|
||||
WebviewWindowBuilder::new(app, Self::LABEL, WebviewUrl::App("/".into())),
|
||||
app,
|
||||
@@ -36,6 +44,7 @@ impl MainWindow {
|
||||
r#"
|
||||
window.__OPENCODE__ ??= {{}};
|
||||
window.__OPENCODE__.updaterEnabled = {UPDATER_ENABLED};
|
||||
window.__OPENCODE__.wsl = {wsl_enabled};
|
||||
"#
|
||||
));
|
||||
|
||||
|
||||
@@ -10,10 +10,14 @@ export const commands = {
|
||||
awaitInitialization: (events: Channel) => __TAURI_INVOKE<ServerReadyData>("await_initialization", { events }),
|
||||
getDefaultServerUrl: () => __TAURI_INVOKE<string | null>("get_default_server_url"),
|
||||
setDefaultServerUrl: (url: string | null) => __TAURI_INVOKE<null>("set_default_server_url", { url }),
|
||||
getWslConfig: () => __TAURI_INVOKE<WslConfig>("get_wsl_config"),
|
||||
setWslConfig: (config: WslConfig) => __TAURI_INVOKE<null>("set_wsl_config", { config }),
|
||||
getDisplayBackend: () => __TAURI_INVOKE<"wayland" | "auto" | null>("get_display_backend"),
|
||||
setDisplayBackend: (backend: LinuxDisplayBackend) => __TAURI_INVOKE<null>("set_display_backend", { backend }),
|
||||
parseMarkdownCommand: (markdown: string) => __TAURI_INVOKE<string>("parse_markdown_command", { markdown }),
|
||||
checkAppExists: (appName: string) => __TAURI_INVOKE<boolean>("check_app_exists", { appName }),
|
||||
wslPath: (path: string, mode: "windows" | "linux" | null) => __TAURI_INVOKE<string>("wsl_path", { path, mode }),
|
||||
resolveAppPath: (appName: string) => __TAURI_INVOKE<string | null>("resolve_app_path", { appName }),
|
||||
};
|
||||
|
||||
/** Events */
|
||||
@@ -33,6 +37,12 @@ export type ServerReadyData = {
|
||||
password: string | null,
|
||||
};
|
||||
|
||||
export type WslConfig = {
|
||||
enabled: boolean,
|
||||
};
|
||||
|
||||
export type WslPathMode = "windows" | "linux";
|
||||
|
||||
/* Tauri Specta runtime */
|
||||
function makeEvent<T>(name: string) {
|
||||
const base = {
|
||||
|
||||
@@ -16,7 +16,6 @@ import { open as shellOpen } from "@tauri-apps/plugin-shell"
|
||||
import { type as ostype } from "@tauri-apps/plugin-os"
|
||||
import { check, Update } from "@tauri-apps/plugin-updater"
|
||||
import { getCurrentWindow } from "@tauri-apps/api/window"
|
||||
import { invoke } from "@tauri-apps/api/core"
|
||||
import { isPermissionGranted, requestPermission } from "@tauri-apps/plugin-notification"
|
||||
import { relaunch } from "@tauri-apps/plugin-process"
|
||||
import { AsyncStorage } from "@solid-primitives/storage"
|
||||
@@ -30,7 +29,7 @@ import { UPDATER_ENABLED } from "./updater"
|
||||
import { initI18n, t } from "./i18n"
|
||||
import pkg from "../package.json"
|
||||
import "./styles.css"
|
||||
import { commands, InitStep } from "./bindings"
|
||||
import { commands, InitStep, type WslConfig } from "./bindings"
|
||||
import { Channel } from "@tauri-apps/api/core"
|
||||
import { createMenu } from "./menu"
|
||||
|
||||
@@ -59,333 +58,374 @@ const listenForDeepLinks = async () => {
|
||||
await onOpenUrl((urls) => emitDeepLinks(urls)).catch(() => undefined)
|
||||
}
|
||||
|
||||
const createPlatform = (password: Accessor<string | null>): Platform => ({
|
||||
platform: "desktop",
|
||||
os: (() => {
|
||||
const createPlatform = (password: Accessor<string | null>): Platform => {
|
||||
const os = (() => {
|
||||
const type = ostype()
|
||||
if (type === "macos" || type === "windows" || type === "linux") return type
|
||||
return undefined
|
||||
})(),
|
||||
version: pkg.version,
|
||||
})()
|
||||
|
||||
async openDirectoryPickerDialog(opts) {
|
||||
const result = await open({
|
||||
directory: true,
|
||||
multiple: opts?.multiple ?? false,
|
||||
title: opts?.title ?? t("desktop.dialog.chooseFolder"),
|
||||
})
|
||||
return result
|
||||
},
|
||||
const wslHome = async () => {
|
||||
if (os !== "windows" || !window.__OPENCODE__?.wsl) return undefined
|
||||
return commands.wslPath("~", "windows").catch(() => undefined)
|
||||
}
|
||||
|
||||
async openFilePickerDialog(opts) {
|
||||
const result = await open({
|
||||
directory: false,
|
||||
multiple: opts?.multiple ?? false,
|
||||
title: opts?.title ?? t("desktop.dialog.chooseFile"),
|
||||
})
|
||||
return result
|
||||
},
|
||||
|
||||
async saveFilePickerDialog(opts) {
|
||||
const result = await save({
|
||||
title: opts?.title ?? t("desktop.dialog.saveFile"),
|
||||
defaultPath: opts?.defaultPath,
|
||||
})
|
||||
return result
|
||||
},
|
||||
|
||||
openLink(url: string) {
|
||||
void shellOpen(url).catch(() => undefined)
|
||||
},
|
||||
|
||||
openPath(path: string, app?: string) {
|
||||
return openerOpenPath(path, app)
|
||||
},
|
||||
|
||||
back() {
|
||||
window.history.back()
|
||||
},
|
||||
|
||||
forward() {
|
||||
window.history.forward()
|
||||
},
|
||||
|
||||
storage: (() => {
|
||||
type StoreLike = {
|
||||
get(key: string): Promise<string | null | undefined>
|
||||
set(key: string, value: string): Promise<unknown>
|
||||
delete(key: string): Promise<unknown>
|
||||
clear(): Promise<unknown>
|
||||
keys(): Promise<string[]>
|
||||
length(): Promise<number>
|
||||
const handleWslPicker = async <T extends string | string[]>(result: T | null): Promise<T | null> => {
|
||||
if (!result || !window.__OPENCODE__?.wsl) return result
|
||||
if (Array.isArray(result)) {
|
||||
return Promise.all(result.map((path) => commands.wslPath(path, "linux").catch(() => path))) as any
|
||||
}
|
||||
return commands.wslPath(result, "linux").catch(() => result) as any
|
||||
}
|
||||
|
||||
const WRITE_DEBOUNCE_MS = 250
|
||||
return {
|
||||
platform: "desktop",
|
||||
os,
|
||||
version: pkg.version,
|
||||
|
||||
const storeCache = new Map<string, Promise<StoreLike>>()
|
||||
const apiCache = new Map<string, AsyncStorage & { flush: () => Promise<void> }>()
|
||||
const memoryCache = new Map<string, StoreLike>()
|
||||
async openDirectoryPickerDialog(opts) {
|
||||
const defaultPath = await wslHome()
|
||||
const result = await open({
|
||||
directory: true,
|
||||
multiple: opts?.multiple ?? false,
|
||||
title: opts?.title ?? t("desktop.dialog.chooseFolder"),
|
||||
defaultPath,
|
||||
})
|
||||
return await handleWslPicker(result)
|
||||
},
|
||||
|
||||
const flushAll = async () => {
|
||||
const apis = Array.from(apiCache.values())
|
||||
await Promise.all(apis.map((api) => api.flush().catch(() => undefined)))
|
||||
}
|
||||
async openFilePickerDialog(opts) {
|
||||
const result = await open({
|
||||
directory: false,
|
||||
multiple: opts?.multiple ?? false,
|
||||
title: opts?.title ?? t("desktop.dialog.chooseFile"),
|
||||
})
|
||||
return handleWslPicker(result)
|
||||
},
|
||||
|
||||
if ("addEventListener" in globalThis) {
|
||||
const handleVisibility = () => {
|
||||
if (document.visibilityState !== "hidden") return
|
||||
void flushAll()
|
||||
async saveFilePickerDialog(opts) {
|
||||
const result = await save({
|
||||
title: opts?.title ?? t("desktop.dialog.saveFile"),
|
||||
defaultPath: opts?.defaultPath,
|
||||
})
|
||||
return handleWslPicker(result)
|
||||
},
|
||||
|
||||
openLink(url: string) {
|
||||
void shellOpen(url).catch(() => undefined)
|
||||
},
|
||||
async openPath(path: string, app?: string) {
|
||||
const os = ostype()
|
||||
if (os === "windows") {
|
||||
const resolvedApp = (app && (await commands.resolveAppPath(app))) || app
|
||||
const resolvedPath = await (async () => {
|
||||
if (window.__OPENCODE__?.wsl) {
|
||||
const converted = await commands.wslPath(path, "windows").catch(() => null)
|
||||
if (converted) return converted
|
||||
}
|
||||
|
||||
return path
|
||||
})()
|
||||
return openerOpenPath(resolvedPath, resolvedApp)
|
||||
}
|
||||
return openerOpenPath(path, app)
|
||||
},
|
||||
|
||||
back() {
|
||||
window.history.back()
|
||||
},
|
||||
|
||||
forward() {
|
||||
window.history.forward()
|
||||
},
|
||||
|
||||
storage: (() => {
|
||||
type StoreLike = {
|
||||
get(key: string): Promise<string | null | undefined>
|
||||
set(key: string, value: string): Promise<unknown>
|
||||
delete(key: string): Promise<unknown>
|
||||
clear(): Promise<unknown>
|
||||
keys(): Promise<string[]>
|
||||
length(): Promise<number>
|
||||
}
|
||||
|
||||
window.addEventListener("pagehide", () => void flushAll())
|
||||
document.addEventListener("visibilitychange", handleVisibility)
|
||||
}
|
||||
const WRITE_DEBOUNCE_MS = 250
|
||||
|
||||
const createMemoryStore = () => {
|
||||
const data = new Map<string, string>()
|
||||
const store: StoreLike = {
|
||||
get: async (key) => data.get(key),
|
||||
set: async (key, value) => {
|
||||
data.set(key, value)
|
||||
},
|
||||
delete: async (key) => {
|
||||
data.delete(key)
|
||||
},
|
||||
clear: async () => {
|
||||
data.clear()
|
||||
},
|
||||
keys: async () => Array.from(data.keys()),
|
||||
length: async () => data.size,
|
||||
const storeCache = new Map<string, Promise<StoreLike>>()
|
||||
const apiCache = new Map<string, AsyncStorage & { flush: () => Promise<void> }>()
|
||||
const memoryCache = new Map<string, StoreLike>()
|
||||
|
||||
const flushAll = async () => {
|
||||
const apis = Array.from(apiCache.values())
|
||||
await Promise.all(apis.map((api) => api.flush().catch(() => undefined)))
|
||||
}
|
||||
return store
|
||||
}
|
||||
|
||||
const getStore = (name: string) => {
|
||||
const cached = storeCache.get(name)
|
||||
if (cached) return cached
|
||||
if ("addEventListener" in globalThis) {
|
||||
const handleVisibility = () => {
|
||||
if (document.visibilityState !== "hidden") return
|
||||
void flushAll()
|
||||
}
|
||||
|
||||
const store = Store.load(name).catch(() => {
|
||||
const cached = memoryCache.get(name)
|
||||
window.addEventListener("pagehide", () => void flushAll())
|
||||
document.addEventListener("visibilitychange", handleVisibility)
|
||||
}
|
||||
|
||||
const createMemoryStore = () => {
|
||||
const data = new Map<string, string>()
|
||||
const store: StoreLike = {
|
||||
get: async (key) => data.get(key),
|
||||
set: async (key, value) => {
|
||||
data.set(key, value)
|
||||
},
|
||||
delete: async (key) => {
|
||||
data.delete(key)
|
||||
},
|
||||
clear: async () => {
|
||||
data.clear()
|
||||
},
|
||||
keys: async () => Array.from(data.keys()),
|
||||
length: async () => data.size,
|
||||
}
|
||||
return store
|
||||
}
|
||||
|
||||
const getStore = (name: string) => {
|
||||
const cached = storeCache.get(name)
|
||||
if (cached) return cached
|
||||
|
||||
const memory = createMemoryStore()
|
||||
memoryCache.set(name, memory)
|
||||
return memory
|
||||
})
|
||||
const store = Store.load(name).catch(() => {
|
||||
const cached = memoryCache.get(name)
|
||||
if (cached) return cached
|
||||
|
||||
storeCache.set(name, store)
|
||||
return store
|
||||
}
|
||||
const memory = createMemoryStore()
|
||||
memoryCache.set(name, memory)
|
||||
return memory
|
||||
})
|
||||
|
||||
const createStorage = (name: string) => {
|
||||
const pending = new Map<string, string | null>()
|
||||
let timer: ReturnType<typeof setTimeout> | undefined
|
||||
let flushing: Promise<void> | undefined
|
||||
storeCache.set(name, store)
|
||||
return store
|
||||
}
|
||||
|
||||
const flush = async () => {
|
||||
if (flushing) return flushing
|
||||
const createStorage = (name: string) => {
|
||||
const pending = new Map<string, string | null>()
|
||||
let timer: ReturnType<typeof setTimeout> | undefined
|
||||
let flushing: Promise<void> | undefined
|
||||
|
||||
flushing = (async () => {
|
||||
const store = await getStore(name)
|
||||
while (pending.size > 0) {
|
||||
const batch = Array.from(pending.entries())
|
||||
pending.clear()
|
||||
for (const [key, value] of batch) {
|
||||
if (value === null) {
|
||||
await store.delete(key).catch(() => undefined)
|
||||
} else {
|
||||
await store.set(key, value).catch(() => undefined)
|
||||
const flush = async () => {
|
||||
if (flushing) return flushing
|
||||
|
||||
flushing = (async () => {
|
||||
const store = await getStore(name)
|
||||
while (pending.size > 0) {
|
||||
const batch = Array.from(pending.entries())
|
||||
pending.clear()
|
||||
for (const [key, value] of batch) {
|
||||
if (value === null) {
|
||||
await store.delete(key).catch(() => undefined)
|
||||
} else {
|
||||
await store.set(key, value).catch(() => undefined)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})().finally(() => {
|
||||
flushing = undefined
|
||||
})
|
||||
})().finally(() => {
|
||||
flushing = undefined
|
||||
})
|
||||
|
||||
return flushing
|
||||
}
|
||||
|
||||
const schedule = () => {
|
||||
if (timer) return
|
||||
timer = setTimeout(() => {
|
||||
timer = undefined
|
||||
void flush()
|
||||
}, WRITE_DEBOUNCE_MS)
|
||||
}
|
||||
|
||||
const api: AsyncStorage & { flush: () => Promise<void> } = {
|
||||
flush,
|
||||
getItem: async (key: string) => {
|
||||
const next = pending.get(key)
|
||||
if (next !== undefined) return next
|
||||
|
||||
const store = await getStore(name)
|
||||
const value = await store.get(key).catch(() => null)
|
||||
if (value === undefined) return null
|
||||
return value
|
||||
},
|
||||
setItem: async (key: string, value: string) => {
|
||||
pending.set(key, value)
|
||||
schedule()
|
||||
},
|
||||
removeItem: async (key: string) => {
|
||||
pending.set(key, null)
|
||||
schedule()
|
||||
},
|
||||
clear: async () => {
|
||||
pending.clear()
|
||||
const store = await getStore(name)
|
||||
await store.clear().catch(() => undefined)
|
||||
},
|
||||
key: async (index: number) => {
|
||||
const store = await getStore(name)
|
||||
return (await store.keys().catch(() => []))[index]
|
||||
},
|
||||
getLength: async () => {
|
||||
const store = await getStore(name)
|
||||
return await store.length().catch(() => 0)
|
||||
},
|
||||
get length() {
|
||||
return api.getLength()
|
||||
},
|
||||
}
|
||||
|
||||
return api
|
||||
}
|
||||
|
||||
return (name = "default.dat") => {
|
||||
const cached = apiCache.get(name)
|
||||
if (cached) return cached
|
||||
|
||||
const api = createStorage(name)
|
||||
apiCache.set(name, api)
|
||||
return api
|
||||
}
|
||||
})(),
|
||||
|
||||
checkUpdate: async () => {
|
||||
if (!UPDATER_ENABLED) return { updateAvailable: false }
|
||||
const next = await check().catch(() => null)
|
||||
if (!next) return { updateAvailable: false }
|
||||
const ok = await next
|
||||
.download()
|
||||
.then(() => true)
|
||||
.catch(() => false)
|
||||
if (!ok) return { updateAvailable: false }
|
||||
update = next
|
||||
return { updateAvailable: true, version: next.version }
|
||||
},
|
||||
|
||||
update: async () => {
|
||||
if (!UPDATER_ENABLED || !update) return
|
||||
if (ostype() === "windows") await commands.killSidecar().catch(() => undefined)
|
||||
await update.install().catch(() => undefined)
|
||||
},
|
||||
|
||||
restart: async () => {
|
||||
await commands.killSidecar().catch(() => undefined)
|
||||
await relaunch()
|
||||
},
|
||||
|
||||
notify: async (title, description, href) => {
|
||||
const granted = await isPermissionGranted().catch(() => false)
|
||||
const permission = granted ? "granted" : await requestPermission().catch(() => "denied")
|
||||
if (permission !== "granted") return
|
||||
|
||||
const win = getCurrentWindow()
|
||||
const focused = await win.isFocused().catch(() => document.hasFocus())
|
||||
if (focused) return
|
||||
|
||||
await Promise.resolve()
|
||||
.then(() => {
|
||||
const notification = new Notification(title, {
|
||||
body: description ?? "",
|
||||
icon: "https://opencode.ai/favicon-96x96-v3.png",
|
||||
})
|
||||
notification.onclick = () => {
|
||||
const win = getCurrentWindow()
|
||||
void win.show().catch(() => undefined)
|
||||
void win.unminimize().catch(() => undefined)
|
||||
void win.setFocus().catch(() => undefined)
|
||||
if (href) {
|
||||
window.history.pushState(null, "", href)
|
||||
window.dispatchEvent(new PopStateEvent("popstate"))
|
||||
}
|
||||
notification.close()
|
||||
return flushing
|
||||
}
|
||||
|
||||
const schedule = () => {
|
||||
if (timer) return
|
||||
timer = setTimeout(() => {
|
||||
timer = undefined
|
||||
void flush()
|
||||
}, WRITE_DEBOUNCE_MS)
|
||||
}
|
||||
|
||||
const api: AsyncStorage & { flush: () => Promise<void> } = {
|
||||
flush,
|
||||
getItem: async (key: string) => {
|
||||
const next = pending.get(key)
|
||||
if (next !== undefined) return next
|
||||
|
||||
const store = await getStore(name)
|
||||
const value = await store.get(key).catch(() => null)
|
||||
if (value === undefined) return null
|
||||
return value
|
||||
},
|
||||
setItem: async (key: string, value: string) => {
|
||||
pending.set(key, value)
|
||||
schedule()
|
||||
},
|
||||
removeItem: async (key: string) => {
|
||||
pending.set(key, null)
|
||||
schedule()
|
||||
},
|
||||
clear: async () => {
|
||||
pending.clear()
|
||||
const store = await getStore(name)
|
||||
await store.clear().catch(() => undefined)
|
||||
},
|
||||
key: async (index: number) => {
|
||||
const store = await getStore(name)
|
||||
return (await store.keys().catch(() => []))[index]
|
||||
},
|
||||
getLength: async () => {
|
||||
const store = await getStore(name)
|
||||
return await store.length().catch(() => 0)
|
||||
},
|
||||
get length() {
|
||||
return api.getLength()
|
||||
},
|
||||
}
|
||||
|
||||
return api
|
||||
}
|
||||
|
||||
return (name = "default.dat") => {
|
||||
const cached = apiCache.get(name)
|
||||
if (cached) return cached
|
||||
|
||||
const api = createStorage(name)
|
||||
apiCache.set(name, api)
|
||||
return api
|
||||
}
|
||||
})(),
|
||||
|
||||
checkUpdate: async () => {
|
||||
if (!UPDATER_ENABLED) return { updateAvailable: false }
|
||||
const next = await check().catch(() => null)
|
||||
if (!next) return { updateAvailable: false }
|
||||
const ok = await next
|
||||
.download()
|
||||
.then(() => true)
|
||||
.catch(() => false)
|
||||
if (!ok) return { updateAvailable: false }
|
||||
update = next
|
||||
return { updateAvailable: true, version: next.version }
|
||||
},
|
||||
|
||||
update: async () => {
|
||||
if (!UPDATER_ENABLED || !update) return
|
||||
if (ostype() === "windows") await commands.killSidecar().catch(() => undefined)
|
||||
await update.install().catch(() => undefined)
|
||||
},
|
||||
|
||||
restart: async () => {
|
||||
await commands.killSidecar().catch(() => undefined)
|
||||
await relaunch()
|
||||
},
|
||||
|
||||
notify: async (title, description, href) => {
|
||||
const granted = await isPermissionGranted().catch(() => false)
|
||||
const permission = granted ? "granted" : await requestPermission().catch(() => "denied")
|
||||
if (permission !== "granted") return
|
||||
|
||||
const win = getCurrentWindow()
|
||||
const focused = await win.isFocused().catch(() => document.hasFocus())
|
||||
if (focused) return
|
||||
|
||||
await Promise.resolve()
|
||||
.then(() => {
|
||||
const notification = new Notification(title, {
|
||||
body: description ?? "",
|
||||
icon: "https://opencode.ai/favicon-96x96-v3.png",
|
||||
})
|
||||
notification.onclick = () => {
|
||||
const win = getCurrentWindow()
|
||||
void win.show().catch(() => undefined)
|
||||
void win.unminimize().catch(() => undefined)
|
||||
void win.setFocus().catch(() => undefined)
|
||||
if (href) {
|
||||
window.history.pushState(null, "", href)
|
||||
window.dispatchEvent(new PopStateEvent("popstate"))
|
||||
}
|
||||
notification.close()
|
||||
}
|
||||
})
|
||||
.catch(() => undefined)
|
||||
},
|
||||
|
||||
fetch: (input, init) => {
|
||||
const pw = password()
|
||||
|
||||
const addHeader = (headers: Headers, password: string) => {
|
||||
headers.append("Authorization", `Basic ${btoa(`opencode:${password}`)}`)
|
||||
}
|
||||
|
||||
if (input instanceof Request) {
|
||||
if (pw) addHeader(input.headers, pw)
|
||||
return tauriFetch(input)
|
||||
} else {
|
||||
const headers = new Headers(init?.headers)
|
||||
if (pw) addHeader(headers, pw)
|
||||
return tauriFetch(input, {
|
||||
...(init as any),
|
||||
headers: headers,
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
getWslEnabled: async () => {
|
||||
const next = await commands.getWslConfig().catch(() => null)
|
||||
if (next) return next.enabled
|
||||
return window.__OPENCODE__!.wsl ?? false
|
||||
},
|
||||
|
||||
setWslEnabled: async (enabled) => {
|
||||
await commands.setWslConfig({ enabled })
|
||||
},
|
||||
|
||||
getDefaultServerUrl: async () => {
|
||||
const result = await commands.getDefaultServerUrl().catch(() => null)
|
||||
return result
|
||||
},
|
||||
|
||||
setDefaultServerUrl: async (url: string | null) => {
|
||||
await commands.setDefaultServerUrl(url)
|
||||
},
|
||||
|
||||
getDisplayBackend: async () => {
|
||||
const result = await commands.getDisplayBackend().catch(() => null)
|
||||
return result
|
||||
},
|
||||
|
||||
setDisplayBackend: async (backend) => {
|
||||
await commands.setDisplayBackend(backend)
|
||||
},
|
||||
|
||||
parseMarkdown: (markdown: string) => commands.parseMarkdownCommand(markdown),
|
||||
|
||||
webviewZoom,
|
||||
|
||||
checkAppExists: async (appName: string) => {
|
||||
return commands.checkAppExists(appName)
|
||||
},
|
||||
|
||||
async readClipboardImage() {
|
||||
const image = await readImage().catch(() => null)
|
||||
if (!image) return null
|
||||
const bytes = await image.rgba().catch(() => null)
|
||||
if (!bytes || bytes.length === 0) return null
|
||||
const size = await image.size().catch(() => null)
|
||||
if (!size) return null
|
||||
const canvas = document.createElement("canvas")
|
||||
canvas.width = size.width
|
||||
canvas.height = size.height
|
||||
const ctx = canvas.getContext("2d")
|
||||
if (!ctx) return null
|
||||
const imageData = ctx.createImageData(size.width, size.height)
|
||||
imageData.data.set(bytes)
|
||||
ctx.putImageData(imageData, 0, 0)
|
||||
return new Promise<File | null>((resolve) => {
|
||||
canvas.toBlob((blob) => {
|
||||
if (!blob) return resolve(null)
|
||||
resolve(new File([blob], `pasted-image-${Date.now()}.png`, { type: "image/png" }))
|
||||
}, "image/png")
|
||||
})
|
||||
.catch(() => undefined)
|
||||
},
|
||||
|
||||
fetch: (input, init) => {
|
||||
const pw = password()
|
||||
|
||||
const addHeader = (headers: Headers, password: string) => {
|
||||
headers.append("Authorization", `Basic ${btoa(`opencode:${password}`)}`)
|
||||
}
|
||||
|
||||
if (input instanceof Request) {
|
||||
if (pw) addHeader(input.headers, pw)
|
||||
return tauriFetch(input)
|
||||
} else {
|
||||
const headers = new Headers(init?.headers)
|
||||
if (pw) addHeader(headers, pw)
|
||||
return tauriFetch(input, {
|
||||
...(init as any),
|
||||
headers: headers,
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
getDefaultServerUrl: async () => {
|
||||
const result = await commands.getDefaultServerUrl().catch(() => null)
|
||||
return result
|
||||
},
|
||||
|
||||
setDefaultServerUrl: async (url: string | null) => {
|
||||
await commands.setDefaultServerUrl(url)
|
||||
},
|
||||
|
||||
getDisplayBackend: async () => {
|
||||
const result = await invoke<DisplayBackend | null>("get_display_backend").catch(() => null)
|
||||
return result
|
||||
},
|
||||
|
||||
setDisplayBackend: async (backend) => {
|
||||
await invoke("set_display_backend", { backend }).catch(() => undefined)
|
||||
},
|
||||
|
||||
parseMarkdown: (markdown: string) => commands.parseMarkdownCommand(markdown),
|
||||
|
||||
webviewZoom,
|
||||
|
||||
checkAppExists: async (appName: string) => {
|
||||
return commands.checkAppExists(appName)
|
||||
},
|
||||
|
||||
async readClipboardImage() {
|
||||
const image = await readImage().catch(() => null)
|
||||
if (!image) return null
|
||||
const bytes = await image.rgba().catch(() => null)
|
||||
if (!bytes || bytes.length === 0) return null
|
||||
const size = await image.size().catch(() => null)
|
||||
if (!size) return null
|
||||
const canvas = document.createElement("canvas")
|
||||
canvas.width = size.width
|
||||
canvas.height = size.height
|
||||
const ctx = canvas.getContext("2d")
|
||||
if (!ctx) return null
|
||||
const imageData = ctx.createImageData(size.width, size.height)
|
||||
imageData.data.set(bytes)
|
||||
ctx.putImageData(imageData, 0, 0)
|
||||
return new Promise<File | null>((resolve) => {
|
||||
canvas.toBlob((blob) => {
|
||||
if (!blob) return resolve(null)
|
||||
resolve(new File([blob], `pasted-image-${Date.now()}.png`, { type: "image/png" }))
|
||||
}, "image/png")
|
||||
})
|
||||
},
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
let menuTrigger = null as null | ((id: string) => void)
|
||||
createMenu((id) => {
|
||||
@@ -395,6 +435,7 @@ void listenForDeepLinks()
|
||||
|
||||
render(() => {
|
||||
const [serverPassword, setServerPassword] = createSignal<string | null>(null)
|
||||
|
||||
const platform = createPlatform(() => serverPassword())
|
||||
|
||||
function handleClick(e: MouseEvent) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@opencode-ai/enterprise",
|
||||
"version": "1.1.54",
|
||||
"version": "1.1.59",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user